fail2ban 是 Linux 上的一个著名的入侵保护的开源框架,它会监控多个系统的日志文件(例如:/var/log/auth.log 或者 /var/log/secure),并根据检测到的任何可疑的行为自动触发不同的防御动作。在防御SSH暴力密码破解方面,您可以使用denyhost程序。它也是通过分析系统日志文件,然后把可疑的IP添加到/etc/hosts.deny来实现保护。fail2ban的功能更加强大,它不但可以防SSH暴力破解,还可以防ftp、mysql等服务。fail2ban直接通过iptables防火墙来实现阻止登录。
安装
默认centos源中没有fail2ban软件,需要先添加源,然后再安装。
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install fail2ban
配置
全局配置
复制jail.conf文件到jail.local。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
编辑jail.local
vi /etc/fail2ban/jail.local
可以修改如下几个配置
[DEFAULT] # 以空格分隔的列表,可以是 IP 地址、CIDR 前缀或者 DNS 主机名 # 用于指定哪些地址可以忽略 fail2ban 防御 ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24 # 客户端主机被禁止的时长(秒) bantime = 86400 # 客户端主机被禁止前允许失败的次数 maxretry = 5 # 查找失败次数的时长(秒) findtime = 600
根据上述配置,fail2ban会自动禁止在最近10分钟内有超过5次访问尝试失败的任意IP地址。禁止时间是24个小时。
SSH防护配置
在/etc/fail2ban/jail.d目录创建sshd.local防护配置文件,内容添加如下:
# vi /etc/fail2ban/jail.d/sshd.local [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] # sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com] logpath = /var/log/secure maxretry = 5
这里可以单独设置maxretry等参数,优先级比全局配置jail.local中的高。
这里如果ssh端口不是默认的22,那么需要修改port=ssh为port=xxx 。
启动
配置完成后启动服务,并且添加开机自动启动。
chkconfig --level 23 fail2ban on service fail2ban start
启动后查看iptables,如果看到类似如下说明服务已经正常在运行了。
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination f2b-SSH tcp -- anywhere anywhere tcp dpt:EtherNet/IP-1 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain f2b-SSH (1 references) target prot opt source destination RETURN all -- anywhere anywhere
完成。