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

Ограничение скорости ICMP-флуд с nftables

Я пытаюсь понять, как разрешить 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, чтобы не допустить их прием по правилам ниже.