안전해 보였던 binding 을 노출된 걸로 바꾸는 세 foot-gun. 각각 silent: 일어나도 알림 없어.
Gotcha 1 — IPv6 쌍둥이
127.0.0.1 (IPv4 loopback) 으로 bind 했어. 안전, 맞지? 아마 — 근데 IPv6 stack 은 자기 loopback (::1) 과 자기 "모든 interface" (::) 가 있어. 일부 서버는 양쪽 stack 다 listen 이 기본. IPv6 binding 이 :: 인데 IPv4 는 127.0.0.1 이면 알아채지 못한 public IPv6 leak 있는 거.
Gotcha 2 — 라우터의 UPnP
Universal Plug and Play 가 LAN 디바이스가 라우터한테 inbound 포트 자동 forward 부탁할 수 있게 해. 대부분 컨슈머 라우터 기본 켜짐. 잘못 동작하는 앱, 토렌트 클라이언트, 게임이 조용히 public 포트 열 수 있어.
Gotcha 3 — "192.168.x.x bind" 거짓말
서비스한테 "192.168.1.42 만 bind 해" 가 0.0.0.0 보다 안전하게 느껴져. 그렇긴 한데 — 약간만:
- 나중에 public Wi-Fi 에 같은 DHCP IP 받으면 서비스가 여전히 응답 — 그 Wi-Fi 의 다른 사람한테.
- LAN 에 untrusted 디바이스 (손님, IoT, 룸메이트) 있으면 서비스 도달 가능.
- IP 바뀌면 (DHCP 갱신) 서비스가 listen 멈추고 "broken" 앱 디버깅 시작.
Gotcha 4 — 네 대신 0.0.0.0 으로 bind 하는 reverse proxy
앱이 127.0.0.1 로 bind 하게 설정. 그다음 nginx / Caddy 를 앞에 둠. nginx 가 뭐 bind 하는지 확인했어? 기본 0.0.0.0:80, 0.0.0.0:443 — 앱의 제한된 binding 이 앞의 proxy 로 우회. Reverse proxy 도 명시적 binding 필요.