1. Firewalld 개요
CentOS 7에서는 기본 방화벽으로 firewalld를 사용합니다. 이전 CentOS 6 시절의 iptables와 달리 zone 기반의 동적 방화벽 관리 방식을 제공합니다. firewalld가 설치되어 있지 않다면 다음 명령어로 설치할 수 있습니다.
yum install firewalld firewalld-config
2. 기본 포트 개방 및 차단
2.1 단일 포트 개방 (예: 80, 443, 21, 22, 53)
firewall-cmd --zone=public --add-port=80/tcp --permanent
2.2 단일 포트 차단
firewall-cmd --zone=public --remove-port=80/tcp --permanent
옵션 설명
--zone: 적용될 영역(scope) 지정--add-port=80/tcp: 포트와 프로토콜 형식으로 추가--permanent: 영구 적용. 이 옵션이 없으면 재시작 시 사라짐
2.3 범위 포트 개방
firewall-cmd --zone=public --add-port=8000-9999/udp --permanent
firewall-cmd --zone=public --add-port=8000-9999/tcp --permanent
3. 서비스 제어 명령어
| 작업 | 명령어 |
|---|---|
| 방화벽 시작 | systemctl start firewalld.service |
| 방화벽 재시작 | systemctl restart firewalld.service 또는 firewall-cmd --reload |
| 현재 포트 목록 확인 | firewall-cmd --permanent --list-port |
| 방화벽 중지 | systemctl stop firewalld |
| 부팅 시 자동 실행 | systemctl enable firewalld |
| 부팅 시 자동 실행 해제 | systemctl disable firewalld |
| 상태 확인 | systemctl status firewalld 또는 firewall-cmd --state |
4. 특정 IP만 포트 허용 (Rich-Rule)
4.1 PostgreSQL: 192.168.142.166만 5432 포트 접속
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="5432" accept"
4.2 Redis: 192.168.142.166만 6379 포트 접속
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.142.166" port protocol="tcp" port="6379" accept"
4.3 특정 IP 차단 (drop)
firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="192.168.1.100" drop"
4.4 특정 IP 대역 차단
firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="10.30.125.0/24" drop"
4.5 포트 포워딩
모든 IP에서 8000번 포트로 들어오는 요청을 192.168.11.118의 8000번 포트로 전달
firewall-cmd --permanent --zone="public" --add-rich-rule="rule family="ipv4" source address="0.0.0.0/0" forward-port port="8000" protocol="tcp" to-port="8000" to-addr="192.168.11.118"
4.6 Rich-Rule 조회 및 삭제
# 모든 Rich-Rule 조회
firewall-cmd --list-rich-rules
# 특정 Rich-Rule 삭제 (예: 포트 포워딩 규칙)
firewall-cmd --permanent --remove-rich-rule 'rule family="ipv4" source address="0.0.0.0/0" forward-port port="2224" protocol="tcp" to-port="2224" to-addr="192.168.11.241"'
# 설정 반영을 위한 재시작
systemctl restart firewalld.service
5. 전체 설정 확인
# 모든 zone 설정 보기
firewall-cmd --list-all
# 모든 Rich-Rule 목록 보기
firewall-cmd --list-rich-rules
# 특정 포트가 열려 있는지 확인
firewall-cmd --query-port=80/tcp
Rich-Rule 조회 예시
rule family="ipv4" source address="0.0.0.0/0" forward-port port="8078" protocol="tcp" to-port="8080" to-addr="192.168.11.234"
rule family="ipv4" source address="0.0.0.0/0" forward-port port="8000" protocol="tcp" to-port="8000" to-addr="192.168.11.118"
rule family="ipv4" source address="0.0.0.0/0" forward-port port="3722" protocol="tcp" to-port="22" to-addr="192.168.11.249"
위 예시는 SSH 포트를 3722 → 22로, 웹 포트 8000과 8078을 각각 내부 서버로 포워딩한 설정입니다.