노무현 대통령 배너


2008. 12. 12. 09:55

리눅스 서버에서 열려있는 포트 확인

리눅스 박스의 열린 포트를 확인하는 방법에 대해서 간략하게 설명하고자 합니다.( 개인 노트용 포스트라 경어는 생략하겠습니다. ^^; )

리눅스로 웹서버나 텔넷서버, FTP, Mail, 등의 네트워크 서비스를 시작한 후에는 어떤 포트가 열려있는지 관심을 갖고 이들을 모니터링 해야한다.
가장 기본적인 방법으로 netstat -an 이나 lsof -i 를 많이 쓰는데 이 방법은 프로그램 자체가 네트워크를 통해 시스템에 접근하지 않기때문에, 다시말해, 시스템 내부에서 어떤 서비스들이 돌아가고 있는지만 확인하므로 그리 신뢰할만하지 못하다.

내 시스템이 네트워크에서 어떤 포트들에 귀를 귀울이는지(listen) 확인하는데 좀 더 신뢰할 만한 방법은 네트워크 포트 스캐너의 하나인 nmap 을 쓰는 것이다.

아래 명령은 시스템이 네트워크에서 어떤 TCP 포트를 열고 기다리는지 보여준다.
nmap -sT -O localhost

결과는 아래와같이 나온다.
Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1596 ports scanned but not shown below are in state: closed)
Port       State       Service
22/tcp     open        ssh
111/tcp    open        sunrpc
515/tcp    open        printer
834/tcp    open        unknown
6000/tcp   open        X11
Remote OS guesses: Linux Kernel 2.4.0 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)

Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds

위 결과는 시스템이 현재 sunrpc 서비스로 인해 portmap을 실행중임을 알려준다. 그리고 알수없는 서비스가 834번 포트에서 실행중임을 알수있다. 이 포트번호가 등록된 서비스와 연결되어있는 포트인지 확인해 보기 위하여 아래와 같은 명령을 내린다.
cat /etc/services | grep 834

위 명령의 결과로 아무것도 나타나지 않는다. 만일 포트 범위가 예약되어 있는 범위안에 있거나(0~1023) root 만이 열수 있는 포트라면 등록된 서비스와 연관 있는 포트는 아니라고 볼 수 있다.

다음은, 특정 포트 정보는 netstat 이나 lsof 를 사용하여 확인할 수 있다.
netstat -anp | grep 834

결과는..
tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

lsof 명령으로도 열린 포트에 대한 서비스 정보를 알아낼 수 있다.
ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)


위 에서 확인해 본 바와 같이 이 도구들은 시스템상에서 돌아가고 있는 서비스들의 상태를 확인하는데 많은 도움을 주며 네트워크 서비스와 설정에 대한 유용한 정보를 얻게 해준다. 따라서 이들 도구를 좀 더 풍부하게 활용하고자 한다면 nmap 과 netstat, lsof, services 의 man 페이지를 참조할것을 권한다.