2017年12月7日木曜日

GCP無料枠で個人用メールサーバ構築

2017/12/07 現時点GCPの1 か月あたりの無償枠は以下の通り。

f1-micro インスタンス(米国リージョンのみ)
30 GB の HDD(期間合計)、5 GB のスナップショット(期間合計)
ネットワークトラフィック(送信=GAE→ユーザー) 1GB/月 ※1
ネットワークトラフィック(受信=ユーザー→GAE) 無料

※1 中国およびオーストラリアを除く

7 件のコメント:

  1. 初めまして。外部受信について是非御教示願えませんか?
    GCPで外部メール受信が、成功していません。
    別記事に”内部送受信、外部からの受信は問題なくできたのだが” とあり、すがる思いでおります 

    postfix+dovecotで構築しています。
    main.cf , master.cfの設定内容を載せておきます。
    もし、可能でしたら御教示よろしくお願いします。

    compatibility_level = 2
    mail_owner = postfix
    myhostname = mail.xxxx.xxx.jp
    smtp_helo_name = $myhostname
    mydomain = xxxx.xxx.jp
    myorigin = /etc/mailname

    inet_interfaces = all
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases

    home_mailbox = Maildir/
    smtpd_banner = $myhostname ESMTP
    sendmail_path = /usr/sbin/postfix
    newaliases_path = /usr/bin/newaliases
    mailq_path = /usr/bin/mailq
    setgid_group = postdrop
    message_size_limit = 10485760
    mailbox_size_limit = 0

    smtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes

    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

    relayhost = [smtp.mailgun.org]:2525

    smtp_tls_security_level = encrypt
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options = noanonymous


    (略)
    smtp inet n - y - - smtpd
    submission inet n - y - - smtpd
    -o syslog_name=postfix/submission
    # -o smtpd_tls_security_level=encrypt
    -o smtpd_sasl_auth_enable=yes
    # -o smtpd_reject_unlisted_recipient=no
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject
    # -o smtpd_helo_restrictions=$mua_helo_restrictions
    # -o smtpd_sender_restrictions=$mua_sender_restrictions
    # -o smtpd_recipient_restrictions=
    -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
    (略)

    返信削除
  2. 自分も勉強途中ですので、的確なアドバイスが出来るか分かりませんので、
    ご了承ください。

    >GCPで外部メール受信が、成功していません。
    ということは内部送受信は可能ということでしょうか。
    であれば外部からのメールサーバ名前解決で出来ていないのではないでしょうか。nslookupでmail.xxxx.xxx.jpの正しいIPアドレスが引けるか確認して頂くのはいかがでしょうか。後、外部サービスですと、https://www.cman.jpとかも便利です。


    ◆main.cfで他に設定内容が違う箇所

    >myorigin = /etc/mailname
    →myorigin = $mydomain

    >alias_maps = hash:/etc/aliases
    alias_maps = hash:/etc/aliases,hash:/etc/postfix/aliases

    ◆master.cfで他に設定内容が違う箇所
    自分の環境では下記3つしか設定していません。
    後、関係ないと思いますが、chrootは[n]にしています。
    smtp inet n - y - - smtpd
    submission inet n - y - - smtpd
    -o smtpd_sasl_auth_enable=yes
    →smtp inet n - n - - smtpd
    →submission inet n - n - - smtpd

    後は、GCP環境とOSのFWポート開放あたりですかね。
    お役に立てるといいですが。

    返信削除
  3. コメントありがとうございます。
    nslookupでは、IPアドレスが正しく表示され、大丈夫でした。
    main.cf/master.cfの違う箇所を合わせてみたのですが、依然、外部メールを受診しません。

    また、GCP環境と指摘いただいたので、自分の知識の範囲で確かめてみました。
    telnetで、どのポートが通っていれば良いのかわかりませんが、
    110は外部から通ります。

    telnet xxx.xxx.jp 110
    Trying 35.197.xx.xx...
    Connected to xxx.xxx.jp.
    Escape character is '^]'.
    +OK Dovecot ready.

    143はnetstatではLISTENと出ますが、telnetは通りません。
    25番はGCPがブロックしているからでしょうが、telnetは通りません。
    この先やる事が行き詰まり、困りました。。。

    netstat -nlt
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State
    tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:2000 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN
    tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
    tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
    tcp6 0 0 :::587 :::* LISTEN
    tcp6 0 0 :::110 :::* LISTEN
    tcp6 0 0 :::143 :::* LISTEN
    tcp6 0 0 :::22 :::* LISTEN
    tcp6 0 0 ::1:631 :::* LISTEN
    tcp6 0 0 :::25 :::* LISTEN

    返信削除
  4. >elnet xxx.xxx.jp 110
    >Trying 35.197.xx.xx...
    上記確認はメール以外の別環境から確認しているとのことでしょうか。
    できればGCP環境以外から確認した方がよいと思います。同じGCPの別環境からですと、内部アドレスを通して通信できてしまう場合があると思います。
    以前お伝えしたCMANさんのサイトから110ポートが空いてるかご確認いただくのはいかがでしょうか。
    外部からも110ポートへアクセス可能で、且つ内部送受信可能であれば、
    Dovecotの設定あたりが怪しいのではないでしょうか。

    返信削除
  5. GCPの外からも、CMANさんからも110ポートへはアクセスできています。dovecot設定について、調べてみようと思います。ありがとうございます。

    返信削除
  6. 再検証中ではありますが、今の所、以下の理解をしました。

    原因は、GCPのfirewallルールで、受信25番ポート(上り)が開いていなかった事でした。上り(ingress)に tcp:25 を追加することで、外部メールを内部userが受信する事が出来ました。
    やはりGCP環境でした。アドバイス助かりました。ありがとうございました。

    2つくらい勉強しました。
    1. GCPがブロックしている(とマニュアルに書いてある)25番ポートは、メールを宛先SMTPに送出するときの下り(egress)のみである。上りは追加すれば通信可能。
    両方向ブロックされていると間違って解釈し、firewallルールに25番上りを追加していなかった。

    2. メール受信はSMTP(今回はpostfix)が25番ポートで行っている事。ずっと110番と勘違いしていた。多分、サーバー内user宛のメール受け取るだけならdovecotは不要という事かと思います。

    返信削除
  7. FJさま
    わざわざ検証結果共有頂きありがとうございます。
    解決されたようで何よりです。勉強になりました。
    110番と25番ポートについては自分も勘違いしていました。
    自分で構築していた時はfwで関連ポートを全て開けて構築し、
    動作確認出来てから不要なポートを一個ずつ閉じて行きました。

    返信削除