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

Блокировать пинг с сервера с помощью iptables на основе количества пакетов

Я пытаюсь заблокировать эхо-запросы icmp с сервера, если количество пакетов превышает 2 в секунду (количество пакетов уменьшено для тестирования). Я пробовал эти 2 правила по отдельности, но они, похоже, не помогают:

iptables -A INPUT -p icmp --icmp-type echo-request -m recent --update --seconds 1 --hitcount 2 -j DROP

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 2/s --limit-burst 2

что не так с этими правилами?

Я отправляю пинг с другого сервера, используя команду ниже, но пинг продолжает получать ответы -

ping -n -i 0.2 192.168.2.86

также, когда я проверяю вывод iptables -nvL - количество пакетов для правила не увеличивается ...

Используемая машина - CentOS 6.8

Некоторый прогресс: я добавил правило сброса по умолчанию в конце таблицы:

iptables -A INPUT -p icmp -m icmp -j DROP

а затем добавление этого правила сбросило пинги, которые превысили лимит

iptables -A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 2/second -j ACCEPT -m comment --comment "icmprule1"

по-прежнему не может полностью заблокировать сервер.

Вот и все, добавляем вторичную цепочку ICMPSCAN (и помещаем правило перехода в первую позицию цепочки INPUT):

iptables -N ICMPSCAN
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN 
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource 
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j DROP

Примечание: оба правила установки / обновления могут быть установлены вместо этого в INPUT без вторичного, но я предпочитаю помещать такие правила в отдельные цепочки.

Примечание 2: после --set можно добавить дополнительное правило для регистрации события ...

динамический черный список:

Теперь, чтобы добавить постоянный динамический черный список на основе последнего триггера Hitcount, мы можем воспользоваться функцией ipset. ipset доступен для centos 6.x, а iptables поддерживает ipset, но вам может потребоваться сначала установить его.

Вот правила iptables / ipset в соответствии с вашими потребностями:

iptables -F ICMPSCAN
iptables -N ICMPSCAN
ipset -N banned_hosts iphash
iptables -I INPUT -p icmp -m icmp --icmp-type echo-request -j ICMPSCAN 
iptables -A ICMPSCAN -m recent --set --name badicmp --rsource 
iptables -A ICMPSCAN -m recent --update --seconds 1 --hitcount 2 --name badicmp --rsource -j SET --add-set banned_hosts src
iptables -A ICMPSCAN -m set --set banned_hosts src -j DROP

Вы можете просмотреть текущее содержимое заблокированного списка с помощью ipset list, например:

# ipset list banned_hosts
Name: banned_hosts
Type: hash:ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8284
References: 2
Members:
192.168.122.1

и управлять списком набора, например, чтобы удалить IP-адрес, например:

# ipset del banned_hosts 192.168.122.1

См. Также эту страницу: http://www.linuxjournal.com/content/advanced-firewall-configurations-ipset