指定端口时 iptables 不允许环回

指定端口时 iptables 不允许环回

我正在尝试配置 iptables 以允许来自远程连接的连接访问端口 27017 上的 mongodb。以下是我的规则

  ACCEPT     tcp  --  any    any     anywhere  anywhere    tcp dpt:27017

*reject_all_else here*

这对于远程连接来说效果很好,但在环回接口上连接失败。在下面添加端口不起作用。

iptables -I INPUT 1 -i lo -p tcp --dport 27017 -j ACCEPT

但允许所有环回而不指定端口则可以。环回是否会更改端口或执行其他奇怪的操作?

iptables -I INPUT 1 -i lo -p tcp -j ACCEPT

下面是 tcmdump

[root@localhost ~]# tcpdump -i lo -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
17:19:49.528039 IP 127.0.0.1.59372 > 127.0.0.1.27017: Flags [S], seq 2525021556, win 43690, options [mss 65495,sackOK,TS val 10984445 ecr 0,nop,wscale 7], length 0
20:57:14.735029 IP 127.0.0.1.27017 > 127.0.0.1.59372: Flags [S.], seq 1048378415, ack 2525021557, win 43690, options [mss 65495,sackOK,TS val 10984445 ecr 10984445,nop,wscale 7], length 0
17:19:49.528102 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable - admin prohibited, length 68
17:19:50.531012 IP 127.0.0.1.59372 > 127.0.0.1.27017: Flags [S], seq 2525021556, win 43690, options [mss 65495,sackOK,TS val 10985448 ecr 0,nop,wscale 7], length 0
22:09:02.588230 IP 127.0.0.1.27017 > 127.0.0.1.59372: Flags [S.], seq 1064049928, ack 2525021557, win 43690, options [mss 65495,sackOK,TS val 10985448 ecr 10985448,nop,wscale 7], length 0
17:19:50.531066 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable - admin prohibited, length 68
17:19:52.535030 IP 127.0.0.1.59372 > 127.0.0.1.27017: Flags [S], seq 2525021556, win 43690, options [mss 65495,sackOK,TS val 10987452 ecr 0,nop,wscale 7], length 0
00:32:29.704695 IP 127.0.0.1.27017 > 127.0.0.1.59372: Flags [S.], seq 1095362915, ack 2525021557, win 43690, options [mss 65495,sackOK,TS val 10987452 ecr 10987452,nop,wscale 7], length 0
17:19:52.535109 IP 127.0.0.1 > 127.0.0.1: ICMP host 127.0.0.1 unreachable - admin prohibited, length 68

答案1

与看起来的情况相反,问题不在于连接到服务:问题在于响应。

我猜你的 Netfilter 配置缺少这个重要的标准规则:

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED

答案2

根据豪克的回答,以下内容对我有用。

iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT

mongo 能够通过 INPUT 规则到达 mongod,但正如 Hauke 指出的那样,来自 mongod 的响应被过滤(与远程连接相反,因为所有出站流量都是允许的)。

相关内容