dd-wrt:阻止VAP訪問網際網路
我正在嘗試為我的 IOT 東西配置輔助網路。我只想允許少數設備訪問網際網路,其餘的應該被“監禁”到該網路。此外,IOT 網路上的所有設備都應該能夠訪問我的主網路上的 MQTT 伺服器。
我的設置如下:
- 韌體:DD-WRT v3.0-r34015M kongac (12/09/17) -更新的版本給我的無線連接帶來了很多麻煩。Wifi 在 10 分鐘後不斷掉線,解決它的唯一方法是重新啟動路由器。
- 硬體:Netgear R7000
我的網路配置為:
在無線 -> 基本設置下:
- 我添加了一個 VAP
- 網路配置:橋接
- AP 隔離:禁用
在設置 -> VLAN 下
- 埠 2 = VLAN15(無網橋分配)
在設置 -> 網路下
- 添加了新橋 (br2)
- 將 wl02 和 vlan15 分配給 br2
- 將 192.168.7.0/24 分配給 br2
- 為 br2 添加了 DHCP 伺服器
在設置 -> 高級路由下
- 添加了從 192.168.1.0/24 通過 br2 到 192.168.7.0/24 的路由
如果我不添加任何防火牆規則,我可以從主網路訪問我的物聯網網路上的設備,如果我要連接到我的物聯網網路,我可以瀏覽網頁。
經過一番搜尋,我添加了這些防火牆規則(似乎 dd-wrt 總是在規則前面,所以需要先輸入 DROP ):
iptables -I FORWARD -i br2 -j DROP iptables -I FORWARD -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m state --state NEW -j ACCEPT iptables -I FORWARD -i br0 -o br2 -m state --state NEW -j ACCEPT
因此,
- 物聯網 -> 網際網路 = 拒絕
- 主要 -> IOT = 拒絕
- 物聯網 -> 192.168.1.38:1883 = 拒絕
我確定我缺少 iptables 的某些內容,但不確定是什麼。
此外,是否可以安全地假設添加:
iptables -I FORWARD -i br2 -o br0 -s 192.168.7.5 -m state --state NEW -j ACCEPT
將允許 192.168.7.5 訪問網際網路?
非常感謝任何指導。
更新:請求命令的輸出(帶有編輯的 WAN IP):
root@DD-WRT:~# ip -br link root@DD-WRT:~# ip -4 -br address root@DD-WRT:~# ip route default via 73.70.220.1 dev vlan2 X.X.X.X/23 dev vlan2 proto kernel scope link src X.X.X.X 127.0.0.0/8 dev lo scope link 169.254.0.0/16 dev br0 proto kernel scope link src 169.254.255.1 172.16.0.0/24 via 172.16.0.1 dev vlan3 172.16.0.0/24 dev vlan3 proto kernel scope link src 172.16.0.3 192.168.1.0/24 via 192.168.1.1 dev br0 scope link 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.1 192.168.7.0/24 via 192.168.7.1 dev br2 scope link 192.168.7.0/24 dev br2 proto kernel scope link src 192.168.7.1 192.168.15.0/24 dev br1 proto kernel scope link src 192.168.15.1 root@DD-WRT:~# ip rule 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
第一件事:
-I
意味著在頭部插入,即prepend。用於-A
在末尾追加。-A
如果您不查看之前可能已經放置的其他 iptables 規則,*則實際上可能無法按預期工作。*因此,讓我們繼續使用-I
,但在選擇插入位置並按照通常的順序設置規則之後增加行號。您的問題是關於處理有狀態的規則。conntrack 流
NEW
與第一個數據包一起使用。任何回複數據包都不會是新的,但會啟動該ESTABLISHED
狀態。你的規則只允許NEW
狀態,所以沒有任何東西可以正常工作。不知道所有其他規則或網路設置將導致此答案中可能出現次優/重複規則,但無論如何它應該可以工作。
首先添加通用規則,以允許回復以及相關(例如:對於
udp
錯誤icmp
或幫助模組,如ftp
數據)數據包,每個方向一個規則。這些規則不會單獨允許流量,因為根據定義,新流量總是NEW
(所以不是ESTABLISHED
或RELATED
)。所以你只需要關心NEW
狀態(-m conntrack --ctstate
被取代-m state --state
所以你應該在可用的情況下使用它,否則只需將所有這些字元串替換回-m state --state
):iptables -I FORWARD 1 -i br2 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD 2 -i br0 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
現在您可以(僅)處理新流程:
請注意,上一條規則和下一條規則可以僅組合在一個具有所有 3 種狀態的規則中,或者根本不進行狀態檢查,因為那將始終是這 3 種狀態之一(好的,在無效旁邊)
iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD 4 -i br2 -o br0 -d 192.168.1.38 -p tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD 5 -i br2 -j DROP
對於您的最後一個問題,我懷疑您寫的內容是否允許訪問 Internet,因為 Internet 可能無法在
br0
的界面上使用。它將在具有公共 IP 的介面上可用。這應該可以在不知道它是哪個介面的情況下工作,只需不說明它(在前面的命令之後執行,或相應地重新排序數字。iptables-save
並且iptables-restore
是你的朋友):iptables -I FORWARD 5 -o br2 -d 192.168.7.5 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD 6 -i br2 -s 192.168.7.5 -m conntrack --ctstate NEW -j ACCEPT
但是問題中添加的那些缺失資訊肯定會有所幫助
ip -br link
:ip -4 -br address
;ip route
;ip rule
(並且可能iptables-save
)。然後規則可能會變得更加通用,而不會降低安全性。更新:
mac
匹配以匹配 MAC 地址。可以匹配 MAC 地址而不是 IP。此資訊只能用作來源,並且僅在正確的網路中才有意義。所以
-o br2
不能用來匹配MAC。讓我們將上面的規則 5 替換為更通用的規則(這對於安全性來說仍然可以)。用於替換-R
上面的規則 5 和 6,請調整(再次:很方便):iptables-save
iptables -R FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -R FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT
最後你會得到:
iptables -I FORWARD 1 -i br2 -o br0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD 2 -i br0 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD 3 -i br0 -o br2 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD 4 -d 192.168.1.38/32 -i br2 -o br0 -p tcp -m tcp --dport 1883 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD 5 -o br2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD 6 -i br2 -m mac --mac-source 02:03:04:05:06:07 -m conntrack --ctstate NEW -j ACCEPT iptables -I FORWARD 7 -i br2 -j DROP
第五個是第二個的超集,只是因為可能應該在規則中添加 WAN 介面,但我不知道。