기계적 인조 인간

Linux에서 열린 포트를 확인 (스캔)하는 방법

ì•„ì ´ìŠ¤í ¬ë¦¼ ì¹¼ë ¼í ¼ ìŠ¬ë ¼ì „ 액체괴물 만들기!! í 르는 ì  í†  ì•¡ê´´ ìŠ¬ë ¼ì „ 놀ì

ì•„ì ´ìŠ¤í ¬ë¦¼ ì¹¼ë ¼í ¼ ìŠ¬ë ¼ì „ 액체괴물 만들기!! í 르는 ì  í†  ì•¡ê´´ ìŠ¬ë ¼ì „ 놀ì

차례:

Anonim

네트워크 연결 문제를 해결하거나 방화벽을 구성하는지 여부는 가장 먼저 확인해야 할 사항 중 하나는 시스템에서 실제로 열린 포트입니다.

이 기사에서는 Linux 시스템에서 어떤 포트가 외부에 열려 있는지 확인하는 몇 가지 방법에 대해 설명합니다.

개방 포트란?

수신 포트는 응용 프로그램이 수신하는 네트워크 포트입니다. ss , netstat 또는 lsof 와 같은 명령으로 네트워크 스택을 쿼리하여 시스템의 청취 포트 목록을 얻을 수 있습니다. 방화벽을 사용하여 각 청취 포트를 열거 나 닫을 수 있습니다 (필터링).

일반적으로, 열린 포트는 원격 위치에서 들어오는 패킷을받는 네트워크 포트입니다.

예를 들어 포트 80 443 에서 수신 대기하는 웹 서버를 실행 중이고 해당 포트가 방화벽에서 열려 있으면 모든 사용자 (차단 된 IP 제외)는 자신의 브라우저를 사용하여 웹 서버에서 호스팅되는 웹 사이트에 액세스 할 수 있습니다. 이 경우 80 443 은 모두 열린 포트입니다.

개방 포트는 각 개방 포트를 사용하여 취약성을 악용하거나 다른 유형의 공격을 수행 할 수 있으므로 보안 위험이 발생할 수 있습니다. 응용 프로그램 기능에 필요한 포트만 노출하고 다른 모든 포트를 닫아야합니다.

nmap 열린 포트 확인

Nmap은 단일 호스트 및 대규모 네트워크를 검색 할 수있는 강력한 네트워크 검색 도구입니다. 주로 보안 감사 및 침투 테스트에 사용됩니다.

가능한 경우 nmap 은 포트 스캔과 관련하여 첫 번째 도구가되어야합니다. 포트 스캐닝 외에도 nmap 은 Mac 주소, OS 유형, 커널 버전 등을 감지 할 수 있습니다.

콘솔에서 실행 된 다음 명령은 네트워크에서 TCP 연결을 수신하는 포트를 결정합니다.

sudo nmap -sT -p- 10.10.8.8

-sT nmap 에게 TCP 포트를 스캔하고 -p- 는 모든 65535 포트를 스캔하도록 -p- 합니다. -p- 를 사용하지 않으면 nmap 은 1000 개의 포트만 스캔합니다.

Starting Nmap 7.60 (https://nmap.org) at 2019-07-09 23:10 CEST Nmap scan report for 10.10.8.8 Host is up (0.0012s latency). Not shown: 998 closed ports PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds

위의 출력은 대상 시스템에서 포트 22 , 80 8069 8069 는 것을 보여줍니다.

UDP 포트를 스캔하려면 -sT 대신 -sU 를 사용하십시오.

sudo nmap -sU -p- 10.10.8.8

자세한 내용은 nmap 매뉴얼 페이지를 방문하여이 도구의 다른 모든 강력한 옵션에 대해 읽으십시오.

netcat 열린 포트 확인

Netcat (또는 nc )은 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 읽고 쓸 수있는 명령 줄 도구입니다.

netcat 을 사용하면 단일 포트 또는 포트 범위를 스캔 할 수 있습니다.

예를 들어, 20-80 범위의 IP 주소가 10.10.8.8 원격 시스템에서 열린 TCP 포트를 스캔하려면 다음 명령을 사용하십시오.

nc -z -v 10.10.8.8 20-80

-z 옵션은 데이터를 보내지 않고 열린 포트만 스캔하도록 nc 에 지시하고 -v 는 자세한 정보를 제공합니다.

결과는 다음과 같습니다.

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused Connection to 10.10.8.8 22 port succeeded!… Connection to 10.10.8.8 80 port succeeded!

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded

Connection to 10.10.8.8 22 port succeeded! Connection to 10.10.8.8 80 port succeeded!

UDP 포트를 스캔하려면 -u 옵션을 nc 명령에 전달하십시오.

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded

Bash Pseudo Device를 사용하여 열린 포트 확인

특정 포트가 열려 있는지 또는 닫혀 있는지 확인하는 또 다른 방법은 Bash 쉘 /dev/tcp/.. 또는 /dev/udp/.. 의사 장치를 사용하는 것입니다.

/dev/$PROTOCOL/$HOST/$IP 의사 장치에서 명령을 실행할 때 Bash는 지정된 포트의 지정된 호스트에 대한 TCP 또는 UDP 연결을 엽니 다.

다음 if..else 문은 kernel.org 포트 443 이 열려 있는지 확인합니다.

if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi if timeout 5 bash -c ' /dev/null' then echo "Port is open" else echo "Port is closed" fi

Port is open

위의 코드는 어떻게 작동합니까?

의사 장치를 사용하여 포트에 연결할 때 기본 시간 초과가 커서 5 초 후에 테스트 명령을 종료하기 위해 timeout 명령을 사용합니다. kernel.org 포트 443 연결되면 test 명령은 true를 반환합니다.

for 루프를 사용하여 포트 범위를 확인할 수도 있습니다.

for PORT in {20..80}; do timeout 1 bash -c " /dev/null" && echo "port $PORT is open" done for PORT in {20..80}; do timeout 1 bash -c " /dev/null" && echo "port $PORT is open" done

결과는 다음과 같습니다.

port 22 is open port 80 is open

결론

열린 포트를 검색하는 데 사용할 수있는 몇 가지 도구를 보여주었습니다. 열린 포트를 확인하는 다른 유틸리티와 메소드도 있습니다. 예를 들어 Python socket 모듈, curl , telnet 또는 wget 사용할 수 있습니다.

단말기