最大制限を制限できますか?期間iptables
TCP接続?
iptables
数量を制限できます。同時にIPアドレスあたりのTCP接続数、次を使用して-m connlimit
IPアドレスあたりのTCP接続数を制限することもできます。新しいを使用して、時間間隔あたりのIPアドレスあたりの接続数-m hashlimit
。現在、目的の効果を得るために次の規則を使用しています。
iptables -A INPUT -m tcp -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP
iptables -A INPUT -m tcp -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-above 15/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name rtlimit -j DROP
しかし、「設定された」TCP接続を維持する方法はありますか?閉鎖後ろに最大 n
「長く続く」接続を防ぐために秒が必要ですか? (まだ「アクティブ」かどうか)
私は人々が次のように提案するのを見ました。
iptables -A INPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -m limit --limit 1/minute -j DROP
しかし、これは実際に私が望む効果を達成していないと思います。私が理解しているように、上記の規則は「確立された」接続に属するすべてのパケットを破棄します。そして受信速度は、1分あたり1つのパケットよりも「高速」です。 1分経っても接続が閉じません。
実際にこれを達成する方法はありますかiptables
?
ベストアンサー1
更新:私の答えには2つの問題があります。 1) 質問の「まだ「アクティブ」であるかどうかにかかわらず」部分に答えなかった。 2)質問は、iptables(netfilter)トレースから接続を削除するのではなく、接続エンドポイントでソケットを閉じることです。アップデートを終了します。
これには2つのオプションがあります。
オプション1 - グローバル
適切なグローバル netfilter 変数を変更して、確立されたすべての接続のアイドルタイムアウト値を制限します。
次のコマンドを使用して、現在のデフォルト値を確認します。
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
次のコマンドを使用してデフォルト値を変更します(例:600秒)。
echo 600 > /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
オプション2 - 細かい
タイムアウトポリシーを設定し、iptablesコマンドでポリシーを使用して、特定の接続に対して確立された接続のアイドルタイムアウト値を制限できます。
タイムアウトポリシーを設定します。
nfct add timeout nam1 inet tcp established 600
iptables ルールにこのポリシーを適用します。
iptables -I PREROUTING -t raw -p tcp -j CT --timeout nam1
iptables -I OUTPUT -t raw -p tcp -j CT --timeout nam1
debian / ubuntuの同じ名前(nfct)パッケージで提供されているnfctツールをインストールする必要があるかもしれません。
追加情報
man iptables-extensions
CT ターゲットに関する一部の情報を表示します。
man nfct
リクエストした情報に近い例を示します。 (名前が4文字を超えると、タイムアウトポリシーを使用するのに問題がある可能性があります。)
conntrackツールは、接続内のさまざまなイベント(たとえばconntrack -E -p tcp
)から発生する状況を追跡するのに役立ちます。