Nginx的配置来过滤HTTP洪水(Config of nginx to filter http f

2019-06-27 21:56发布

一个有一个HTTP洪水我的服务器上,没有那么多的疑问,但无论如何。 在日志查询

95.55.237.3 - - [06 /月/ 2012:14:38:23 0400] “GET / HTTP / 1.0” 200 35551 “ - ” “的Mozilla / 5.0(视窗; U; Windows NT的6.1;恩-US)” “ - ” | “ - ” 93.78.44.25 - - [06 /月/ 2012:14:38:23 0400] “GET / HTTP / 1.0” 200 36051 “ - ”“的Mozilla / 5.0(视窗; U; Windows NT的6.1;烯美国)”, “ - ” | “ - ” 46.118.112.3 - - [06 /月/ 2012:14:38:23 0400] “GET / HTTP / 1.0” 200 35551 “ - ”“的Mozilla / 5.0(视窗; U; Windows NT的6.1;烯美国)”, “ - ” | “ - ”

我在nginx的配置尝试这种过滤器

server {
    .....
    set $add 1;
    set $ban '';

###### Rule 1 ########
if ($http_referer = '-' ) {
    set $ban $ban$add;
}
if ($request_uri = '/') {
    set $ban $ban$add;
}

if ($http_user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)') {
    set $ban $ban$add;
}

if ($ban = 111) {
    return 444;
}
######################
......
}

但STIL BOT查询得到200 OK。 有人能帮忙吗?

Answer 1:

尝试添加类似下面的指令,以你的配置,以防止洪水HTTP:

http {
  limit_conn_zone $binary_remote_addr zone=conn_limit_per_ip:10m;
  limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;

  server {
    limit_conn conn_limit_per_ip 10;
    limit_req zone=req_limit_per_ip burst=10 nodelay;
  }
} 

见http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html和http://nginx.org/en/docs/http/ngx_http_limit_req_module.html更多信息

有以下所有指令http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate

注: http://www.botsvsbrowsers.com/details/504401/index.html说,上述用户代理是不是一个已知的机器人



Answer 2:

您还可以阻止特定的IP,作为额外的措施。

http{
  deny 127.45.4.1;
  ...
}

或者把封锁IP地址在不同的文件

http{
  include blockedips.conf
  ...
}

blockedips.conf

deny 1.12.4.5;


Answer 3:

您还可以阻止特定国家

http{
   geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default yes;
        FK no;
        FM no;
        EH no;
    }
}

GeoIP.dat可以从下载http://dev.maxmind.com/geoip/geoip2/geolite2/ (我不与下属的MaxMind)



文章来源: Config of nginx to filter http flood
标签: nginx ddos