서버 1:
iptables 방화벽으로 보호됩니다.
서버 2:
Amazon 보안 그룹 방화벽으로 보호됩니다.
두 포트 모두에서 일부 차단된(닫힌)(열리지 않은) 포트를 ping해 보겠습니다.
서버 1:
nc -w 1 <ip> <port>
Ncat: No route to host.
서버 2:
nc -w 1 <ip> <port>
Ncat: Connection timed out.
왜 차이가 있나요?
이 두 오류 메시지의 차이점은 무엇입니까? Amazon 방화벽은 iptables 방화벽과
어떻게 다릅니까 ?
답변1
아마도 AWS 방화벽은 호스트를 찾을 수 없으며 iptables 방화벽이 전혀 응답하지 않음을 나타내는 ICMP 패킷을 반환하고 있을 것입니다.
바라보다https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#Destination_unreachable.
단순히 TCP 재설정을 보내는 것과 비교하여 ICMP "도달할 수 없음"의 장점은 다음과 같습니다.
- UDP에도 동일한 효과가 적용됩니다. UDP는 데이터 수신 의사를 표현할 수 없습니다.
- AWS의 경우에는 패킷이 호스트가 아니라 AWS 인프라에서 오기 때문에 TCP 재설정을 생성하기 위해 AWS는 보호된 호스트를 대신하여 데이터를 "위조"해야 합니다.
- 호스트에 연결할 수 없는 경우 일부 자동 포트 스캐너는 모든 포트를 시도하지 않고 포기할 수 있습니다.
답변2
"호스트에 대한 경로 없음"은 호스트가 방법조차 모른다는 것을 의미합니다.도착지정된 호스트입니다. "연결 시간 초과"는 경로를 찾았지만 원격 호스트가 연결 요청에 응답하지 않았음을 의미합니다.
방화벽에는 일반적으로 포트를 닫는 두 가지 방법이 있습니다. 하나는 실제로 끄는 것입니다. 차단하도록 설정하세요. 이로 인해 서버는 들어오는 연결을 적극적으로 거부하게 됩니다. 테스트 방법에 따라 "호스트에 대한 경로 없음", "외부 호스트에 의해 연결이 닫혔습니다" 또는 연결 설정을 시도할 때 즉시 수신되는 유사한 메시지가 표시됩니다.
또 다른 접근 방식은 포트에서 들어오는 요청을 단순히 무시하는 것입니다. 요청자는 응답을 받지 못하며 요청 시간이 초과됩니다. 이는 일부 계정에서는 포트를 "스텔스 차단"하는 것으로 알려져 있습니다.
답변3
빠른 답변, 서버 1의 방화벽은 패킷을 거부하고 서버 2의 방화벽은 패킷을 삭제합니다.
REJECT: 패킷을 거부하고 보낸 사람에게 이를 알리고 체인의 규칙 처리를 중지합니다.
DROP: 패킷을 자동으로 무시하고 체인의 규칙 처리를 중지합니다.
서버 1(iptables)은 패킷을 거부하고 ICMP 호스트에 연결할 수 없다는 메시지로 응답합니다.
REJECT all -- anywhere anywhere reject-with icmp-host-unreachable
이는 업스트림 라우터처럼 호스트에 연결할 수 없음을 의미하는 반면, 서버의 IP 주소가 응답 패킷의 소스 IP에 여전히 표시되므로 서버가 살아 있고 연결 가능하다는 것을 의미합니다.
다음을 단순히 거부하도록 규칙을 구성할 수 있습니다.
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
서버 2(Amazon 방화벽)가 패킷을 삭제하고 있어 클라이언트가 임계값 시간을 초과할 때까지 연결을 재시도한 후 "연결 시간 초과" 오류 메시지가 생성됩니다.
DROP all -- anywhere anywhere