리눅스 방화벽 구성을 위한 firewalld, iptables, ufw 핵심 명령어 가이드

리눅스 시스템의 보안을 강화하기 위한 방화벽은 네트워크 트래픽을 필터링하여 허용되지 않은 접근을 차단하는 핵심 요소입니다. 리눅스 배포판에 따라 주로 사용하는 도구가 다르며, 대표적으로 **firewalld**, **iptables**, **ufw** 세 가지가 사용됩니다. 각 도구의 특성과 실제 운영 환경에서 자주 쓰이는 설정 명령어를 정리합니다.

1. 배포판별 방화벽 도구 확인

서버의 운영체제에 따라 기본적으로 활성화되어 있는 도구가 다릅니다. 먼저 현재 시스템에서 어떤 도구를 사용하는지 확인해야 합니다.

배포판 기본 방화벽 도구 특이사항
CentOS 7+, RHEL 7+, Fedora firewalld 동적 규칙 관리 방식
Ubuntu, Debian ufw iptables의 간소화 버전
CentOS 6, 레거시 시스템 iptables 모든 리눅스 커널의 표준

현재 상태 확인 명령:

# firewalld 상태 확인
systemctl status firewalld

# ufw 상태 확인
ufw status

# iptables 규칙 리스트 출력
iptables -L -n

2. firewalld (RHEL/CentOS 계열)

firewalld는 'Zone(구역)' 개념을 사용하여 네트워크 신뢰도에 따라 규칙을 관리합니다. 설정을 변경해도 연결이 끊기지 않는 동적 관리가 특징입니다.

주요 Zone 개념

  • public: 기본값. 공용 네트워크에서 사용하며 선택한 서비스만 허용합니다.
  • trusted: 모든 네트워크 연결을 신뢰합니다.
  • drop: 들어오는 모든 패킷을 응답 없이 버립니다.

핵심 설정 명령어

# 방화벽 시작 및 부팅 시 자동 실행 설정
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 특정 포트 허용 (예: 8080/TCP) - 영구 적용
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

# 특정 서비스 허용 (예: HTTPS)
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

# 특정 IP 주소 차단 (Rich Rule 활용)
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.50' reject"
sudo firewall-cmd --reload

# 현재 활성화된 전체 규칙 확인
sudo firewall-cmd --list-all

3. iptables (전통적인 규칙 관리)

iptables는 Chain(INPUT, OUTPUT, FORWARD)을 기반으로 패킷을 처리합니다. 규칙의 순서가 매우 중요하며 위에서부터 순차적으로 적용됩니다.

기본 정책 및 규칙 설정

# 모든 규칙 초기화
iptables -F

# 기본 정책을 DROP으로 설정 (보안 강화)
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 루프백(localhost) 통신 허용 (필수)
iptables -A INPUT -i lo -j ACCEPT

# 이미 연결된 세션의 패킷 허용
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH(22), HTTP(80) 포트 개방
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 특정 IP(10.0.0.5)로부터의 접속 차단
iptables -A INPUT -s 10.0.0.5 -j DROP

※ iptables 설정은 메모리에서 동작하므로, 서버 재부팅 후에도 유지하려면 iptables-services 패키지를 통해 저장하거나 iptables-save 명령을 사용해야 합니다.

4. ufw (Ubuntu/Debian 계열)

사용자 친화적인 인터페이스를 제공하며, 복잡한 iptables 명령어를 직관적으로 사용할 수 있게 설계되었습니다.

기본 사용법

# ufw 활성화
sudo ufw enable

# 기본 정책 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 포트 허용 및 차단
sudo ufw allow 443/tcp
sudo ufw deny 23/tcp

# 특정 서브넷의 접근 허용
sudo ufw allow from 192.168.1.0/24

# 규칙 삭제 (번호 확인 후 삭제)
sudo ufw status numbered
sudo ufw delete [규칙번호]

5. 실무 적용 시나리오

시나리오 1: 웹 서버 보안 설정

웹 서비스(80, 443)와 원격 관리(22) 포트만 열고 나머지는 모두 닫는 구성입니다.

# firewalld 기준
sudo firewall-cmd --permanent --add-service={http,https,ssh}
sudo firewall-cmd --reload

# ufw 기준
sudo ufw allow 80,443,22/tcp
sudo ufw enable

시나리오 2: 특정 IP에서만 데이터베이스 접속 허용

MySQL(3306) 포트를 관리자 PC(211.1.2.3)에서만 접속 가능하도록 제한합니다.

# firewalld Rich Rule 활용
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='211.1.2.3' port protocol='tcp' port='3306' accept"
sudo firewall-cmd --reload

# ufw 활용
sudo ufw allow from 211.1.2.3 to any port 3306

6. 운영 시 주의사항

  • SSH 접속 유지: 방화벽 설정을 처음 활성화할 때 SSH 포트(기본 22번)를 먼저 허용하지 않으면 원격 접속이 끊겨 서버에 접근할 수 없게 됩니다.
  • 영구 적용 확인: firewalld의 경우 --permanent 옵션 유무를 확인하고, iptables는 별도의 저장 과정을 거쳤는지 반드시 점검해야 합니다.
  • 규칙 순서: iptables를 직접 수정할 때는 거부(DROP) 규칙이 허용(ACCEPT) 규칙보다 상단에 위치하여 중요한 통신이 차단되지 않도록 순서를 조정해야 합니다.

태그: linux firewalld iptables ufw network-security

7월 13일 23:02에 게시됨