리눅스 네트워크 & 방화벽 명령어 가이드: 배포판별 비교

네트워크와 방화벽, 왜 배포판마다 다를까?

리눅스의 네트워크 진단 명령어(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 명령어가 공식 대체제입니다.

구 명령어새 명령어용도
ifconfigip addrIP 주소 확인
ifconfig eth0 upip link set eth0 up인터페이스 활성화
routeip route라우팅 테이블
netstatss소켓/포트 확인
arpip neighARP 테이블

포트 및 연결 확인

# 열린 포트 확인 (리스닝 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
옵션의미
-tTCP만
-uUDP만
-lLISTEN 상태만
-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+LTSufwiptables → nftables
Debian 10+Buster+nftables (ufw 설치 가능)nftables
RHEL/CentOS 77.xfirewalldiptables
RHEL/Rocky/Alma 8+8.x, 9.xfirewalldnftables
Alpine3.xiptables (직접 사용)iptables
ArchRollingnftables (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 statusfirewall-cmd --list-alliptables -L -n
활성화ufw enablesystemctl start firewalld(항상 활성)
HTTP 허용ufw allow 80/tcpfirewall-cmd --permanent --add-service=httpiptables -A INPUT -p tcp --dport 80 -j ACCEPT
포트 범위ufw allow 8000:8100/tcpfirewall-cmd --permanent --add-port=8000-8100/tcpiptables -A INPUT -p tcp --dport 8000:8100 -j ACCEPT
IP 허용ufw allow from 10.0.0.0/8firewall-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는 레거시ipss로 대체
  • Ubuntu: ufw — 가장 간단, 개인 서버에 적합
  • RHEL/CentOS/Rocky: firewalld — zone 기반, 기업 환경 표준
  • Alpine/구버전: iptables — 직접 체인 관리, 규칙 영구 저장 필수
  • 방화벽 설정 전 반드시 SSH(22) 허용 먼저 — 잠금 사고 방지

이 글이 도움이 되었나요?