fail2ban

最近查看自己搭建的一台邮件服务器的日志,发现不停的有IP在测试登录密码,就想着把这些恶意连接的IP给封了。记得以前了解有个fail2ban的工具,可以不用从头到脚写脚本,直接简单配置即可实现我的需求,于是就来部署试试。

我的centos7上已经安装了epel源,直接yum安装

yum install fail2ban -y 

安装完成后,需要到配置目录(/etc/fail2ban/)做下配置。配置文件功能说明下:

fail2ban.conf   这个是程序运行相关的配置,不用动
jail.conf       这个是系统预装的相关服务检测规则,然后封禁的相关配置,因程序升级会
                覆盖此文件,因此需要在同目录新建 jail.local来做个性化配置
jail.d/         个性化配置也可在此目录下新建文件,效果与jail.local相同
filter.d/       预置的可以jail的服务

配置文件编写规则说明:

1、默认配置文件jail.conf为总[default] ,分[sshd]   [nginx]这种层次
2、个人配置文件jail.local 可以只写具体要jail的服务模块,如[sshd] ,它会自动继承 
   [defualt]中的所有配置,如果sshd中有default相同的命令,会重写(override)default
   中的命令
3、默认所有的jail模块都是未开启的
4、如果要启动sshd 可以只写
  [sshd]
  enabled = true
  所有预置的服务(在filter.d/目录下)都可以只写上面格式的两行就可开启对于服务的监控拦截功能

我安装的是fail2ban-0.11.1-10.el7.noarch版本,预装的配置文件[default]如下

[DEFAULT]
ignorecommand =
bantime  = 10m
findtime  = 10m
maxretry = 5
maxmatches = %(maxretry)s
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(__name__)s[mode=%(mode)s]
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain = 
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
            %(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
action_xarf = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
             xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath="%(logpath)s", port="%(port)s"]
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath="%(logpath)s", chain="%(chain)s"]
action_blocklist_de  = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
action_abuseipdb = abuseipdb
action = %(action_)s

我的配置文件/etc/fail2ban/jail.local

[sshd]
enabled = true
[sendmail-auth]
enabled = true
[dovecot]
enabled = true

接着运行下面相关命令开启fail2ban,查看相关的状态信息

#开启服务
systemctl start fail2ban
#查看配置 
fail2ban-client -d
#重新载入配置
fail2ban-client reload
#查看jail
fail2ban-client status
#查看某个jail状态
fail2ban-client status sshd

更高级些的用法可以添加上面default段的命令来重写,如

[nginx-auth-path]
port = 8080     ;nginx端口为8080
logpath = /usr/local/nginx/logs/errors.log
bantime = 30m   ;ban30分钟
maxretry = 6    ;连续错误6次就会被ban
enabled = ture

Leave a Reply

Your email address will not be published. Required fields are marked *