Я пытаюсь понять, как разрешить ICMP-запросы к серверу с nftables, не подвергаясь атакам флуда.
Вот моя начальная конфигурация:
table inet firewall {
chain incoming {
type filter hook input priority 0; policy drop;
# established/related connections
ct state { established, related } accept
# ICMP
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
# ICMP ping dealt with separately to rate limit
ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 1/second accept
ip protocol icmp icmp type echo-request limit rate 1/second accept
}
}
Однако затопление ping -f [IP_ADDRESS]
показывает прохождение большинства пакетов. Конечно, больше одного в секунду.
Если я удалю ct state { established, related } accept
правило Я получаю 99% потерю пакетов при попытке флудить.
Таким образом, похоже, что первый запрос устанавливает соединение, а последующие пинги соответствуют этому правилу, и, похоже, не имеет значения, поставил ли я ct
Правило после icmp
правило.
Есть ли способ разрешить установленные соединения, но по-прежнему пинги ограничения скорости?
Попробуйте это решение:
table inet firewall { chain incoming { type filter hook input priority 0; policy drop; # ICMP ping dealt with separately to rate limit ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 1/second accept ip6 nexthdr icmpv6 icmpv6 type echo-request counter drop ip protocol icmp icmp type echo-request limit rate 1/second accept ip protocol icmp icmp type echo-request counter drop # established/related connections ct state { established, related } accept # ICMP ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept } }
Вы должны явно отбрасывать пакеты, превышающие ratelimit, чтобы не допустить их прием по правилам ниже.