Ubuntu
如何使用 iptables 只允許埠的子網
我要做的是將任何數據包丟棄到特定的 UDP 埠,但來自我的安全子網 10.8.0.0/24 的數據包除外。
iptables -t nat -A --src 10.8.0.0/24 -p udp --destination-port 63210 -j ACCEPT
我收到此錯誤:
Bad argument: 10.8.0.0/24
我不明白為什麼這不起作用…
- 為什麼這個命令說 IP 是錯誤的參數?
- 如何在子網外丟棄任何其他數據包?
- 我應該使用 NAT 表嗎?
- 如何做到這一點?
我找到了這樣的解決方案:
更新
iptables -N xchain iptables -A xchain --source 10.8.0.0/24 -j ACCEPT iptables -A xchain -j DROP iptables -I INPUT -p udp --dport 63210 -j xchain
應用後,我無法從任何 ip 訪問埠…
問題 我在 tun0 介面上設置了 OpenVPN 伺服器,將數據包轉發到 eth0,如下所示:
iptables -I FORWARD -i tun0 -o eth0 \ -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \ -j ACCEPT iptables -t nat -I POSTROUTING -o eth0 \ -s 10.8.0.0/24 -j MASQUERADE
問題是,如何擷取 tun0 流量並過濾它,而不是 eth0,IP 變得真實。
在第一個範例中,您使用的是不正確的“–src”,您應該使用–source 或-s。
在第二個範例中,您正在創建名為“xchain”的新鏈,並在那裡過濾數據包。但是,如果您不將來自其他鏈的數據包指向 xchain,則這些過濾器將永遠不會匹配。
此外,您已將數據包從 INPUT 鏈發送到 xchain:
# iptables -I INPUT -j xchain
此規則只會將目標為執行 iptables 的主機的數據包發送到 xchain。如果您的主機是網路路由器,您還應該從 FILTER 鏈發送數據包:
# iptables -I FILTER -j xchain
注意:我已將您的 -A 更改為 -I,這會將規則置於規則列表的頂部,這意味著它肯定會被遍歷。