네트워크와 방화벽, 왜 배포판마다 다를까?
리눅스의 네트워크 진단 명령어(ip, ss, curl 등)는 대부분 배포판 공통입니다. 그러나 방화벽 도구는 배포판과 버전에 따라 크게 다릅니다. Ubuntu는 ufw, RHEL/CentOS는 firewalld, 구버전은 iptables를 직접 사용합니다.
이 글에서는 공통 네트워크 명령어를 먼저 정리한 뒤, 배포판별 방화벽 설정을 비교합니다.
네트워크 진단 명령어 (공통)
아래 명령어는 거의 모든 배포판에서 동일하게 사용할 수 있습니다.
IP 주소 및 인터페이스 확인
# IP 주소 확인 (ifconfig 대체)
ip addr show
# 또는 간략히
ip a
# 특정 인터페이스만 확인
ip addr show eth0
# 라우팅 테이블 확인
ip route show
# default via 192.168.1.1 dev eth0
# DNS 서버 확인
cat /etc/resolv.conf
# nameserver 8.8.8.8
ifconfig는 구버전 도구로 많은 최신 배포판에서 기본 설치되지 않습니다. ip 명령어가 공식 대체제입니다.
| 구 명령어 | 새 명령어 | 용도 |
|---|---|---|
ifconfig | ip addr | IP 주소 확인 |
ifconfig eth0 up | ip link set eth0 up | 인터페이스 활성화 |
route | ip route | 라우팅 테이블 |
netstat | ss | 소켓/포트 확인 |
arp | ip neigh | ARP 테이블 |
포트 및 연결 확인
# 열린 포트 확인 (리스닝 TCP, 프로세스 포함)
ss -tlnp
# State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
# LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234))
# LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=567))
# 특정 포트 사용 프로세스 확인
ss -tlnp | grep :3000
# 모든 연결 상태 (ESTABLISHED, TIME_WAIT 등)
ss -tan
# UDP 포트 확인
ss -ulnp
| 옵션 | 의미 |
|---|---|
-t | TCP만 |
-u | UDP만 |
-l | LISTEN 상태만 |
-n | 포트 번호 숫자로 표시 (이름 변환 안 함) |
-p | 프로세스 정보 포함 (root 권한 필요) |
-a | 모든 소켓 (LISTEN + ESTABLISHED 등) |
연결 테스트
# ICMP 핑 (4회)
ping -c 4 8.8.8.8
# DNS 조회
nslookup example.com
dig example.com A # 상세 DNS 쿼리
# TCP 포트 연결 테스트 (telnet 대체)
nc -zv 192.168.1.100 3306
# Connection to 192.168.1.100 3306 port [tcp/mysql] succeeded!
# HTTP 요청 테스트
curl -I https://example.com # 헤더만 확인
curl -o /dev/null -s -w "%{http_code}\n" https://example.com # 상태 코드만
# 경로 추적
traceroute 8.8.8.8 # ICMP 기반
tracepath 8.8.8.8 # UDP 기반 (설치 불필요)
nc(netcat)는 telnet 대신 TCP/UDP 포트 연결 테스트에 사용합니다. -z는 데이터를 보내지 않고 연결만 테스트, -v는 결과를 출력합니다.
방화벽: 배포판별 도구 비교
리눅스 방화벽의 핵심은 커널의 netfilter 프레임워크입니다. iptables, nftables, ufw, firewalld는 모두 이 netfilter를 제어하는 사용자 도구(프론트엔드)입니다.
| 배포판 | 버전 | 기본 방화벽 도구 | 백엔드 |
|---|---|---|---|
| Ubuntu 16.04+ | LTS | ufw | iptables → nftables |
| Debian 10+ | Buster+ | nftables (ufw 설치 가능) | nftables |
| RHEL/CentOS 7 | 7.x | firewalld | iptables |
| RHEL/Rocky/Alma 8+ | 8.x, 9.x | firewalld | nftables |
| Alpine | 3.x | iptables (직접 사용) | iptables |
| Arch | Rolling | nftables (firewalld 설치 가능) | nftables |
UFW (Ubuntu/Debian)
UFW(Uncomplicated Firewall)는 이름 그대로 간단한 방화벽 도구입니다. iptables/nftables를 내부적으로 사용하면서 직관적인 명령을 제공합니다.
# === UFW 기본 명령 (Ubuntu/Debian) ===
# 방화벽 활성화/비활성화
sudo ufw enable
sudo ufw disable
sudo ufw status verbose # 상태 확인 (상세)
# 기본 정책 설정
sudo ufw default deny incoming # 수신 기본 차단
sudo ufw default allow outgoing # 송신 기본 허용
# 포트 허용
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 3000:3100/tcp # 포트 범위
# IP 기반 규칙
sudo ufw allow from 192.168.1.0/24 to any port 22 # 내부망에서만 SSH 허용
sudo ufw deny from 10.0.0.5 # 특정 IP 차단
# 규칙 삭제
sudo ufw delete allow 80/tcp
sudo ufw status numbered # 번호로 확인
sudo ufw delete 3 # 3번 규칙 삭제
# 규칙 초기화
sudo ufw reset
UFW의 규칙은 순서대로 평가됩니다. 먼저 매칭된 규칙이 적용되므로, 더 구체적인 규칙을 앞에 배치해야 합니다.
firewalld (RHEL/CentOS/Rocky)
firewalld는 zone 기반 방화벽으로, 네트워크 인터페이스를 zone에 할당하고 zone별 규칙을 관리합니다. firewall-cmd 명령으로 제어합니다.
# === firewalld 기본 명령 (RHEL/CentOS/Rocky) ===
# 상태 확인
sudo firewall-cmd --state # running
sudo firewall-cmd --list-all # 현재 zone의 전체 규칙
# 서비스 허용 (사전 정의 서비스명)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --permanent --add-service=ssh
# 포트 직접 허용
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=8000-8100/tcp # 범위
# IP 기반 규칙 (rich rule)
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
# 규칙 삭제
sudo firewall-cmd --permanent --remove-service=http
sudo firewall-cmd --permanent --remove-port=3000/tcp
# 변경사항 적용 (중요!)
sudo firewall-cmd --reload
# zone 관리
sudo firewall-cmd --get-zones # 사용 가능한 zone 목록
sudo firewall-cmd --get-default-zone # 기본 zone (보통 public)
sudo firewall-cmd --zone=trusted --add-source=10.0.0.0/8 --permanent
firewalld에서 --permanent 없이 실행하면 런타임에만 적용되고 재부팅 시 사라집니다. 항상 --permanent를 붙이고 --reload로 적용하는 것이 안전합니다.
iptables (레거시/Alpine)
iptables는 가장 오래되고 직접적인 방화벽 도구입니다. Alpine이나 구버전 Linux에서 직접 사용합니다. 규칙이 체인(chain) → 테이블(table) 구조로 동작합니다.
# === iptables 기본 명령 ===
# 현재 규칙 확인
sudo iptables -L -n -v # 줄번호 없이 상세 출력
sudo iptables -L -n --line-numbers # 줄번호 포함
# 포트 허용 (INPUT 체인에 추가)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # SSH
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT # HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # HTTPS
# IP 기반 허용/차단
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
sudo iptables -A INPUT -s 10.0.0.5 -j DROP
# 기본 정책 (주의: SSH 허용 후 설정!)
sudo iptables -P INPUT DROP # 수신 기본 차단
sudo iptables -P FORWARD DROP # 전달 기본 차단
sudo iptables -P OUTPUT ACCEPT # 송신 기본 허용
# 규칙 삭제 (줄번호 기반)
sudo iptables -D INPUT 3 # INPUT 체인 3번 규칙 삭제
# 규칙 영구 저장 (배포판별 다름)
# Ubuntu/Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save
# CentOS/RHEL 6
sudo service iptables save
# Alpine
sudo rc-service iptables save
iptables 규칙은 재부팅 시 초기화됩니다. 반드시 영구 저장 명령을 실행해야 합니다. 기본 정책을 DROP으로 바꾸기 전에 SSH 포트(22)를 허용하지 않으면 서버 접속이 차단되므로 순서에 주의합니다.
방화벽 명령 비교표
| 작업 | UFW (Ubuntu) | firewalld (RHEL) | iptables (레거시) |
|---|---|---|---|
| 상태 확인 | ufw status | firewall-cmd --list-all | iptables -L -n |
| 활성화 | ufw enable | systemctl start firewalld | (항상 활성) |
| HTTP 허용 | ufw allow 80/tcp | firewall-cmd --permanent --add-service=http | iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
| 포트 범위 | ufw allow 8000:8100/tcp | firewall-cmd --permanent --add-port=8000-8100/tcp | iptables -A INPUT -p tcp --dport 8000:8100 -j ACCEPT |
| IP 허용 | ufw allow from 10.0.0.0/8 | firewall-cmd --add-rich-rule=... | iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT |
| 규칙 적용 | 즉시 적용 | firewall-cmd --reload | 즉시 적용 (저장 별도) |
| 규칙 저장 | 자동 저장 | --permanent 플래그 | netfilter-persistent save 등 |
| 난이도 | 쉬움 | 보통 | 어려움 |
정리
리눅스 네트워크 관리의 핵심은 진단 명령은 공통, 방화벽은 배포판별로 다르다는 점입니다.
- 네트워크 진단:
ip a,ss -tlnp,curl,nc -zv는 모든 배포판 공통 ifconfig/netstat는 레거시 —ip와ss로 대체- Ubuntu:
ufw— 가장 간단, 개인 서버에 적합 - RHEL/CentOS/Rocky:
firewalld— zone 기반, 기업 환경 표준 - Alpine/구버전:
iptables— 직접 체인 관리, 규칙 영구 저장 필수 - 방화벽 설정 전 반드시 SSH(22) 허용 먼저 — 잠금 사고 방지