방화벽에 포트가 열려 있지만 수신 대기 중이 아닌지 확인하는 방법

방화벽에 포트가 열려 있지만 수신 대기 중이 아닌지 확인하는 방법

포트 8443에서 수신 대기하는 서버에 새 애플리케이션을 배포하겠습니다. 우리는 애플리케이션을 배포하기 전에 이 서버의 포트 8443에서 방화벽을 열어달라고 네트워크 팀에 요청했습니다. 현재 서버의 특정 포트를 수신하는 애플리케이션이 없습니다.

어쨌든 방화벽에 포트 8443이 열려 있는지 확인할 수 있나요?

운영 체제: 리눅스/윈도우

답변1

원격 시스템에서 TCP 연결을 구성할 수 있는지 확인하려면 해당 시스템과 대상 시스템에 OpenCSW를 설치하고 두 시스템 모두에 netcat을 설치하십시오. 다음은 netcat을 사용하여 TCP 연결을 테스트하는 구문입니다.

nc -vz targetServer portNum

예를 들어 "homeServer1"에서 SSH를 확인하려면 다음을 수행하세요.

nc -vz homeserver1 22

이를 통해 원격 시스템에서 TCP 수준 연결을 테스트할 수 있습니다. 클라이언트 역할을 하는 대신 포트에서 수신 대기하도록 Netcat을 구성할 수도 있습니다. TCP/8443에서 수신하도록 하려면:

애플리케이션을 호스팅하는 서버에서:nc -l homeserver1 8443

방화벽 외부의 컴퓨터에서:nc -vz homeserver.fqdn 8443

성공적인 실행의 예는 다음과 같습니다.

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
Connection to ditirlns01.ncat.edu 8443 port [tcp/pcsync-https] succeeded!

실행 실패:

[jadavis6@ditirlns01 ~]$ nc -vz ditirlns01.ncat.edu 8443
nc: connect to ditirlns01.ncat.edu port 8443 (tcp) failed: Connection refused

답변2

방화벽~해야 한다회신하다ICMP 메시지요청을 차단할 때. 그러나 반드시 그런 것은 아닙니다(관심이 있으실 수도 있습니다).이 좋은 글).

외부에서 테스트하여 방화벽을 통해 포트에 액세스할 수 있는지, 그렇다면 해당 포트에서 수신 대기 중인 항목이 있는지 확인할 수 있습니다. 다음은 wireshark다른 패킷 스니퍼를 사용하여 관찰 할 수 있는 TCP 요청과 관련된 세 가지 시나리오와 표시되는 내용입니다 .

1) 방화벽이 요청을 거부합니다.

ICMP 메시지를 다시 받으면 요청 도구가 즉시 관련 정보("접근 불가능, 관리 금지" 등)를 알려줄 것입니다. "도구"란 요청을 보내는 데 사용하는 클라이언트(내가 사용한 클라이언트 telnet)를 의미합니다. 메시지 1 의 세부 사항은 방화벽 구성 방법에 따라 다르지만 아마도 "포트에 연결할 수 없음"이 가장 일반적일 것입니다.

"호스트에 대한 경로 없음"은 이를 나타낼 수도 있지만 보다 미묘한 라우팅 문제를 나타낼 수도 있습니다.

2) 방화벽이 패킷을 삭제합니다.

응답이 없으므로 도구는 시간이 초과되거나 지루해질 때까지 기다립니다.

3) 방화벽은 패킷을 허용하지만(또는 방화벽 없음) 포트에서 수신 대기 중인 항목이 없습니다.

TCP RST/ACK 메시지를 받습니다. 내 생각에 TCP 프로토콜에는 이것이 필요하다고 생각합니다. 즉, 포트에서 수신 대기 중인 항목이 없으면 운영 체제 자체가 이 응답을 보냅니다. 도구가 보고하는 내용만으로는 이를 #1과 구별하기 어려울 수 있습니다.가능한두 경우 모두 동일한 내용을 말합니다(그러나 "연결이 거부됨"과 #1 "네트워크에 연결할 수 없음"으로 구분될 가능성이 높습니다). 클라이언트 시스템의 패킷 스니퍼에서 관찰된 것처럼 시나리오 #1(ICMP 거부 메시지)과 #3(TCP RST/ACK 메시지)은 상당히 다릅니다.

여기서 유일한 다른 옵션은 방화벽이 패킷 통과를 허용하고 수신 대기 중인 무언가가 있어 성공적인 연결을 얻을 수 있다는 것입니다.

즉, 네트워크가 전체적으로 잘 작동한다고 가정할 때 1번이나 2번이 표시되면 방화벽이 해당 포트에 대한 액세스를 적극적으로 차단하고 있다는 의미입니다. 서버가 실행되고 있지 않지만 포트에 액세스할 수 있는 경우 #3이 발생하고 물론 (암시적으로) #4는 연결 성공입니다.


  1. 예를 들어 "포트에 액세스할 수 없습니다", "호스트가 금지되어 있습니다" 및 기타 다양한 조합이 있습니다.호스트/포트/관리자그리고연결할 수 없음/금지됨;IP 방화벽이 사용 중임을 명확하게 나타내므로 메시지에서 이를 찾으십시오.

답변3

netstat이 명령을 사용하여 포트가 열려 있고 수신 대기 중인지 확인할 수 있습니다.

$ netstat -anp | less
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:41716               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      -                   
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:17500               0.0.0.0:*                   LISTEN      3034/dropbox        
tcp        0      0 0.0.0.0:17501               0.0.0.0:*                   LISTEN      3033/dropbox        
tcp        0      0 127.0.0.1:2143              0.0.0.0:*                   LISTEN      3191/ssh                       
tcp        0      0 127.0.0.1:2025              0.0.0.0:*                   LISTEN      3191/ssh 

출력에는 프로세스가 표시됩니다.(맨 오른쪽 열)TCP 포트에서 수신 대기 중입니다. 포트 번호는 IP 주소 뒤의 콜론 뒤의 숫자입니다(예: 포트 111의 경우 0.0.0.0:111).

IP 주소 표시현지의그리고해외 주소.현지의당신의 시스템이 될 것입니다외국의이는 TCP 포트에 연결된 주소이거나 연결된 TCP 포트 중 하나일 수 있습니다.

포트 22에 관한 한 이것은 내 시스템에서 실행되는 SSH 데몬입니다.듣기연결을 위해. 누군가 데몬에 연결을 시도하자마자 ssh데몬은 자신의 복사본을 생성하고 연결을 다른 포트로 푸시하는 동시에 다른 연결이 들어올 수 있도록 TCP 포트 22를 열어 둡니다.

답변4

최근에 저도 같은 요청을 받고 이 스레드에 왔습니다. 출력을 쿼리하는 것처럼 nc 명령을 사용하여 펌웨어의 열린 포트를 검색할 수 있었습니다.

nc -v -w 1 -z -s *srcIP destIP port* 2>&1 | grep timed > /dev/null && echo closed || echo open

기본적으로 "시간 초과"가 발생하면 펌웨어의 포트가 열려 있지 않음을 의미합니다.

관련 정보