제가 개발 중인 Java 애플리케이션이 있습니다. 나는 통제할 수 없는 외부 데이터베이스 서버를 사용합니다. 연결 오류를 시뮬레이션하고 싶지만 그럴 수 없습니다. 이 상황을 만들기 위해 iptables와 tc를 사용해 보았지만 Java 프로그램이 실행된 후 데이터베이스에 대한 쿼리를 만들 수 있습니다. 응용 프로그램을 다시 시작하면 차단이 성공합니다. 제가 이해하지 못하는 것이 있나요?
답변1
가장 먼저 이해하지 못하는 점은 iptables 규칙을 표시하지 않으면 디버깅할 수 없다는 것입니다.
즉, 잠재적인 함정이 있다고 봅니다. 하지만 물론 그것이 당신의 문제인지는 모르겠습니다.
Java 애플리케이션은 시작 시 데이터베이스에 대한 TCP 연결을 한 번 설정할 가능성이 높습니다. 방화벽이 연결 설정 패킷만 차단하고 설정된 TCP 세션( iptables -A -p tcp -m state --state ESTABLISHED,RELATED -j ALLOW
)의 일부인 패킷을 허용하는 경우 애플리케이션은 데이터베이스와 계속 통신할 수 있습니다. 통신을 차단하려면 애플리케이션을 시작하기 전에 방화벽을 설정하거나 데이터베이스 포트로 향하는 모든 TCP 패킷을 차단해야 합니다.