モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Postfixでのサブミッションスパムの簡易対策方法

これは Postfix Advent Calendar 2014 の11日目の記事です。


サブミッションスパムという、盗んだアカウントを使って、botから送信認証を行ってスパムを出すというスパム送信手段があります。

これをされると、自分のメールサーバから大量のスパムが出されるため、各種DNSBLに登録されてしまい、このメールサーバからのメールが届かなくなったり、メールキューが爆発したり、バウンスメールが大量に届いてスプールが爆発したり、とろくなことがありません。

2年半前にこれがすごい流行った時があり、メールサーバ管理者の方には、痛い目にあった方も結構いるのではないでしょうか。


その時にサブミッションスパムについての解説を書いたエントリーです。

「サブミッションスパム」による5/15〜16のメール障害の解説と対策 - モーグルとカバとパウダーの日記


さて、2年半前に起きてその後どうなったか、というと、その後はその時のようにそこらじゅうでこれの問題が発生する、ということは起こっていません。

でも、無くなったわけじゃなく、忘れた頃に時々またやられるのです。

すると、ぶつくさ言いながら該当アカウントを停止して、DNSBLに解除申請をし、ユーザーからの問合せに対応しなければならなくなります。


この手法に対しての普遍的な対策をしようと思うとなかなか難しく、policydのようなものを使ってスロットリングするしかないかと思います。

が、このサブミッションスパムを使ってくるスパマーは限られており、その癖がだいたい決まっているので、実は小手先の手法でもそこそこ対策が可能です。

このスパマーはsasl認証が通ったら、こちらの返信を全く待たずに即送信をしてきていました。 (0秒でpipeliningで送ってくる)
なので、1秒でも遅延を掛ければ落とすことが出来ます。
が、通信遅延などで通ってしまう場合もあり、これまでの知見からは海外からであれば5秒くらい、jpドメインからなら1秒の遅延とするとだいたい良い感じになるようです。

実は先のエントリーでもこのことを書いているのですが、具体的な設定方法についてまでちゃんと提示していませんでしたので、今回は具体的な設定を書きたいと思います。(つまり… 過去エントリーの焼き直しですね。すみませんっっ _o_)


サブミッションの設定をしているところに設定を行いますので、master.cfの設定を確認します。
元々は下記のようにsubmission設定がされていたとします。

/etc/postfix/master.cf(元)

submission inet n       -       -       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject


これに接続元逆引き名でのチェックを追加してやります。
ルールはmaster.cfだけでは書けないため、main.cfへの追記と遅延のルール用のファイルも新規で作成します。
「.jp」ドメインからなら1秒、その他からは5秒遅延を掛けます。

/etc/postfix/master.cf(変更後)

submission inet n       -       -       -       -       smtpd
    -o smtpd_etrn_restrictions=reject
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_client_restrictions=$tarpit_submission_spam
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

/etc/postfix/main.cf(追記)

tarpit_submission_spam =
    check_client_access    regexp:$config_directory/tarpit_submission_spam

/etc/postfix/tarpit_submission_spam(新規)

/\.jp$/ sleep 1
/.*/    sleep 5


「-o」で設定を追加する場合にはパラメータを渡すことが出来ないので、main.cfにルールを書いてそれを呼び出す形にしていることに注意してください。
また、同じsmtpd_client_restrictionsで送信認証と遅延のルールを書いてしまうと意図通りにならないため、smtpd_client_restrictionsとsmtpd_recipient_restrictionsの2回に分けて行っています。