メールサーバをWebサイトを参考にしつつPostfix(メール送信ソフト) Dovecot(メール受信ソフト)を用いて適当に立ててみたものの、踏み台にされているという連絡がさくらVPSのabuse対策チームというところから入ったため対応を入れてみた。
因みにサーバ環境はCentOS6.9であった。
$ cat /etc/redhat-release
CentOS release 6.9 (Final)
初期対策
何はともあれメールサーバを止める。
# /etc/init.d/postfix stop
また、迷惑メールの踏み台にされたときには、大量のメールがメールサーバに対して送り付けられており、送信予備軍としてキューに溜まっているはずである。mailq
コマンドで確認できるが、ともあれこのキューを以下のコマンドで一括削除してやる。
# postsuper -d ALL
postsuperはpostfixが管理するキューに対してメンテナンスを行うコマンドであるが、superという名前から分かるようにsuperuserしか使えないようなのでroot権限で処理は行おう。
また、メールログにも大量に溜まっているはずなので/var/log/maillog
あたりを確認して削除しておこう。
SMTP認証を設定する
Postfixはデフォルトの状態では認証の仕組みを持っておらず、誰でもメールの送信依頼を出せる状態になっている。(このことをオープンリレー状態と呼ぶらしい)
自分以外からしか送れないようにするにはIPで制限をかけても良いが、常に固定のIPからメールを送信しなければならないので、ID/Passwordで制限を掛けてやるのが一般的な方法である。
そこでSASL(Simple Authentication and Security Layer、サスルと読む)という仕組みを使ってこのセキュリティ施策を実現する。
smtpd_sasl_auth_enable = yes
#匿名認証を許可しない = id/passwordの入力を必須とする。
smtpd_sasl_security_options = noanonymous
#SMTP認証したときのみメール送信の受付を行う。
smtpd_recipient_restrictions = permit_sasl_authenticated,reject_unauth_destination
saslの立ち上げ及び、Linuxの再起動時に自動で立ち上がるようにしておく。またpostfixを再起動する。
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# /etc/rc.d/init.d/postfix reload
これでひとまずSASL対応は完了。
##しつこいアクセスをiptablesで遮断
これで踏み台にされる事はなくなったものの、特定IPアドレスからしつこくSMTP認証の要求が飛んでくる事が/var/log/mailLog
を見ると確認された。こんな感じである。
Oct 14 12:36:04 myhost postfix/smtpd[29066]: connect from unknown[191.96.249.61]
Oct 14 12:36:10 myhost postfix/smtpd[29066]: warning: unknown[191.96.249.61]: SASL LOGIN authentication failed: authentication failure
Oct 14 12:36:10 myhost postfix/smtpd[28874]: connect from unknown[191.96.249.13]
Oct 14 12:36:11 myhost postfix/smtpd[29066]: disconnect from unknown[191.96.249.61]
Oct 14 12:36:16 myhost postfix/smtpd[28874]: warning: unknown[191.96.249.13]: SASL LOGIN authentication failed: authentication failure
まあ遮断できているから良いかと思うかもしれないが、頻繁に来られてはメールログで容量を食われてしまうのでIP tablesでこれらのIPからのアクセスを遮断してやる。次のサイトを参考にして設定してみる。https://www.sakura-vps.net/access_denied_specific_ipaddress/
# iptables -I INPUT -s 191.96.249.13 -j DROP
# iptables -I INPUT -s 191.96.249.61 -j DROP
設定できているかをiptables -L
で確認
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 191.96.249.61 anywhere
DROP all -- 191.96.249.13 anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
変更を保存してrestart
# /etc/init.d/iptables save
# /etc/init.d/iptables restart
saveすると/etc/sysconfig/
以下にiptablesファイルが生成されるので、これを直接編集しても良いかも。
# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Sun Oct 14 12:56:29 2018
*filter
:INPUT ACCEPT [1010:87284]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [573:1125512]
-A INPUT -s 191.96.249.61/32 -j DROP
-A INPUT -s 191.96.249.13/32 -j DROP
COMMIT
# Completed on Sun Oct 14 12:56:29 2018
IPフィルタだけではいたちごっこになってしまう可能性もあるが、ひとまずこれにて。何か良い方法はないものか。。