Iptables
iptables“最近”模組的設置
使用
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
。儘管如此,我想核心中的鍊錶實現得很好,性能和速度是要求。
最後,我建議您進行基準測試……如果可能的話。