•   Login
  •  
  •   Rss
  •   Rss2.0
  •   ATOM1.0
  •   Admin
  •   Top
  •   Home

Fail2Banがようやく機能した…か?
2018-04-18 18:19:54,400 fail2ban.actions [1278]: ERROR Failed to execute ban jail 'postfix-sasl' action 'iptables-multiport' info 'ActionInfo({'bancount': 1, 'ip-rev': '31.86.166.188.', 'family': 'inet4', 'ipmatches': 'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'matches': u'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'ip': '188.166.86.31', 'ipjailmatches': 'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'ipfailures': 6, 'F-*': {'matches': [(u'', u'Apr 18 18:18:33', u' sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6'), u'Apr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', u'Apr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6'], 'failures': 3, 'ip4': u'188.166.86.31'}, 'fid': '188.166.86.31', 'time': 1524043133.0, 'failures': 3, 'ip-host': None, 'ipjailfailures': 3, 'restored': 0, 'bantime': 3600})': Error starting action Jail('postfix-sasl')/iptables-multiport。
GWが始まったときの課題の一つに、“メールサーバーに不正にアクセスしてくる奴のIPを拒否する”を完璧にする。
を掲げていました。
相方の実家へ帰省する直前に、ようやく改善の兆しが見え、帰宅後ほぼ徹夜して試行錯誤を繰り返しました。
ようやく達成したのでその備忘録として残そうと思います。


実は、当ブログでも過去にこうした記事を書いてきました。

海外ISPに苦情を申し立て(メールサーバーへの不正アクセス)(2018/03/13 06:00:00)
Postfixで相変わらずな不正アクセスを阻止(2018/02/09 06:00:00)
Fail2banの機能不全を回避(2018/01/14 06:00:00)


成功したと思っていたのですが、実は全然成功していませんでした(^^ゞ
そもそも、こう言うログが出た時点で疑うべきでした。


2018-03-27 00:24:02,155 fail2ban.observer [1278]: INFO [postfix-sasl] Found 91.200.12.152, bad - 2018-03-27 00:24:02, 3 # -> 3, Ban
2018-03-27 00:24:02,310 fail2ban.actions [1278]: WARNING [postfix-sasl] 91.200.12.152 already banned


IPアドレスを拒否!とFail2Banがやっているのに、既に設定されています。と言うワーニングメッセージで気付けよと。
まず、iptablesのバージョンが1.6.0の時点で色々問題有りでした。


Fail2Banのサービス再起動をしたところ、づらづら~っとエラーの嵐。
2018-04-18 18:19:54,400 fail2ban.actions [1278]: ERROR Failed to execute ban jail 'postfix-sasl' action 'iptables-multiport' info 'ActionInfo({'bancount': 1, 'ip-rev': '31.86.166.188.', 'family': 'inet4', 'ipmatches': 'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'matches': u'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'ip': '188.166.86.31', 'ipjailmatches': 'Apr 18 18:18:33 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6\nApr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', 'ipfailures': 6, 'F-*': {'matches': [(u'', u'Apr 18 18:18:33', u' sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6'), u'Apr 18 18:18:41 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6', u'Apr 18 18:18:53 sir-2 postfix/smtpd[12135]: warning: unknown[188.166.86.31]: SASL LOGIN authentication failed: UGFzc3dvcmQ6'], 'failures': 3, 'ip4': u'188.166.86.31'}, 'fid': '188.166.86.31', 'time': 1524043133.0, 'failures': 3, 'ip-host': None, 'ipjailfailures': 3, 'restored': 0, 'bantime': 3600})': Error starting action Jail('postfix-sasl')/iptables-multiport
2018-04-18 18:20:54,417 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- exec: iptables -w -N f2b-sasl
iptables -w -A f2b-sasl -j RETURN
iptables -w -I INPUT -p tcp --dport smtp -j f2b-sasl
cat /etc/fail2ban/jail.d/ip.blacklist | while read IP; do iptables -I f2b-sasl 1 -s
$IP -j DROP; done
2018-04-18 18:20:54,418 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- timed out after 60 seconds.
2018-04-18 18:20:54,619 fail2ban.utils [1278]: ERROR iptables -w -N f2b-sasl
iptables -w -A f2b-sasl -j RETURN
iptables -w -I INPUT -p tcp --dport smtp -j f2b-sasl
cat /etc/fail2ban/jail.d/ip.blacklist | while read IP; do iptables -I f2b-sasl 1 -s
$IP -j DROP; done -- failed with [Errno 3] No such process
2018-04-18 18:20:54,622 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- stderr: 'iptables: Chain already exists.'
2018-04-18 18:20:54,622 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- stderr: 'iptables v1.6.0: option "-s" requires an argument'
2018-04-18 18:20:54,622 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- stderr: "Try `iptables -h' or 'iptables --help' for more information."
2018-04-18 18:20:54,622 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- stderr: '/bin/sh: 5: 94.102.56.181: not found'
2018-04-18 18:20:54,622 fail2ban.utils [1278]: ERROR 7f0c1aa8ab30 -- stderr: 'iptables v1.6.0: option "-s" requires an argument'

まず、cat /etc/fail2ban/jail.d/ip.blacklist | while read IP; do iptables -I f2b-sasl 1 -s $IP -j DROP; done これの赤字部分が間違っている。$が抜けていた。
そして、iptablesでは-sのオプションはもう使えない。と。
IPv4の場合は、-4 と入れるそうだ。
でも、その後でドツボにハマり、何をやってもフィルターエラーが解決しない。
解決したと思ったら、今度は不正アクセスをキャッチしない。


試行錯誤した結果、この様に設定をしたら、全てが解決しました。

[jail.conf]


[sasl-iptables]

enabled = true
filter = postfix-sasl
port = smtp,465,submission
backend = polling
action = iptables[name=sasl, port="smtp,smtps"]
sendmail-whois[name=sasl, dest=送信者メールアドレス.sender=送信先メールアドレス]
#logpath = %(postfix_log)s
logpath = /var/log/mail.log
backend = %(postfix_backend)s



[postfix-sasl.conf]
# Fail2Ban filter for postfix authentication failures
#

[INCLUDES]

before = common.conf

[Definition]

_daemon = postfix/smtpd

failregex = (?i): warning: [-._\w]+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: \w
^%(__prefix_line)swarning: hostname no-reverse-dns-configured.com does not resolve to address <HOST>?\s*$

ignoreregex =

# Author: Yaroslav Halchenko

小難しいのは省いて、シンプルな攻撃だけをフィルターにかけることにした。

[iptables.conf]
[INCLUDES]

before = iptables-common.conf

[Definition]

# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = <iptables> -N f2b-<name>
<iptables> -A f2b-<name> -j <returntype>
<iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
cat /etc/fail2ban/jail.d/ip.blacklist | while read $IP; do iptables -I f2b-<name> 1
-s
$IP -j DROP; done

# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = <iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
<actionflush>
<iptables> -X f2b-<name>

# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
echo <ip> >> /etc/fail2ban/jail.d/ip.blacklist

# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: See jail.conf(5) man page
# Values: CMD
#
actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>

[Init]

-4 にすると謎のエラーになるので、再び-s に戻してやるとスッキリした。
なんでかな?


取りあえず、バンバンロックがかかっていることが、次のコマンドでハッキリした。
********@######:/var# iptables -L f2b-%%%%%%%%
Chain f2b-%%%%%%%% (1 references)
target prot opt source destination
DROP all -- mail.kwiktron.com.au anywhere
DROP all -- 71-10-113-13.dhcp.stpt.wi.charter.com anywhere
DROP all -- 178.141.251.45 anywhere
DROP all -- 103.215.211.106 anywhere
DROP all -- no-reverse-dns-configured.com anywhere
DROP all -- host3.likeithealthy.com anywhere
DROP all -- residencial-200.6.178.132.costanet.com.co anywhere
DROP all -- static-ip-1816025453.cable.net.co anywhere
DROP all -- 184.71.152.86 anywhere
DROP all -- 103.230.85.157 anywhere
DROP all -- static.vnpt.vn anywhere
DROP all -- 91.209.70.221 anywhere


あと、ログローテーションもうまく行っていなかったので修正した。
単純にファイルパスを間違えていただけで、正しく動かなかっただけだった。


それにしても、Fail2Banのフィルターの書き方が今一つ分からなかったです。
正規表現は分かったのですが、<ip>とか<HOST>なんて固有変数は、試行錯誤しないとダメでした。



記事を評価してください(★1つ=悪い、★5つ=良い)
この記事の平均評価: 未評価 (0人)
Posted by いぐぅ 06:00 | システム::linux | comments (0) | trackback (0)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31