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 로 바뀌었는지 보세요.
🥷 공격자
브라우저 안에서 실행 (계산용)
ufw 의 속살 — iptables
ufw allow 80 이라고 치면, 실제로는 리눅스 커널의 iptables 라는
훨씬 복잡한 규칙표에 한 줄이 추가됩니다. ufw 는 그걸 쉽게 만든 앞치마예요.
fail2ban(7강)이 공격자를 차단할 때도 바로 이 iptables 에 DROP 규칙을 꽂습니다.
ufw 규칙이 실제로는 iptables 에 어떻게 들어가 있는지 봅니다.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
🤔 확인 문제
방화벽을 켤 때 반드시 지켜야 할 순서는?
해설 allow 먼저, enable 나중입니다. 22번을 열지 않고 켜면 SSH 접속이 끊겨 스스로 갇힙니다. 이건 초보 관리자가 정말 자주 겪는 사고예요.
🤔 확인 문제
DB 포트 3306 을 인터넷에 열어 두면 안 되는 이유로 가장 정확한 것은?
해설 인터넷에 열린 DB 포트는 몇 시간 안에 스캐너에게 발견됩니다. DB 는 서버 내부에서만 접속하면 되므로, 밖에 열 이유가 전혀 없어요. '안 쓰는 문은 닫는다'의 대표 사례입니다.