예를 들어 NAT 라우터 뒤의 컴퓨터는 Skype를 사용합니다. Skype는 포트 4000을 사용하여 서버에 패킷을 보내 다른 Skype 클라이언트와의 간접 연결을 설정합니다.
Skype가 서버로 패킷을 보냈기 때문에첫 번째, 서버는 분명히 NAT를 사용하는 라우터로 패킷을 다시 보낼 수 있습니다.
내 질문은 라우터가 NAT를 사용하고 있다는 점을 고려할 때 해당 서버가 NAT에 있는 모든 개방/전달 포트로 패킷을 보낼 수 있습니까, 아니면 포트 4000에만 패킷을 보낼 수 있습니까?
Skype 서버는 전혀 악의적이지 않다는 것을 알고 있습니다. 이는 단지 예시일 뿐입니다.
답변1
다른 사람이 시작한 수신 트래픽의 경우: 악의적인 호스트는 항상 라우터의 모든 포트(포트 스캐닝). 포트가 전달되지 않으면 라우터는 원치 않는 패킷을 삭제할지 여부를 결정하거나 연결이 유효하지 않다고 정중하게 응답할 수 있습니다. 포트가 전달된 경우 라우터 뒤의 최종 호스트에 도달합니다.
호스트에서 시작된 나가는 트래픽의 경우: Skype 릴레이 서버와 통신하는 데 사용해야 하는 원본 포트에 대한 규칙은 없습니다. 또한 최종 호스트에서 Skype는 TCP 4000을 사용할 수 있지만 NAT는 실제로 메시지를 보내기 위해 다른 포트(예: 포트 A)를 사용할 수 있습니다. Skype 서버는 포트 4000이 아닌 포트 A만 볼 수 있습니다. Skype 서버가 A 이외의 포트에 응답하는 경우 , "수신 트래픽의 경우"에 설명된 상황이 적용됩니다. Skype 서버가 포트 A에 다시 응답하면 NAT는 포트 4000으로 전송하여 이를 다시 호스트로 라우팅합니다.
명확히 하려면 NAT(Network Address Translator)가 라우터입니다. 그리고 "들어오는 트래픽의 경우" 부분을 호스트에 대한 네트워크 응답으로 혼동하지 마십시오. 이는 실제로 외부 서버가 연결을 설정하기 위해 호스트와 대화하는 첫 번째 사람임을 의미합니다.
답변2
간단한 대답은 "패킷을 보낸 포트로만 (NAT 라우터 뒤의 클라이언트에게) 패킷을 보낼 수 있다"입니다. 이것은 대체로 정확하지만 완전히 정확하지는 않습니다.
대답은 IPTables 설정 방식, 문제의 포트 및 사용된 모듈에 따라 다릅니다. 간단한 NAT 장치는 해당 장치가 나온 것과 동일한 포트로만 트래픽 매핑을 허용하지만 모든 장치가 그렇게 단순하지는 않습니다. Linux 및 기타 OS에서는 연결 상태를 확인하는 다양한 모듈과 함께 일반적으로 "설정 및 관련" 포트를 사용하는 "상태 저장 방화벽"을 얻을 수 있습니다. 예를 들어 아웃바운드 FTP 요청이 이루어진 경우(포트 21) 라우터는 다음과 같은 작업을 수행할 수 있습니다. 또한 FTP 모듈이 로드된 경우 데이터용 포트 20을 엽니다. FTP가 다른 포트를 여는 것도 가능할 수 있으며, 악의적인 서버는 이를 통해 임의의 높은 번호가 지정된 포트에 액세스할 수 있습니다. 활용할 수 있는 일반적인 추적 모듈로는 FTP, SIP, Netbios, PPTP, gre, tftp, h323, irc가 있습니다. 특정 조건에서 연결 추적을 사용할 때 아마도 예상한 방식으로 방화벽을 임의로 우회할 수 있는 버그 CVE-2014-8160이 있습니다.
악의적인 서버가 다른 포트를 여는 것은 꽤 어렵지만 불가능하지는 않습니다. 물론, 다른 포트에서 수신 대기하기 취약한 것이 필요하며 (Linux에서는) 연결 추적 규칙이 해당 포트에 대한 일반 액세스를 거부하는 규칙 뒤에 오도록 하여 이러한 위험을 완화할 수 있습니다.