CentOS7 使用fail2ban防SSH暴力破解

近期有人暴力破解我服务器的SSH,现在的云主机基本都有硬件防火墙,生产环境下,只需要在云平台的管理后台关闭22端口即可,这个方法也是最安全的。

但在一些个人服务器或测试服务器,由于需要经常SSH登录进行调试,反复去云平台的管理后台开关防火墙有些麻烦,但被暴力破解又担心不安全,所以可以使用fail2ban来解决这个问题,BAN掉连续错误输入SSH密码的IP,保证服务器的安全。


安装fail2ban

yum -y install epel-release
yum -y install fail2ban

创建/编辑配置文件jail.local

vi /etc/fail2ban/jail.local

输入以下内容:

Iptables配置

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 3600
maxretry = 5
findtime = 300

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
logpath = /var/log/secure
maxretry = 5

Firewalld配置

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 3600
maxretry = 5
findtime = 300
banaction = firewallcmd-ipset
action = %(action_mwl)s

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

 

配置文件说明:

# /etc/fail2ban/jail.conf 为主配置文件,一般不做修改
# /etc/fail2ban/jail.local 为自定义配置文件,会覆盖jail.conf里相同的值

# DEFAULT这里是设定全局设置,若下面的监控没有设置就以全局设置的值设置
[DEFAULT]

# 以空格分隔的列表,可以是IP地址、CIDR前缀或者DNS主机名
# 用于指定哪些地址可以忽略fail2ban防御
ignoreip = 127.0.0.1 192.168.1.0/24

# 客户端主机被禁止的时长(秒)
bantime = 86400

# 客户端主机被禁止前允许失败的次数
maxretry = 5

# 查找失败次数的时长(秒)
findtime = 600

[ssh-iptables]

# 是否开启
enabled = true

# 采用的过滤器
filter = sshd

# 采取的动作
action = iptables[name=SSH, port=ssh, protocol=tcp]

# 针对的日志文件的路径
logpath = /var/log/secure

# ssh 服务的最大尝试次数
maxretry = 3

启动服务

systemctl enable fail2ban
systemctl start fail2ban

常用命令

# 重新读取配置文件
fail2ban-client reload

# 查看被ban IP,其中sshd为名称,比如上面的[ssh-iptables]
fail2ban-client status sshd

# 删除被ban IP
fail2ban-client set sshd unbanip 192.168.111.111

# 查看日志
tail -f /var/log/fail2ban.log

# 查看fail2ban过滤器是否适用于特定日志文件
fail2ban-regex /var/log/example.error.log /etc/fail2ban/filter.d/sshd.conf