IPTABLES: 選択したネットワーク内の IP ごとに、時間単位でポート 25 へのアクセスを制限する方法

IPTABLES: 選択したネットワーク内の IP ごとに、時間単位でポート 25 へのアクセスを制限する方法

私はメール サーバーを所有していますが、送信/受信ボタンを 1 秒以内に同時にクリックする悪い癖のあるユーザーがいて、ログに不要な情報が大量に蓄積されてしまいます。

ネットワーク内の各 IP アドレス (内部 IP アドレス) が 30 秒に 1 回メール サーバーに接続できるように制限しようとしていますが、外部 IP アドレスには適用しないでください。メール サーバーは、許可された別のメール サーバーから転送メールを受信することがあります。

iptables のマニュアルページを読んでみましたが、--connlimit-above N接続のみが制限され、時間単位では制限されないことがわかりました。

iptables または ufw を使用してこれを実行する方法を教えてもらえますか?

答え1

これはレート制限の標準的なケースです。

iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --update --seconds 30 --hitcount 2 -j DROP

ここで、あなたのLANは192.168.0.0/24そしてあなたのインターフェースはeth0そうでない場合は、それに応じて変更してください。

最初のルールはすべてを検出します新しいパケットが届くeth0LANからTCPポート25に送られ、IPアドレスが最近のリスト; 2番目のコマンドは、新しい同じポート上のパケットをチェックし、最近のリスト(- アップデート)そして、そのアドレスがリストに入力されたのが--秒 30前に、指定された数のパケットをドロップします--ヒットカウント 2に達した。

これは以下の場合にのみ適用されます。新しいパケット:正当な会話が進行中の場合、それを妨害するのではなく、別の会話の確立をブロックするだけです。この点で、私の答えはAngeloの答えと完全に異なります。

答え2

わかりました。私はこれをテストしていませんので、うまくいかない場合は事前にお詫び申し上げます (ただし、これで十分に理解できると思います):

iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -m limit --limit 1/minute -j LOG --log-prefix 'SMTP limit:'
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -j DROP

関連情報