결론부터. 2026년 10월은 셀프호스팅 사용자에게 특히 가혹한 한 달이었다. 인증서 발급기관(CA) 신뢰 붕괴, Tailscale SSH 루트 권한 상승 취약점, Brotli 압축 라이브러리 원격코드실행(RCE)이 3주 사이에 연달아 터졌다. 이 글은 “내가 집에서 돌리는 서비스를 지금 인터넷에 공개해 두어도 되는가”를 판정하는 5단계 점검 절차와, 구성별 안전도, 사고 났을 때 걷어내는 순서를 정리한다. 판정 기준은 공식 보안 공지와 공식 문서 기준이며, 이번 사건들에 영향을 받는 구성과 아닌 구성을 구분해 담았다.
핵심 요약
- 이번 달 사건 3건은 각각 다른 계층에서 터졌다: CA 신뢰(eMudhra, 10-21 공식 공지), 망 내부 접근 도구(Tailscale SSH, 10-26 공식 공지), 라이브러리 의존성(Broccoli2Shell, CVE-2026-111497).
- 위험은 “서버를 공개했느냐”가 아니라 “어떤 경로로 공개했느냐”가 결정한다. 포트포워딩 직접 노출, 리버스 프록시, 터널+인증 계층의 안전도가 다르다.
- 5단계 점검: ① 무엇이 공개돼 있나 인벤토리 → ② 이번 사건 해당 여부 → ③ 인증 계층 확인 → ④ 최소 권한·분리 → ⑤ 걷어내기 절차.
- 당장 할 일이 하나뿐이라면: 공개된 관리 UI·로그인 없이 접근되는 서비스부터 점검한다.
10월에 무슨 일이 있었나 — 사건 3건의 계층
사건을 나열하면 성격이 보인다. 각각 신뢰의 다른 층위에서 터졌고, 그래서 점검 항목도 다르다.
| 사건 | 계층 | 핵심 내용 | 공식 조치 |
|---|---|---|---|
| eMudhra 중간 인증서 유출 (TS-2026-013으로도 공지) | TLS 인증서 신뢰 | eMudhra 소유 중간 인증서 8건 침해. 악성 서버가 정상 인증서처럼 신뢰됨 | Tailscale v1.104.2+ 는 침해 인증서 명시적 불신 |
| Tailscale SSH 소켓 포워딩 (TS-2026-014~016) | 망 접근 도구 | 인증된 피어가 루트 전용 유닉스 소켓(Docker 소켓 등)에 도달 가능 | 1.104.4+ 업그레이드, 또는 TS_SSH_DISABLE_FORWARDING=1 |
| Broccoli2Shell (CVE-2026-111497) | 압축 라이브러리 | Brotli 디코더 RCE. Node.js·Python 등 의존 폭넓음 | 각 언어·앱 최신 보안 업데이트 적용 |
포인트는 이것이다. 서버 본체가 아니라 서버를 감싼 신뢰 계층(인증서, 접근 도구, 라이브러리)이 무너졌다. 본체 패치만으로는 방어가 안 된다.
5단계 노출 판정 절차
1단계 — 무엇이 공개돼 있나: 인벤토리
공유기 관리 화면에서 포트포워딩 규칙을 전수 확인한다. 서비스 단위가 아니라 규칙 단위로 본다. 확인할 것은 세 가지다.
- 외부에서 열린 포트: 공유기 포트포워딩 목록 + 서버의
ss -tulpn결과 대조 - 리버스 프록시가 받는 호스트명: Nginx Proxy Manager·Traefik·Caddy 설정의 server_name/host 목록
- 터널 구성: Cloudflare Tunnel·Tailscale Funnel 등 외부로 나가는 연결 목록
이 세 목록이 일치해야 한다. 포트는 열려 있는데 프록시 설정에 없는 호스트명이 있으면 그것부터 조사한다.
2단계 — 이번 사건에 해당하나
- Tailscale SSH을 쓴다면: Tailscale SSH + 로컬/리모트 포워딩을 허용한 정책이 있었는지 확인한다. 있었다면 1.104.4 이상으로 업그레이드하거나
TS_SSH_DISABLE_FORWARDING=1을 tailscaled 서비스 환경변수로 지정 후 재시작한다. 포워딩을 안 썼다면 이번 3건의 직접 영향은 없다. - 인증서를 시스템 저장소로 검증한다면: eMudhra 루트를 신뢰하는 저장소를 쓰는 앱이 있는지 확인한다. 클라이언트·서버 모두 최신 업데이트가 기본값으로 침해 인증서를 배제하는지 벤더 공지를 확인한다.
- Brotli로 응답 압축을 쓴다면: 리버스 프록시의 brotli 모듈과 앱 의존성의 보안 업데이트를 적용한다. 압축을 안 쓴다면 이 경로는 해당 없다.
3단계 — 인증 계층 확인
“리버스 프록시를 붙였으니 안전하다”는 성립하지 않는다. 리버스 프록시는 전달을 바꿀 뿐, 앱 자체의 로그인을 없애지 않는다. 확인할 것:
- 공개 서비스마다 로그인이 있는가. 없다면 그 서비스는 ‘누구나 읽을 수 있는 상태’다.
- 관리 UI(대시보드, DB 웹 콘솔)까지 함께 공개돼 있는가. 관리면은 원격 접근이 필요할 때만 VPN·터널 뒤로 옮긴다.
- 인증을 붙일 수 있다면 Cloudflare Access 같은 게이트가 한 가지다. Zero Trust Free 플랜은 50사용자까지 $0이고, 초과 시 사용자당 월 $7 과금 구조다(2026-10-30 공식 요금 페이지 기준).
4단계 — 최소 권한과 분리
- 컨테이너를 쓴다면
docker.sock마운트 여부를 확인한다. 소켓을 마운트한 컨테이너는 사실상 호스트 루트와 동급이다. 이번 Tailscale 취약점이 노리던 경로가 바로 이것이었다. 소켓 권한 문제를 만났다면 docker.sock permission denied 안전한 해결 정리를 참고한다. - 하나의 VM/컨테이너에 서비스를 전부 몰아넣지 않는다. 침입 시 폭발 반경을 줄이는 게 목적이다.
- 백업은 공개 망과 분리된 저장소에 둔다. 랜섬웨어가 백업까지 암호화하면 복구가 없다.
5단계 — 걷어내기: 사고 시 순서
침입 정황(모르는 로그인, 이상한 프로세스, 이상 트래픽)을 발견했다면 순서가 있다.
- 공유기에서 해당 서비스 포트포워딩 규칙 삭제 — 노출 차단이 1순위
- 서비스 정지 후 자격증명(비밀번호·API 토큰·세션 키) 전체 교체
- 로그 확보: 접근 로그, 셸 히스토리, 컨테이너 로그를 사본으로 보존
- 원인 파악 후 재공개. 원인을 모르면 재공개하지 않는다
구성별 안전도 비교

| 구성 | 설명 | 이번 사건 관련성 | 권장 |
|---|---|---|---|
| 직접 포트포워딩 | 공유기에서 서비스 포트를 그대로 열음 | 앱 취약점에 그대로 노출 | 관리 UI는 즉시 폐쇄 |
| 리버스 프록시 | Nginx/Caddy가 앞에서 호스트명별 분기 | TLS 종단·헤더 조작은 가능, 앱 취약점은 차단 못 함 | 로그인 없는 서비스와 조합 금지 |
| 터널 + 인증 | Cloudflare Tunnel + Access 등 | 포트 개방 자체가 없음 | 원격 관리면의 기본값으로 권장 |
| VPN/버니어망 | WireGuard/Tailscale 망 안에서만 접근 | Tailscale SSH 정책 확인 필요 | 가족·소수 인원 서비스에 적합 |
내 서버가 뚫렸다는 걸 어떻게 아나 — 탐지 기초
침입 탐지는 거창한 장비가 아니라 “평소와 다른 것”을 보는 습관이다.
- 로그인 기록:
last,lastb,/var/log/auth.log(Ubuntu 계열)에서 모르는 시각·IP 확인 - 크론·서비스 변조:
crontab -l,/etc/cron*, 익숙하지 않은 systemd 유닛 점검 - 아웃바운드 트래픽: 평소 안 쓰는 외부 IP로의 지속 연결은 채굴·C2 통신 의심
- 실패 로그 급증: 막힌 침입 시도라도 관심 대상이 되었다는 신호
FAQ
홈서버를 인터넷에 공개하는 것 자체가 위험한가?
아니다. 위험은 공개 여부가 아니라 무엇을 어떻게 공개했는지가 결정한다. 로그인이 없는 서비스, 오래된 버전의 서비스, 관리 UI의 직접 공개가 실제 사고 패턴이다. 반대로 터널+인증 뒤의 서비스는 침입 표면이 작다. 서버 자체 선택 기준이 궁금하다면 홈서버 하드웨어 선택 기준을 함께 본다.
리버스 프록시만 붙이면 안전한가?
아니다. 리버스 프록시는 트래픽 경로와 TLS를 정리할 뿐, 뒤에 있는 앱의 취약점과 빈 로그인을 없애지 않는다. 앱 자체 인증 또는 Access 같은 게이트가 필요하다.
Tailscale은 이번 사건 때문에 쓰면 안 되나?
아니다. TS-2026-014~016은 “Tailscale SSH + 포워딩 허용”이라는 특정 구성의 취약점이고 1.104.4에서 수리됐다. 업그레이드하고 포워딩 정책을 점검하면 된다. 공개 망에 포트를 여는 대안보다 망 안 접근이 기본 안전도는 높다.
Cloudflare Access 요금이 걱정된다
50사용자까지는 무료다. 가족 서비스·소규모 팀이면 무료 범위 내다. 사용자당 과금은 50을 넘을 때부터다(공식 요금 페이지, 2026-10-30 확인).
참고자료
- Tailscale 보안 공지 목록 (공식) — TS-2026-013~017, 2026-10 확인
- Cloudflare Zero Trust 요금 (공식) — Free 50사용자/$0, PAYG $7/사용자·월, 2026-10-30 확인
- r/selfhosted: Is exposing services via reverse proxy still secure enough? — 노출 방식 논의 스레드
- r/selfhosted: What do you actually use to detect intrusions? — 침입 탐지 실무 논의
- r/selfhosted: Tailscale warns of SSH flaws — TS-2026-014 커뮤니티 반응
- Broccoli2Shell (HN 토론) — CVE-2026-111497, 2026-10-24