如何通过解析nginx日志文件自动拒绝ip地址

问题描述 投票:0回答:2

我在cloudflare后面有4个网络服务器和一个负载均衡器,nginx是网络服务器,php-fpm管理php页面。我不知道如何阻止简单的 dos 攻击...

我可以使用 nginx 中的 http_limit_req 模块来检测此攻击 http://wiki.nginx.org/HttpLimitReqModule

但这根本无法阻止攻击,是的,这可以缓解攻击,但网络服务器会再次受到攻击,php-fpm 会达到 80%,一分钟后网站将无法访问。

我正在尝试找到一种方法来阻止此类请求。

我知道如何使用 nginx 阻止某些 IP 地址或某些用户代理,但我想自动执行此操作。我认为我无法使用 iptables 阻止 ip,因为请求来自负载均衡器:( 但我仍然能够使用 nginx 的 set_real_ip_from 和 real_ip_header X-Forwarded-For 检测正确的 ip 地址。

我的日志文件 (error.log) 中填充了正确的 IP 地址,如您所见:

2012/03/27 18:34:02 [错误] 31234#0: *1283 按区域“staging”限制连接,客户端:XX.XX.XX.XXX,服务器:www.xxxxxxx.com,请求:“HEAD /it HTTP/1.1”,主机:“www.xxxxxxx.com”

有人有主意可以教我如何自动屏蔽这个ip吗?

nginx dos php
2个回答
6
投票

为此使用fail2ban。它是许多不同服务的日志文件解析器,可以检测失败的登录等,然后阻止 IP 地址。

http://www.fail2ban.org

问候


0
投票

有几种技术可以减轻 nginx 中的 DDoS 攻击:

  • 限制连接数
  • 限制请求率
  • 关闭慢速连接
  • 禁止访问某些目录
  • 允许或拒绝 IP/IP 范围或用户代理
  • 在 nginx 端或您的应用程序中设置缓存

查看博客缓解 DDoS 攻击

其他一些例子:

# forbid empty header
if ($http_user_agent = "") {
    return 403; 
}

# forbid various agents & crawlers containing forbidden keyword
if ($http_user_agent ~* (java|resty|python|http-client|httpClient|curl|TestBot) ) {
    return 403; 
}

# deny/allow IP access
location / {
    deny 5.39.218.201; # deny single IP
    deny 45.146.166.0/24; # deny range 45.146.166.0 - 45.146.166.255
    #allow 10.20.30.40; # allow single IP
    #allow 10.20.30.0/24; # allow range 10.20.30.0 - 10.20.30.255
}

# deny access to specific directories
location ~ ^/(protected|framework|themes/\w+/views|wp-|feed|xmlrpc) {
    deny all;
}

要测试特定标头,请使用 ie。卷曲或 wget:

> curl -I -L -k -H "User-agent: BadBot" http://tested.site
# flags: -H = header, -L = follow redirects http->https, -k = dont verify SSL cert

> wget --user-agent "BadBot" http://127.0.0.1
© www.soinside.com 2019 - 2024. All rights reserved.