来自 127.0.0.1 的所有 nginx 访问日志(因此不能使用 fail2ban)

来自 127.0.0.1 的所有 nginx 访问日志(因此不能使用 fail2ban)

问题

我正在尝试配置 fail2ban 以使用显示的块来阻止 ddos​​ 攻击这里

基本上,它会查看所有请求,如果任何单个 IP 在 60 秒内发出超过 240 个请求,它会阻止它们两天。

但是,我 nginx 访问的所有日志都来自 127.0.0.1,这使得整个事情变得毫无意义。

什么原因导致 nginx 将所有流量记录为来自服务器?

(我在 LEMP 堆栈上运行 Drupalperusio 的 nginx 配置

答案1

由于 nginx 前面有 varnish,它会认为所有请求都来自 127.0.0.1,因为从技术上讲它们确实是这样的。

要解决此问题,请使用nginx真实ip模块从标头中挑选出客户端的 IP 地址X-Forwarded-For,Varnish 会自动将其添加到请求中(除非您告诉它不要这样做)。

nginx 配置示例如下:

set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;

答案2

如果您使用 Perusio 的配置,那么 Micheal 谈到的示例配置位于 /etc/nginx/nginx.conf 的顶级 nginx 配置中。

http {
    ## MIME types.
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ## FastCGI.
    include /etc/nginx/fastcgi.conf;

    ## Default log and error files.
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ## Use sendfile() syscall to speed up I/O operations and speed up
    ## static file serving.
    sendfile on;
    ## Handling of IPs in proxied and load balancing situations.
    set_real_ip_from 0.0.0.0/32; # all addresses get a real IP.
    real_ip_header X-Forwarded-For; # the ip is forwarded from the load balancer/proxy

您需要将 0.0.0.0/32 更改为 127.0.0.1。

相关内容