32
メールサーバをちゃんとする BPS やました

メールサーバをちゃんとする

  • Upload
    yaasita

  • View
    11.254

  • Download
    0

Embed Size (px)

Citation preview

Page 1: メールサーバをちゃんとする

メールサーバをちゃんとする

BPS やました

Page 2: メールサーバをちゃんとする

今日話すこと

● postfixは安定してるので、デフォルトでもまあ動く● 運用がおざなり● 理解も含めてちゃんとしよう

参考● 弊社

mail: 8958 sent /day

Page 3: メールサーバをちゃんとする

今日話すこと

1. メールサーバ(MTA)の仕事

2. reject,deferをちゃんとする

3. メールキューをちゃんとする

4. セカンダリサーバをちゃんとする

5. Webアプリ送信方法をちゃんとする

6. まとめ

Page 4: メールサーバをちゃんとする

1.メールサーバ(MTA)の仕事

MUA MTA MTA

送信

MDA

POP3/IMAP

MDA

SMTP SMTP

MUA・・・ thuderbird,BeckyMTA ・・・ postfix,sendmail,qmailMDA・・・ maildrop等,(MTA)

今日はこの話

Page 5: メールサーバをちゃんとする

1.メールサーバ(MTA)の仕事

● 配送メールを他のサーバにrelayしたりメールボックスに保存したりする自分が受け取らないメールは拒否したり

relay

MTA MTA

MTA

Mail Box

reject

Page 6: メールサーバをちゃんとする

1.メールサーバ(MTA)の仕事

● キュー管理メールが一時的に送れないようならあとでまた送ろう機能(postfixならデフォルトで5日間再チャレンジする)

・・・・

MTA MTA

1.メール送るよー^o^あれ返事がない?

しばらくしてから送ろう

2.キューに入れておこう

Page 7: メールサーバをちゃんとする

1.メールサーバ(MTA)の仕事

● エラー通知配送できなかったことを送信者に伝えるbounceメール

1.メール送るね

2.駄目受け取らない

3.ゴメン無理だったw

MTA MTA

Page 8: メールサーバをちゃんとする

1.メールサーバ(MTA)の仕事

ステータスコード 受信側 送信側

2xx メールを受け取ったよ。 送信成功したからキューは消しとく

4xx(応答がない場合も)

今ちょっと受け取れない 後で送ろうキューに入れておく

5xx 今後もずっと受け取らない2度と送ってくるな

キューから消してエラー通知を送信者に送る

SMTPステータスコード

3xx系は省略

Page 9: メールサーバをちゃんとする

2.reject,deferをちゃんとする

● reject怖い⇒ 設定ミスでrejectしたメールは失われる機械的に送られるメーリングリストから削除されるかも

● MTAはキューにためて再送する仕組み(defer)があるので、メールサーバが落ちても(大抵は)メールが失われることはない

Page 10: メールサーバをちゃんとする

2.reject,deferをちゃんとする

● メールサーバが落ちても慌てない(キューに溜まるのですぐには消えない)

● 誤ってrejectしてしまうほうが被害が大きいかも

Page 11: メールサーバをちゃんとする

2.reject,deferをちゃんとする

● 自信が無かったらすぐには上げない外部からの25番ポートへの受信を絶って落ち着いて確認する

#確認ホスト以外は25番をブロックiptables -A INPUT -s 192.0.2.0/24 -p tcp --dport 25 -j ACCEPT

iptables -A INPUT -p tcp --dport 25 -j DROP

Page 12: メールサーバをちゃんとする

2.reject,deferをちゃんとする

● SMTPを手で打ってちゃんと確認

(OP25Bの影響を受けないホストから確認する)OP25B = 大抵の個人向けISPは外向き25番の通信を禁止している

telnet 192.0.2.1 25220 example.com ESMTP PostfixHELO postfix250 example.comMAIL FROM: <[email protected]>250 2.1.0 OkRCPT TO: <[email protected]>250 2.1.5 Ok

Page 13: メールサーバをちゃんとする

3.メールキューをちゃんとする

● 配送できなかったメールはキューに溜まるけど監視してないと異常に気付けない

nagiosとかで監視してみる

Page 14: メールサーバをちゃんとする

3.メールキューをちゃんとする

● キューがあるところは全部見る(実はmailmanもキューを持つ)

Page 15: メールサーバをちゃんとする

3.メールキューをちゃんとする

● プラグイン入れても安心しないnagiosのcheck_mailqプラグインはバグがあるpostfixだとmailqが常にゼロだと判定される(←致命的)

修正箇所

宣伝nagiosのcheck_mailqプラググインがうまく動かないときnagiosでmailmanの監視をする

Page 16: メールサーバをちゃんとする

3.メールキューをちゃんとする

● 雑談メールサーバの異常をそのメールサーバを使って送ろうとしない

example.comメールサーバの異常を[email protected]に送っても届かない(←あたりまえ)

Page 17: メールサーバをちゃんとする

3.メールキューをちゃんとする

● nagiosだと contactを新しく定義して、Gmail等の違うメールアドレスを使う

※一部抜粋 define service { host_name mail service_description SMTPS contact_groups admins_gmail check_command check_smtp } define contact{ contact_name gmail..... email [email protected], [email protected] }define contactgroup{ contactgroup_name admins_gmail alias Nagios Administrators members gmail }

Page 18: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● こんな構成のセカンダリサーバ

secondary primary

*@example.comは全部受信してprimary

に転送するだけ

Page 19: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● 一度受信するのでbounceメールを送信する責任が生じる

secondary

primary

1. [email protected]をリレーする

2. [email protected]は存在しないのでprimaryがreject

3.送信者にbounceメール

Page 20: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● 後方散乱 (backscatter) メールに利用されやすい● キューが詰まりやすい

最初からsecondaryに送信する輩も多いので、primaryが生きててもガンガン届く

Page 21: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● 後方散乱 (backscatter)

secondary

RCPT TO: 存在しないアドレスMAIL FROM: SPAM送り先

2. 送ってないのにbounceメールが届く

1. primaryに送るも拒否される

Page 22: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● キューが詰まる

secondary

RCPT TO: 存在しないアドレスMAIL FROM: 存在しないアドレス

2. 送信先がいないのでキューに溜まる

1. primaryに送るも拒否される

Page 23: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● RBL,SPFを使って怪しい人はrejectする

smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl.spamhaus.org, reject_rbl_client all.rbl.jp, check_policy_service unix:private/policy-spf

Page 24: メールサーバをちゃんとする

4.セカンダリサーバをちゃんとする

● SPFの限定子はSoftFail(~)が多いので、対応できなさそうならSoftFailもrejectする

SPF例

v=spf1 include:spf01.softbank.ne.jp include:spf02.softbank.ne.jp include:spf99.softbank.ne.jp ~all

v=spf1 +ip4:203.138.203.0/24 ~all

設定例postfix-policyd-spf-python Mail_From_reject = SoftFail

Page 25: メールサーバをちゃんとする

5.Webアプリ送信方法をちゃんとする

● サーバにpostfix入れるの('A`)メンドクセアプリから直接送ろう⇒突然の死(Gmailアカウント停止)

config.action_mailer.smtp_settings = { :enable_starttls_auto => true, :address => 'smtp.gmail.com', :port => 587, :domain => 'example.com', :authentication => :plain, :user_name => '[email protected]', :password => '123456'}

_人人人人人人_> 突然の死 < ̄Y^Y^Y^Y^Y ̄

Page 26: メールサーバをちゃんとする

5.Webアプリ送信方法をちゃんとする

● サーバの死=メールの消失⇒ MAIL FROMが適当だった場合、bounceメールすら受け取れないかも

● そこでMTAですよ⇒駄目でもキューに入れてリトライしてくれる⇒キューさえ見ておけばメール消失を防げる

Page 27: メールサーバをちゃんとする

5.Webアプリ送信方法をちゃんとする

● sendmailコマンドで送る⇒キューの管理が出来る⇒よほどの理由がないかぎりMTAに任せたほうが無難

△ web-app → 外のMTA → 受信者○ web-app → MTA → 外のMTA(必要なら) → 受信者

※外のMTA = Gmail等config.action_mailer.delivery_method = :sendmail

Page 28: メールサーバをちゃんとする

5.Webアプリ送信方法をちゃんとする

● 豆知識

web-app → MTA → 外のMTA(Gmailとか) → 受信者

突然のアカウント停止!→ Gmailから「535 authentication failed 」→ 5xx系エラーだからキューに溜まらない?

postfixの粋な計らいにより例外的にキューに入れてdefer扱いにしてくれる(smtp_sasl_auth_soft_bounceオプションがデフォルトyes)

postfix△!

Page 29: メールサーバをちゃんとする

6.まとめ

● 監視大事⇒ MTAやMDA等キューが溜まりそうなところは全部見る⇒ 日々のbounce,reject,sent量も見ておく(普段と違うことに気付けるようにする)

● テスト大事⇒ SMTPはSimple、めんどくさがらないでちゃんと見る

Page 30: メールサーバをちゃんとする

6.まとめ

● 運用状況をメールで送る

毎日のbounce,deferred,rejectを見てみる

宣伝

postfixの運用状況をレポートにして送信する

Page 31: メールサーバをちゃんとする

6.まとめ

● SMTPを確認する⇒expectとかで工夫するとそんなに面倒じゃない

require 'pty'require 'expect'

describe "mail" do it "relay access denied" do PTY.spawn("telnet mail.example.com 25") do |r,w| w.sync = true r.expect(/ESMTP Postfix/) { w.puts "HELO postfix" } r.expect(/^250/) { w.puts "MAIL FROM: [email protected]" } r.expect(/^250/) { w.puts "RCPT TO: [email protected]" } r.expect(/^554/) { w.puts "QUIT" } r.readline.match(/Relay access denied/) end endend

Page 32: メールサーバをちゃんとする

メールサーバをちゃんとする

\(^o^)/オワリ