什么是fail2ban
Fail2Ban 是一款入侵防御软件,可以保护服务器免受暴力攻击。它是用 Python 编程语言编写的。Fail2Ban 基于auth 日志文件工作,默认情况下它会扫描所有 auth 日志文件,如 /var/log/auth.log
、/var/log/apache/access.log
等,并禁止带有恶意标志的IP,比如密码失败太多,寻找漏洞等等标志。
通常,Fail2Ban 用于更新防火墙规则,用于在指定的时间内拒绝 IP 地址。它也会发送邮件通知。Fail2Ban 为各种服务提供了许多过滤器,如 ssh、apache、nginx、squid、named、mysql、nagios 等。
检查SSH失败的登录记录
lastb | grep root | wc -l
统计一下尝试失败的ip地址都有哪些
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'
检查Firewalld是否启用
#如果您已经安装iptables建议先关闭
service iptables stop
#查看Firewalld状态
firewall-cmd --state
Firewalld的常用操作
# 启动服务
systemctl start firewalld
# 设置服务自启动
systemctl enable firewalld
# 取消服务自启动
systemctl disable firewalld
# 停止服务
systemctl stop firewalld
# 查看服务状态
systemctl status firewalld
# 重启服务
systemctl restart firewalld
放行22端口
先放行ssh端口,不然就把自己也给拦截了
#放行22端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
#重载配置
firewall-cmd --reload
#查看已放行端口
firewall-cmd --zone=public --list-ports
其它端口依次按上述操作即可
安装fail2ban
fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。
#CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
#安装fial2ban
yum -y install fail2ban
安装成功后fail2ban配置文件位于/etc/fail2ban
,其中jail.conf
为主配置文件
配置规则
新建jail.local
来覆盖fail2ban的一些默认规则:
#新建配置
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屏蔽端口
防止SSH爆破
jail.local
后面追加如下内容:
[sshd]
enabled = true
filter = sshd
port = 22
action = %(action_mwl)s
logpath = /var/log/secure
- [sshd]:名称,可以随便填写
- filter:规则名称,必须填写位于
filter.d
目录里面的规则,sshd是fail2ban内置规则 - port:对应的端口
- action:采取的行动
- logpath:需要监视的日志路径
systemctl start fail2ban
启动fail2ban
Docker配置
docker防火墙使用的是底层iptables,封装后的firewalld默认不生效
如果想要使用firewalld,需要做以下调整:
firewall-cmd --permanent --zone=trusted --change-interface=docker0
重启 firewalld、docker 以生效
验证是否可以正常访问
docker run --rm busybox nslookup baidu.com
验证
可以使用另一个IP的VPS来尝试错误密码登录,要想查看状态,使用下面的命令,status后面跟的是上面配置文件里面的单元组名
fail2ban-client status sshd
实时查看日志 tail -f /var/log/fail2ban.logn