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 はフレキシブルで、システムのニーズに合わせてお守りできます。