すったもんだのメール鯖。
そもそもアレだ。
色々なところから情報を得て、良いとこ取りにしようと欲張るから自爆するんだw
構成はPostfix(送信)+Dovecot(受信)の王道の組み合わせ。
おおまかな設定はググればたくさん出てくるので端折って、
俺がつまずいた所とかを書いていこうかと。
恥晒すだけな気もするけど。
main.cf @Postfix
★myhostname と mydomain
myhostname=メーラーに設定する時に使うメールサーバ名 (ex:mail.hoge.com)
mydomain=自分のドメイン (ex:hoge.com)
この場合のメールアドレスはユーザ名+@+mydomainになる。
★OP25B対策
迷惑メール送信防止のために、俺のようにプロバイダの中でサーバを立てている場合
メール送信は直接行えず、認証を経た上で送信できるようにする対策。
ルータで25番ポート(SMTP)を開放しても、その外側のプロバイダが塞いでいるので
ポートチェックをしても閉じていると判定される。
※ただし、チェックするサイトによっては開放されているように見える事があるから
今回その辺でハマって苦労した。何故かは不明w
俺のサーバに25番ポートでの通信はできないので、
外(別のISP)からは587番ポートを通って俺のサーバに接続して、
そこから587番ポートを通って(IPSのメールサーバで認証して)メール配信 という経路になる。
ISP経由でメールを送信する場合に記入する必要がある項目。
relayhost = [(使用しているISPのSMTPサーバ名)]:587
※MXレコードを検索しないようにカッコ[]で囲む
設定ファイルの最後の方に記載する以下の記述例。
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination, permit_sasl_authenticated, reject
smtpd_client_restrictions = permit_mynetworks,reject_rhsbl_client rhsbl.ahbl.org,reject_rbl_client spamcop.net,reject_rbl_client dynablock.wirehub.net,reject_rbl_client sbl.spamhaus.org,reject_unknown_client,permit
smtpd_sender_restrictions = reject_unknown_sender_domain
※smtpd_* は俺のサーバに接続するための設定。
セキュリティを高めようと赤文字のRBLサイトを加えておいたら
NOQUEUE: reject: RCPT from (ISPメールサーバ)[(IP)]: 554 5.7.1 Service unavailable; Client host [(ISPのメールサーバ)] blocked using rhsbl.ahbl.org; List shut down. See: http://www.ahbl.org/content/last-notice-wildcarding-services-jan-1st
と出て(=ISPやGmailがブラックリストに入っていて)受信できなかった。
良いのかそれでw
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:(ハッシュ化された認証情報のファイル)
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = LOGIN,PLAIN,DIGEST-MD5,CRAM-MD5
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_CApath = /etc/pki/tls/certs/ca-bundle.crt
※smtp_* はISPのメールサーバに接続するための設定。
smtpd_ と smtp_ 。よく似ていて非常に紛らわしい。
しかも片方しか書いていないサイトが多く、ここでもだいぶ時間を食った。
smtp_sasl_mechanism_filterは大抵のサイトだとLOGIN,PLAINだけ書いてあったけど
自分のISPに合わせて記述した方が良いと思う。
赤文字の2つがない状態で動かしたら
warning: SASL authentication failure: No worthy mechs found
が出てダメだった。
確認方法:
# telnet (ISPのメールサーバ) 587
ehlo (ISPのメールサーバ)
ehlo (ISPのメールサーバ) ・ ・ 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5 ・ ・
こんな感じで出るはず。
master.cf @Postfix
サブミッションポートの有効化を設定する。
submission inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
master.cfは色々コメントアウトされていたけど、必要なところだけコメントを外すようにしましょう。
Firewallのポート穴開け
# firewall-cmd --add-port=587/tcp --permanent
# firewall-cmd --reload ←こいつをやり忘れたためにいつまで経っても送信できなかったw
無事開通
第一線から退いてだいぶ劣化していたけど、久しぶりに良い勉強になった。
2日ぐらい悩んだけど。
メールは開通したけど、外向きではなく自分への通知が主な用途だったりする。
メールが大量に来てサーバーの負荷が上がるのは避けたいし。