Archive for 8月, 2013
Qmail Tips: 存在しない宛先に届いたスパムメールを一括削除
運用ドメイン名の不特定多数のランダムなメールアドレスにスパムメールが送信されてくることがあります。
MTAがPostfixであれば、不適切な宛先に送信されてきたメールに対しては、即座にエラーを返すので、キューにそのスパムメールが蓄積されることはありません。一方で、MTAとしてQmailを使っている場合には、宛先ドメイン名が正しければ、そのメールが受信され、ローカル配送用キューに格納後に受信者への配送処理が行われます。
そのローカル配送の過程で初めて、その受信者メールボックスが存在するか否かが分かり、存在しなければ、送信者にエラーを返すことになり、そのエラーメールは、リモート配送用キューに格納されます。
大量の存在しない宛先へのメールを受信すると、Qmailが生成するエラーメールによって、リモートキューが一気に膨れ上がります。また、スパムは送信元メールアドレスが詐称されるのが、常ですから、キューのメールは捌けずに長時間滞留し続けることがあります。
そうなると正規ユーザーが当該サーバーから、メール送信をしようとしても、リモートキューのメールが多すぎて、メールが遅延する事象が起こります。
キューには、次のようなエラーメールが溜まることになります。
From: postmaster@mail.example.com To: info@spammer.example.com Subject: failure notice Hi. This is the qmail-send program at mail.example.com. I'm afraid I wasn't able to deliver your message to the following addresses. This is a permanent error; I've given up. Sorry it didn't work out. <hogehoge@mail.example.com>: Sorry, no mailbox here by that name. (#5.1.1)
これは宛先「hogehoge@mail.example.com」にメールが送られてきたものの、この宛先が存在しないため、送信者である「info@spammer.example.com」に返送しようと生成されたエラーメールのサンプルです。
この「hogehoge」の部分が、ランダムとなっているエラーメールが、リモートキューに大量に溜まるので、それを一括削除することによって、メールの配送遅延を解消させます。エラーメールの一括削除は、次の手順で行います。
キューに溜まっているメール数の確認(Before)
qmHandle が入っていない場合の確認方法。
# find /var/qmail/queue/local -type f | wc -l 10 # find /var/qmail/queue/remote -type f | wc -l 2035
qmHandle が入っている場合は、次の方法で確認できます。
※qmHandle は、qmailに標準添付されないので、別途インストールが必要です。
# qmHandle -s Messages in local queue: 10 Messages in remote queue: 2035
宛先不明のエラーメールのリストを生成する
# find /var/qmail/queue/mess -type f -exec egrep -l '^Sorry, no mailbox here by that name.' {} \; > /tmp/spam.queue または # find /var/qmail/queue/mess -type f -exec egrep -l '^<.*@mail.example.com>:' {} \; > /tmp/spam.queue
エラーメール(スパムメール)の一括削除
エラーメールの抽出が完了したら、Qmailのプロセスを停止してから、そのメールを削除します。次の例では、10通ずつ削除を行っています。
# cat /tmp/spam.queue | xargs -n10 rm
queue-fix によるキューの修復
削除後は、キューの整合性を修復するために queue-fix を実行します。
※queue-fix は、qmailに標準添付されないので、別途インストールが必要です。
# queue-fix -i /var/qmail/queue
キューに溜まっているメール数の確認(After)
キューの修復後に Qmailを起動し、溜まっているメール数を確認します。
# find /var/qmail/queue/local -type f | wc -l 10 # find /var/qmail/queue/remote -type f | wc -l 39
qmHandleがある場合。
# qmHandle -s Messages in local queue: 10 Messages in remote queue: 39
リモートキューから、約2,000通のエラーメールが削除されました。
なお、不特定多数の宛先に送信されてくるスパムメールが、一向に止む気配がないなど場合によっては、存在しない宛先に届いたメールを受信直後に削除する方法を取ることもあります。
Qmailの設定によりますが、.qmail-default などの然るべきファイルに /dev/null と書いておくことで、受信メールは削除され、エラーメールを返すことはなくなります。リモートキューにエラーメールが溜まる事象を抑えることができます。
最近のコメント