iptables:最近的模块

iptables:最近的模块

我正在使用“最近”模块来防止端口扫描,例如:

-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因此,根据这两个参数,您可以控制模块将“记住”的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'ing此目录中的文件来检查,例如:

cat /sys/module/xt_recent/parameters/ip_pkt_list_tot

所以这告诉我们参数的默认值为ip_pkt_list_tot20。

答案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

相关内容