ブルートフォースアタック対策をやってみた
以前投稿した障害を避けるための不正アクセス対策をやってみた
環境
2台のサーバーで設定した
CentOS 6.9 Postfix 2.6.6 Dovecot 2.0.9
CentOS 7.5 Postfix 2.10.1 Dovecot 2.2.10
fail2banのインストール
以下 CentOS 6.9 での状況です
[root@centos6.9 ~]# yum -y install --enablerepo=epel fail2ban インストール: fail2ban.noarch 0:0.9.6-1.el6.1 依存性関連をインストールしました: ipset.x86_64 0:6.11-4.el6 libmnl.x86_64 0:1.0.2-3.el6 python-inotify.noarch 0:0.9.1-1.el6 完了しました!
fail2banの設定
/etc/fail2ban/jail.local
[root@centos6.9 fail2ban]# cd /etc/fail2ban [root@centos6.9 fail2ban]# cat jail.local [DEFAULT] #backend = systemd ; これはCentOS7なのでsystemd centos6.9 は CentOS6 bantime = 3600 ; BANされたIPアドレスがアクセスを禁止される期間(秒) findtime = 300 ; BANの判定時間(秒) maxretry = 3 ; アクセス回数 ignoreip = 127.0.0.0/8 10.0.0.0/8 192.168.0.0/16 172.16.0.0/16 #loglevel = NOTICE ; /etc/fail2ban/fail2ban.local に記載しないと有効にならない # メール通知時の設定 destemail = mailacount@hogehoge sender = mailacount@hogehoge mta = postfix [sshd] enabled = true port = ssh [postfix-sasl] enabled = true filter = postfix-sasl port = smtp,465,submission,imap3,imaps,pop3,pop3s action = iptables[name=postfix-sasl,port=smtp,protocol=tcp] sendmail-whois[name=postfix-sasl, dest=mailacount@hogehoge, sender=mailacount@hogehoge,sendername="Fail2Ban"] logpath = /var/log/maillog [dovecot] enabled = true port = pop3,pop3s,imap,imaps,submission,465,sieve #■再犯者用設定 [recidive] enabled = true filter = recidive logpath = /var/log/fail2ban.log action = iptables-allports[name=recidive] sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log] bantime = 604800 ; BANされる期間(秒)1週間 findtime = 86400 ; BANの回数判定時間(秒)24時間 maxretry = 3 ; BAN回数
/etc/fail2ban/fail2ban.local
ログが大きくなりすぎるので対策。jail.local記載では駄目だった
[root@centos6.9 fail2ban]# cat fail2ban.local [Definition] logtarget = /var/log/fail2ban.log loglevel = NOTICE
BANされたパケットを拒否せずにドロップ(破棄)する設定
/etc/fail2ban/action.d/iptables-common.local というファイルを新規作成
[root@centos6.9 action.d]# cat iptables-common.local [Init] blocktype = DROP
/etc/fail2ban/filter.d/proftpd.conf
このまま起動すると下のエラーがFail2banのログファイル(/var/log/fail2ban.log)に出力される。
NOTICE Jail started without 'journalmatch' set. Jail regexs will be checked against all journal entries, which is not advised for performance reasons.
この原因の「/etc/fail2ban/filter.d/proftpd」の設定ファイルを編集した
#journalmatchエラー対策 #ファイル末尾に以下を追加 [Init] journalmatch = _SYSTEMD_UNIT=proftpd.service
/etc/fail2ban/filter.d/dovecot.conf
[root@centos6.9 filter.d]# cat dovecot.conf # Fail2Ban filter Dovecot authentication and pop3/imap server # [INCLUDES] before = common.conf [Definition] _daemon = (auth|dovecot(-auth)?|auth-worker) failregex = ^%(__prefix_line)s(?:%(__pam_auth)s(?:\(dovecot:auth\))?:)?\s+authentication failure; logname=\S* uid=\S* euid=\S* tty=dovecot ruser=\S* rhost=(?:\s+user=\S*)?\s*$ ^%(__prefix_line)s(?:pop3|imap)-login: (?:Info: )?(?:Aborted login|Disconnected)(?::(?: [^ \(]+)+)? \((?:auth failed, \d+ attempts( in \d+ secs)?|tried to use (disabled|disallowed) \S+ auth)\):( user=<[^>]+>,)?( method=\S+,)? rip=(?:, lip=\S+)?(?:, TLS(?: handshaking(?:: SSL_accept\(\) failed: error:[\dA-F]+:SSL routines:[TLS\d]+_GET_CLIENT_HELLO:unknown protocol)?)?(: Disconnected)?)?(, session=<\S+>)?\s*$ ^%(__prefix_line)s(?:Info|dovecot: auth\(default\)|auth-worker\(\d+\)): pam\(\S+,\): pam_authenticate\(\) failed: (User not known to the underlying authentication module: \d+ Time\(s\)|Authentication failure \(password mismatch\?\))\s*$ ^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): (?:pam|passwd-file)\(\S+,\): unknown user\s*$ ^%(__prefix_line)s(?:auth|auth-worker\(\d+\)): Info: ldap\(\S*,,\S*\): invalid credentials\s*$ #####ここから追加 auth: pam\(.*,\): unknown user auth: Debug: pam\(.*,\): lookup service=dovecot imap-login: Disconnected \(auth failed, 1 attempts\): user=\<.*\>, method=.*, rip=, lip=.* auth: Debug: client in: AUTH\#.*\#011PLAIN\#.*service=imap\#.*\#011rip=\#.*port=143\#.*rport=.*\#.*resp= ######ここまで追加 ignoreregex = [Init] journalmatch = _SYSTEMD_UNIT=dovecot.service
fail2banの防御状況確認 CentOS 6.9では正常運用中
ファイヤウォールにて社外からはメール受信できない運用なのでdovecot(メール受信)のbanは見当たらない
しかしSMTP認証エラーの多いこと。
[root@centos6.9 log]# fail2ban-client status Status |- Number of jail: 4 `- Jail list: dovecot, postfix-sasl, recidive, sshd [root@centos6.9 log]# fail2ban-client status postfix-sasl Status for the jail: postfix-sasl |- Filter | |- Currently failed: 1 | |- Total failed: 85792 | `- File list: /var/log/maillog `- Actions |- Currently banned: 23 |- Total banned: 1694 `- Banned IP list: 114.99.3.70 220.179.210.31 113.206.12.85 113.206.139.25 114.99.130.21 113.206.137.31 113.206.120.178 114.99.16.7 60.169.114.3 113.206.211.16 113.206.150.58 60.167.21.147 113.206.1.107 60.167.82.85 113.206.3.188 113.206.206.50 60.167.22.97 113.206.213.243 113.206.148.94 113.206.12.243 125.121.129.138 113.206.13.106 113.206.142.6 [root@centos6.9 log]# fail2ban-client status recidive Status for the jail: recidive |- Filter | |- Currently failed: 41 | |- Total failed: 1779 | `- File list: /var/log/fail2ban.log `- Actions |- Currently banned: 20 |- Total banned: 179 `- Banned IP list: 69.10.56.134 103.133.104.203 45.82.153.37 45.227.253.132 219.135.140.43 78.128.113.114 185.211.245.170 46.38.144.17 46.38.144.32 46.38.144.202 46.38.144.146 103.99.0.210 212.83.154.79 144.217.24.120 45.142.195.150 45.142.195.5 45.227.253.130 115.159.198.130 78.128.113.115 141.98.80.76 [root@centos6.9 log]# fail2ban-client status dovecot Status for the jail: dovecot |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/maillog `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
iptables の確認
[root@centos6.9 log]# iptables -L -n --line-number Chain INPUT (policy ACCEPT) num target prot opt source destination 1 f2b-recidive tcp -- 0.0.0.0/0 0.0.0.0/0 2 f2b-postfix-sasl tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 3 f2b-dovecot tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 110,995,143,993,587,465,4190 4 f2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) num target prot opt source destination Chain OUTPUT (policy ACCEPT) num target prot opt source destination Chain f2b-dovecot (1 references) num target prot opt source destination 1 RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain f2b-postfix-sasl (1 references) num target prot opt source destination 1 DROP all -- 113.206.206.203 0.0.0.0/0 2 DROP all -- 113.206.148.239 0.0.0.0/0 3 DROP all -- 113.206.142.6 0.0.0.0/0 4 DROP all -- 113.206.13.106 0.0.0.0/0 5 DROP all -- 125.121.129.138 0.0.0.0/0 6 DROP all -- 113.206.12.243 0.0.0.0/0 7 DROP all -- 113.206.148.94 0.0.0.0/0 8 DROP all -- 113.206.213.243 0.0.0.0/0 9 DROP all -- 60.167.22.97 0.0.0.0/0 10 DROP all -- 113.206.206.50 0.0.0.0/0 11 DROP all -- 113.206.3.188 0.0.0.0/0 12 DROP all -- 60.167.82.85 0.0.0.0/0 13 DROP all -- 113.206.1.107 0.0.0.0/0 14 DROP all -- 60.167.21.147 0.0.0.0/0 15 DROP all -- 113.206.150.58 0.0.0.0/0 16 DROP all -- 113.206.211.16 0.0.0.0/0 17 DROP all -- 60.169.114.3 0.0.0.0/0 18 DROP all -- 114.99.16.7 0.0.0.0/0 19 DROP all -- 113.206.120.178 0.0.0.0/0 20 DROP all -- 113.206.137.31 0.0.0.0/0 21 DROP all -- 114.99.130.21 0.0.0.0/0 22 DROP all -- 113.206.139.25 0.0.0.0/0 23 DROP all -- 113.206.12.85 0.0.0.0/0 24 DROP all -- 220.179.210.31 0.0.0.0/0 25 DROP all -- 114.99.3.70 0.0.0.0/0 26 RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain f2b-recidive (1 references) num target prot opt source destination 1 DROP all -- 141.98.80.76 0.0.0.0/0 2 DROP all -- 78.128.113.115 0.0.0.0/0 3 DROP all -- 115.159.198.130 0.0.0.0/0 4 DROP all -- 45.227.253.130 0.0.0.0/0 5 DROP all -- 45.142.195.5 0.0.0.0/0 6 DROP all -- 45.142.195.150 0.0.0.0/0 7 DROP all -- 144.217.24.120 0.0.0.0/0 8 DROP all -- 212.83.154.79 0.0.0.0/0 9 DROP all -- 103.99.0.210 0.0.0.0/0 10 DROP all -- 46.38.144.146 0.0.0.0/0 11 DROP all -- 46.38.144.202 0.0.0.0/0 12 DROP all -- 46.38.144.32 0.0.0.0/0 13 DROP all -- 46.38.144.17 0.0.0.0/0 14 DROP all -- 185.211.245.170 0.0.0.0/0 15 DROP all -- 78.128.113.114 0.0.0.0/0 16 DROP all -- 219.135.140.43 0.0.0.0/0 17 DROP all -- 45.227.253.132 0.0.0.0/0 18 DROP all -- 45.82.153.37 0.0.0.0/0 19 DROP all -- 103.133.104.203 0.0.0.0/0 20 DROP all -- 69.10.56.134 0.0.0.0/0 21 RETURN all -- 0.0.0.0/0 0.0.0.0/0 Chain f2b-sshd (1 references) num target prot opt source destination 1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
下でも同じ結果を得られた
service iptables status
CentOS 7.5 では再犯設定recidive が正常に機能していない
原因調査中で未解決。仕方ないので1回でもban判定すると長時間(4時間)ブロック設定にした
/etc/fail2ban/jail.local
[DEFAULT] backend = systemd ; CentOS7なのでsystemd bantime = 144000 ; BANされたIPアドレスがアクセスを禁止される期間(秒)3600→14400 4時間 findtime = 300 ; BANの判定時間(秒) maxretry = 3 ; アクセス回数 #loglevel = NOTICE ; /etc/fail2ban/fail2ban.local に記載しないと有効にならない # メール通知時の設定 destemail = mailacount@hogehoge sender = mailacount@hogehoge mta = postfix [sshd] enabled = true port = ssh # Postfixのアクセスに対する設定 [postfix-sasl] enabled = true port = smtp,465,submission,imap3,imaps,pop3,pop3s banaction = firewallcmd-ipset sendmail-whois[name=SMTP, dest=mailacount@hogehoge, sender=mailacount@hogehoge, sendername="Fail2Ban"] [dovecot] enabled = true port = pop3,pop3s,imap,imaps,submission,465,sieve #■再犯者用設定 [recidive] enabled = true #filter = recidive logpath = /var/log/fail2ban.log #action = iptables-allports[name=recidive] sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log] banaction = firewallcmd-ipset sendmail-whois[name=RECIDIVE, dest=mailacount@hogehoge, sender=mailacount@hogehoge, sendername="Fail2Ban"] #banaction = %(banaction_allports)s #action= %(action_)s bantime = 604800 ; BANされる期間(秒)1週間 findtime = 86400 ; BANの回数判定時間(秒)24時間 maxretry = 3 ; BAN回数
まとめ
この不正アクセスの状況を目の当たりにするとAzure AWS等でのMTAの運用が許可されてない状況も納得。
そのためAzureのPostfixではSendGridにリレーして運用している。
ブルートフォースアタック こりゃ~大変だ。fail2banがなかったら運用厳しい。
Office365のメールを使えば苦労しなくて済むのかもしれないが、運用コストを考えてPostfixかな。
Postfix軽くて高速だし。
コメント