connlimit
クライアント/サービスごとの接続数を制限できます。このようなルールを、Linux カーネルと netfilter の最新バージョンで利用可能な IP セットと組み合わせるにはどうすればよいでしょうか?
答え1
という名前の ipset がありMYTESTSET
、この ipset のタイプが であるとしますhash:ip
。この ipset には IP アドレスだけが格納されます。
次に、IPset と照合し、一致後connlimit
、必要なパラメータを使用して一致拡張機能と照合します。
iptables -A INPUT -p tcp -m set --match-set MYTESTSET src -m connlimit --connlimit-above 1 --connlimit-saddr --connlimit-mask 32 -j DROP
これは次のことを行います: IPセット内の各ソースについて、接続がカウントされ、1つ以上ある場合(--connlimit-above 1)はドロップされ、接続数が制限されます。ipset内のソースごとに1 にします。(の代わりに--connlimit-upto xxx
とを使用して、逆の方法で一致させることもできます)-j ACCEPT
DROP
セット全体を考慮し、1つの接続を許可する場合ipset内のすべてのソーススイッチを0に設定します--connlimit-mask
。