Iptables

iptables - 只允許訪問不同子網上的單個埠

  • July 9, 2021

我已經啟動並執行了一個 OpenVPN 伺服器,目前允許在 VPN (10.8.0.0/24) 和 LAN (192.168.2.0/24) 網路之間路由所有流量。我的 iptables 如下所示:

iptables -t filter -F
iptables -t nat -F
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -i eth0 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s '10.8.0.0/24' -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.2.26
iptables -t nat -A POSTROUTING -s '192.168.2.0/24' -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o tun0 -j SNAT --to-source 10.8.0.1

192.168.2.26 & 10.8.0.1 是 VPN-Server 上的介面。

我現在希望縮小範圍,只允許特定使用者使用特定目標。一個例子:

我希望 IP 為 10.8.0.10 的使用者只能訪問埠 8080 上的 192.168.2.100,而不能訪問 LAN 子網中的其他任何內容。經過大量的Google搜尋,我嘗試了一些 SNAT 和 DNAT 的狂野組合,但沒有找到解決方案。

如何實現上述場景?

所以我找到了解決我的問題的方法,如果有人需要並偶然發現:

我放棄了 iptables 並選擇了 ufw。

/etc/sysctl.conf:

net.ipv4.ip_forward=1

/etc/default/ufw:

DEFAULT_FORWARD_POLICY="DROP"

/etc/ufw/before.rules:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic between OpenVPN and LAN
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0 -o tun0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

這樣一來,一切都設置為路由和轉發,由於預設的“丟棄”策略,目前還沒有轉發任何內容。

如問題中所述,要將單個 IP 路由到不同子網的另一個 IP 上的埠,我只需要執行以下規則集:

sudo ufw route allow in on tun0 out on eth0 to 192.168.2.100 proto tcp port 8080 from 10.8.0.10

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