Postfix

iptablesで特定のIPアドレスからのアクセスを拒否する方法

今回は、VPSに不正アクセスを試みる特定のIPアドレスを拒否する方法をご説明します。
この記事を書くことになった理由として、下記のような不正アクセスを試みるログが確認されたことにあります。

Jul  5 20:51:27 example postfix/smtpd[22218]: connect from unknown[接続元IPアドレス]
Jul  5 20:51:29 example postfix/smtpd[22218]: warning: unknown[接続元IPアドレス]: SASL LOGIN authentication failed: authentication failure
Jul  5 20:51:30 example postfix/smtpd[22218]: lost connection after AUTH from unknown[接続元IPアドレス]
Jul  5 20:51:30 example postfix/smtpd[22218]: disconnect from unknown[接続元IPアドレス]
Jul  5 20:52:11 example postfix/smtpd[22218]: connect from unknown[接続元IPアドレス]
Jul  5 20:52:13 example postfix/smtpd[22218]: warning: unknown[接続元IPアドレス]: SASL LOGIN authentication failed: authentication failure
Jul  5 20:52:14 example postfix/smtpd[22218]: lost connection after AUTH from unknown[接続元IPアドレス]
Jul  5 20:52:14 example postfix/smtpd[22218]: disconnect from unknown[接続元IPアドレス]
Jul  5 20:52:21 example postfix/smtpd[22218]: connect from unknown[接続元IPアドレス]
Jul  5 20:52:24 example postfix/smtpd[22218]: warning: unknown[接続元IPアドレス]: SASL LOGIN authentication failed: authentication failure
Jul  5 20:52:24 example postfix/smtpd[22218]: lost connection after AUTH from unknown[接続元IPアドレス]
Jul  5 20:52:24 example postfix/smtpd[22218]: disconnect from unknown[接続元IPアドレス]

上記のログから何度も不正アクセスを試みようとしていることが確認できました。
これがひどい状況になるとメールの送受信ができなくなるなど、VPSの処理が停止することもあります。

特定のIPアドレスからのアクセスを拒否する設定

それでは、早速上記のログで確認された不正アクセスをしようとする接続元IPアドレスを拒否する設定を行ってみます。
接続拒否をする方法として、ファイアウォールを使用します。
root権限になって、コンソールに下記のように入力します。
※接続元IPアドレスの箇所は、拒否したいIPアドレスにしてください。

iptables -I INPUT -s 接続元IPアドレス -j DROP

iptablesに設定が追加されたか確認してみます。
下記のコマンドで確認ができます。

iptables -L

iptablesに設定が追加されると、下記の行が追加されます。

DROP       all  --  接続元IPアドレス        anywhere

このまま再起動すると、せっかく追加した設定内容が削除されてしまうため、下記のコマンドで設定内容を保存します。

/etc/rc.d/init.d/iptables save

そして、iptablesを再起動します。

/etc/rc.d/init.d/iptables restart

以上が、特定のIPアドレスからのアクセスを拒否する設定方法です。

まとめ

iptablesの設定は、一歩間違えると自らのアクセスも遮断してしまう可能性があるため、気をつけて作業しましょう。

Postfixの送信メールキューを確認・削除する

エイリアス設定により、その設定されたメールアカウント宛に送られてきたメールは、別のメールアカウントのメールボックス、または別のメールアドレスに転送することができます。
先日、そのエイリアス設定を利用して、Gmailのメールアドレス宛にメール転送設定をしたところ、問題なくメール転送はできたのですが、下記のようなエラーがメールログに数回だけ残っていました。

Jul  7 00:01:59 example postfix/smtp[18525]: D627D72C30F: to=<転送先メールアドレス>, 
orig_to=<転送元メールアドレス>, relay=gmail-smtp-in.l.google.com[IPアドレス]:25, 
delay=1.8, delays=0/0.01/0.74/1, dsn=5.7.1, 
status=bounced (host gmail-smtp-in.l.google.com[IPアドレス] said: 550-5.7.1 [IPアドレス 3] 
Our system has detected that this message is 550-5.7.1 likely unsolicited mail. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please visit 550 5.7.1
https://support.google.com/mail/answer/188131 for more information. h785324862185.135 - gsmtp (in reply to end of DATA command))

エラーメッセージの内容は、「Gmailのシステムが送信されてきたメールを確認したところスパムメールとして検出してブロックしました。詳細については、https://support.google.com/mail/answer/188131を見てください。」ということ。Googleの詳細ページを確認したところ、たしかに分かり易く理由が記載されていました。

エラー発生の原因

エイリアス設定により全てのメールをGmailに転送するよう設定しましたが、その転送されたメールの中にスパムメールが混ざっていて、Gmailがそのスパムメールをブロックしたことによりエラーが発生してしまいました。
通常であれば気にすることではないのですが、今回は自分が所有するメールサーバーから転送したメールがGmailにスパムメールとして判定されているため、送信メールキューに送信できなかった迷惑メールが溜まってしまい、そのままにしておくと再送処理をして再度エラーが発生してしまう可能性があります。
また、その状況が続いてしまうとGmailを管理しているGoogleにも「スパムメールを送信するメールサーバー(踏み台にされている)」と誤判定されてしまう可能性があるため、早急に送信メールキューが溜まっていないか確認し、溜まっている場合にはキューを削除する必要があります。

Postfixの送信メールキュー確認

まずは、下記のコマンドでメールキューに溜まっていないか確認します。

[root@ ~]# postqueue -p

メールキューが溜まっていない場合は、下記の表示がされます。

Mail queue is empty

メールキューが溜まっている場合は、そのメール情報が表示されます。

-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
DAE7FA058F 864      Thu Jul  7 00:01:59  hoge@example.com
(connect to example.com[IPアドレス]:25: Operation timed out)
hoge@example.com
-- 7 Kbytes in 2 Requests.

それでは、溜まっている送信メールキューを削除します。
特定のメールキューを削除するには、下記のようにします。

[root@ ~]# postsuper -d [キューID]

キューIDは、postqueueコマンドで確認したときに表示された先頭の英数字のことです。
例として、上記のメールキューを削除するには、下記のようにします。

[root@ ~]# postsuper -d DAE7FA058F

すべてのメールキューを一括で削除するには、下記のようにします。

[root@ ~]# postsuper -d ALL

もしメールキューに溜まったメールを強制再送する場合は、下記のようにします。

[root@ ~]# postfix flush

以上が、Postfixの送信メールキューを確認・削除する方法です。