2.9. nftables を使用した接続の量の制限
nftables
を使用して、接続の数を制限したり、一定の数の接続の確立を試みる IP アドレスをブロックして、システムリソースを過剰に使用されないようにします。
2.9.1. nftables を使用した接続数の制限
nft
ユーティリティーの ct count
パラメーターを使用すると、管理者は接続数を制限することができます。
前提条件
-
example_table
にベースのexample_chain
が存在する。
手順
IPv4 アドレスの動的セットを作成します。
# nft add set inet example_table example_meter { type ipv4_addr\; flags dynamic \;}
IPv4 アドレスから SSH ポート (22) への 2 つの同時接続のみを許可し、同じ IP からのすべての接続を拒否するルールを追加します。
# nft add rule ip example_table example_chain tcp dport ssh meter example_meter { ip saddr ct count over 2 } counter reject
オプション: 前の手順で作成したセットを表示します。
# nft list set inet example_table example_meter table inet example_table { meter example_meter { type ipv4_addr size 65535 elements = { 192.0.2.1 ct count over 2 , 192.0.2.2 ct count over 2 } } }
elements
エントリーは、現時点でルールに一致するアドレスを表示します。この例では、elements
は、SSH ポートへのアクティブな接続がある IP アドレスを一覧表示します。出力には、アクティブな接続の数を表示しないため、接続が拒否された場合は表示されないことに注意してください。
2.9.2. 1 分以内に新しい着信 TCP 接続を 11 個以上試行する IP アドレスのブロック
1 分以内に 11 個以上の IPv4 TCP 接続を確立しているホストを一時的にブロックできます。
手順
ip
アドレスファミリーを使用してfilter
テーブルを作成します。# nft add table ip filter
input
チェーンをfilter
テーブルに追加します。# nft add chain ip filter input { type filter hook input priority 0 \; }
denylist
という名前のセットをfilter
テーブルに追加します。# nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }
このコマンドは、IPv4 アドレスの動的セットを作成します。
timeout 5m
パラメーターは、nftables
が、セットが古いエントリーで一杯にならないように、5 分後にエントリーを自動的に削除することを定義します。1 分以内に 11 個以上の新しい TCP 接続を確立しようとするホストのソース IP アドレスを
denylist
セットに自動的に追加するルールを追加します。# nft add rule ip filter input ip protocol tcp ct state new, untracked add @denylist { ip saddr limit rate over 10/minute } drop
関連情報