Имеется сайт example.com на nginx, и fail2ban с фильтром nginx-noscript.
На сайте есть страница с политикой конфиденциальности https://example.com/privacy-policy/
Поступила жалоба от Google, что эта страница недоступна (connection timed out).
Задача стоит таким образом, чтобы эта страница была доступна всем при любых обстоятельствах.
Идея для решения состоит в том, чтобы объявить в nginx еще один сервер example.com:8443, который будет проксировать эту страницу на основной сайт, а fail2ban в iptables будет добавлять редирект порта 8443 на 443.
Разрешаем порт 8443
iptables -I INPUT -p tcp --dport 8443 -j ACCEPT
ip6tables -I INPUT -p tcp --dport 8443 -j ACCEPT
Добавляем в nginx еще один сервер
server {
listen 93.184.216.34:8443 ssl http2;
listen [2606:2800:220:1:248:1893:25c8:1946]:8443 ssl http2;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
server_name example.com;
location / {
proxy_pass https://example.com/privacy-policy/;
include conf.d/proxy_params;
}
location /privacy-policy/ {
proxy_pass https://example.com/privacy-policy/;
include conf.d/proxy_params;
}
location /storage/uploads/logo/example_logo.webp {
proxy_pass https://example.com/storage/uploads/logo/example_logo.webp;
include conf.d/proxy_params;
}
access_log /var/log/nginx/example.com/access.log;
error_log /var/log/nginx/example.com/error.log;
}
cat conf.d/proxy_params
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
Также объявляем default сервер, который должен принять все необъявленные server_name
server {
listen 93.184.216.34:8443 default_server;
listen [::]:8443 default_server;
return 403;
access_log off;
error_log /dev/null crit;
}
В файле /etc/fail2ban/action.d/iptables-multiport.conf дописываем
actionstop = ...
<iptables> -t nat -F PREROUTING
actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>
<iptables> -t nat -I PREROUTING -s <ip> -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>
<iptables> -t nat -D PREROUTING -s <ip> -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
В результате получил неоднозначное поведение. Механизм иногда отрабатывает, но Load Average постоянно растет вплоть до того, что основной сайт отвечает HTTP 5xx.
Помогите, пожалуйста, найти недостатки этой конфигурации, либо подскажите альтернативную идею.