ポートスキャンを防ぐために、「最も近い」モジュールを使用しています。たとえば、次のようになります。
-A INPUT -i eth0 -m recent --name PORTSCAN --update --seconds 60 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m recent --name PORTSCAN --set -j DROP
この--update
オプションは、名前とは異なり(たとえば、古い値を新しい値に更新するなど)、最後にマークされた項目を更新せずに他の項目を追加します。私の簡単な設定では、最後の項目だけに興味があります。パケットの完全な履歴(統計など)を表示する必要はありません。
最後に、このパケットのみをアーカイブする方法はありますか?以前はオプションがありましたが、--reap
私が知っている限り削除されました。
私が心配するのは、使用量が多いサーバーではPORTSCANリストが非常に急速に大きくなる可能性があることです。限界が何であるかはわかりませんが、限界があることは確かです。
答え1
iptablesのマニュアルページ、特にモジュールセクションを見ると、必要な制御を提供するrecent
ように見えるいくつかのパラメータがあります。
iptablesrecent
モジュールセクションからの抜粋
モジュール自体は、デフォルトで表示されるパラメータを受け入れます。
ip_list_tot=100 Number of addresses remembered per table. ip_pkt_list_tot=20 Number of packets per address remembered.
recent
したがって、これら2つのパラメータに基づいて、モジュールが「記憶」するIPアドレスの数とパケット数を制御できます。
これはカーネルモジュールなので、これらの設定を適用するには、モジュールがロードされたときに次のように設定する必要があります。
/sbin/modprobe ipt_recent ip_list_tot=2000 ip_pkt_list_tot=255
私のFedora 14システムでは、モジュールが実際に呼び出され、次のいずれかをxt_recent
使用してどのタイプの引数が利用可能かを確認できますmodinfo
。
$ modinfo xt_recent
filename: /lib/modules/2.6.35.14-106.fc14.x86_64/kernel/net/netfilter/xt_recent.ko
alias: ip6t_recent
alias: ipt_recent
license: GPL
description: Xtables: "recently-seen" host matching
author: Jan Engelhardt <[email protected]>
author: Patrick McHardy <[email protected]>
srcversion: 00B9A3AB999488BFEB4FA6A
depends:
vermagic: 2.6.35.14-106.fc14.x86_64 SMP mod_unload
parm: ip_list_tot:number of IPs to remember per list (uint)
parm: ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
parm: ip_list_hash_size:size of hash table used to look up IPs (uint)
parm: ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
parm: ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
parm: ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)
xt_recent設定の確認
このモジュールのすべての設定はここに保存されます/sys/module/xt_recent
。特に、ここに渡すパラメータはここに保存されます。
$ ls -1 /sys/module/xt_recent/parameters/
ip_list_gid
ip_list_hash_size
ip_list_perms
ip_list_tot
ip_list_uid
ip_pkt_list_tot
すべてのパラメータは、このディレクトリ内のファイルを簡単に区切ることで確認できます。たとえば、次のようになります。
cat /sys/module/xt_recent/parameters/ip_pkt_list_tot
したがって、これはパラメータのデフォルト値がip_pkt_list_tot
20であることを示します。
答え2
上記の回答に加えて、PORTSCANトラップの前に追加のBADGUYSテーブルを入力し、それを使用して後者のオーバーフローを防ぐことをお勧めします。
PORTSCAN がトリガーされると、BADGUYS 表にレコードが追加されます。
このような:
-A INPUT --name PORTSCAN --rcheck --seconds 60 --reap --hits 20 -j set_bad
-A INPUT --name BADGUYS --rcheck --seconds 3600 --reap -j noway
-A INPUT <trap case> --name PORTSCAN --set
-A set_bad --name BADGUYS --set
-A noway -p tcp -j REJECT --reject-with tcp-reset
-A noway -j DROP