← 전체 글로 돌아가기

서버 운영

서버 방화벽 설정할 때 실수하지 않는 방법

방화벽 규칙을 추가할 때 원인 추적과 안전성을 잃지 않는 체계적인 접근법.

서버 운영을 하다 보면 방화벽을 만질 일이 자꾸 생긴다. "왜 연결이 안 되지?"라는 질문의 답이 보통 방화벽이기 때문이다. 하지만 방화벽은 보안의 마지막 방어선이라서 함부로 손댔다가는 서버가 노출될 수 있다.

현재 상태부터 확인하자

# 현재 열려있는 포트 확인
sudo ss -lntp

# 방화벽 규칙 확인
sudo ufw status

# 더 자세히
sudo ufw status verbose

이 정보를 먼저 적어둔다. 나중에 뭔가 잘못되었을 때 이 상태로 돌아가려면 기록이 필요하다.

포트별로 확인해야 할 것

웹 서버 (80, 443)

# HTTP/HTTPS가 열려있는가?
sudo ufw status | grep -E 'http|https'

# 실제로 연결되는가?
curl -I http://example.com
curl -I https://example.com

SSH (22)

# SSH 포트가 제한되어 있는가?
sudo ufw status | grep ssh

# 특정 IP에서만 허용하기
sudo ufw allow from 203.0.113.0/24 to any port 22

데이터베이스 (5432, 3306 등)

데이터베이스는 외부에 절대 노출되면 안 된다.

# PostgreSQL이 내부 트래픽만 듣고 있는가?
sudo ss -lntp | grep 5432
# 127.0.0.1:5432로 보여야 함

# 만약 0.0.0.0:5432면 위험함

방화벽 규칙 추가할 때의 순서

항상 이 순서를 따르자.

  1. 현재 상태 기록
   sudo ufw status verbose > ~/firewall-backup-$(date +%Y%m%d-%H%M%S).txt
  1. 규칙 추가
   sudo ufw allow 8080/tcp  # 한 포트만
  1. 즉시 테스트
   telnet localhost 8080
   # 또는
   curl http://localhost:8080
  1. 외부에서 테스트 (중요!)
   # 다른 머신에서
   curl http://<server-ip>:8080
  1. 만약 안 되면 즉시 되돌리기
   sudo ufw delete allow 8080/tcp

자주 놓치는 실수

규칙 순서 무시

# ❌ 나쁜 예: 차단 규칙 뒤에 허용 규칙 추가
sudo ufw default deny incoming
sudo ufw allow 80/tcp
# 이미 'deny all'이 먼저라서 80도 안 됨

# ✅ 좋은 예: 허용 규칙을 먼저 지정
sudo ufw allow 80/tcp
sudo ufw default deny incoming

로컬에서 테스트만 하기

# ❌ 로컬에서만 확인
sudo ss -lntp  # 포트가 보이면 OK라고 생각

# ✅ 실제 외부 테스트 필요
# 다른 장비에서: curl http://your-server-ip:port

SSH 차단

# ⚠️ 매우 위험
sudo ufw deny 22/tcp  # SSH를 막으면 원격 접근 불가
# 물리적으로 접근 가능할 때만 복구 가능

디스크와 프로세스도 함께 확인

# 디스크 여유 공간
df -h

# 활동 중인 프로세스
sudo ss -lntp | grep LISTEN

# 로그 파일 크기
du -sh /var/log/

포트가 열려있어도 실제 서비스가 죽어있으면 소용없다.

권한 확인도 함께

# 설정 파일이 올바른 소유권을 가지고 있나?
ls -la /etc/nginx/nginx.conf
ls -la /etc/mysql/my.cnf

# 서비스 계정이 필요한 권한을 가지고 있나?
sudo ls -la /var/www/html/

최종 체크리스트

  1. 변경 전 상태 백업
  2. 한 번에 한 가지만 수정
  3. 로컬과 외부에서 모두 테스트
  4. 실제 트래픽으로 검증 (중요!)
  5. 변경 사항과 이유를 기록
  6. 필요하면 즉시 되돌릴 수 있도록 준비

방화벽은 보안이 목적이니까, "일단 되게 하고 나중에 닫자"는 태도는 위험하다. 처음부터 최소한의 권한만 부여하는 게 좋다.