Iptables

iptables“最近”模組的設置

  • October 24, 2019

使用iptables recent模組時,我可以在這裡看到模組設置:

ls -1 /sys/module/xt_recent/parameters/

並列出特定參數的設置:

cat /sys/module/xt_recent/parameters/ip_list_tot
100

我也知道我可以在載入模組時更改預設值。

我的問題是,當列表達到 “ip_list_tot” 的大小時會發生什麼?最近的模組是否停止添加新的 IP 地址,或者它是否“輪換”舊的並用新的替換它們?

我查看了幫助,但找不到任何解釋

iptables -m recent --help

另外,在生產環境中,“ip_list_tot”的合理大小是多少,我想阻止有問題的 IP?預設的 ip_list_tot 大小 100 在我看來小得離譜。如果我將其設置為 ,我會遇到任何負面影響10'000嗎?

在閱讀(非常快)原始碼後,我會說舊條目已被刪除:

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 是列表中的最後一個或者不是列表中的 t(可能經常出現):

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

儘管如此,我想核心中的鍊錶實現得很好,性能和速度是要求。

最後,我建議您進行基準測試……如果可能的話。

引用自:https://unix.stackexchange.com/questions/548013