SMTPGuardは、SMTP(Simple Mail Transfer Protocol)で流れてくるメールのフロー制御をするツールです。 ISPのメールシステムは、ISPの光ファイバー網やADSL網に繋がった契約者(お客様)が送ったメールや インターネットから契約者宛に送られたメールを大量に受信し、宛先アドレスに配送します。 メールシステムの配送性能には上限がありますので、一度に大量のメールを送られると 正常な配送活動ができなくなってしまいます。
このような状況に対応するため、SMTPGuard は誕生しました。
問題となるパターン | ユーニクIPアドレス | メールの量 |
---|---|---|
内部のユーザから SPAM 発生 | 小 | 大 |
ウイルスで汚染されたパソコンから発生 | 大 | 小 |
外部の SPAMMERが発生 | 小 | 中 |
「小」,「中」,「大」の言葉を上記で使っていますが、環境によって意味が違います。
効果的に動作するように、次の点を調査しておく必要があります。
SMTPGuard の目的を図で表します。
SPAM の特徴として、受け付け (INCOMING) の負荷となるだけではなく、 OUTGOING サーバの大変な負荷になります。SPAM で送信しようとしている メールのなか、多くのメールがバウンスされます。バウンスが又 queue に溜るだけではなく、元の送信者へエラーメッセージを返そうとしても 外部のサーバへ接続しようとする時タイムアウトしてしまいます。それで 最後にダブルバウンスが発生しますが、タイムアウトや溜ったキューで OUTGOING が危険な状態になります。この全体な SPAM 負荷を防ぐために INCOMING で SMTPGuard を利用します。
SMTPGuard はポイント方式のソフトとなっています。接続が張られる度に設定 ファイルに従ってポイントを加算していきます。SMTP セッション中に 得られる情報をもとに、あらかじめ定められたルールによってポイント の計算を行い、smtpd が受信拒否などの適切なアクションを行う ことを可能としています。得られる情報とは
ok | ホワイトリストとして扱う |
---|---|
wait | 処理遅延 |
reject | 受信拒否 |
警告メールを送信する | |
log | ログにメッセージを出力する |
delete | データベースのレコードを削除 |
設定ファイルの記述例
MAILFROM="postmaster@example.com" SENDMAIL="/usr/sbin/sendmail" EXPIRE=900 # IPアドレスが 172.16.3.* であれば、1ポイント加算される。 A: IP==172.16.3. : add(1) # MAIL FROM が example.com で終っていなければ、1ポイント加算される。 A: F!~=example.com : add(1) # RCPT TO 1回につき、1ポイント加算される。 A: : add(1) # RCPT TO が example.com で終っていなければ、1ポイント加算される。 A: T!~=example.com : add(1) # RCPT TO 数が100を越えていれば、一時的に100ポイント加算する。 R: TC>100 : addlocal(100) # ポイントが100を越えていれば、 # o smtpd に "wait 5" を返す # o ログ出力 R: P>100 : wait(5), log( "inserting a small sleep in a SMTP session from " , IP ) # ポイントが1000を越えていれば、 # o "admin@example.com" への警告メール送信 # o データ保持期間を900秒延長 # o ログ出力 # o smtpd からクライアントに "MESSAGE" を返す R: P>1000 : mail("admin@example.com"), extendexpire(900), reject("411 mail server temporally rejected message"), log("rejecting a SMTP session from ", IP)
SMTPGuard はフレキシブルで、システムのニーズに合わせてお守りできます。