Linux
iptables 無法通過第二個介面允許 ssh
我遇到了一個問題,因為我無法從我的第二個介面 (eth2) 使用我目前的防火牆規則執行 SSH 傳出連接。
我嘗試連接的機器有兩個名為 eth1 和 eth2 的介面。它們的 IP 地址分別為 192.168.0.18(遮罩 255.255.255.0)和 10.30.25.1(遮罩 255.255.255.248)。
這是我的 iptables 規則集的輸出:
# iptables -L -v -n Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 26 4970 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 245 18008 ACCEPT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT udp -- eth1 * 0.0.0.0/0 0.0.0.0/0 udp spt:53 dpts:1024:65535 0 0 ACCEPT tcp -- eth1 * 192.168.0.0/24 0.0.0.0/0 tcp spts:1024:65535 dpt:22 state NEW 82 12248 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- eth2 eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT all -- eth1 eth2 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 26 4970 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 173 20104 ACCEPT all -- * eth1 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 5 300 ACCEPT all -- * eth2 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 0 0 ACCEPT udp -- * eth1 0.0.0.0/0 0.0.0.0/0 udp spts:1024:65535 dpt:53 0 0 ACCEPT tcp -- * eth1 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 1 60 ACCEPT tcp -- * eth2 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 7 564 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
使用此規則集,我可以毫無問題地從 192.168.0.18 (eth1) SSH 連接到 192.168.0.0/24 子網上的任何機器。但是,當我嘗試通過另一個介面(eth2 10.30.25.1)將伺服器連接到 10.30.25.0/29 上的機器時,它無法建立連接。
然後我嘗試刷新規則並執行以下操作:
iptables --flush iptables -t nat --flush iptables -t mangle --flush iptalbes -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables-save
允許一切,它可以正常工作,這意味著目標機器已啟動並接受連接,並且我的路由表應該沒有問題。
route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.30.25.0 0.0.0.0 255.255.255.248 U 0 0 0 eth2 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth1 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth2 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth1
然而我顯然不想這樣做。基本上我的規則集中有問題,但我無法弄清楚。我雖然在 SSH (22) 的 OUTPUT 策略中有一個 ACCEPT 可以解決問題,但它失敗了。
我在 VMWARE 上執行 CentOS 6.5 x86_64。
您的問題是您不允許該介面上的返回半數據包。嘗試
iptables -I INPUT 3 -i eth2 -m state --state ESTABLISHED -j ACCEPT
這是有問題的規則:
245 18008 ACCEPT tcp -- eth1 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
您只允許在 eth1 介面上返回輸入流量。去掉這個限制,你會發現你在 eth2 上的傳出流量開始工作了。