Linux OS/Redhat (CentOS & Rocky Linux)

firewalld 방화벽 설정, 옵션 정리 (CentOS 7 OS 이상)

서버엔지니어 2022. 11. 16.
728x90

CentOS 7의 방화벽 관리 데몬은 firewalld입니다. 설정은 firewall-cmd 명령어로 합니다.

 

* 방화벽 실행 여부 확인

firewall-cmd --state

실행 중이면 running, 실행 중이 아니면 not running을 출력합니다.

 

* 방화벽 다시 로드

firewall-cmd --reload

방화벽 설정 후 다시 로드해야 적용됩니다.

[ 서비스나 포트 추가/삭제하고 꼭 리로드해야 리스트에 뜨고 적용된다]

 

* (Zone) 출력하기

firewall-cmd --get-zones

(zone) 목록을 출력합니다.

 

firewall-cmd --get-default-zone

기본 존을 출력합니다.

 

firewall-cmd --get-active-zones

활성화된 존을 출력합니다.

 

* 사용 가능한 서비스/포트 출력하기

firewall-cmd --list-all

사용 가능한 모든 서비스/포트 목록을 출력합니다.

 

firewall-cmd --zone=public --list-all

public 존에 속한 사용 가능한 모든 서비스/포트 목록을 출력합니다.

 

* 서비스/포트 추가/제거

firewall-cmd --permanent --zone=public --add-port=포트번호/tcp

 

firewall-cmd --add-service=ftp

ftp 서비스를 추가합니다.

 

 

firewall-cmd --remove-service=ftp

ftp 서비스를 제거합니다.

 

firewall-cmd --add-port=21/tcp

21 tcp 포트를 추가합니다.

 

firewall-cmd --remove-port=21/tcp

21 tcp 포트를 제거합니다.

 

* 특정 IP 허용 방법

firewall-cmd --permanent --add-source=IP주소

 

* 특정 포트에 대한 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"

 

* 정책 삭제 방법

firewall-cmd --permanent --remove-port=포트번호/tcp

 

--zone=<zone>

zone 옵션이 없으면 기본 존(default zone)에 추가 또는 삭제를 합니다. 다른 존에 작업하고 싶으면 zone 옵션을 추가합니다. 예를 들어 firewall-cmd --zone=trusted --add-service=ftp  trusted 존에 ftp 서비스를 추가합니다.

 

--permanent

시스템 재부팅 또는 방화벽 재시작 후에도 적용되도록 하려면 --permanent 옵션을 붙입니다.

 

firewall-cmd --permanent --add-service=ftp

 

3) 매치(match)

 

iptables에서 패킷을 처리할때 만족해야 하는 조건을 가리킨다. , 이 조건을 만족시키는 패킷들만 규칙을 적용한다.

 

--source (-s) : 출발지 IP주소나 네트워크와의 매칭

--destination (-d) : 목적지 ip주소나 네트워크와의 매칭

--protocol (-p) : 특정 프로토콜과의 매칭

--in-interface (i) : 입력 인테페이스

--out-interface (-o) : 출력 인터페이스

--state : 연결 상태와의 매칭

--string : 애플리케이션 계층 데이터 바이트 순서와의 매칭

--comment : 커널 메모리 내의 규칙과 연계되는 최대 256바이트 주석

--syn (-y) : SYN 패킷을 허용하지 않는다.

--fragment (-f) : 두 번째 이후의 조각에 대해서 규칙을 명시한다.

--table (-t) : 처리될 테이블

--jump (-j) : 규칙에 맞는 패킷을 어떻게 처리할 것인가를 명시한다.

--match (-m) : 특정 모듈과의 매치

 

 

4) 타겟(target)

 

iptables는 패킷이 규칙과 일치할 때 동작을 취하는 타겟을 지원한다.

 

-ACCEPT : 패킷을 받아들인다.

-DROP : 패킷을 버린다(패킷이 전송된 적이 없던 것처럼).

-REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.

-LOG : 패킷을 syslog에 기록한다.

-RETURN : 호출 체인 내에서 패킷 처리를 계속한다.

 

REJECT는 서비스에 접속하려는 사용자의 액세스를 거부하고 connection refused라는 오류 메시지를 보여주는 반면 DROP은 말 그대로 telnet 사용자에게 어떠한 경고 메시지도 보여주지 않은 채 패킷을 드롭한다. 관리자의 재량껏 이러한 규칙을 사용할 수 있지만 사용자가 혼란스러워하며 계속해서 접속을 시도하는 것을 방지하려면 REJECT를 사용하는 것이 좋다.

 

 

5) 연결 추적(Connection Tracking)

 

iptables는 연결 추적(connection tracking)이라는 방법을 사용하여 내부 네트워크 상 서비스 연결 상태에 따라서 그 연결을 감시하고 제한할 수 있게 해준다. 연결 추적 방식은 연결 상태를 표에 저장하기 때문에, 다음과 같은 연결 상태에 따라서 시스템 관리자가 연결을 허용하거나 거부할 수 있다.

 

NEW : 새로운 연결을 요청하는 패킷, , HTTP 요청

 

ESTABLISHED : 기존 연결의 일부인 패킷

 

RELATED : 기존 연결에 속하지만 새로운 연결을 요청하는 패킷, 예를 들면 접속 포트가 20인 수동 FTP의 경우 전송 포트는 사용되지 않은 1024 이상의 어느 포트라도 사용 가능하다.

 

INVALID : 연결 추적표에서 어디 연결에도 속하지 않은 패킷

 

상태에 기반(stateful) iptables 연결 추적 기능은 어느 네트워크 프로토콜에서나 사용 가능하다. UDP와 같이 상태를 저장하지 않는 (stateless) 프로토콜에서도 사용할 수 있다.

 

6) 명령어(commond)

 

-A (--append) : 새로운 규칙을 추가한다.

-D (--delete) : 규칙을 삭제한다.

-C (--check) : 패킷을 테스트한다.

-R (--replace) : 새로운 규칙으로 교체한다.

-I (--insert) : 새로운 규칙을 삽입한다.

-L (--list) : 규칙을 출력한다.

-F (--flush) : chain으로부터 규칙을 모두 삭제한다.

-Z (--zero) : 모든 chain의 패킷과 바이트 카운터 값을 0으로 만든다.

-N (--new) : 새로운 chain을 만든다.

-X (--delete-chain) : chain을 삭제한다.

-P (--policy) : 기본정책을 변경한다.

댓글