웹사이트 검색

Linux에서 포트를 여는 방법


소개

포트는 통신 끝점입니다. 운영 체제 내에서 포트는 특정 프로세스 또는 네트워크 서비스에 대한 데이터 패킷에 대해 열리거나 닫힙니다.

일반적으로 포트는 할당된 특정 네트워크 서비스를 식별합니다. 다른 포트를 사용하도록 서비스를 수동으로 구성하여 변경할 수 있지만 일반적으로 기본값을 사용할 수 있습니다.

처음 1024개의 포트(포트 번호 0에서 1023)는 잘 알려진 포트 번호라고 하며 가장 일반적으로 사용되는 서비스용으로 예약되어 있습니다. . 여기에는 SSH(포트 22), HTTP(포트 80), HTTPS(포트 443)가 포함됩니다.

1024 이상의 포트 번호는 임시 포트라고 합니다.

  • 1024에서 49151까지의 포트 번호를 등록/사용자 포트라고 합니다.
  • 49152에서 65535까지의 포트 번호를 동적/개인 포트라고 합니다.

이 자습서에서는 가장 일반적인 서비스가 잘 알려진 포트를 사용하므로 Linux에서 임시 포트를 엽니다.

전제 조건

이 자습서를 완료하려면 다음이 필요합니다.

  • 단말기 사용에 익숙함.

열려 있는 모든 포트 나열

Linux에서 포트를 열기 전에 열려 있는 모든 포트 목록을 확인하고 해당 목록에 없는 열 임시 포트를 선택해야 합니다.

netstat 명령을 사용하여 네트워크 계층에서 패킷 전송을 위한 가장 일반적인 프로토콜인 TCPUDP를 포함하여 열려 있는 모든 포트를 나열합니다.

  1. netstat -lntu

다음과 같이 인쇄됩니다.

  • 모든 수신 소켓(-l)
  • 포트 번호(-n)
  • TCP 포트(-t)
  • UDP 포트(-u)

Output
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp6 0 0 ::1:5432 :::* LISTEN tcp6 0 0 ::1:6379 :::* LISTEN tcp6 0 0 :::22 :::* LISTEN udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN

참고: 배포에 netstat가 없으면 ss 명령을 사용하여 청취 소켓을 확인하여 열린 포트를 표시할 수 있습니다.

열린 포트가 있는 청취 소켓을 나열하는 ss 명령을 사용하여 일관된 출력을 수신하고 있는지 확인하십시오.

  1. ss -lntu

다음과 같이 인쇄됩니다.

Output
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:* tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* tcp LISTEN 0 128 [::1]:5432 0.0.0.0:* tcp LISTEN 0 128 [::1]:6379 0.0.0.0:* tcp LISTEN 0 128 [::]:22 0.0.0.0:*

이는 netstat와 거의 동일한 열린 포트를 제공합니다.

TCP 연결을 허용하기 위해 Linux에서 포트 열기

이제 닫힌 포트를 열고 TCP 연결을 수신 대기하도록 합니다.

이 자습서의 목적을 위해 포트 4000을 엽니다. 그러나 해당 포트가 시스템에서 열려 있지 않으면 다른 닫힌 포트를 자유롭게 선택하십시오. 1023보다 큰지 확인하십시오.

netstat 명령을 사용하여 포트 4000이 사용되지 않는지 확인합니다.

  1. netstat -na | grep :4000

또는 ss 명령:

  1. ss -na | grep :4000

시스템 iptables 방화벽에 포트 규칙을 수동으로 추가할 수 있도록 출력이 비어 있어야 현재 사용되지 않는지 확인할 수 있습니다.

Ubuntu 사용자 및 ufw 기반 시스템의 경우

UncomplicatedFirewall용 명령줄 클라이언트인 ufw를 사용합니다.

명령은 다음과 같습니다.

  1. sudo ufw allow 4000

배포에 대한 ufw 방화벽 설정을 설정하는 방법을 참조하십시오.

메모:

  • Ubuntu 14.0.4: "특정 포트 범위 허용\
  • Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: "다른 연결/특정 포트 범위 허용\
  • Debian 9/10/11: "다른 연결/특정 포트 범위 허용\

CentOS 및 방화벽 기반 시스템용

firewall-cmd 사용 - firewalld 데몬용 명령줄 클라이언트.

명령은 다음과 같습니다.

  1. firewall-cmd --add-port=4000/tcp

배포에 대한 firewalld 설정 방법을 참조하십시오.

메모:

  • CentOS 7/8: "애플리케이션 규칙 설정/영역 포트 열기\
  • Rocky Linux 8/9: "애플리케이션에 대한 규칙 설정/영역에 대한 포트 열기\

기타 Linux 배포판의 경우

iptables를 사용하여 시스템 IPv4 패킷 필터 규칙을 변경하십시오.

  1. iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

배포에 대한 iptables를 사용하여 방화벽을 설정하는 방법을 참조하십시오.

메모:

  • Ubuntu 12.04: "기본 방화벽\
  • Ubuntu 14.04: "필요한 다른 연결 허용\

TCP 연결을 위해 새로 열린 포트 테스트

새 TCP 포트를 성공적으로 열었으므로 이제 테스트할 차례입니다.

먼저 netcat(nc)을 시작하고 포트(-p) 4000에서 수신 대기(-l)합니다. ls의 출력을 연결된 모든 클라이언트에 전송:

  1. ls | nc -l -p 4000

이제 클라이언트가 포트 4000에서 TCP 연결을 연 후 ls의 출력을 수신합니다. 지금은 이 세션을 그대로 두십시오.

동일한 시스템에서 다른 터미널 세션을 엽니다.

TCP 포트를 열었으므로 telnet을 사용하여 TCP 연결을 확인하십시오. 명령이 없으면 패키지 관리자를 사용하여 설치하십시오.

서버 IP와 포트 번호(이 예에서는 4000)를 입력하고 다음 명령을 실행합니다.

  1. telnet localhost 4000

이 명령은 포트 4000localhost에서 TCP 연결을 열려고 시도합니다.

청취 프로그램(nc)과 연결이 설정되었음을 나타내는 다음과 유사한 출력이 표시됩니다.

Output
Trying ::1... Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. while.sh

ls(이 예에서는 while.sh)의 출력도 클라이언트로 전송되어 성공적인 TCP 연결을 나타냅니다.

nmap을 사용하여 포트(-p)가 열려 있는지 확인하십시오.

  1. nmap localhost -p 4000

이 명령은 열린 포트를 확인합니다.

Output
Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC Nmap scan report for localhost (127.0.0.1) Host is up (0.00010s latency). Other addresses for localhost (not scanned): ::1 PORT STATE SERVICE 4000/tcp open remoteanything Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds

포트가 열렸습니다. Linux 시스템에서 새 포트를 성공적으로 열었습니다.

참고: nmap은 현재 수신 중인 애플리케이션이 있는 열린 포트만 나열합니다. netcat과 같은 수신 응용 프로그램을 사용하지 않는 경우 현재 해당 포트에서 수신 대기 중인 응용 프로그램이 없으므로 포트 4000이 닫힌 것으로 표시됩니다. 마찬가지로 telnet도 바인드할 수신 응용 프로그램이 필요하기 때문에 작동하지 않습니다. 이것이 nc가 유용한 도구인 이유입니다. 간단한 명령으로 이러한 환경을 시뮬레이션합니다.

그러나 시스템을 재부팅할 때마다 변경 사항이 재설정되므로 이는 일시적일 뿐입니다.

지속 규칙

이 문서에 제시된 접근 방식은 시스템이 종료되거나 재부팅될 때까지 방화벽 규칙을 일시적으로만 업데이트합니다. 따라서 재시작 후 동일한 포트를 다시 열려면 유사한 단계를 반복해야 합니다.

ufw 방화벽의 경우

ufw 규칙은 재부팅 시 재설정되지 않습니다. 이는 부팅 프로세스에 통합되고 커널이 적절한 구성 파일을 적용하여 ufw를 사용하여 방화벽 규칙을 저장하기 때문입니다.

방화벽의 경우

--permanent 플래그를 적용해야 합니다.

배포에 대한 firewalld 설정 방법을 참조하십시오.

메모:

  • CentOS 7/8: "애플리케이션 규칙 설정\
  • Rocky Linux 8/9: "애플리케이션 규칙 설정\

iptables의 경우

구성 규칙을 저장해야 합니다. 이 자습서에서는 iptables-persistent를 권장합니다.

배포에 대한 iptables를 사용하여 방화벽을 설정하는 방법을 참조하십시오.

메모:

  • Ubuntu 12.04: \Iptables 규칙 저장
  • Ubuntu 14.04: \Iptables 구성 저장

결론

이 자습서에서는 Linux에서 새 포트를 열고 들어오는 연결을 위해 설정하는 방법을 배웠습니다. netstat, ss, telnet, ncnmap도 사용했습니다.

Top, Netstat, Du 및 기타 도구를 사용하여 서버 리소스를 모니터링하는 방법으로 학습을 계속하십시오.