私はメール サーバーを所有していますが、送信/受信ボタンを 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