之前的帖子写少了,补充下Fail2Ban。
**前言:https://www.hostloc.com/thread-909578-1-1.html原先写的不完全正确。又过了30天无法修改…预计Fail2Ban根本没实现…(尴尬)**![](99-Rsources/Assets/17ed301688fc7927371832e5c0e33712-003.gif)

然后重新开个帖子
之前没有考虑到换端口后MJJ可能非22情况,切文本没有覆写更进。参考github项目某博客文本后把 SSH 密码爆破 阻止恶意扫描 CC 攻击  vsftpd 攻击规则。其实还可以加很多项目(只不过有些都没见过就算了)外补充个日志删除。基本上就这么多了的。

首先这个只是简易方案,适用于linux各类发行版本,包括容器类的openVZ LXC类。能治标不治本。被打还是会被打,防御一些阿猫阿狗还是没毛病的…

参考资料(建议都看看Centos和Ubuntu好几处不一样…)
https://www.escapelife.site/posts/d5f0eaf3.html
https://github.com/fail2ban/fail2ban
https://github.com/fail2ban/fail2ban/issues
https://www.有图比.com/results?search\_query=fail2ban

安装

1.  #以Debian为例(别的可以依葫芦画瓢)  
2.  #更新&安装 
3.  apt-get update && apt-get upgrade -y 
4.  apt-get -y install fail2ban

复制代码

温馨提示:
下面有几个数值需要自己修改“port=22”如果你的SSH端口不是22的话改成你对应的值
“# 最多…”# 禁止…”这样的含义可以视为注释,前面对应的数值可以自己修改。
修改好自己的值后拷贝修改的文本直接终端黏贴就可以了



1.  #配置参数  
    
2.  fail2ban="/etc/fail2ban/jail.d/sshd.local"  
    
3.  cat>"${fail2ban}"<<EOF  
    
4.  \[ssh-iptables\]  
    
5.  enabled  = true  
    
6.  filter   = sshd  
    
7.  action   = iptables\[name=SSH, port=22, protocol=tcp\]  
    
8.  logpath  = /var/log/auth.log   # 如果是Centos路径要改/var/log/secure这个  
    
9.  maxretry = 9   # 最多连接9次失败  
    
10.  bantime  = 777600   # 禁止9天(按秒单位1天86400)  
    
11.  #阻止恶意扫描  
    
12.  \[nginx-dir-scan\]  
    
13.  enabled = true  
    
14.  filter = nginx-dir-scan  
    
15.  action   = iptables\[name=nginx-dir-scan, port=443, protocol=tcp\]  
    
16.  logpath = /path/to/nginx/access.log  
    
17.  maxretry = 1   # 最多扫描1次  
    
18.  bantime = 777600   # 禁止9天(按秒单位1天86400)  
    
19.  findtime  = 300  
    
20.  #防CC攻击  
    
21.  \[nginx-cc\]  
    
22.  enabled = true  
    
23.  port = http,https  
    
24.  filter = nginx-cc  
    
25.  action = %(action\_mwl)s  
    
26.  maxretry = 20   # 最多C20次  
    
27.  findtime = 60  
    
28.  bantime = 777600   # 禁止9天(按秒单位1天86400)  
    
29.  logpath = /usr/local/nginx/logs/access.log  
    
30.  #防vsftpd攻击规则  
    
31.  \[vsftpd-notification\]  
    
32.  enabled = true  
    
33.  filter = vsftpd  
    
34.  action = sendmail-whois\[name=VSFTPD, dest=you@example.com\]  
    
35.  logpath = /var/log/vsftpd.log  
    
36.  maxretry = 5   # 最多5次  
    
37.  bantime = 777600   # 禁止9天(按秒单位1天86400)  
    
38.  \[vsftpd-iptables\]  
    
39.  enabled = true  
    
40.  filter = vsftpd  
    
41.  action = iptables\[name=VSFTPD, port=ftp, protocol=tcp\]  
    
42.             sendmail-whois\[name=VSFTPD, dest=you@example.com\]  
    
43.  logpath = /var/log/vsftpd.log  
    
44.  maxretry = 5   # 最多5次  
    
45.  bantime = 777600   # 禁止9天(按秒单位1天86400)  
    
46.  EOF  


  

> 检查上面无误后开启

1.  #覆写&启动&开机启动  
    
2.  cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/sshd.local  
    
3.  #先暂停#启动&开机自启  
    
4.  systemctl stop fail2ban  
    
5.  systemctl start fail2ban.service  
    
6.  systemctl enable fail2ban.service

删除多余日志(这里的+15是15天时间,可以自己改。对5g 10g vps建议都加上,默认系统log都会回收,不加也无所谓。)

1.  #fail2ban日志 开机自删+定时删日志  
    
2.  logdelete="./fail2banlogdelete.sh"  
    
3.  cat>"${logdelete}"<<EOF  
    
4.  #!/bin/bash  
    
5.  find /path/to/nginx/ -mtime +15 -name "\*.log" | xargs -i mv {} /root/RecycleBin/;  
    
6.  find /usr/local/nginx/logs/ -mtime +15 -name "\*.log" | xargs -i mv {} /root/RecycleBin/;  
    
7.  find /var/log/ -mtime +15 -name "\*.log" | xargs -i mv {} /root/RecycleBin/;  
    
8.  find /root/RecycleBin/ -name "\*.log" -exec rm -rf {} \\;  
    
9.  EOF  
    
10.  cp ./fail2banlogdelete.sh /etc/init.d/  
    
11.  #读挡并赋予权限  
    
12.  chmod +777 /etc/init.d/fail2banlogdelete.sh  
    
13.  update-rc.d ./fail2banlogdelete.sh defaults 90  
    
14.  cd  
    
15.  (echo "0 0 \*/15 \* \* bash /etc/init.d/fail2banlogdelete.sh >>/dev/null 2>&1" ; crontab -l )| crontab  
    
16.  cd  
    

_复制代码_

  

> 相关命令与systemctl 相似

1.  #启动  
    
2.  systemctl start fail2ban  
    
3.  #停止  
    
4.  systemctl stop fail2ban  
    
5.  #开机启动  
    
6.  systemctl enable fail2ban  
    
7.  #状态  
    
8.  systemctl status fail2ban  
    
9.  #开机关闭  
    
10.  systemctl  disable fail2ban  
    
11.  #查看被ban IP,其中sshd为名称,比如上面的\[wordpress\]  
    
12.  fail2ban-client status sshd  
    
13.  #删除被ban IP  
    
14.  fail2ban-client set sshd delignoreip X.X.X.X  
    
15.  #查看日志  
    
16.  tail /var/log/fail2ban.log

_复制代码_

检验方法:
直接重启呼出TOP 或者HTOP检查是否有此项