2강 / 20강
정찰 — 공격자는 무엇부터 보나
nmap 으로 내 서버의 열린 문을 세어 본다
공격에는 순서가 있습니다. 영화처럼 곧바로 뚫고 들어오는 게 아니라, 가장 먼저 조용히 살펴봅니다. 어떤 문이 있고, 그 문 뒤에 무엇이 있는지. 이 단계를 정찰(reconnaissance)이라고 해요.
방어하는 우리가 정찰 도구를 배우는 이유는 하나입니다 — 공격자가 보는 것을 나도 봐야 무엇을 닫을지 알 수 있으니까요.
포트는 건물의 문입니다
서버는 IP 주소(건물 주소) 하나에 포트라는 문이 65535개 있습니다. 각 문 뒤에는 서로 다른 프로그램이 앉아 있어요.
- 22 — SSH (관리자가 원격 접속하는 문)
- 80 / 443 — 웹 (손님이 쇼핑하는 문, http / https)
- 3306 — MySQL (데이터베이스 — 절대 밖에 열면 안 되는 문)
포트 스캔은 이 문들을 하나씩 노크해 보고, 누가 대답하는지 적는 것입니다.
각 포트의 STATE 열을 보세요.
🥷 공격자
브라우저 안에서 실행 (계산용)
open · filtered · closed — 대답의 세 가지 방식
open
문이 열려 있고 안에서 프로그램이 대답함. 공격자가 노리는 곳
filtered
방화벽이 삼킴 — 대답 자체가 없음. 공격자에게 가장 답답한 상태
closed
문은 있는데 안에 아무도 없음(RST 응답). 여기 서버가 있다는 건 들킴
방화벽(3강)을 켜면 안 쓰는 포트가 closed 에서 filtered 로 바뀝니다. 공격자 입장에서는 "여기 서버가 있긴 한데 대답을 안 하네" 가 되어, 어디를 노려야 할지조차 알기 어려워져요.
OpenSSH 9.6, nginx 1.24 처럼 버전이 보입니다.
🥷 공격자
브라우저 안에서 실행 (계산용)
같은 명령, 다른 자리
이 강의의 핵심 습관 하나 — 같은 스캔을 세 자리에서 해 보기입니다. 셀 오른쪽 위에서 관점을 바꿔 보세요.
- 🖥️ 서버 안(web1) — 방화벽을 지나지 않으므로 127.0.0.1 에만 붙은 것까지 다 보입니다
- 💻 손님(client) · 🥷 공격자(attacker) — 밖에서 실제로 보이는 것만 보입니다
정말 중요한 건 밖에서 어떻게 보이느냐입니다. 서버 안에서 아무리 포트가 많아도, 방화벽이 밖에서 다 막아 준다면 공격 표면은 좁은 거예요.
서버 자신이 보는 포트. 밖에서 보이는 것과 비교해 보세요.
🖥️ 내 가상 서버
브라우저 안에서 실행 (계산용)
🤔 확인 문제
공격자가 스캔했더니 3306 포트가 filtered 로 나왔습니다. 무슨 뜻일까요?
해설 filtered 는 방화벽이 패킷을 삼켜 아무 응답이 없는 상태입니다. MySQL 이 실제로 떠 있든 아니든, 공격자는 알 수 없어요. 이것이 방화벽을 켜는 첫 번째 효과입니다(3강).
🤔 확인 문제
내 서버를 가장 정확하게 점검하려면 어느 자리에서 스캔해야 할까요?
해설 공격자는 밖에서만 봅니다. 서버 안에서 포트가 아무리 많아도 방화벽이 밖에서 막으면 공격 표면이 아니에요. 그래서 점검은 반드시 '밖에서 본 모습'으로 해야 합니다.