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

まめ畑

ゆるゆると書いていきます

こんどはなんだ!

Postfix OP25B

今朝いつものようにサーバのログなどなどを確認していると、DoCoMo宛のメールが
送信できずに大量に給っていることが判明><
たまにメールがキューにたまっていることはあるので、postfix flushで再送信を
しても送信できないらしく、ログをpostfixログを見てみると・・・・・
Connection Time outの文字が沢山・・・・。
少し嫌な予感

で、別のサーバからドコモへメールを送信してみると送信できる。
やな予感倍増

で、このサーバから別のアドレスへ送信は出来る
完全に嫌な予感

接続先ISPの情報を参照したとこと案の定OP25Bを実施していました。
前々から実施していたのですが、今適用範囲が広まったのでしょうか?

ログを見たときからの予感は的中です。
昨日までは送信出来てたのに。。。

でも、もう1つの可能性としてドコモは送信者アドレスの逆引きが正常に行えないと
接続を拒否すると言う話を聞いたことがありますが、それでも今まで送信できてたし
他の自宅サーバを運営している方も送信出来たといっていたので、これは可能性と
して少なそうです。
つまり、orz.selfip.net→IPアドレス→(逆引きでは)*******.ISP名.co.jp
の用にアドレスと逆引き結果が一致しません。
DDNSを使用しているので当然ですが。

で、とりあえずpostfixに設定を追加してケータイ宛メールはISPのメールSMTPサーバ
から送信するようにします。
今はケータイだけなのでいいですが、これがすべての送信先になったらめんどくさいなぁ。

★以下設定のメモ
[main.cf]
transport_maps = hash:/etc/postfix/transport 追加

[/etc/postfix/transport]
以下を追加
.docomo.ne.jp :[SMTP IP]
docomo.ne.jp :[SMTP IP]
.ezweb.ne.jp :[SMTP IP]
ezweb.ne.jp :[SMTP IP]
.vodafone.ne.jp :[SMTP IP]
softbank.ne.jp :[SMTP IP]
.softbank.ne.jp :[SMTP IP]

以下を実行
postmap /etc/postfix/transport
/etc/init.d/postfix reload

SMTPにIPを指定するのは送信するたびにDNSに行くのがめんどくさいし、
時間がかかってしまうのと。
DNSがとまったり不調だったりするとメールが送信出来なくなってしまうので
IP指定ですが、ISPによってはIP指定ではうまくいかないこともあるので
その場合は、契約時に送られてきたSMTPサーバをFQDNで指定しましょう。

IPを調べる方法は以下の通り(MXレコードの検索)
%nslookup
>set type=MX

です。
沢山出てきますが、その中から1つ選びましょう。
基本的に1番上の物を選べばいいかと。。
これはDNSを使用した負荷分散のためです。


また、全てのメールをISPのSMTPサーバに転送するには以下の設定です。
ISPによっては、メールヘッダ中の送信元をチェックする場合があるので
そこだけ書き換えます。
この設定はなくてもいけます。

[/etc/postfix/main.cf]
sender_canonical_maps = regexp:/etc/postfix/sender_rx ←ここで書き換えを指定
# IDとパスワードの対をファイル/etc/postfix/isp_passwdに登録
smtp_sasl_password_maps = hash:/etc/postfix/login_passwd
# anonymous認証を許可しない
smtp_sasl_security_options = noanonymous
# プロバイダのメールサーバ名
relayhost = [SMTP鯖]
# ローカルネットワークの指定
mynetworks = 192.168.1.0/24, 127.0.0.0/8

[/etc/postfix/login_passwd]
SMTP鯖 アドレス:passwd

以下を実行
postmap /etc/postfix/isp_passwd

[/etc/postfix/sender_rx] ←作成(いらないかも)
/^.*$/ アドレス

以下を実行
/etc/init.d/postfix restart

もしGmailなどのTSLを使用して接続しないといけない場合は以下をそれぞれに追加
[/etc/postfix/login_passwd]
[smtp.gmail.com]:587 [username]@gmail.com:[password]

[/etc/postfix/main.cf]
relayhost = [smtp.gmail.com]:587

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_use_tls = yes

(入っていなかったら)
apt-get install cyrus-sasl-plain  ←yumでもいけるのかな?
で、/etc/init.d/postfix restart
を実行

これで転送もいけるはずです。
しかし、POP before SMTPを使用されている場合はスクリプトなどでPOPを定期的に
実行しないといけません。


ちなみに、PostfixでSubmissionPort(587)を有効にして、OP25B実施中のISP内や
HOTSPOTからメールを送信する場合は以下の設定をします。
ImapなどをつかったりWEBメールを構築していれば問題なしですが。

[/etc/postfix/master.c]
コメントアウトになっている以下の行の先頭の#をとって有効にする
submission inet n - n - - smtpd

その下に以下の2行を追加します。(左に寄せないでください、その下に同じような
記述の行がありますので、その行の-o同じ位置までスペースを入れて下さい)

  • o smtpd_etrn_restrictions=reject
  • o smtpd_client_restrictions=permit_sasl_authenticated,reject

これでPostfixをリスタートさせて下さい。
エラーが出ていないかを確認するために、/etc/log/maillogを確認して下さい。
FWなどで、インバウンドの587/TCPを許可・サーバに転送に設定して完了です。
SMTP-Authが必要なので適切に設定して下さい。

確認方法は
%telnet localhost 587
ehlo localhost
を実行して以下のような表示が出るか確認します。
250-SMTPサーバー名
250-PIPELINING
250-SIZE 10485760
250-VRFY
250-ETRN
・・・

確認出来たら、quitで終了します。


うーん。、迷惑メールのせいで色々設定がめんどくさいぞ!