ポートスキャンを検出して記録するには、次のiptablesコマンドを実行します。
iptables -A INPUT -p tcp -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 -j LOG --log-prefix "Port Scan on INPUT: "
iptables -A FORWARD -p tcp -i eth0 -m state --state NEW -m recent --set
iptables -A FORWARD -p tcp -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 -j LOG --log-prefix "Port Scan on FORWARD: "
これは素晴らしい作品です!ただし、すべての65535ポートに対してポートスキャンを実行すると、ログファイルが33MB増加しました。これは、iptablesが20番目の新しいポート接続の後に一度書き込まれ、それ以降は他のすべての接続が書き込まれるためです。
最初の20回の接続以降にのみ、または20回の接続が行われるたびに記録するには、どのタイプのコマンドを実行する必要がありますか?
答え1
私は方法を見つけた:
iptables -A INPUT -p tcp -i eth0 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 -m limit --limit 1/m --limit-burst 1 -j LOG --log-prefix "Port Scan on INPUT: "
iptables -A FORWARD -p tcp -i eth0 -m state --state NEW -m recent --set
iptables -A FORWARD -p tcp -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 -m limit --limit 1/m --limit-burst 1 -j LOG --log-prefix "Port Scan on FORWARD: "
デフォルトでは、ルールが最初にヒットしてから1分に制限されています。