项目上线之后,查看日志,发现有很多爬虫在恶意扫描网站,对服务器的性能和资源造成了影响,决定使用 fail2ban 稍微屏蔽下这些家伙

安装fail2ban

ubuntu

sudo apt-get install fail2ban

centos

sudo yum install fail2ban

配置fail2ban

编写规则

sudo vim /etc/fail2ban/filter.d/nginx-404.conf

## 加入以下内容
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
ignoreregex =

编写fail2ban配置

sudo vim /etc/fail2ban/jail.local

## 加入以下内容
[nginx-404]
enabled = true
port    = http,https
filter  = nginx-404
logpath = /var/log/nginx/access.log #根据实际日志路径配置
maxretry = 10  #最大尝试次数
findtime = 300 #允许失败次数的时间范围
bantime = 86400 #客户端主机禁止时长(秒)

重启fail2ban

#ubuntu
sudo service fail2ban restart
#centos
sudo systemctl restart fail2ban

nginx屏蔽普通爬虫

Nginx可以根据User-Agent过滤请求,在URL入口位置通过一个正则表达式就可以过滤不符合要求的爬虫请求,代码如下:

    location / {
        if ($http_user_agent ~* "python|curl|java|wget|httpclient|okhttp") {
            return 503;
        }
        # 正常处理
        ...
    }

变量$http_user_agent是一个可以直接在location中引用的Nginx变量。~*表示不区分大小写的正则匹配,通过python就可以过滤掉80%的Python爬虫。

常用命令

# 查看使用那些规则
sudo fail2ban-client status

# 列出被禁止的IP
sudo iptables -nvL

# 移除被禁止的IP
sudo iptables -D f2b-nginx-404 -s 6.6.6.6 -j REJECT

参考链接
https://linux.cn/article-6718-1.html

https://serverfault.com/questions/849854/fail2ban-blocking-behaviours-depending-on-the-status-code

参考

标签: Nginx, Linux, fail2ban

添加新评论