원격 연결에서 포트 27017의 mongodb에 액세스할 수 있도록 iptables를 구성하려고 합니다. 내 규칙은 다음과 같습니다
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
Hauke의 답변을 바탕으로 다음이 저에게 효과적이었습니다.
iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
mongo는 INPUT 규칙을 통해 mongod에 도달할 수 있지만 Hauke가 지적했듯이 mongod의 응답은 필터링됩니다(모든 아웃바운드 트래픽이 허용되므로 원격 연결과 반대).