본문 바로가기
서버 인프라 실무

UFW 방화벽 실전 규칙: SSH 잠그고, 웹만 열고, 포트스캔 막기

by yamoojin83 2025. 10. 6.

UFW 방화벽 실전 규칙: SSH 잠그고, 웹만 열고, 포트스캔 막기

운영 서버의 최소 보안은 기본 차단(deny) 후 필요한 포트만 허용하는 것입니다. 이 글에서는 UFW로 SSH를 안전하게 열고(필요 시 접속지 제한/속도 제한), 웹(80/443)만 개방하며, 간단한 포트스캔 무의미화를 위한 before.rules 강화까지 다룹니다.

1) 기본 정책


sudo apt -y install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing

2) SSH 안전 개방

  • 기본 포트(22) 유지 시 limit 규칙으로 과도 접속 차단
  • 가능하면 접속지 IP를 지정(사무실/점프호스트)하여 표면 축소

# 2-1) SSH rate limit (폭주 방지)
sudo ufw limit 22/tcp comment 'ssh-limit'

# 2-2) 접속지 IP 화이트리스트 (예: 203.0.113.10)
# sudo ufw allow from 203.0.113.10 to any port 22 proto tcp comment 'ssh-office'

# 2-3) 커스텀 포트를 쓴다면(예: 2222), sshd_config 수정 후 해당 포트 허용
# sudo ufw limit 2222/tcp comment 'ssh-2222'

3) 웹 포트(80/443)만 허용


sudo ufw allow 80/tcp comment 'http'
sudo ufw allow 443/tcp comment 'https'

4) IPv6 동시 활성화 여부

/etc/ufw/ufw.conf에서 IPV6=yes 설정을 확인하고, 서버가 IPv6를 사용 중이면 동일 규칙이 v6에도 적용됩니다.

5) 활성화 및 상태


sudo ufw enable
sudo ufw status verbose

6) 포트스캔 무의미화(간단 필터)

UFW는 내부적으로 iptables를 사용합니다. /etc/ufw/before.rulesNULL/XMAS 스캔 패턴 드랍을 추가할 수 있습니다. (변경 전 백업 필수)


--- /etc/ufw/before.rules
+++ /etc/ufw/before.rules
@@
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
# 추가: 간단 스캔 드랍 체인
:ufw-scan-drop - [0:0]

# 스캔 드랍 규칙
-A ufw-before-input -j ufw-scan-drop
-A ufw-scan-drop -p tcp --tcp-flags ALL NONE -j DROP      # NULL
-A ufw-scan-drop -p tcp --tcp-flags ALL ALL -j DROP       # XMAS
-A ufw-scan-drop -m state --state INVALID -j DROP         # INVALID
COMMIT

sudo ufw disable && sudo ufw enable   # 규칙 재적용
sudo ufw status verbose

7) 로그와 점검


sudo ufw logging on
sudo tail -f /var/log/ufw.log

8) 운영 팁

  • 새 규칙 적용 전, 현재 접속 세션이 끊기지 않도록 콘솔/서브 채널 확보
  • 클라우드 보안그룹(EC2 등)과 UFW 중복 차단 규칙으로 인해 예상치 못한 차단이 생길 수 있음
  • 자동화 도구(Ansible 등)로 정책을 코드화하여 서버 간 규칙 차이를 방지

 

 

👉 1편: Ubuntu 24.04에서 Nginx로 무료 SSL(HTTPS) 적용

👉 2편: UFW 방화벽 실전 규칙

👉 3편: systemd 서비스로 스프링부트 배포

👉 4편: Tomcat 10 설치+튜닝 체크리스트

👉 5편: Gradle 빌드 최적화로 빌드 50% 줄이기

👉 6편: Spring Security 6 JWT 로그인/리프레시 토큰

👉 7편: JPA N+1 완전 정복: 자동 감지부터 fetch join·EntityGraph·batch_size 실전 해결 전략

👉 8편: Docker로 PostgreSQL 운영(백업/복구/업그레이드)

👉 9편: Micrometer+Prometheus+Grafana 대시보드

👉 10편: Testcontainers로 DB 통합테스트