Я использую nginx с облачной вспышкой перед моими сайтами, чтобы защитить их от атак уровня 7, но теперь некоторые злоумышленники нашли этот новый способ и ежедневно атакуют мой IP по умолчанию напрямую с помощью атаки уровня 7 вместо атаки на сайты. Я возвращаю им ответ 444, когда они открывают страницу по умолчанию на прямом IP-адресе, но атаки все же слишком велики, поэтому они делают весь сайт / сервер недоступным на несколько минут, а иногда и на более длительный период, в зависимости от атаки, которая делает Nginx занятым.
Поэтому я хотел спросить, можно ли отключить доступ к порту 80 на ip по умолчанию, не затрагивая другие мои сайты и службы? Эти атаки слишком велики, поэтому мой файл журнала для vhost по умолчанию становится 1 ГБ менее чем за 1 час, поэтому даже возврат 444 не работает, поэтому я думаю, что блокировка его на уровне брандмауэра будет лучше?
Любое предложение, как добиться этого с помощью iptables?
Я использую CentOS 6.9 с Ngiinx 1.13.
Больше идей? Все еще жду!
Вы можете настроить правила iptables так, чтобы IP-адреса CloudFlare могли достигать вашего экземпляра Nginx на порту 80 и т. Д. Это может быть достигнуто, сначала создав ipset
со списком диапазонов IPv4 CloudFlare (доступно на https://www.cloudflare.com/ips-v4), а затем применив соответствующие правила iptables для использования набора.
Что-то вроде следующего должно работать:
ipset -N cloudflare nethash
ipset -q -A cloudflare A.B.C.D/M
... [ repeat above for each entry in CF ips-v4 file ]
iptables -A INPUT -p tcp --dport 80 -m set --match-set cloudflare src -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP
Для каждого сайта, перед которым есть CloudFlare, вы также можете применить этот трюк в Nginx. Он эффективно проверяет наличие CloudFlare CF-Ray
заголовок в ожидаемом формате. Если этого НЕ существует, возвращается 444 (немедленное удаление запроса).
server {
listen A.B.C.D:80;
server_name _;
if ($http_cf_ray !~ '^[0-9a-f]{16}-[A-Z]{3}$') { return 444; }
...
Я предполагаю, что вы также можете отключить ведение журнала на этом этапе, чтобы еще больше уменьшить чрезмерный шум журнала (непроверенный):
if ($http_cf_ray !~ '^[0-9a-f]{16}-[A-Z]{3}$') { access_log off; error_log off; return 444; }