設定でnftablesの動的ブラックリスト、ABによると良い答え、ipv4、ipv6のブラックリストのコピー中にエラーが発生しました。私は次のコマンドライン(debian nftables)を実行しました(編集:元の質問は以前のバージョン0.9.0に関するものでした)。 0.9.3 APIバージョンの場合は有効です):
nft flush ruleset && nft -f /etc/nftables.conf
構成ファイルには以下が含まれます。
tcp flags syn tcp dport 8000 meter flood size 128000 { ip saddr timeout 20s limit rate over 1/second } add @blackhole_4 { ip saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter flood size 128000 { ip6 saddr timeout 20s limit rate over 1/second } add @blackhole_6 { ip6 saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter greed size 128000 { ip saddr ct count over 3 } add @blackhole_4 { ip saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter greed size 128000 { ip6 saddr ct count over 3 } add @blackhole_6 { ip6 saddr timeout 1m } drop
次のエラー応答を受け取りました。
/etc/nftables.conf:130:17-166: Error: Could not process rule: Device or resource busy
tcp flags syn tcp dport 8000 meter flood size 128000 { ip6 saddr timeout 20s limit rate over 1/second } add @blackhole_6 { ip6 saddr timeout 1m } drop
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/etc/nftables.conf:132:17-145: Error: Could not process rule: Device or resource busy
tcp flags syn tcp dport 8000 meter greed size 128000 { ip6 saddr ct count over 3 } add @blackhole_6 { ip6 saddr timeout 1m } drop
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
また、これが何を測定しているのかよくわかりませんsize
。権威あるところで見たので128000に設定されています。
編集:わかりました。私は遊び続けることにしましたが、各ipv6ルールごとに別々のメーターを生成するとエラーメッセージが消えることがわかりましたが、理由がわからないので、私の質問に答えずに代わりに他の人に任せます。より多くの知識メーターを共有できない理由の説明。以下はエラーを生成しません。
tcp flags syn tcp dport 8000 meter flood_4 size 128000 { ip saddr timeout 20s limit rate over 1/second } add @blackhole_4 { ip saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter flood_6 size 128000 { ip6 saddr timeout 20s limit rate over 1/second } add @blackhole_6 { ip6 saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter greed_4 size 128000 { ip saddr ct count over 3 } add @blackhole_4 { ip saddr timeout 1m } drop
tcp flags syn tcp dport 8000 meter greed_6 size 128000 { ip6 saddr ct count over 3 } add @blackhole_6 { ip6 saddr timeout 1m } drop
編集:この記事を書く時点でnftablesのマニュアルページでは用語を使用しmeter
ますが、nftables wiki、この用語は、特定のプロトコルタイプ(例ipv4_addr
:)を含む定義を必要とするセットを好むので、使用されなくなりました。したがって、nftablesが現在この用語をmeter
新しい用語にマッピングする場合、現在のマッピングが不可能な理由を説明します。set
との間で共有される単一プロトコル間の用語。しかし、に与えられた例はmeter
ipv4_addr
ipv6_addr
nftables wikiそれ自体も最新ではありません。dynamic
現在(nftables v0.9.0)有効なフラグタイプではないため、エラーが発生します。man
ページに戻ってset
フラグまたは入力を表示できます。どのタイプがこの目的に適しているかわかりません。constant
interval
timeout
nftables
編集:測定の「計算」形式が:(ct
接続追跡)の別のセクションに移動されているようです。これで、次の定義を作成する必要があります。
set greed_4 {
type ipv4_addr
flags constant
size 128000
}
set greed_6 {
type ipv6_addr
flags constant
size 128000
}
これにより、次の規則が似ていますが、まだエラーが発生する可能性があります。
ct state new add @greed_4 { tcp flags syn tcp dport 8000 ip saddr ct count over 3 } add @blackhole_4 { ip saddr timeout 1m } drop
ct state new add @greed_6 { tcp flags syn tcp dport 8000 ip6 saddr ct count over 3 } add @blackhole_6 { ip6 saddr timeout 1m } drop
ベストアンサー1
この試み
table inet filter {
set blackhole_4 {
type ipv4_addr
flags timeout
}
set blackhole_6 {
type ipv6_addr
flags timeout
}
set greed_4 {
type ipv4_addr
flags dynamic
size 128000
}
set greed_6 {
type ipv6_addr
flags dynamic
size 128000
}
chain input {
type filter hook input priority 0;
ct state new tcp flags syn tcp dport 8000 add @greed_4 { ip saddr ct count over 3 } add @blackhole_4 { ip saddr timeout 1m } drop
ct state new tcp flags syn tcp dport 8000 add @greed_6 { ip6 saddr ct count over 3 } add @blackhole_6 { ip6 saddr timeout 1m } drop
}
}
編集:@User1404316の説明:@Zipがおそらく(正しく)説明を要求したためです。私が知っている限り:ct
1つだけ紹介してください接続追跡ルール、この場合new tcp
接続の場合はポート8000に移動する場合(dport
例宛先ポート)、事前定義されたコレクションコレクションにソースIPv4を追加しますgreed_4
。これが起こると、ルールは最初の角かっこ条件に続きます。つまり、ソースアドレスに3つ以上のアクティブ接続がある場合、ソースIPv4は2番目の事前定義されたセットに追加されますが、blackhole_4
それを1分間だけ保持します。ルールから離れていて、接続が切断されました。
もともと投稿された回答には2行の長い行が切り捨てられましたが、それが何でなければならないと思うかを把握して上に挿入しました。良いニュースは、テストの結果、この回答に効果があるということです!
残りの疑問はコレクションセットのサイズをいつ決めるか、どれだけ大きく設定するのか気になって一応はそのままにしました。