6.7. nftables を使用した接続の量の制限
nftables
を使用して、接続の数を制限したり、一定量の接続の確立を試みる IP アドレスをブロックして、大量のシステムリソースを使用しないようにすることができます。
6.7.1. nftables を使用した接続数の制限
nft
ユーティリティーの ct count
パラメーターを使用すると、管理者は接続数を制限できます。この手順では、着信接続を制限する方法の基本的な例を説明します。
前提条件
- example_table にベースの example_chain が存在する。
手順6.19 nftables を使用した接続数の制限
- 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
- 必要に応じて、前の手順で作成した meter を表示します。
# nft list meter ip example_table example_meter table ip 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 アドレスを一覧表示します。出力には、アクティブな接続の数を表示しないため、接続が拒否された場合は表示されないことに注意してください。
6.7.2. 1 分以内に新しい着信 TCP 接続を 11 個以上試行する IP アドレスのブロック
nftables
フレームワークを使用すると、管理者はセットを動的に更新できます。このセクションでは、この機能を使用して、1 分以内に 11 個以上の IPv4 TCP 接続を確立しているホストを一時的にブロックする方法を説明します。nftables
は、5 分後に拒否リストから IP アドレスを自動的に削除します。
手順6.20 1 分以内に新しい着信 TCP 接続を 11 個以上試行する IP アドレスのブロック
- 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 分以内に新規 TCP 接続を 10 個以上確立しようとするホストのソース IP アドレスを
denylist
セットに自動的に追加するルールを追加します。# nft add rule ip filter input ip protocol tcp ct state new, untracked limit rate over 10/minute add @denylist { ip saddr }
denylist
セットの IP アドレスからの接続をすべて破棄するルールを追加します。# nft add rule ip filter input ip saddr @denylist drop
6.7.3. 関連情報
- 詳細は、「nftables で名前付きセットの使用」 を参照してください。