web-dev-qa-db-ja.com

nftablesによるレート制限ICMPフラッド

フラッド攻撃を受けずに、nftablesを使用してサーバーへのICMPpingを許可する方法を見つけようとしています。

これが私の初期設定です:

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]でフラッディングすると、ほとんどのパケットが通過します。確かに1秒に1つ以上。

ct state { established, related } acceptルールを削除すると、フラッディングしようとしたときに99%のパケット損失が発生します。

したがって、最初のリクエストが接続を確立し、後続のpingがそのルールに乗っているように見えます。また、ctルールの後にicmpルールを配置しても問題はないようです。

確立された接続を許可するが、それでもpingをレート制限する方法はありますか?

1
kjs3

このソリューションを試してください:

 tableinetファイアウォール{
チェーン着信{
タイプフィルターフック入力優先度0;ポリシードロップ; 
 
#ICMPpingはレート制限に個別に処理されます
 ip6 nexthdr icmpv6 icmpv6 type echo-r​​equest limit rate 1/second accept 
 ip6 nexthdr icmpv6 icmpv6 type echo-r​​equest counter drop 
 ip protocol icmp icmp type echo-r​​equest limit rate 1/second accept 
 ip protocol icmp icmp type echo-r​​equest counter drop 
 
 #確立された/関連する接続
 ct state {確立された、関連する} accept 
 
#ICMP 
 ip6 nexthdr icmpv6 icmpv6 type {destination-unreachable、packet-too-big 、time-exceeded、parameter-problem、echo-r​​eply、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を超えたパケットを明示的にドロップする必要があります。

2
Anton Danilov