问题
我正在尝试配置 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。