【qmHandle】特定の文字列を含むメールキューを削除する【qmail】

はじめに

failure notice や特定のメールアドレス等がqmailのメールキューに大量に溜まった場合に削除する手順メモ。
古いqmHandleでは実装されてない場合があるので qmHandle1.3.2 を推奨。

メールキューの確認

管理者権限になり qmail-qstat でqmailのメールキュー数を確認。

># qmail-qstat
messages in queue: 18
messages in queue but not yet preprocessed: 0

qmHandle -l でメールの詳細を確認。qmHandleのパスはご自身の環境に合わせてください。

># ./qmhandle-1.3.2/qmHandle -l
618770559 (18, 18/618770559)
  Return-path:
  From: MAILER-DAEMON@xxxxxxxxxxxxxx
  To: support@xxxxxxxxxx
  Subject: failure notice
  Date: 8 Dec 2022 13:04:36 +0900
  Size: 30517 bytes

件名を指定して削除

ドメイン単位での攻撃で大量に faulure notice が出ていた場合等は
qmHandle -S'文字列' で件名に指定した文字列を含むメールキューを一斉に削除できます。

># ./qmhandle-1.3.2/qmHandle -S'failure notice'
Calling system script to terminate qmail...
Shutting down qmail
Looking for messages with Subject: failure notice
Deleting message: 537798908
Deleting message: 617060515
Deleting message: 617883087
Deleting message: 617111811
"""
"""
Deleted 18 messages from queue
Restarting qmail... Starting qmail
done (hopefully).

qmailのリスタートが自動的にかかるため怖ければ最初に停止しておきましょう。
※ qmHandleでの自動リスタートまたは手動でのqmailの停止時に、あまりにキューが大量にある場合など、停止が働かず画面上固まったようになる事があります。そのような場合は別画面を開き qmail のプロセスをkillしてください。

># ps -aux | grep qmail
qmails   1111  0.0  0.0   4432   948 pts/0    S    13:40   0:00 qmail-send
qmaill   2222  0.0  0.0   4384   892 pts/0    S    13:40   0:00 splogger qmail
qmailr   3333  0.0  0.0   4380   888 pts/0    S    13:40   0:00 qmail-rspawn
qmailq   4444  0.0  0.0   4376   876 pts/0    S    13:40   0:00 qmail-clean
[root@server user]#kill -9 1111 2222 3333 4444

強制的にkillすると処理が正常に実行されるはずです。

メールアドレスを指定して削除

乗っ取り等でスパムを出していた場合等、特定のメールアドレスのみ削除したい時は
qmHandle -h'メールアドレス' を使用します。
ヘッダ情報に指定した文字列を含むメッセージを全て削除します。

=== qmHandle -l でメール詳細確認 ===
># ./qmhandle-1.3.2/qmHandle -l
618770559 (18, 18/618770559)
  Return-path:
  From: MAILER-DAEMON@xxxxxxxxxxxxxx
  To: support@abcde.net

=== abced.netをヘッダに含むメールを削除 ===
># ./qmhandle-1.3.2/qmHandle -h'abcde.net'
Calling system script to terminate qmail...
Shutting down qmail
Looking for messages with Header: abcde.net
Deleting message: 534498908
Deleting message: 614460515
Deleting message: 614483087
"""
"""
Deleted 4987 messages from queue
Restarting qmail... Starting qmail
done (hopefully).

実際のメールキュー削除までの流れ

実際にまとめて削除する場合は、メールのヘッダー情報および中身をきちんと確認しましょう。
確認せずに削除すると後々ヘッダーを見ておけばよかったとなる事が多々あります。
/var/qmail/queue/mess/NN/Message-Id を見ることでメールの中身が確認できます。
メッセージIDは qmHnadle -l で確認できます。
qmHandle -l で メッセージID表示 → メールの中身を確認 → 削除
とすると間違いないのかなと思います。

1.まず qmail-qstat および qmHandle -l でキュー数とどのようなメールが溜まっているか確認

=== メールキュー確認 ===
># ./qmhandle-1.3.2/qmHandle -l
618770559 (18, 18/618770559) # <= メッセージID (NN, NN/Message-Id)
  Return-path:
  From: MAILER-DAEMON@xxxxxxxxxxxxxx
"""
"""

2.表示されたメッセージIDのいくつかを /var/qmail/queue/mess でヘッダーおよび詳細確認

=== /var/qmail/queue/mess を確認 ===
># less /var/qmail/queue/mess/18/618770559
Received: (qmail 3855046 invoked for bounce); 9 Dec 2022 14:38:59 +0900
Date: 9 Dec 2022 14:38:59 +0900
From: MAILER-DAEMON@xxxx.ne.jp
To: xxxx@xxxxx.net
Subject: failure notice
"""
"""
From: "xxxxx.co.jp" <noreply@xxxx.co.jp>
To: <xxxx@xxxx>
Subject: =fx44OX44x4Ki44Oxxxxx44Kz44O844234
"""
"""

3.いくつか確認してどれも同じ攻撃によるものと確信できたら qmHandle で削除

==== 送受信の From To や failure notice をきちんと確認して削除 ===
># ./qmhandle-1.3.2/qmHandle -S'failure notice'
Calling system script to terminate qmail...
Shutting down qmail
Looking for messages with Subject: failure notice
Deleting message: 537798908
Deleting message: 617060515
Deleting message: 617883087
Deleting message: 617111811
"""
"""
Deleted 18 messages from queue
Restarting qmail... Starting qmail
done (hopefully).

サーバー内に多くのドメインやユーザーがいるとおいそれとキューを全削除できない事が多いですよね。最後に ./qmHandle/README の削除関連のコマンドの説明を載せておきます。

  -f're' : 正規表現 re にマッチする送信者からのメッセージを削除します。
  -Stext : Subject に text 含むメッセージを全て削除します。
  -h're' : ヘッダが正規表現 re にマッチするメッセージを全て削除 (大文字小文字を区別しない)
  -b're' : 本文が正規表現 re にマッチするメッセージを全て削除 (大文字小文字を区別しない)
  -H're' : ヘッダが正規表現 re にマッチするメッセージを全て削除 (大文字小文字を区別)
  -B're' : 本文が正規表現 re にマッチするメッセージを全て削除 (大文字小文字を区別)

あまり使用することはないですが色々ありますね。

コメント