
Я пытаюсь заблокировать 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"
все еще не удалось полностью заблокировать сервер.
решение1
Вот так, добавляем вторичную цепь 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 для регистрации события...
динамический черный список:
Теперь, чтобы добавить постоянный динамический черный список на основе триггера недавнего количества посещений, мы можем воспользоваться функцией 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