Iptables
允許 iptables 中的 UPnP 和 NAT-PMP 請求
我有一個帶有轉發功能的 OpenVPN 網關設置,效果很好。我的另一台機器通過它連接並到達網際網路。完成外部埠掃描,外部 VPN 地址上沒有可見埠。在網關機器上安裝了 linux-igd (upnpd)。如果我設置 iptables -P INPUT ACCEPT 它就像魅力一樣工作,埠被打開並轉發到客戶端。但我想為 UPnP 請求創建實際規則。
這就是我的 iptables 的樣子:
Chain INPUT (policy DROP) target prot opt source destination ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere Chain OUTPUT (policy ACCEPT) target prot opt source destination
所以我添加了一條日誌規則來查看從客戶端(192.168.0.6)刪除的內容:
sudo iptables -A INPUT -i eth0 -s 192.168.0.6 -j LOG --log-prefix "DROPPED: "
重新啟動 openvpn 服務和客戶端,然後日誌輸出如下:
Mar 19 07:32:55 raspberrypi kernel: [ 6954.935598] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b0:b0:40:00:40:11:08:1c SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45232 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:32:55 raspberrypi kernel: [ 6954.939366] DROPPED: IN=eth0 OUT= MAC=01:00:5e:7f:ff:fa:b8:27:eb:6b:f9:a6:08:00:45:00:00:a5:b9:6a:40:00:01:11:0f:35 SRC=192.168.0.6 DST=239.255.255.250 LEN=165 TOS=0x00 PREC=0x00 TTL=1 ID=47466 DF PROTO=UDP SPT=54192 DPT=1900 LEN=145 Mar 19 07:33:03 raspberrypi kernel: [ 6962.293068] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b2:a0:40:00:40:11:06:2c SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45728 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:33:03 raspberrypi kernel: [ 6962.626402] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b2:b6:40:00:40:11:06:16 SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45750 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:33:03 raspberrypi kernel: [ 6962.959560] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b2:be:40:00:40:11:06:0e SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45758 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:33:04 raspberrypi kernel: [ 6963.293411] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b2:d5:40:00:40:11:05:f7 SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45781 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:33:04 raspberrypi kernel: [ 6963.627138] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b2:d6:40:00:40:11:05:f6 SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45782 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10 Mar 19 07:33:11 raspberrypi kernel: [ 6970.968277] DROPPED: IN=eth0 OUT= MAC=b8:27:eb:b0:98:45:b8:27:eb:6b:f9:a6:08:00:45:00:00:1e:b3:5f:40:00:40:11:05:6d SRC=192.168.0.6 DST=192.168.0.172 LEN=30 TOS=0x00 PREC=0x00 TTL=64 ID=45919 DF PROTO=UDP SPT=51251 DPT=5351 LEN=10
所以我看到它在 UDP 1900 上進行廣播,然後嘗試連接到 UDP 5351。所以我在日誌規則之前插入了這兩個規則:
sudo iptables -I INPUT 4 -i eth0 -p udp --dport 1900 -j ACCEPT sudo iptables -I INPUT 4 -i eth0 -p udp --dport 5351 -j ACCEPT
就我所見,沒有任何東西被記錄在日誌規則中,但沒有任何東西被阻止,但 UPnP 無法正常工作。如果我只是這樣做:
sudo iptables -P 輸入接受
這一切都很好!我也嘗試過這個,或多或少與此相關的所有埠號,我可以在任何和所有文件中找到……
sudo route add -net 239.0.0.0 netmask 255.0.0.0 eth0 sudo iptables -A INPUT -i eth0 -p tcp --dport 2869 -j ACCEPT sudo iptables -A INPUT -i eth0 -p tcp --dport 5000 -j ACCEPT sudo iptables -A INPUT -i eth0 -p tcp --dport 49152:49154 -j ACCEPT sudo iptables -A INPUT -i eth0 -p udp --dport 1900 -j ACCEPT sudo iptables -A INPUT -i eth0 -p udp --dport 5351 -j ACCEPT sudo iptables -A INPUT -i eth0 -p udp --dport 5353 -j ACCEPT sudo iptables -A INPUT -i eth0 -p tcp --dport 2869 -j ACCEPT
有什麼想法或建議嗎?
所以我終於弄清楚出了什麼問題!我將輸入鏈的預設策略設置為接受。
sudo iptables -P INPUT ACCEPT
然後在我的 INPUT 鏈的底部添加這兩行:
iptables -A INPUT -j LOG --log-prefix "INPUT:DROP:" --log-level 6 iptables -A INPUT -j DROP
然後我打開了第二個 SSH 視窗並在日誌上做了一個尾巴:
tail -f /var/log/messages
我注意到的第一件事是來自 127.0.0.1 的來自 lo 介面的流量被阻止了,完全錯過了添加它。所以我添加了這個:
iptables -I INPUT 1 -i lo -j ACCEPT
然後我只是從內部一遍又一遍地執行 UPnP 請求,以查看被阻止的內容。結束了這兩個規則:
sudo iptables -A INPUT -i eth0 -p udp -m multiport --dports 1900,5351,5353 -j ACCEPT sudo iptables -A INPUT -i eth0 -p tcp -m multiport --dports 49152 -j ACCEPT
希望它可以幫助某人!