使用iptables
recent
模块时,我可以在这里看到模块设置:
$ ls -1 /sys/module/xt_recent/parameters/
并列出特定参数的设置:
$ cat /sys/module/xt_recent/parameters/ip_list_tot
100
我还知道我可以在加载模块时更改默认值。
我的问题是,当列表达到 的大小时会发生什么ip_list_tot
?
模块是否recent
停止添加新的 IP 地址,或者是否“轮换”旧的 IP 地址并用新的 IP 地址替换它们?
我查看了帮助,但找不到任何解释
iptables -m recent --help
ip_list_tot
另外,在生产环境中,我想阻止违规 IP,合理的大小是多少?默认ip_list_tot
大小 100 在我看来小得可笑。如果我将其设置为 ,我会遇到任何负面影响吗10'000
?
答案1
读完后(非常快)源代码,我想说旧的条目已被删除:
if (t->entries >= ip_list_tot) {
e = list_entry(t->lru_list.next, struct recent_entry, lru_list);
recent_entry_remove(t, e);
}
要增大该值,可以在加载模块时手动设置该参数:
~$ sudo modinfo -p xt_recent
ip_list_tot:number of IPs to remember per list (uint)
ip_list_hash_size:size of hash table used to look up IPs (uint)
ip_list_perms:permissions on /proc/net/xt_recent/* files (uint)
ip_list_uid:default owner of /proc/net/xt_recent/* files (uint)
ip_list_gid:default owning group of /proc/net/xt_recent/* files (uint)
ip_pkt_list_tot:number of packets per IP address to remember (max. 255) (uint)
~$ sudo modprobe xt_recent ip_list_tot=10000
~$ sudo cat /sys/module/xt_recent/parameters/ip_list_tot
10000
recent
在卸载/加载之前,请确保该模块未在使用中(禁用防火墙或至少禁用使用匹配的规则)。
要使此设置持久,您可以在 /etc/modprobe.d/xt_recent 下放置一个包含以下内容的文件:
options xt_recent ip_list_tot=10000
(请注意,此方法可能不起作用,并且可能会根据您的发行版进行调整)。
至于如果因此增加这个参数值可能会遇到的性能问题,很难说。这取决于您的硬件、系统上运行的其他任务等。
仍然基于阅读源代码和我自己的开发背景,我想说,您可能担心的主要事情是引入延迟,例如,如果当前测试的 IP 是列表中的最后一个或者不在列表中(可能经常出现):
static struct recent_table *recent_table_lookup(struct recent_net *recent_net,
const char *name)
{
struct recent_table *t;
list_for_each_entry(t, &recent_net->tables, list)
if (!strcmp(t->name, name))
return t;
return NULL;
}
考虑到x
的复杂性list_for_each_entry() + strcmp()
,将 `ip_list_tot̀ 设置为一个巨大值的额外“成本”是浏览列表的时间。
最终复杂性可能在1 * x
和之间变化ip_list_tot * x
。
尽管如此,我认为内核中的链表实现得很好,以性能和速度为要求。
总而言之,如果可能的话,我建议您进行基准测试。