Ubuntu

如何使用 iptables 只允許埠的子網

  • February 19, 2015

我要做的是將任何數據包丟棄到特定的 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,這會將規則置於規則列表的頂部,這意味著它肯定會被遍歷。

引用自:https://serverfault.com/questions/669917