Centos
CentOS - IPTables - 允許子網上的節點完全訪問
我正在使用 linode.com,它們提供了為每個 vps 分配私有 IP 的能力。我想要做的是設置每個節點的防火牆以允許從網路上的其他節點訪問,但我似乎沒有太大的成功。
例如,我試圖允許從 server2 訪問 server1:1337,兩者的設置如下:
server1: ifcfg-eth0: DEVICE="eth0" IPADDR="1.1.1.1" NETMASK="255.255.255.0" ifcfg-eth0:0: DEVICE="eth0:0" IPADDR="192.168.132.96" NETMASK="255.255.128.0" server2: ifcfg-eth0: DEVICE="eth0" IPADDR="1.1.1.2" NETMASK="255.255.255.0" ifcfg-eth0:0: DEVICE="eth0:0" IPADDR="192.168.132.97" NETMASK="255.255.128.0"
server1 上的 IPTables 規則集:
#----- # Flush all current rules from iptables# #----- iptables -F iptables -F -t nat #----- #----- # Set access for localhost #----- iptables -A INPUT -i lo -j ACCEPT # !! Tried to allow all nodes on the subnet access to everything, but still didn't work !! iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT #----- #----- # Accept packets belonging to established and related connections #----- iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #----- # !! Tried to allow access to the port directly !! iptables -A INPUT -i eth0:0 -p tcp -s 192.168.132.0/17 --dport 1337 -j ACCEPT #----- # Lock everything down #----- iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT #-----
我確實偶然發現了幾個舊論壇,指出 iptables 無法使用該
-i eth0:0
呼叫,因為虛擬設置共享父設置,但我無法完全確認這一點。
- 編輯 -
我還將私有子網 (192.168.132.0/17) 添加到 server2,但仍然無法連接。
感謝評論的建議和來自 linode 技術支持的一些資訊,我能夠解決連接問題。
為了解決這個問題,我需要確保 server1 和 server2 都有正確的 iptables 私有子網條目:
iptables -A INPUT -s 192.168.132.0/17 -j ACCEPT
在兩台伺服器上創建此條目後,我可以 telnet 到 server2:1337(從 server1)並通過 iptables 監控字節/數據包,並看到確實,數據包正在被接受:
$ -> telnet 192.168.132.97 1337 Trying 192.168.132.97... Connected to 192.168.132.97. Escape character is '^]'. $ -> iptables -L -vn Chain INPUT (policy DROP 337 packets, 18695 bytes) pkts bytes target prot opt in out source destination 56 30019 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 53 40539 ACCEPT all -- * * 192.168.128.0/17 0.0.0.0/0
現在的問題是我使用 nginx 作為負載均衡器,它使用的是 server2 dns 條目,我假設它預設為公共 ip,它不是 iptables 規則集的一部分,也不應該是,否則我必須輸入在專用網路上的每個 ip 中允許訪問埠 1337。但是這個問題是另一個問題,因為 OP 已經解決。
- 更新 -
更新這個答案,以防其他人在未來偶然發現它。我選擇了這個解決方案; DNS 隱身。通過將 DNS 功能添加到我的一個 VPS,我可以添加所有內部 ips 和外部 ips,因此我的所有內部 iptable 配置都應按預期工作,同時仍允許通過其公共 ip 遠端訪問任何 vps。