近期有人暴力破解我服务器的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