Linux 서버에서 포트가 열려 있는지 또는 닫혀 있는지 확인하십시오.


209

포트가 Linux 서버에서 수신 대기 중인지 어떻게 확인할 수 있습니까?


2
당신이 무엇을 요구하는지 명확하지 않습니다. "열기"는 무슨 뜻입니까? 일부 서버가 해당 포트에서 수신 대기 중임을 의미합니까? 아니면 시스템 방화벽이 허용한다는 의미입니까? 또는 무엇을?
David Schwartz

서버에서 포트가 차단되고 있다고 생각하여 차단을 해제하고 다시 열려고합니다.
James Anderson

14
netstat -an | grep PORTNUMBER | grep -i listen출력이 비어 있으면 포트가 사용 중이 아닙니다.
automatix

답변:


187

로 프로세스가 TCP 또는 UDP 포트에서 수신되는지 확인할 수 있습니다 netstat -tuplen.

일부 포트는 같은 포트 스캐너를 사용할 수 있습니다 (이것은 당신이 원하는 아마도) 외부에서 액세스 할 수 있는지 여부를 확인하려면 Nmap은을 에서 다른 시스템. 확인하려는 동일한 호스트에서 Nmap을 실행하는 것은 목적에 아주 쓸모가 없습니다.


54
GNU NETSTAT는 매개 변수를 알고 -t, -u, -p, -l, -e,와 -n. 옵션 파서 덕분에로 표현 될 수 있습니다 -tuplen. linux.die.net/man/8/netstat
joschi

3
또한이 telnet명령은 일반적으로 TCP 만 지원하므로 확인하려는 서비스가 다른 프로토콜에서 실행되는 경우 운이 좋지 않습니다.
joschi

1
그래, 나는 창문을 사용하고 있었기 때문에 혼란 스러웠다.
Dexter

2
nc는 텔넷의 대안입니다. UDP도 지원합니다.
Tsvetomir Dimitrov

1
sudo :와 함께 사용하십시오 sudo netstat -tuplen. 이렇게하면 자신뿐만 아니라 다른 사람이 소유 한 프로세스를 얻을 수 있으며, 루트가 아닌 사용자로 표시되지 않은 경우 PID / 프로그램 이름과 같은 추가 세부 사항을 인쇄합니다.
John Red

102

TCP 포트가 열려 있는지 (있는 하드웨어 방화벽 포함) 테스트하는 가장 빠른 방법은 원격 컴퓨터 (예 : 데스크탑)에서 입력하는 것입니다.

telnet myserver.com 80

해당 서버의 포트 80에 대한 연결을 열려고 시도합니다. 시간이 초과되거나 거부되면 포트가 열려 있지 않은 것입니다. :)


1
"telnet"을 명령으로 인식하지 못한다고합니다.
James Anderson

6
"yum install telnet"은 텔넷 클라이언트 패키지를 설치합니다.
cjc

8
위의 글 :if you get a time out or deny, the port is not open
Industrial

2
텔넷을 설치할 권한이없는 경우 어떻게합니까? 다른 표준 도구가 있습니까?
KC Baltz

3
“telnet myhost 22”를 시도하고 시간이 초과되었습니다. 그러나 나는 그 기계에 ssh 할 수 있습니다. ?!
Torsten Bronger

30

요약하면, 로그인 할 수있는 서버가 있습니다. 어떤 포트에서 무언가를 듣고 있는지 확인하고 싶습니다. 루트 권한으로 다음을 실행하십시오.

netstat -nlp

TCP 및 UDP 포트에서 수신 대기중인 프로세스 목록이 표시됩니다. 관심있는 프로세스 및 / 또는 예상되는 포트 번호에 대해 스캔 (또는 grep) 할 수 있습니다.

예상되는 프로세스가 없으면 해당 프로세스를 시작하고 netstat를 다시 확인해야합니다. 프로세스가 있지만 예상하지 못한 인터페이스와 포트에서 수신 대기하는 경우 구성 문제가 있습니다 (예 : 수신 대기 중일 수 있지만 루프백 인터페이스에서만 발생하므로 127.0.0.1:3306 및 MySQL의 기본 구성 인 경우 포트 3306의 다른 행은 없습니다.

프로세스가 작동 중이고 원하는 포트에서 수신 대기중인 경우, 사무실 / 가정의 Macbook에서 해당 포트로 "텔넷"을 실행 해보십시오.

 telnet xxxxxxxxxxxx.co.uk 443

SSL에 대해 웹 서버가 구성되어 있는지 (표준 포트로 가정) 테스트합니다. 텔넷을 사용한이 테스트는 프로세스가 TCP 포트에서 수신 대기중인 경우에만 작동합니다. UDP 포트 인 경우 연결하는 데 사용하려는 클라이언트를 사용해보십시오. (포트 224를 사용했음을 알 수 있습니다. 이것은 masqdialer이며 이것이 무엇인지 전혀 모릅니다.)

서비스가 있지만 외부에 접근 할 수 없으면 방화벽이 차단되어있는 것입니다. 이 경우 다음을 실행하십시오.

 iptables -L -n

시스템에 정의 된 모든 방화벽 규칙이 표시됩니다. 이를 게시 할 수 있지만 일반적으로 INPUT 체인의 모든 것을 허용하지 않는 경우 문제의 포트에서 트래픽을 명시 적으로 허용해야합니다.

 iptables -I INPUT -p tcp --dport 224 -j ACCEPT

또는 그 라인을 따라 뭔가. 낯선 사람이 인터넷에서 말한 내용에 따라 맹목적으로 방화벽 명령을 실행하지 마십시오. 하고있는 것을 고려하십시오.

상자의 방화벽이 원하는 트래픽을 허용하는 경우 호스팅 회사에서 방화벽을 실행 중일 수 있습니다 (예 : SSH (22 / tcp), HTTP (80 / tcp) 및 HTTPS (443 / tcp) 만 허용 함) 다른 모든 수신 트래픽 거부). 이 경우 cPanel에 허용 할 수있는 무언가가 있다고 생각하지만이 문제를 해결하려면 헬프 데스크 티켓을 열어야합니다.


iptables -I 명령을 실행 취소하는 방법을 추가 할 수 있습니까? 감사!!
Evgeny

1
"iptables -D"다음에 원래 명령에서 "-I"뒤에있는 다른 항목이옵니다. 기본적으로 설명서를 찾으십시오.
cjc

11

나는 netstatand 의 콤보를 사용합니다 lsof:

netstat -an | grep <portnumber>
lsof -i:<portnumber>

포트가 사용 중인지 및 사용 중인지 확인합니다.


sudo의 유무에 관계없이 프롬프트 없음
Dheeraj Thedijje

1
@DheerajThedijje-그러면 포트가 열리지 않습니다
워렌

예, 그렇지 않았습니다.
Dheeraj Thedijje

7

시스템에 연결되어 있고 루트로 명령을 실행할 수 있다면 iptables의 출력을 확인할 수 있습니다

iptables -L -vn

방화벽 규칙 및 열려있는 대상 포트 ACCEPT와 명시 적으로 닫힌 포트 대상 이 나열됩니다 REJECT.


그리고 방화벽을 사용했다면 더 간단합니다 firewall-cmd --query-port=port/protocol(예 :) firewall-cmd --query-port=80/tcp.
Agostino

6

lsof -i :ssh 수신 및 활성 연결 모두 ssh 포트가 열린 모든 프로세스를 나열합니다.


sudo출력을 반환하지 않으면 접두사 입니다.
Elijah Lynn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.