Назад | Перейти на главную страницу

Блокировать прямой доступ к порту 80 на IP по умолчанию с помощью iptables?

Я использую 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

Дальнейший трюк с Nginx с использованием заголовка CloudFlare Ray-ID

Для каждого сайта, перед которым есть 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; }