본문 바로가기
카테고리 없음

[Linux] CentOS 7 방화벽 & 포트(Port)

by 떵해이 2020. 10. 16.
300x250

CentOS 7 부터 바뀐 방화벽, 소소한 개념, 자주 사용하는 포트, 포트 확인에 대해 한번 알아보도록 합시다.

 

시작 전 혹시 firewalld 설치 확인 하시고, 설치가 되어 있지 않으시면 설치하시길 바랍니다.

1) firewalld 설치 확인    ->    # rpm -qa | grep firewalld

2) firewalld 설치가 되어 있지 않으시면    ->    # yum -y install firewalld

 

1. CentOS 7 방화벽

 

CentOS 7 에서는 firewalld 서비스가 기본 방화벽으로 활성화 된다.

   이전에는 iptables를 사용했는데 CentOS 7 부터 firewalld 라는 방화벽 시스템이 기본으로

   바뀜

 

 방화벽에는 zone(영역)이라는 것이 존재.

   개방된 네트워크와 연결되어 있으면 public zone(공개)에 있는 룰 적용

   개인 네트워크와 연결되어 있으면 다른 zone의 룰 적용

 

보통 리눅스를 서버 용도로 사용하기 때문에 개방된 public zone(공개)이 필요하다.

    또 한 방화벽에는 public zone이 기본 zone으로 설정 되어있다.

    (방화벽 설정 파일에서 변경 가능)

 

▷ zone은 보안그룹과 유사한 역할을 한다고 볼 수 있다. 즉, 방화벽 설정 등을 묶어 놓고

   상황에 따라 교체하며 설정을 일괄 적용할 수 있다.

 

▷ 기본 설정은 /usr/lib/firewalld 에 위치하고 있으며, zone별 허용하는 서비스등은 폴더를 보면

    확인할 수 있습니다.

 

▷ 시스템 개별 설정은 /etc/firewalld 에 위치하고 있으며,

    firewall 동작은 /etc/firewalld/firewalld.conf에서 지정할 수 있다.

    예로 앞에 firewalld.conf 파일에 들어가면 default zone도 변경할 수 있다.

    default zone을 zzzone로 변경하려면 # DefaultZone=zzzzone 로 설정하고

    firewalld 재시작하면 된다.

 

 

public zone의 설정 파일

 

# vi /etc/firewalld/zones/public.xml

 설정 파일은 xml형식

 

# firewall-cmd --zone=public --permanent 명령으로 추가한 설정들이 저장됩니다.

    zone의 설정 파일을 변경할 경우는 당연하지만 방화벽 재시작을 해야 설정이 수정이 됩니다.

 

▷ zone의 설정 파일에 추가된 설정은 영구 반영됩니다.

 

--permanent 옵션을 사용하면 포트를 영구적으로 추가할 수 있다.

    zone의 설정 파일에 영구적인 것만 들어간다.

    만약 위에 명령어에 --permanent 옵션을 사용하지 않으셨다면 일시적으로 사용되고,

    재부팅시 zone의 설정파일에 추가 되지 않아 사라지게 됩니다.

 

여기 있는 xml파일에 표시되어 있는 것들을 밑에서 확인용도로 이용하겠습니다.

 

 

방화벽 시작/종료

 

# systemctl start firewalld    시작

# systemctl enable firewalld    재부팅시 자동 설정

 

# systemctl stop firewalld    중지

# systemctl disable firewalld    재부팅시 자동 설정하지 않음

 

 

방화벽에 설정 후 적용

 

# firewall-cmd --reload

(주의) firewall 설정 후 reload 하지 않으면 적용이 되지 않습니다.

 

 

방화벽에 포트 추가/제거

 

# firewall-cmd --permanent --zone=public --add-port=[포트번호]/[프로토콜]

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

 

# firewall-cmd --permanent --zone=public --remove-port=[포트번호]/[프로토콜]

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

 

항상 설정 후에는 # firewall-cmd --reload

 

 

방화벽에 서비스 추가/제거

 

# firewall-cmd --permanent --zone=public --add-service=[서비스명]

# firewall-cmd --zone=public --add-service=ssh

 

# firewall-cmd --permanent --zone=public --remove-service=[서비스명]

# firewall-cmd --zone=public --remove-service=ssh

 

항상 설정 후에는 # firewall-cmd --reload

 

 

방화벽에 허용한 포트/서비스 목록 확인

 

# firewall-cmd --list-ports / --list--services

 

 

방화벽에 상태 확인

 

# firewall-cmd --state

 

 

방화벽에 설정된 내용 확인

 

# firewall-cmd --list-all

 

 

방화벽에 특정 IP 허용/차단

 

▷ 모든 서비스에 대해 특정 IP 허용

# firewall-cmd --permanent --add-source=IP주소(대역)

 

▷ 모든 서비스에 대해 특정 포트 허용

# firewall-cmd --permanent --add-port=6000-6666/tcp

// 6000~6666 까지 포트 허용

 

▷ 특정 포트에 대해 특정 IP 허용

# firewall-cmd --permanent--add-rich-rule="rule family="ipv4" source address="IP주소(대역)" port                    protocol="tcp" port="포트번호" accept"

 

▷ 특정 IP 차단

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP주소(대역)" drop"

 

▷ 특정 포트에 대해 특정 IP 차단

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP주소(대역)"  port                  protocol="tcp" port="포트번호" drop"

 

▷ 특정 서비스에 특정 IP 허용

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP주소(대역)" service name=    서비스명 accept"

 

▷ 특정 서비스에 특정 IP 차단

# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP주소(대역)" service name=    서비스명 reject"

 

※ 적용 한 설정 삭제 하는 법

   --add 대신 --remove 로 바꿔서 사용   

 

※ 여기서 drop 문은 응답을 해주지않고 차단

             reject 문은 차단되었다고 응답을 해줌

 

 

현재 적용되고 있는 zone 확인

# firewall-cmd --get-defaulut-zone

 

 

활성화 되고 있는 zone 확인

# firewall-cmd --get-active-zone

 

 

특정 zone에 있는 포트/서비스 목록 확인

# firewall-cmd --zone=[zone이름] --list-ports / --list-services


2. 포트 (port)

포트란?

포트란 호스트 내에서 실행되고 있는 프로세스를 구분짓기 위한 16비트의 논리적 할당이다.

 

간단히 IP주소는 컴퓨터를 찾을 때 필요한 주소이고,

포트는 컴퓨터 안에서 프로그램을 찾을 때 필요한 것이다.

 

 예를 들면 지금 이 PC의 IP가 192.168.10.10 이라고 하면 컴퓨터에서 FTP로 자료를 받을 때 사용하는 IP주소는 자신의 IP주소인 192.168.10.10이고 채팅할 때의 IP주소도 192.168.10.10이다. FTP서버와 채팅 서버가 각각 패킷을 92.168.10.10 주소로 보내려고 하면 혼돈이 생긴다. 그  IP주소를 사용하는 프로그램이 하나가 아닌 것이다. 그래서 포트 번호가 생겼고, FTP서버가 포트 6000을 사용하면 채팅서버는 6001을 사용함으로써 프로세스를 구분한다.

 

결론: 컴퓨터의 주소가 IP주소이고, 프로그램의 주소가 포트 번호이다.

 

이해가 어려우면 다른 비유로 설명을 해본다.

아주 큰 집이 있다. 이 집에는 100명이 살고있다.

또 이 집에는 편지만 들어갈 수 있는 조그만 창문이 엄청 많이 있다.

(참고, 편지는 마법처럼 날아서 온다.)

그 조그만 창문에는 편지가 하나만 들어올 수 있고, 만약 편지끼리 부딪히면 찢긴다.

그러던 어느날에 하필 편지 100통이 한꺼번에 날아서 이 집 정문에 있는 창문 한곳으로

배송하는중에 부딪혀서 편지가 찢겨서 읽을 수 없게된다.

그 편지들은 각각 100명에게 하나씩 온것인데 전부 그 편지가 찢겨서 읽지 못했다.

그 100명이 같은 집에 살고 있으니 전부 주소는 같다. 

그래서 100명이 생각하다가 모두 편지를 받기 위해서 아이디어를 냈다.

많은 창문을 이용해서 각자 창문에 번호을 쓰고 집 주소 몇번 창문으로 가져다 돌라고 했다.

그 뒤로 모두 편지가 찢어지지 않고 모두 다 사이좋게 받기 시작했다. 

 

결론: 집 주소는 IP주소이고, 창문 번호는 포트 번호 입니다.

 

포트번호 0부터 65535까지 사용할 수 있고, 0부터 1024까지는 어떤 서비스들이 사용될 수 있도록 예약되어 있다.

0~511 TCP/IP 기반의 어플리케이션 사용 예약 / 512~1024 운영체제에서 사용되도록 예약

 

○ 자주 사용하는 서비스 포트 번호

 

포트 번호      TCP/UDP      포트 서비스

20                  tcp            FTP 데이터

21                  tcp                FTP

22                  tcp               SSH

25                  tcp               SMTP

53                tcp,udp           DNS

80                tcp,udp           HTTP

110                tcp               POP3

161                udp             SNMP

443                tcp              HTTPS

1521               tcp             ORACLE

1433               tcp             MYSQL

3306               tcp             MS-SQL

3389               tcp              RDP             

 

포트는 방화벽에서 열면 된다. 위 방화벽 설명에 보면 나온다.

 

포트 상태 확인

 

※ netstat가 명령어에 없으면 yum install net-tools 로 설치하면 netstat를 쓸 수 있다.

# netstat -nap | grep 포트번호 or 서비스명   // 열려있는 모든 포트 / 서비스 표시

 n: host명으로 표시

 a: 모든 소켓 표시

 p: 프로세스 ID 와 프로그램명 표시

 l : 연결 가능 상태 표시

▷ t/u : tcp/udp

▷ r : 라우팅 테이블

▷ s : 네트워크 통계

 

# netstat -anlt | grep LISTEN    예시 분석

Proto(Protocol) : 프로토콜의 종류,  tcp/udp

 

Local Address : 자기 자신의 IP주소:포트(Port)번호,

                    0.0.0.0 은 특정IP와 연결되어 있지 않다는 뜻

 

Foreign Address : 상대방 측의 IP주소:포트(Port)번호,

                       0.0.0.0 은 아직 통신이 시작되지 않았다는 뜻

 

State : 현재 서비스 연결 상태

 

 

자주 사용 하는 명령어

# netstat -nap : 연결을 기다리는 목록과 프로그램 표시

# netstat -an | grep 포트번호 : 특정 포트 사용 중인지 표시

# netstat -an | grep LISTEN : 현재 열려있는 모든 포트 표시

# netstat -nlpt : TCP listening 상태의 포트와 프로그램 표시

# netstat -an | grep ESTABLISH : 연결되어있는 모든 포트 표시

 

상태 확인

▷ LISTEN - 포트가 열려있는 상태, 연결 대기

▷ SYS_SENT - 클라이언트가 연결 요청 상태

▷ SYN_RECEIVED - 연결 요청 응답 후 확인 대기

▷ CLOSE - 연결이 끊어짐

▷ CLOST_WAIT - 연결이 종료되기를 기다리는 상태

▷ ESTABLISH - 연결이 되어 있는 상태

 

 

 

반응형

댓글