CentOS Postfix セキュリティ

CentOS fail2banでメールサーバーpostfixを守る

CentOS

ブルートフォースアタック対策をやってみた

以前投稿した障害を避けるための不正アクセス対策をやってみた

環境

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軽くて高速だし。

コメント