내 운영 환경은 tomcat7 및 postgres9.2가 설치된 CentOS 6.3입니다. Tomcat에는 단 하나의 웹 애플리케이션이 배포되어 localhost에서 postgres로의 연결을 설정하려고 합니다. 다음은 /etc/sysconfig/iptables의 내용입니다.
#Filter table
*filter
:INPUT DROP [9:2530]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [88:11968]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8443 -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
COMMIT
#NAT TABLE
*nat
:PREROUTING ACCEPT [129:7557]
:POSTROUTING DROP [1:108]
:OUTPUT ACCEPT [1:108]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
COMMIT
Tomcat은 https만 허용하고 포트 8443에서 요청을 수신합니다. 현재 포트 443에서 8443으로 요청을 전달하므로 사용자는 URL에 포트 번호를 지정할 필요가 없습니다. 브라우저를 통해 웹 페이지에 쉽게 접근할 수 있지만 웹 애플리케이션을 실행할 수는 없습니다. tomcat 로그에 따르면, netstat 출력에 postgres가 127.0.0.1:5432에서 요청을 수신하는 단계에 있다고 표시되어도 최대 절전 모드는 postgres와의 연결을 설정할 수 없습니다. 새로운 방화벽 구성을 알아냈을 때 이 모든 일이 일어나기 시작했습니다. 내 생각은 다음 줄입니다
-A INPUT -i lo -j ACCEPT
Tomcat webapp에서 postgres로의 로컬 연결을 처리해야 하지만 그렇지 않은 것 같습니다. 다시 연결을 허용하려면 방화벽 구성에서 무엇을 변경해야 하는지 알아야 합니다.
답변1
표준 NIC(eth0)에서 루프백 인터페이스(lo)로의 포트 전달은 기본적으로 비활성화되어 있습니다. 이 기능을 활성화해야 합니다.
$ sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1