Firewalld & Rich Rules
Netfilter(nftables/iptables)를 쉽게 설정·관리할 수 있게 해주는
방화벽 관리 서비스와 그 확장 규칙 언어
Netfilter(nftables/iptables)를 쉽게 설정·관리할 수 있게 해주는
방화벽 관리 서비스와 그 확장 규칙 언어
리눅스 커널에 있는 실제 방화벽 기능(패킷 처리)
Netfilter를 직접 제어하는 도구
nftables/iptables를 더 쉽게 관리하도록 만든 서비스
신뢰 수준별 정책 그룹
이름으로 포트 개방
임시·영구 설정 구분
재시작 없이 반영
ens160 → public Zone # 외부망 ens192 → trusted Zone # 내부망
같은 서버라도 네트워크 인터페이스마다 다른 방화벽 정책을 적용할 수 있다 → 외부망/내부망 정책을 쉽게 분리.
포트를 직접 입력할 수도 있지만, 서비스 이름으로도 열 수 있다.
firewall-cmd --add-service=http # 실제로는 TCP 80을 의미
firewall-cmd --add-port=8080/tcp
firewall-cmd --permanent --add-port=8080/tcp firewall-cmd --reload
iptables는 저장·재적용이 번거롭지만, Firewalld는 기존 연결을 유지하며 동적으로 규칙을 반영한다.
firewall-cmd --reload
| Zone | 신뢰 수준 | 기본 정책 | 사용 예시 |
|---|---|---|---|
| drop | 매우 낮음 | 모든 패킷 폐기(응답 없음) | 공격자 차단 |
| block | 매우 낮음 | 모든 연결 거부(응답 있음) | 접근 차단 |
| public | 낮음 | 필요한 서비스만 허용 | 인터넷 |
| external | 낮음 | NAT 환경 | 게이트웨이 |
| dmz | 중간 | DMZ 서버 | 웹 서버 |
| work / home / internal | 높음 | 내부망 정책 | 사내·가정·사설망 |
| trusted | 매우 높음 | 거의 모든 연결 허용 | 관리망 |
firewall-cmd --zone=public --add-service=http firewall-cmd --zone=public --add-service=https
Zone을 기준으로 인터페이스나 네트워크 출처마다 서로 다른 정책을 적용한다.
하나의 서버가 여러 네트워크에 연결되어 있어도 각 네트워크의 신뢰 수준에 맞는 방화벽 정책을 손쉽게 구성할 수 있다.
| UFW | Firewalld |
|---|---|
| Ubuntu 계열에서 주로 사용 | RHEL·Rocky·CentOS·Fedora 기본 사용 |
| 명령어가 매우 단순 | Zone 기반으로 더 유연한 관리 |
| 초보자가 배우기 쉬움 | 서버 환경에서 많이 사용 |
| 내부적으로 Netfilter 사용 | 내부적으로 Netfilter(nftables) 사용 |
| 구분 | 일반 firewalld 규칙 | Rich Rules |
|---|---|---|
| 포트 허용 | 가능 | 가능 |
| 서비스 허용 | 가능 | 가능 |
| 특정 IP 지정 | 제한적 | 가능 |
| 로그 기록 | 어려움 | 가능 |
| 시간 제한, 조건 조합 | 어려움 | 가능 |
| 세밀한 정책 설정 | 제한적 | 가능 |
firewall-cmd --add-service=ssh firewall-cmd --add-port=80/tcp
firewall-cmd --permanent \ --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'
firewall-cmd --permanent \ --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" accept'
IPv4만 사용, 출발지 IP 192.168.1.100, SSH(22번 포트), accept(허용)
firewall-cmd --permanent \ --add-rich-rule='rule family="ipv4" source address="192.168.1.200" drop'
192.168.1.200에서 오는 모든 패킷을 DROP(폐기)한다.
firewall-cmd --permanent \ --add-rich-rule='rule service name="ssh" log prefix="SSH_ACCESS " accept'
SSH 접속을 SSH_ACCESS 접두어로 로그에 기록한 뒤 허용한다.
firewall-cmd --permanent \ --add-rich-rule='rule protocol value="icmp" drop'
ICMP 패킷을 DROP하여 Ping 요청을 차단한다.
예) public Zone의 Rich Rule은 public Zone으로 분류된 패킷에만 적용된다.
iptables -A INPUT \ -s 192.168.1.100 \ -p tcp \ --dport 22 \ -j ACCEPT
firewall-cmd --add-rich-rule='rule source address="192.168.1.100" port port="22" protocol="tcp" accept'
firewalld에서는 조금 더 읽기 쉬운 형태로 작성할 수 있다. Rich Rules는 iptables에서는 사용할 수 없는, firewalld 전용 문법이다.
iptables는 강력하지만 문법이 복잡하다 — 처음 배우는 사람은 읽기가 쉽지 않음.
iptables -A INPUT -p tcp -m state --state NEW \ -s 192.168.1.0/24 \ --dport 22 \ -j ACCEPT
rule source=192.168.1.0/24 port=22 accept
Rich Rules는 정책을 사람이 읽기 쉽게 표현하는 데 초점을 맞춘다.
| iptables | firewalld 기본 규칙 | Rich Rules |
|---|---|---|
| 세밀하지만 문법이 복잡 | 단순하지만 세밀한 조합 어려움 | iptables 수준의 세밀함 + 읽기 쉬운 문법 |
Rich Rules는 iptables에서 사용할 수 있는 문법이 아니라, firewalld 전용의 고급 규칙 언어다. 대부분의 기능은 iptables로도 구현 가능하지만, 문법과 관리 방식이 다르다.