有沒有辦法將 0.0.0.0/0 加入 ipset 類型 hash:net,port 中?它似乎只支援 1-32 的前綴長度,但如果我希望 ipset 雜湊中的條目支援給定連接埠上的所有 ip 流量該怎麼辦?例如
ipset create testset hash:net,port
ipset add testset 0.0.0.0,22
iptables -I INPUT 1 -m set --match-set testset src, src -j ACCEPT
iptables -I INPUT 2 -j LOG --log-prefix "** FIREWALL **"
不會做任何事。 SSH 流量將到達防火牆並產生日誌。 0.0.0.0/0 不被接受為有效的CIDR 表示法,儘管他們似乎在修訂版2 中將其添加到hash:net,iface 中。於它自己的iptables 規則。但是,我特別想將連接埠儲存在哈希中,因為某些連接埠可能關心 src ip 位址,而其他連接埠則不會,而且我不想為 0.0.0.0/0 維護單獨的集合。
答案1
正確的語法是使用 0.0.0.0/0,因為 0.0.0.0 預設為 0.0.0.0/32。可惜您發現這不受支援:
# ipset add testset 0.0.0.0/0,22
ipset v7.3: The value of the CIDR parameter of the IP address is invalid
你可以做的就是在覆蓋路由時使用 OpenVPN 中使用的相同技巧:將 0.0.0.0/0 分成兩半:0.0.0.0/1 和 128.0.0.0/1:
ipset add testset 0.0.0.0/1,22
ipset add testset 128.0.0.0/1,22
筆記:
通常,對於運行當地的ssh 伺服器,iptables參數大概應該是這樣的:
iptables -I INPUT 1 -m set --match-set testset src,dst -j ACCEPT
既然我們在輸入鏈條,意義接收,src,dst
表示檢查遠端(來源)IP 和本地(目標)端口,而src,src
表示檢查遠端(來源)IP 和遠端(來源)端口。唯一的用途是允許來自遠端 ssh 伺服器的回覆流量,但這通常已經在-m conntrack --ctstate ESTABLISHED
其他地方處理過。