CentOS 7 安装 Fail2ban 配合 Firewalld 防止 SSH 爆破

前记

前些天 部署了 TeamSpeak 服务端在本机上

决定做点事来尽量防止 SSH 爆破

而 CentOS 7 自带的是 Firewalld 那就用他搭配 Fail2ban 吧

启用 Firewalld

默认是不会关闭的 像我这样这样再次启用 启用之前需要把开放的端口告诉 Firewalld

下面以开放 tcp22 端口为示例

1
firewall-cmd --zone=public --add-port=22/tcp --permanent

设置完成后重新加载配置

1
firewall-cmd --reload

查看已放行端口

1
firewall-cmd --zone=public --list-ports

安装 Fail2ban

1
2
yum -y install epel-release
yum -y install fail2ban

配置 Fail2ban

安装完成后 Fail2ban 的配置文件的路径为

1
/etc/fail2ban

在此目录下新建jail.local来配置 Fail2ban

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter = sshd
port = 22
action = %(action_mwl)s
logpath = /var/log/secure

其中的配置项为:

  • ignoreip:IP 白名单,白名单中的 IP 不会屏蔽,可填写多个以(,)分隔
  • bantime:屏蔽时间,单位为秒(s)
  • findtime:时间范围
  • maxretry:最大次数
  • banaction:屏蔽 IP 所使用的方法,上面使用 firewalld 屏蔽端口
  • [sshd]:名称,可以随便填写
  • filter:规则名称,必须填写位于 filter.d 目录里面的规则,sshd 是 fail2ban 内置规则
  • port:对应的端口
  • action:采取的行动
  • logpath:需要监视的日志路径

上面的配置意思是如果同一个 IP 在 10 分钟内连续超过 5 次错误 则使用 Firewalld 将他 IP ban 了

修改完后重新启动 Fail2ban

1
systemctl start fail2ban

后记

其实 Fail2ban 还有其他很神奇的用处

欢迎大家讨论