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.