Networking

dd-wrt:阻止VAP訪問網際網路

  • October 27, 2018

我正在嘗試為我的 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(所以不是ESTABLISHEDRELATED)。所以你只需要關心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 linkip -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 介面,但我不知道。

引用自:https://unix.stackexchange.com/questions/462055