Я пытаюсь заблокировать эхо-запросы 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