ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (CentOS) 리눅스 포트 열렸는지 확인, 방화벽 오픈 [netstat, telnet, nc ..]
    IT/Linux 2019. 6. 9. 22:41

    #개요

    서버 설정하고 세팅하는데 정신없다.

    항상 초기설정이 어렵다. 할때 찾아보고 뒤돌아서면 까먹으니까..

    아래 테스트 및 내용은 CentOS에서 테스트한 기반으로 작성한 내용이다.

     

     

     

     

     

     

     


    1. 현재 리눅스에서 열려있는 포트 확인

    1.netstat -tnlp

    TCP 중에서(t), Listening상태[열린포트]인 애들만(l), 상세정보까지(p), 10진수 숫자로(n) 표기한다.

     

    [dklee@localhost ~]$ netstat -tnlp
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -
    tcp6       0      0 :::21                   :::*                    LISTEN      -
    tcp6       0      0 :::22                   :::*                    LISTEN      -
    tcp6       0      0 ::1:25                  :::*                    LISTEN      -

     

    * netstat이 없으면 yum install net-tools 로 설치하면 netstat을 쓸 수 있다.

     

     

     

     

     

     

     

     

     

     


    2.  상대방의 포트가 열려 있는지 확인

     

    1. nc -z 호스트주소 포트

     특정 하나의 포트에 대해 통신을 확인한다.

     CentOS7의 경우 -z가 안붙는다. [nc 호스트주소 포트] 로 호출

     

    //열린포트
    [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 873
    @RSYNCD: 30.0
     
    
    //열린포트
    [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 22
    SSH-2.0-OpenSSH_7.4
     
    
    //안열린포트
    [dklee@localhost ~]$ nc 1xx.1xx.2xx.1xx 43
    Ncat: Connection timed out.

    * nc가 없으면 yum install nc 로 설치하면 nc를 쓸 수 있다.

     

     

    2.telnet 호스트주소 포트

    [dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22
    Trying 1xx.1xx.2xx.1xx..
    Connected to 1xx.1xx.2xx.1xx.
    Escape character is '^]'.
    SSH-2.0-OpenSSH_7.4

    Connected to xxx.xxx.xxx.xxx... 가 뜨면 telnet 통신에 성공했다는 말이다.

     

     

    ..
    Escape character is '^]'.
    SSH-2.0-OpenSSH_7.4
    ^]
    telnet> quit
    Connection closed.
    [dklee@localhost ~]$

    * telnet명령에서 빠져나오려면 Ctrl + ] 눌린다음에 quit 치면 된다.

     

     

    [dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22
    Trying 1xx.1xx.2xx.1xx...

    * trying에서 멈춘다면 방화벽이 오픈이 안된 것이다.

     

     

    [dklee@localhost ~]$ telnet 1xx.1xx.2xx.1xx 22
    Trying 1xx.1xx.2xx.1xx...
    telnet: Unable to connect to remote host: Connection refused 

    * 바로 연결이 거부되면서 telnet: Unable to connect to remote host: Connection refused 가 뜬다면

    방화벽은 열려있으나 저 포트에 해당되는 프로세스가 안올라가있는 것이다.

    상대서버에서 netstat -ntlp로 확인해보면 해당 포트에 아무것도 없다는 말

     

     

     

     

     

     

     

     

     

     


    3. 포트열기 (방화벽 오픈)

     

    netstat으로 확인했을때 포트가 Listen 상태인데도 상대로부터 접속이 안되면 포트를 열어줘야된다.

    포트를 연다는건 방화벽에서 해당 포트로의 접근을 OK 한다는것

     

    1. 방화벽에 포트 허용하기

    CentOS6 이하 : 

    iptables -I INPUT 1 -p tcp --dport 12345 -j ACCEPT 

    I: 새로운 규칙을 추가한다.
    p: 패킷의 프로토콜을 명시한다.
    j: 규칙에 해당되는 패킷을 어떻게 처리할지를 정한다.

    이 명령은 외부에서 들어오는(INBOUND) TCP포트 12345의 연결을 받아들인다는 규칙을 방화벽 1번 방화벽 규칙으로 추가한다는 의미이다.

    이렇게 추가한 규칙은 조회나 삭제가 가능하다.

     

    CentOS7 : 

    firewall-cmd --permanent --zone=public --add-port=22/tcp

     

     

    2.추가한 설정 조회하기

     

    CentOS6 이하 : 

    iptables -L -v

    CentOS7 :

    firewall-cmd --list-all

     

     

     

    3.추가한 설정 삭제

     

    CentOS6 이하 :

    규칙번호로 삭제하기

    iptables -D INPUT 1

    추가한 규칙으로 삭제하기

    iptables -D INPUT -p tcp --dport 12345 -j ACCEPT

    CentOS7 :

    firewall-cmd --permanent --zone=public --remove-port=22/tcp

     

     

     

     

     

    =========끗========

    댓글

다치지 말고 운동하자.