iptables“最近”模块的设置

iptables“最近”模块的设置

使用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

尽管如此,我认为内核中的链表实现得很好,以性能和速度为要求。

总而言之,如果可能的话,我建议您进行基准测试。

相关内容