3강 / 20강

방화벽 — 첫 번째이자 가장 값싼 방어

ufw 로 문을 닫고, 밖에서 확인한다

방화벽 — 첫 번째이자 가장 값싼 방어
방화벽은 '어떤 문으로 들어올 수 있는가'를 정하는 문지기입니다.

2강에서 우리 서버가 3306(MySQL) 까지 인터넷에 열어 두고 있다는 걸 봤습니다. 가장 먼저, 가장 값싸게 할 수 있는 방어는 안 쓰는 문을 닫는 것입니다. 그 일을 하는 것이 방화벽이에요.

우분투에서는 ufw(Uncomplicated FireWall)를 씁니다. 이름 그대로 간단합니다 — "어느 포트를 열지"만 정하면 나머지는 전부 막습니다.

기본은 '다 막고, 필요한 것만 연다'

좋은 방화벽 정책은 화이트리스트입니다. "이것만 빼고 다 막아"가 아니라 "이것만 열고 나머지는 다 막아"예요. 우리 쇼핑몰이 필요한 문은 딱 셋입니다.

  • 22 (SSH) — 나만 관리 접속. 사실 이것도 나중엔 더 좁힙니다(6강)
  • 80 (HTTP) · 443 (HTTPS) — 손님이 쇼핑하는 문

3306(DB)·8000(앱 내부 포트)은 서버 안에서만 쓰면 됩니다. 밖에 열 이유가 없어요.

Status: inactive — 지금은 모든 포트가 열린 것과 같습니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)

직접 닫아 봅시다

아래 순서대로 실행하세요. 필요한 문 셋을 먼저 열고, 마지막에 방화벽을 켭니다.

22·80·443 만 ALLOW, 나머지는 전부 차단됩니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)

이제 밖에서 확인해 봅시다. 방금 닫은 3306 이 공격자 눈에 어떻게 보일까요? 관점을 🥷 공격자로 두고 실행하세요.

3306 이 이제 filtered 로 바뀌었는지 보세요.
🥷 공격자 브라우저 안에서 실행 (계산용)
방화벽 실습실 — 규칙을 바꾸고 밖에서 두드려 본다 (22 잠금 사고 포함)
불러오는 중…

ufw 의 속살 — iptables

ufw allow 80 이라고 치면, 실제로는 리눅스 커널의 iptables 라는 훨씬 복잡한 규칙표에 한 줄이 추가됩니다. ufw 는 그걸 쉽게 만든 앞치마예요. fail2ban(7강)이 공격자를 차단할 때도 바로 이 iptables 에 DROP 규칙을 꽂습니다.

ufw 규칙이 실제로는 iptables 에 어떻게 들어가 있는지 봅니다.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)
🤔 확인 문제
방화벽을 켤 때 반드시 지켜야 할 순서는?
🤔 확인 문제
DB 포트 3306 을 인터넷에 열어 두면 안 되는 이유로 가장 정확한 것은?