読者です 読者をやめる 読者になる 読者になる

Carpe Diem

備忘録。https://github.com/jun06t

メールサーバの設定【OP25B対策】

Mailサーバ
前回の設定で基本メールを送受信できると思いますが、それでも出来ない場合はOP25Bで禁止されてます。 その場合プロバイダメールをリレーさせます。 今回はgmailをリレーさせて外部へメールを送信できるようにします。 あらかじめポートを開放していてください。設定はあっているのにこれで詰まる人も多いです。 ポートチェック【ポート開放確認】 あとufwを設定している人はそのルールの更新もしておいてください。 $ sudo ufw allow 587 postfixの設定 $ sudo emacs -nw /etc/postfix/main.cf 以下を最後に追記します。 relayhost = [smtp.gmail.com]:587 smtp_sasl_auth_enable = yes #smtp_use_tls = yes  ←古いので今は使わない。tls_security_levelを使う。 smtp_sasl_password_maps = hash:/etc/postfix/authinfo ←後に作成します。名前は任意。 smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt ルート証明書ssl入れてたらデフォルトである。 smtp_tls_security_level = verify ←mayならルート証明書なくてもOK。 #smtp_sasl_security_options = noanonymous ←普通こっち。gmailtlsなので下 smtp_sasl_tls_security_options = noanonymous smtp_sasl_mechanism_filter =  LOGIN, CRAM-MD5, PLAIN 認証方式 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache ルート証明書は以前はThawteのCAファイルを使用していましたが、これではダメになったみたいで現在はDebianに含まれるCAファイルのになったようです。また認証方式はプロバイダによって異なります。調べ方はまた後述します。 保存します /etc/postfix/authinfoを作ります。 # echo [SMTPサーバー名]:587 ユーザー名:パスワード > /etc/postfix/authinfo ← SMTP認証情報設定 SMTPサーバー名・・・プロバイダのSMTPサーバー名 ユーザー名・・・プロバイダのメールアカウント名 パスワード・・・プロバイダのメールパスワード gmailなので # echo [smtp.gmail.com]:587 ユーザー名:パスワード > /etc/postfix/authinfo ユーザー名・・・Gmailのメールアカウント名 パスワード・・・Gmailのメールパスワード 権限変更 # chmod 640 /etc/postfix/authinfo # postmap /etc/postfix/authinfo ← authinfo.db作成 再起動 # sudo service postfix reload これで外部へメールを送信できるはずです。 もしできていない場合は/var/log/mail.logをチェックしてください。 relay = smtp.gmail.com status=sent なら送れてます。これが relay=local status=bounce とかだと送れてません。localの場合指定したドメインが内側と勘違いされています。$mydestinationをチェックしてください。ここにgmail.comとかあると内側と勘違いされてうまくリレーされません。 ◆認証方式の調べ方 # telnet プロバイダのSMTPサーバー名 25または587 ← プロバイダのSMTPサーバーへ接続 Trying XXX.XXX.XXX.XXX... Connected to プロバイダのSMTPサーバー名 (XXX.XXX.XXX.XXX). Escape character is '^]'. 220 プロバイダのSMTPサーバー名 ESMTP ehlo localhost ← ehlo localhost応答 250-プロバイダのSMTPサーバー名 250-AUTH LOGIN CRAM-MD5 PLAIN ← プロバイダのSMTPサーバーが対応している認証方式 250-AUTH=LOGIN CRAM-MD5 PLAIN 250-PIPELINING 250 8BITMIME です。認証方式が違うとmailqに残ったままになります。 ◆補足:Postfixsmtp_sasl~ と smtpd_sasl~の違い smtp_~は他のsmtpサーバに接続しに行くときのクライアントとして動作するときの設定。このメールサーバから別のメールサーバへリレーさせるときに使用します。 smtpd_~はsmtpサーバとして他からの接続を受ける時の設定。通常の送信サーバとして使用する時に必要な設定です。 Postfix側のSMTP認証のためにsmtpd_sasl、OP25B対策にsmtp_saslの項目を設定している ◆補足2:不正中継のチェック このサイトでチェックできます。 http://www.abuse.net/relay.html 第三者中継チェック フォームの最初にドメイン名を入力して、「test for relay」を押せば自動で進めてくれます。 もしくは自分でTELNETで確認できます。ただ外部からアクセスして、の話です。 実際にTELNETを使って自分でやってみる 自分のメールサーバのホスト名をhoge.hogehoge.comとして説明します。 1)リレーが拒否されるまともなサーバの場合 # telnet hoge.hogehoge.com 25 Trying ***.***.***.***... Connected to hoge.hogehoge.com. Escape character is '^]'. 220 hoge.hogehoge.comESMTP HELO main.kozupon.com ← ① 250 hoge.hogehoge.com MAIL FROM:aabbccddTEST@hoge.hogehoge.com ← ② 250 ok RCPT TO:root@main.kozupon.com ← ③ 553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1) ← ④ quit 221 hoge.hogehoge.com Connection closed by foreign host. ① 自分の会社からTELNETを行った場合、HELOの後に会社のホスト名を入力する(FQDN)。 これで、クライアントを相手のメールサーバに認識させる。 ② MAIL FROM:の後にここでは適当な有り得ないメールアドレス例えば、aabbccddTEST@hoge.hogehoge.comを入力する。これで、メールサーバに送信先を認識させる。 ③ RCPT TO:の後に会社の自分のメールアドレスを入力する。これで、メールサーバに送信先を認識させる。 ④ 553 sorry, レスポンスとしてが表示されたら中継は拒否された事になる。 2)リレーが許可されてしまうだめなサーバの場合 # telnet hoge.hogehoge.com 25 Trying ***.***.***.***... Connected to hoge.hogehoge.com. Escape character is '^]'. 220 hoge.hogehoge.comESMTP HELO main.kozupon.com 250 hoge.hogehoge.com MAIL FROM:aabbccddTEST@hoge.hogehoge.com 250 ok RCPT TO:root@main.kozupon.com 250 root@main.kozupon.com... Recipient ok ← ① quit 221 hoge.hogehoge.comclosing connection Connection closed by foreign host. ① このメッセージで適当な、メールアドレスを入力したのにも関わらず、Recipient ok 受領している。このようなメッセージを発してる場合は、中継を許可しています。 ソース: OP25B(Outbound Port 25 Blocking)対策 Postfixのsmtp_sasl~ と smtpd_sasl~の違い 第三者不正中継チェックの仕組み! Postfix設定パラメータ