ホーム » 「postfix」タグがついた投稿
タグアーカイブ: postfix
postgreyの更新トラブル
postgrey に更新があった(1.36-5.2 ⇒ 1.37-1)ため、外部からのメールが届かなくなり、設定の変更が必要となった。
postgrey trouble
職場で動かしている WordPress の2段階認証メールを自宅サーバに転送しているが、2段階認証のメールが届かなくなった。原因は、怪しいメールは一旦拒絶することで spam を拒否してくれる postgrey がうまく機能していないと思われる。
/var/log/mail.log を見ると、下記のようなエラーで postgrey が起動していない。
May 5 16:53:15 ...: warning: problem talking to server 127.0.0.1:10023: Connection refused
エラーを探すと /var/log/syslog に以下のメッセージを残して、postgrey 起動に失敗しているので、
May 5 17:11:53 ... postgrey[974882]: Option greylist-text requires an argument
/etc/default/postgrey の POSTGREY_TEXT のオプションをコメントアウト。
((( /etc/default/postgrey ))) - POSTGREY_TEXT="" + # POSTGREY_TEXT="reject by postgrey"
しかし、この変更後も職場からのメールが reject されている。
May 5 17:19:20 ... postfix/smtpd[975541]: NOQUEUE: reject: RCPT from unknown[xxx.xxx.xxx.xxx]: 450 4.2.0 <t-saitoh@tsaitoh.net>: Recipient address rejected: reject by postgrey; from=<www-data@...> to=<...@...> ...
たぶん、職場のサーバは Azureで動かしているが、今回の更新による拒否判定が厳しくなったんだろう。仕方がないので、/etc/postgrey/whitelist_clients.local に、自分の管理している Azure サーバのIPアドレスを書き並べる
((( /etc/postgrey/whitelist_clients.local ))) xxx.xxx.xxx.xxx 職場のWordPressサーバのIPアドレス
でも、postgrey-1.37 の更新は本家の changelog を見ると 2016年 みたいだけど、debian パッケージでは随分遅れての 更新だな。手法的にも、もっと確実な、SPF とか DKIM の対応がすすんで、postgrey は時代遅れなのかな。自宅サーバでは、postgrey で reject しそうな接続元は GEOIP で SMTP 拒否しまくりだし、あまり役に立ってないかも。
postfix backward compatibility
今回のトラブルで改めて、postfix のエラーログを見ているとpostfixの再起動時に以下のようなメッセージが出ている。
May 5 19:06:07 ...: Postfix is running with backwards-compatible default settings May 5 19:06:07 ...: See http://www.postfix.org/COMPATIBILITY_README.html for details May 5 19:06:07 ...: To disable backwards compatibility use "postconf compatibility_level=3.6" and "postfix reload"
設定ファイルでは、compatibilty_level が 2 とかになっていたので、書いてある通り 3.6 に上げておく。
((( /etc/postfix/main.cf ))) compatibility_level = 3.6
逆引きできないホストからのメール拒否
自宅サーバのメールに、よくできた偽装メールが届く。
国別IPアドレスで接続制限しているから、それなりに拒否しているはずだが、今回の JCB を語った偽装メールは、From: が *.cn で、ホスト名は逆引きできない、国ドメインではアメリカの IP アドレスだった。
どちらにしろ、我が家に *.cn からのメールが届く段階でヤバい。
ということで、逆引きできないホストからの接続自体怪しいので、smtpd_client_restriction に、reject_unknown_client を加える。
さらに smtpd_sender_restrictions を追加。
# SMTP接続相手がRBL登録されていれば受け取らない smtpd_client_restrictions = permit_mynetworks, reject_rbl_client bl.spamcop.net, reject_rbl_client all.rbl.jp, reject_unknown_client, permit # 送信者が怪しいものは拒否 smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_invalid_hostname, reject_unknown_sender_domain
dovecot が動かない Let’s Encrypt 証明書問題
数日前から、iphoneで自宅サーバのメールを見ると証明書が有効期限切れとのエラーが表示される。パソコンから Thunderbird で見るのには影響がないようだ。設定を色々と確認しても改善しない。
/var/log/mail.log を見ると、”SSL issue: alert number 46″ などのエラーメッセージが残っていて、dovecot と合わせてググると、Let’s Encrypt のルート証明書が、2021/09/30 で切れるといった記事が見つかり、これが影響しているようだ。
dovecot の設定の修正
さらに検索すると、ようやく対応記事が見つかった。ssl_cert の cert.pem を fullchain.pem に替えるだけ。こちらの資料を見ても、dovecot とか postfix なら fullchain.pem を使うような説明がある。
((( /etc/dovecot/conf.d/10-ssl.conf ))) # ssl_cert = </var/lib/dehydrated/certs/自宅サーバ名/cert.pem ssl_cert = </var/lib/dehydrated/certs/自宅サーバ名/fullchain.pem ((( restart dovecot ))) $ sudo systemctl restart dovecot
postfix の設定の修正
同じような設定は postfix も使っていたはず。試しに、iphone でメールを出そうとすると、dovecot と同じような証明書が信用できないとのメッセージでメールが送れない。
((( /etc/postfix/main.conf ))) # smtpd_tls_cert_file=/var/lib/dehydrated/certs/自宅サーバ名/cert.pem smtpd_tls_cert_file=/var/lib/dehydrated/certs/自宅サーバ名/fullchain.pem ((( restart postfix ))) $ sudo systemctl restart postfix
サーバ原因不明のフリーズ
休みののんびりする中、自宅サーバがフリーズ。出先だったのでママが恐る恐るリセット。
普通に起動したけど、icinga, munin を見ても予兆の変な雰囲気は無かった。
自宅に帰って改めてフリーズ時間の履歴を見ると、以下のようなところで syslog が途切れていた。
Apr 29 09:49:53 perrine postfix/smtpd[1325089]: connect from unknown[185.143.xx.xx] ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
この後、このIPアドレスから以下のような接続が続いている。postfix の脆弱性でもあるのかな。侵入には失敗しているようだが、なんか不気味。あまりにも不気味だし、繰り返し login を試しているし、iptables で接続をブロックする。
Apr 29 10:27:08 perrine postfix/smtpd[1943]: connect from unknown[185.143.xx.xx] Apr 29 10:27:10 perrine postfix/smtpd[1937]: warning: unknown[185.143.xx.xx]: SASL LOGIN authentication failed: authentication failure
postfixのサーバ間暗号化
DKIM, DMARC などの設定をしていたが、gmail 宛のメールの状態を確認していたら、DMARC p=quarantine に変更したのを確認できたけど、サーバ間のメール転送で暗号化がされていない様子。
この手の暗号化はデフォルトで行われているものと思っていたが甘かった。
postfix に以下の設定を追加する。
(((/etc/postfix/main.cf ))) smtp_tls_security_level = may
上記の状態の確認をしていたけど、外部サイトと25番ポートで繋がるんだな。プロバイダのファイアウォールで OP25 などの対策で、smtp(25番ポート)って接続禁止で、starttls(587) とか、smtps(over SSL:465) とかを優先的に使うと思っていたけど、google さんの smtp と 25 番ポートと繋がるな…。
postfix,dovecotのSSL化
子供の進学で自宅を離れ、出先でも自宅サーバにメールの読み書きがあれば、様子を伺えるんだけど、自宅サーバのメール関連のSSL化が不完全だったので、子供の引っ越し先に泊まった際に見直し。
すでに、dehydrated を Web サーバで導入済みなので、それを postfix , dovecot に利用させるだけなんだけど、一度失敗してたのでリトライ。
((/etc/apache2/site-enable/010-default-ssl.conf)) - SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem - SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key - SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt + SSLCertificateFile /var/lib/dehydrated/certs/MYDOMAIN/cert.pem + SSLCertificateKeyFile /var/lib/dehydrated/certs/MYDOMAIN/privkey.pem + SSLCertificateChainFile /var/lib/dehydrated/certs/MYDOMAIN/chain.pem ((/etc/postfix/main.cf)) - smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem - smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key + smtpd_tls_cert_file=/var/lib/dehydrated/certs/MYDOMAIN/cert.pem + smtpd_tls_key_file=/var/lib/dehydrated/certs/MYDOMAIN/privkey.pem ((/etc/dovecot/conf.d/10-ssl.conf)) - ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem - ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key + ssl_cert = </var/lib/dehydrated/certs/MYDOMAIN/cert.pem + ssl_key = </var/lib/dehydrated/certs/MYDOMAIN/privkey.pem
これで、メールサーバのアカウント登録で、「登録されていない安全でない証明書を使うか?」といった表示もなくなるし、Windows の標準メールでも登録ができるようにできた。