방화벽이 포트에 대해 열려 있지만 포트에서 수신 대기하지 않는지 확인하는 방법


29

새 응용 프로그램을 서버에 배포하고 응용 프로그램이 포트 8443에서 수신 대기합니다. 응용 프로그램을 배포하기 전에 네트워크 팀에 해당 서버의 포트 8443에 대한 방화벽을 열도록 요청했습니다. 현재 서버의 특정 포트에서 수신 대기중인 응용 프로그램이 없습니다.

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

운영체제 : Linux / Windows

답변:


16

원격 시스템에서 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

방화벽이 포트를 차단하고 있는지에 대한 문제를 해결하지는 못합니다. 것으로 보인다 nc요청이 방화벽을 통해 ICMP (또는 포트에서 서비스가되지 않을 수 있습니다 의미로 반송 된 경우 "네트워크에 연결할 수없는"포트가 액세스 할 수 있지만 더 리스너가 없을 때, 그리고 보고서 "연결이 거부" ). 방화벽이 실제로 거부하지 않고 패킷을 삭제하면 nc잠시 동안 중단됩니다.
goldilocks

마지막 netcat 명령의 목표는 어떤 이유로 성공적인 결과와 실패한 결과를 해석하는 데 도움이되는 성공적인 실행 및 실패한 실행의 예를 제공하는 것이 었습니다. 그들의 질문에 답하는 부분은 첫 번째 "기계 상"/ "서버 상"부분입니다.
Bratchley

질문은 Solaris 10에 관한 것이지만 FYI로서 v11은 repo에서 netcat을 사용할 수 있습니다.
sleepyweasel 2014 년

15

방화벽 요청을 차단할 때 ICMP 메시지로 응답 해야합니다 . 그러나 이것은 반드시 그런 것은 아닙니다 ( 이 좋은 기사에 관심 있을 것입니다 ).

외부에서 테스트하여 방화벽을 통해 포트에 액세스 할 수 있는지 여부와 포트가 수신 중인지 여부를 확인할 수 있습니다. 다음은 tcp 요청 wireshark이나 다른 패킷 스니퍼로 관찰 할 수있는 세 가지 시나리오와 다음과 같은 시나리오입니다 .

1) 방화벽이 요청을 거부 함

ICMP 메시지가 다시 나타나고 요청하는 도구는 즉시이 효과에 대한 정보를 알려야합니다 ( "도달 불가능, 관리자 금지"등). "도구"는 요청을 보내는 데 사용하는 클라이언트를 의미합니다 (사용했습니다 telnet). 메시지 1 의 세부 사항은 방화벽 구성 방법에 따라 다르지만 "포트 도달 불가능"이 가장 일반적 일 수 있습니다.

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

2) 방화벽이 패킷을 삭제함

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

3) 방화벽은 패킷을 허용하지만 방화벽이 없으면 포트에서 수신 대기하는 것이 없습니다.

TCP RST / ACK 메시지가 다시 나타납니다. TCP 프로토콜에 이것이 필요하다고 가정합니다. 다시 말해, 포트에서 수신 대기하는 것이 없으면 OS 자체가이 응답을 보냅니다. 도구가보고하는 내용에 따라 두 가지 경우에 모두 동일한 내용을 말할 있기 때문에이를 # 1과 구별하기가 어려울 수 있습니다. ). 클라이언트 시스템의 패킷 스니퍼에서 관찰되는 시나리오 # 1 (ICMP 거부 메시지)과 # 3 (TCP RST / ACK 메시지)은 명확합니다.

여기에서 유일한 다른 옵션은 방화벽이 패킷을 통과하고 무언가가 수신 중이므로 성공적으로 연결되는 것입니다.

다시 말해, 일반적으로 네트워킹이 제대로 작동한다고 가정하면 # 1 또는 # 2를 얻는 경우 방화벽이 포트에 대한 액세스를 적극적으로 차단하고 있음을 의미합니다. # 3은 서버가 실행되고 있지 않지만 포트에 액세스 할 수 있고 물론 (암시 적) # 4가 성공적으로 연결되면 발생합니다.


  1. 예를 들어, "포트에 연결할 수 없음", "호스트 금지됨", 호스트 / 포트 / 관리자도달 할 수없는 / 금지 된 다양한 조합 ; IP 방화벽이 작동 중임을 명시 적으로 나타내므로 메시지에서 이들을 찾으십시오.

4

명령 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 주소 다음에 콜론 뒤에 오는 숫자입니다 (예 : 0.0.0.0:111은 포트 111이됩니다).

IP 주소는 로컬외부 주소를 표시 합니다. 로컬 은 시스템이고 외부 는 TCP 포트에 연결하거나 TCP 포트 중 하나에 연결하는 주소입니다.

따라서 포트 22의 경우, 그것은 내 시스템에서 실행되는 ssh 데몬 이며 연결에 대한 청취 입니다. 누군가가 ssh데몬 에 연결을 시도하면 자체 복사본을 분기하고 해당 연결을 다른 포트로 밀어 넣고 추가 연결을 위해 TCP 포트 22를 열어 둡니다.


netstat 구문이 GNU에 매우 특유한 FYI는 Solaris에서 기본적으로 작동하는 가장 유사한 기능입니다. netstat -a -P tcp -f inet | awk '/LISTEN$/ {print $0}'
Bratchley

솔라리스의 모토는 "아무것도 쉬운 일이 아닙니다."
Bratchley

1

방화벽 구성의 구성 및 상태는 방화벽 / OS에 따라 다릅니다.

당신이 할 수있는 일은 server2에서 시도하는 것입니다.

nmap server1

당신의 도움을 주셔서 감사합니다. 불행히도이 명령은 Solaris에 없거나 설치되지 않았습니다. "nmap : command not found"
yottabrain

@ user1734143 아마도 "리포지토리"또는 Solaris와 동등한 것이지만 어쨌든 다운로드하여 컴파일 할 수 있습니다
RSFalcon7

@ user1734143 OpenCSW를 통해 사용할 수 있습니다. 어쨌든 설치해야하므로 관리 환경이 훨씬 쉬워집니다.
Bratchley

1

최근에 같은 요청이있어 스레드에 왔습니다. 출력을 쿼리 할 때 nc 명령으로 FW에서 열린 포트를 스캔 할 수있었습니다.

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

기본적으로 '시간 초과'되면 포트가 FW에서 열리지 않았 음을 의미합니다.


0

www.firewallruletest.com과 같은 온라인 도구를 사용하여 외부 호스트가 TCP 연결을 설정할 수 있는지 확인할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.