CentOS - IPTables - 允许子网上的节点完全访问

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,但仍然无法连接。

答案1

感谢评论的建议和来自 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 隐身。通过为我的其中一台 VPS 添加 DNS 功能,我可以添加所有内部 IP 和外部 IP,这样我的所有内部 iptable 配置都应该按预期工作,同时仍然允许通过其公共 IP 对任何 VPS 进行远程访问。

相关内容