fail2ban 防ssh爆破或攻击

目的:防止ssh爆破

fail2ban

> Fail2ban是一个根据系统日志动态调整防火墙规则的安全工具,它具有响应迅速、使用方便的特性。

0x00 环境说明

centos7.9

0x01 安装

yum install -y epel
yum install -y fail2ban-firewalld
#centos7以上默认是firewall防火墙,如果系统是iptables防火墙
yum install -y fail2ban

0x02 结构

配置文件位置:/etc/fail2ban/fail2ban.conf

jail配置文件:jail.conf 一般拷贝一份.local

cp jail.conf jail.local
#因为.local可覆盖.conf配置,因此无需修改.conf 直接更改.local即可

自定义过滤规则目录:/etc/fail2ban/filter.d

自定义动作配置目录:/etc/fail2ban/action.d

0x03 jail.local配置

vi /etc/fail2ban/jail.local
#默认配置
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
#这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写
banaction = firewallcmd-ipset
action = %(action_mwl)s
ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔

 bantime:屏蔽时间,单位为秒(s)
 findtime:时间范围
 maxretry:最大次数
 banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口

 

# 默认配置
[DEFAULT]
# 被ban时间
bantime  = 15m
# 检索时间
findtime  = 10m
# 最大尝试数,即失败5次就被ban15分钟
maxretry = 5
maxmatches = %(maxretry)s
# 后端服务依赖systemd
backend = systemd
# 日志警告信息可以使用DNS记录访问主机地址
usedns = warn
# 日志编码使用utf-8
logencoding = utf-8
# 启用监管
enabled = ture
# 默认为普通模式
mode = normal
# 过滤模块
filter = %(__name__)s[mode=%(mode)s]
# 防火墙调用firewallcmd,默认为iptables
banaction = firewallcmd-ipset[actiontype=<multiport>]
banaction_allports = firewallcmd-ipset[actiontype=<allports>]

# 管理SSHD
[sshd]
enabled = true
filter  = sshd
port    = 22
logpath = /var/log/secure #%(sshd_log)s 也可以

另一种简单设置:

enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 180
findtime = 180
maxretry = 3
[sshd]:名称,可以随便填写

 

 filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则


 

 port:对应的端口


 

 action:采取的行动


 

 logpath:需要监视的日志路径

 

重启fail2ban

systemctl restart fail2ban.service

查看状态

fail2ban-client status sshd
#此时的sshd是jail.loal中设置的规则项
#手动ban掉指定IP
fail2ban-client set 规则项 banip x.x.x.x
fail2ban-client set 规则项 unbanip x.x.x.x  
fail2ban-client set 规则项 delignoreip x.x.x.x

利用ssh 故意输错密码

2835777-20221201142537702-429938316

 

2835777-20221201142623008-222485233

 

0x04 常用配置

防护Wordpress

# 在指定目录下建立wordpress配置文件,指定监控wordpress的访问地址
vi /etc/fail2ban/filter.d/wordpress.conf

[Definition]
failregex = ^ -.* /wp-login.php.* HTTP/1\.."
ignoreregex =

# 在jail.conf中加入如下配置,让fail2ban监视指定日志文件,根据日志记录进行拦截
[wordpress]
enabled = true
port = http,https
filter = wordpress
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log

防止半连接攻击

# 需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容 新建filter.d下的规则
[Definition]
failregex =  -.*- .*HTTP/1.* .* .*$
ignoreregex =

# 加入如下配置
[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log
阅读剩余
THE END