648 words
3 mins
방화벽과 NAT
방화벽 기본
- 인바운드/아웃바운드 규칙
- 기본 정책 (기본 차단 vs 기본 허용)
인바운드/아웃바운드란
- 인바운드: 외부 → 내부로 들어오는 트래픽
- 아웃바운드: 내부 → 외부로 나가는 트래픽

방화벽 비유
인바운드 예시
- 22/SSH 허용
- 80/HTTP 허용
- 그 외 차단

방화벽 룰 예시
방화벽 규칙 읽는 방법
- 조건: 출발지/목적지/포트/프로토콜
- 행동: 허용(Allow) 또는 차단(Deny)
- 보통 규칙은 위에서 아래로 검사한다.
방화벽 룰 읽기 쉬운 방법
- “누가(출발지)” → “어디로(목적지)” → “무슨 문(포트)” → “허용/차단”
NAT(Network Address Translation)
사설 IP를 공인 IP로 변환하는 기술
NAT가 필요한 이유
- 내부 IP는 인터넷에서 직접 라우팅되지 않는다.
- NAT가 공인 IP로 변환해 외부와 통신 가능하게 한다.

NAT 변환 개념
SNAT(Source Network Address Translation)
- 내부 → 외부 (출발지 주소를 공인 IP로 변경)
[10.0.0.5] --(SNAT)--> [1.2.3.4]DNAT(Destination Network Address Translation)
- 외부 → 내부 (목적지 주소/포트를 내부로 변경 = 포트포워딩)
[1.2.3.4:8080] --(DNAT)--> [10.0.0.5:80]실습 1: 로컬 방화벽 확인
macOS
mac> sudo pfctl -sr | head -n 20Windows
win> Get-NetFirewallRule | select -First 5Linux
lin> sudo iptables -L | head -n 20실습 2: 포트 차단 테스트 (Linux VM)
VM2에서 8080 차단
vm2> sudo iptables -A INPUT -p tcp --dport 8080 -j DROPVM1에서 접속
vm1> curl http://10.0.2.20:8080예상 결과
- 연결 실패 또는 timeout
복구
vm2> sudo iptables -F상태 기반 방화벽
- 연결 상태를 추적
- 응답 패킷은 자동 허용 가능
실전 시나리오
상황: 외부에서 내부 서비스 접속 필요
- DNAT 설정
OS별 포트 리스닝 확인
macOS
mac> lsof -iTCP -sTCP:LISTEN | head -n 5Windows
win> netstat -ano | find "LISTEN"Linux
lin> ss -lntp | head -n 5Stateless vs Stateful
- Stateless: 패킷 단위 필터링
- Stateful: 연결 상태를 추적
차이점
- Stateful은 응답 트래픽을 자동 허용 가능
- Stateless는 룰이 많아지고 관리가 어렵다
실전 사례
- 사례 1: 외부 접속 불가 → 포트 포워딩 누락.
- 사례 2: 내부 서비스 접근 실패 → 인바운드 차단.
- 사례 3: 특정 포트만 차단 → 룰 순서 문제.
NAT 심화: PAT(포트 주소 변환)
PAT는 여러 사설 IP를 하나의 공인 IP + 포트로 변환한다.
예시
- 내부 10.0.0.10:50000 → 공인 1.2.3.4:40001
- 내부 10.0.0.11:50001 → 공인 1.2.3.4:40002
실무 포인트
- 대부분 가정/기업 NAT는 PAT 방식
- 포트 충돌 관리가 중요