Использование iptables для блокировки IP-адресов, которые requestили определенный HTTP-ресурс

В настоящее time я наводнен requestами к /wpad.dat – таким образом, что это похоже на атаку.

Теперь я хотел бы запустить iptables для каждого IP-адреса, который запрашивает /wpad.dat, а затем добавляет его в черный list. Есть ли способ сделать это? Это означает, что IP сможет отправлять один request на флуд, а затем – less.

Какой-нибудь опрятный способ сделать это эффективно?

Вы можете подумать, что есть другие способы блокировки IP-адресов. Например, Fail2ban предназначен для сканирования fileов журнала для данных шаблонов и временного блокирования IP-адресов.

Как уже упоминалось в комментариях, вы можете добавить тысячи IP-адресов в свой черный list. В то time как iptables работает, каждое дополнительное правило может увеличить time обработки для каждого requestа. Вы можете использовать ipset в качестве альтернативы, которая, кажется, намного быстрее, когда добавлено много IP-адресов. Для ускорения матчей требуется хеш-подход. См. Массовые блокировки IP-адресов с ipset для получения подробной информации и сравнения между iptables и ipset .


Если вы хотите использовать iptables , это, вероятно, будет завиnetworking от того, как настроен ваш веб-server. Предположим, что вы используете apache или nginx, вы можете настроить его на запуск скрипта cgi, который будет запускаться при requestе wpad.dat .

Например, если ваш website уже использует php, вы можете использовать внутреннюю переписку для запуска php-скрипта (или ruby ​​/ python / java в зависимости от языка, который вы обычно используете).

Как только скрипт запускается, просто попросите его запустить что-то вроде этого в командной строке:

 iptables -I INPUT -s {IP-HERE} -j DROP 

Скрипт должен выполняться как root, и, вероятно, не рекомендуется давать привилегии root для веб-пользователей, поэтому вы можете упаковать его в viewе сценария оболочки, chown the root и использовать setuid на нем.

Большое предупреждение: вы можете случайно заблокировать себя, если вы посетите этот ресурс, поэтому вы можете установить --dport на порт 80 или что-то в этом роде. Это, по крайней мере, позволяет блокировать ваш протокол ssh, поэтому, если вам удастся заблокировать себя, вы можете ssh на свой server и заблокировать себя.

Истечение срока действия. Поскольку постоянная locking многих IP-адресов редко является хорошей идеей, вам может потребоваться отслеживать заблокированный IP-адрес (возможно, добавить его в file журнала) и создать задание cron для периодического удаления этих IP-адресов. Вам просто нужно запустить что-то вроде:

 iptables -D INPUT -s 192.168.1.100 -j DROP 

Блокировка автоматически не является тривиальной с iptables, но вместо этого вы можете дросселировать соединения, чтобы не засорять все ваши ресурсы, добавив это правило:

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

  • Наводнение wpad.dat
  • Давайте будем гением компьютера.