CentOS 7 Firewalld 방화벽 명령어 완벽 가이드

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을 각각 내부 서버로 포워딩한 설정입니다.

태그: firewalld CentOS 7 방화벽 Rich-Rule 포트포워딩

5월 25일 03:33에 게시됨