导语:近期处理一件关于黑石服务器安全组配置的问题,分享给大家!
【问题描述】
用户在一台黑石服务器(10.11.7.4)上部署区块链业务,由于业务需求本机需要访问自身业务,需要连接 10.11.7.4 的 8053 端口通,
用户联调测试发现:
1)无安全组时,telnet 10.11.7.4 通;
2)有安全组且全放通时,telnet 10.11.7.4 通;
3)有安全组且开启上述配置后,telnet 127.0.0.1 通;telnet 10.11.7.4 不通。
【用户需求】
1)了解开启安全组不通的原因;
2)保证安全组最后一条不放通的情况下,可以让 telnet 10.11.7.4 通。
【原因分析】
经定位排查发现,8053 端口对应的是IPv6地址,所以:
1)telnet 10.11.7.4 IPv4地址 8053端口不通是符合预期的,且验证 iptables 临时全放开的情况下,telnet 10.11.7.4 8053 也是不通的,
2)telnet 127.0.0.1 8053端口通,因为环回地址有跳转功能,可以将telnet IPv4地址的端口跳转到IPv6地址的端口,
【解决方案】
经定位分析,端口 8053 出站的时候做了 DNAT配置,具体信息如下:
1)黑石服务器 CentOS 操作系统默认 IPv6 暂未打开端口复用, 但受具体应用调度,
[root@blockchain-3 ~]# cat /proc/sys/net/ipv6/bindv6only
0
2)根据用户配置,调整了三条 iptables 规则:
#-A DOCKER ! -i br-35117a776197 -p tcp -m tcp --dport 8053 -j DNAT --to-destination 172.18.0.2:7053 注释掉了;
-A BMSG-D35YKD55-INPUT -p tcp -j DROP 打开(保持)
-A BMSG-D35YKD55-OUTPUT -j DROP 打开(保持)
3)调整配置后测试, telnet 10.11.7.4 8053 通:
[root@blockchain-3 ~]# telnet 10.11.7.4 8053
Trying 10.11.7.4...
Connected to 10.11.7.4.
Escape character is '^]'.
【综上所述】
该黑石服务器,安全组与iptables问题,涉及如下两个场景:
非本机器访问 10.11.7.4 8053端口 通;本机器访问 10.11.7.4 8053端口 不通;
1)非本机器(如:10.11.7.3)访问 10.11.7.4 8053端口 通
由于不是本机自己访问自己,数据包出口走 forword postrouting,进而从bond1网卡出,
【去程数据包匹配规则】
-A DOCKER ! -i br-35117a776197 -p tcp -m tcp --dport 8053 -j DNAT --to-destination 172.18.0.2:7053
【回程数据包匹配规则】
-A FORWARD -o br-35117a776197 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
【由于做了NAT转化匹配到了 172.18.0.0 这条规则】
-A POSTROUTING -s 172.18.0.0/16 ! -o br-35117a776197 -j MASQUERADE
2)本机器(10.11.7.4) 访问 10.11.7.4 8053端口 不通
由于是本机自己访问自己,数据包出口走 output postrouting,
【去程数据包匹配规则】
-A DOCKER ! -i br-35117a776197 -p tcp -m tcp --dport 8053 -j DNAT --to-destination 172.18.0.2:7053
【回程数据包匹配规则】
-A FORWARD -o br-35117a776197 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
【匹配到output规则,排障时加入该条规则后,10.11.7.4 访问 10.11.7.4 才通)
-A BMSG-D35YKD55-OUTPUT -d 172.18.0.0/16 -j ACCEPT
【全文完】