我正在尝试设置iptables
Ceph 集群。我目前正在为其中一台监控服务器制定规则。
监视器守护进程侦听tcp/6789
(IP 地址已删除,因为它是公共地址):
# netstat -tunlp | grep ceph-mon
tcp 0 0 X.X.X.X:6789 0.0.0.0:* LISTEN 2612/ceph-mon
如果我允许连接到 tcp 端口 6789 并删除其他所有内容,则监视器将被集群的其余部分标记为关闭:
iptables -F INPUT
iptables -A INPUT -p tcp --dport 6789 -j ACCEPT
iptables -A INPUT -j DROP
令人困惑的是,如果我删除所有到 tcp 端口 6789 的连接,集群仍然运行:
iptables -F INPUT
iptbales -A INPUT -p tcp --dport 6789 -j DROP
如果我允许与来源tcp 端口 6789 并删除集群运行的所有其他内容:
iptables -F INPUT
iptables -A INPUT -p tcp --sport 6789 -j ACCEPT
iptables -A INPUT -j DROP
这对我来说没有意义,因为守护程序正在侦听端口 6789,因此 tcp 段的目标端口应该为 6789。
如果我对源端口 6789 进行操作,tcpdump
我可以看到目标端口为 56052 且源端口为 6789 的传入数据包。这对我来说更没有意义,因为监视器服务器上的端口 56052 上没有任何监听。
我在这里错过了什么吗?我使用的是SLES12和ceph 12.2.7,FORWARD和OUTPUT链没有规则,所有链上的策略都是ACCEPT
答案1
我没有启用连接跟踪,因此当监视器尝试与其他监视器通信时,不允许通过防火墙返回响应。我添加了以下规则来解决该问题:
iptables -I INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
谢谢AB查看状态防火墙的建议。