내 Tomcat 인스턴스에서 포트 리디렉션 443에서 8443으로 작동하지 않습니다.

내 Tomcat 인스턴스에서 포트 리디렉션 443에서 8443으로 작동하지 않습니다.

저는 전용 호스트 서버에서 우분투 헤드리스 서버 18.04를 사용하고 있습니다. 호스팅 업체에는 외부 방화벽이 있으며 여기서 포트 8443,443(tcp)을 열었습니다. 내 우분투 서버에서는 iptables를 사용하고 있는데, 여기서 테이블 nat를 사용하여 포트 443을 8443으로 리디렉션했습니다.

iptables -A PREROUTING -t nat -p tcp --dport 443 -j REDIRECT --to-ports 8443

또한 인바운드 및 아웃바운드 포트 443 및 8443을 열었습니다.

example.com:8443을 사용하여 Tomcat 인스턴스에 계속 액세스할 수 있으며 문제가 없지만 example.com은 응답하지 않습니다. iptables를 보면 드롭 패킷이 보이지 않습니다. 내 Tomcat 인스턴스에서는 server.xml을 변경하지 않습니다. 커넥터는 8443을 수신합니다. 잘 모르겠습니다. 문제가 어디에 있습니까? 일부 전문가가 문제를 해결하는 데 도움을 줄 수 있기를 바랍니다.

친절한 안부

검은 수염

답변1

여기서 정말로 필요한 것은 포트 443에서 SSL 종료를 수행한 다음 포트 8443에서 Tomcat에 요청을 전달할 수 있는 역방향 프록시(예: Nginx)입니다.

SSL/TLS는 복잡하며 내 생각에는 IPTABLES를 사용하여 SSL 핸드셰이크를 처리하고 Tomcat 애플리케이션에 대한 요청을 받는 것은 좋은 생각이 아닙니다.

IPTABLES를 꼭 사용해야 한다면 서비스에 연결하여 openssl무슨 일이 일어나고 있는지 정확히 알아보세요. 여기에 결과를 보고하면 더 많은 도움을 받을 수 있습니다.

openssl s_client -connect www.example.com:443

문제는 테이블을 사용하고 있다는 것일 수도 있습니다 nat. 제가 이해한 바에 따르면 이 테이블의 규칙은 요청이 라우팅되는 경우에만 적용됩니다.~을 통해동일한 IP 주소의 다른 포트로 라우팅되는 것과 반대로 서버.

역방향 프록시는 이러한 복잡성을 많이 제거하고 부팅에 더 많은 기능(예: 속도 제한, 액세스 제어 등)을 제공합니다.

답변2

이는 Tomcat이 바인딩된 인터페이스에 따라 달라질 수 있습니다. 루프백 인터페이스에 바인딩되어 있으면 전혀 작동하지 않습니다.

대부분 REDIRECT 대상은 다음과 같은 지정된 인터페이스와 함께 사용됩니다.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8443

(eth1을 tomcat이 실행 중인 실제 네트워크 인터페이스로 바꾸십시오)

REDIRECT는 DNAT 대상에 대한 편리한 방법이므로 위의 방법이 작동하지 않으면 다음과 같이 시도해 볼 수 있습니다.

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 10.0.0.1:8443

(10.0.0.1을 컴퓨터의 IP 주소로 바꾸십시오)

관련 정보