使用Fail2ban对非法扫描、注入的IP进行封禁

2026-10-08 浏览:4
使用Fail2ban对非法扫描、注入的IP进行封禁
评论:(0)复制地址

现在很多站长都会遇到黑客对服务器进行扫描、注入,我们下面就使用Fail2ban来自动封禁这些IP,能够匹配的规则包含如下:


  • 常见扫描路径

  • SQL 注入特征

  • XSS 特征

  • PHP 敏感文件/后门探测

  • 大量 4xx/5xx 状态码请求


一、创建自定义过滤规则(Filter)


  1. 宝塔 → 软件商店 → 找到 Fail2ban → 设置 → 配置修改(或直接用文件管理)

  2. 进入目录:/etc/fail2ban/filter.d/

  3. 新建文件:nginx-attack.conf,内容如下:

[Definition]
failregex = ^<HOST> .* "(GET|POST|HEAD|PUT|DELETE).*HTTP.*" (400|401|403|404|444|499|500|502|503).*
            ^<HOST> .* "(GET|POST).*(\.php\?|\.asp|\.aspx|\.jsp|/admin|/manage|/phpmyadmin|/wp-login|/xmlrpc\.php|/shell|/eval|/base64|/union.*select|/select.*from|/insert.*into|/update.*set|/delete.*from|/drop.*table|/script>|<script|/onerror=|/onload=|/javascript:).*HTTP.*"
            ^<HOST> .* "(GET|POST).*(union.*select|select.*from|insert.*into|update.*set|delete.*from|drop.*table|sleep\(|benchmark\(|load_file\(|into\s+outfile|into\s+dumpfile).*HTTP.*"
            ^<HOST> .* "(GET|POST).*(xss|onmouseover|onerror|onload|javascript:|alert\(|document\.cookie|<script).*HTTP.*"
            ^<HOST> .* "(GET|POST).*(/\.env|/\.git|/config\.php|/phpinfo|/actuator|/solr|/console|/invoker|/manager/html).*HTTP.*"

ignoreregex =

保存。设置权限为644


二、创建 Jail(监狱规则)


  1. 编辑文件:/etc/fail2ban/jail.local (如果没有就新建,或者编辑 jail.d/ 下的文件)

  2. 在文件末尾添加以下内容:


[nginx-attack]
enabled  = true
port     = http,https
filter   = nginx-attack
logpath  = /www/wwwlogs/*.log
maxretry = 8
findtime = 300
bantime  = 3600
action   = iptables-multiport[name=nginx-attack, port="http,https"]


我这里logpath使用的是通配符,也可以更精准一些,如下:

logpath  = /www/wwwlogs/*yourweb.com.log
           /www/wwwlogs/www.yourweb.com.log


参数说明:

参数含义建议值
maxretry多少次违规后封禁8(可调低到 5)
findtime统计时间窗口(秒)300(5分钟)
bantime封禁时长(秒)3600(1小时),可改成 86400(1天)
logpath监控的日志文件按你实际日志路径填写


三、重启 Fail2ban 使配置生效

在宝塔终端或 SSH 执行:

fail2ban-client reload
# 或者
systemctl restart fail2ban

查看是否加载成功:

fail2ban-client status
fail2ban-client status nginx-attack


四、常用管理命令

# 查看当前被封禁的 IP
fail2ban-client status nginx-attack

# 手动解封某个 IP
fail2ban-client set nginx-attack unbanip 攻击IP

# 手动封禁某个 IP
fail2ban-client set nginx-attack banip 攻击IP

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


五、建议调整


先观察 1 天:把 bantime 设短一点(比如 1800 秒),确认没有误封正常用户。

如果扫描特别猛,可以把 maxretry 降到 5,findtime 降到 180。

宝塔面板端口、SSH 端口建议也一起保护(可以另外写 jail)。


评论:(0)复制地址
发布:苗景云 | 分类:IT技术&设计 | Tags:

相关文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。