フラッド攻撃を受けずに、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をレート制限する方法はありますか?
このソリューションを試してください:
tableinetファイアウォール{ チェーン着信{ タイプフィルターフック入力優先度0;ポリシードロップ; #ICMPpingはレート制限に個別に処理されます 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 #確立された/関連する接続 ct state {確立された、関連する} 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を超えたパケットを明示的にドロップする必要があります。