在建设网站的过程中,经历SSH爆破和CC/DDOS的概率还是很大的。尤其是SSH爆破,基本是服务器的家常便饭。如果你采用比较复杂的密码被爆破的概率很低,相反服务器就特别危险,一但被爆破后果可想而知。
这里我们可以使用一款特别的软件很轻松的解决SSH爆破和简单的CC问题。

1.fail2ban简介

Fail2ban是通过扫描日志文件(例如/var/log/apache/error_log)显示恶意动作的IP。比如密码登录失败次数太多,寻找漏洞等。通常,Fail2Ban用于更新防火墙规则以拒绝IP,也可以配置其他动作使用(例如发送电子邮件/iptables)。Fail2Ban带有各种服务的过滤器(apache,nginx,courier,ssh等)。
项目地址:https://github.com/fail2ban/fail2ban
官网网站:http://www.fail2ban.org

2.fail2ban安装

下载源文件安装:

# wget https://github.com/fail2ban/fail2ban/archive/0.11.zip
# unzip 0.11.zip
# cd fail2ban-0.11
# python setup.py install

或者通过GitHub克隆到您选择的目录,然后进行安装:

# git clone https://github.com/fail2ban/fail2ban.git
# cd fail2ban
# sudo python setup.py install 

如果你使用的是oneinestack,可以使用命令一键安装
Centos7巧用fail2ban/Firewalld防止SSH爆破和CC攻击-VPSZ建站小助手
安装成功后fail2ban配置文件位于/etc/fail2ban,主要对jail.conf文件进行配置,相关的匹配规则位于filter.d目录,其它目录/文件很少用到,如果需要可自行搜索探究。

3.fail2ban防止SSH爆破

考虑到Centos7已经自带Firewalld,我们这里直接配合Fail2ban展开工作。
新建配置fail2ban规则

vi /etc/fail2ban/

下面对jail.local编辑:

[DEFAULT]
ignoreip = 127.0.0.1/8             //白名单IP
bantime  = 86400                   //屏蔽时间,秒为单位
findtime = 600                     //错误时间范围
maxretry = 5                       //最大错误次数
banaction = firewallcmd-ipset      //banaction必须用firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter  = sshd
port    = 22                       //SSH开启的端口
action = %(action_mwl)s            //采取的行动
logpath = /var/log/secure          //监视的日志路径

上面的配置意思是如果同一个IP,在10分钟内,连续超过5次登录错误,则使用Firewalld将他IP拉入黑名单就是被ban。
使用另一台服务器不断尝试连接SSH,并且不断的将密码输入错误,你会发现连续超过5次后直接连不上,说明IP被ban了,可以输入:fail2ban-client status sshd查看被ban的IP,如下截图。
Centos7巧用fail2ban/Firewalld防止SSH爆破和CC攻击-VPSZ建站小助手

4.配合nginx防止CC

其实这里的意思就是监控nginx来banIP,实际原理和SSH防爆破是一样的。

#需要先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容
[Definition]
failregex =  -.*- .*HTTP/1.* .* .*$
ignoreregex =

继续修改jail.local追加对nginx-cc的监控内容:

[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log   //logpath为nginx日志路径

配置意思是如果在60s内,如果同一IP请求次数达到20次,则将其IP ban 1小时,上面只是为了测试,请根据自己的实际情况修改。logpath为nginx日志路径。

5.常用命令

#启动
systemctl start fail2ban
#停止
systemctl stop fail2ban
#开机启动
systemctl enable fail2ban
#查看被ban IP,其中sshd为名称,比如上面的[wordpress]
fail2ban-client status sshd
#删除被ban IP
fail2ban-client set sshd delignoreip 192.168.111.111
#查看日志
tail /var/log/fail2ban.log

6.总结

一般使用fail2ban来阻止SSH爆破还是比较有效的。并且特别方便,如果是使用oneinstacke,还提供一键安装。但是如果遇到大规模CC,其实并没有太大作用。但是聊胜于无不是吗,嘿嘿。
Centos7巧用fail2ban/Firewalld防止SSH爆破和CC攻击-VPSZ建站小助手
参考文章:https://www.moerats.com/archives/487/