집에 둔 NAS나 홈서버를 밖에서 쓰고 싶을 때 가장 먼저 손이 가는 방법이 공유기의 포트포워딩이다. 관리 포트 하나를 인터넷 쪽으로 열어 두면 회사에서도, 카페에서도 내 서버에 바로 닿는다. 문제는 그 문이 나에게만 열리는 게 아니라는 데 있다. 포트를 여는 순간 그 주소는 인터넷 전체를 향해 열린다.
여기에 오해가 하나 깔려 있다. “우리 집 IP를 누가 알겠어”라는 감각이다. 실제로는 아무도 내 IP를 알 필요가 없다. 봇넷과 스캐너는 IPv4 주소 공간 전체를 상시로 훑으며 열린 포트를 찾는다. 개방된 원격 데스크톱(RDP) 포트만 해도 전 세계에 440만 개 이상이 그대로 노출돼 있고, 서비스를 인터넷에 올린 뒤 몇 분 안에 첫 무차별 대입 시도가 들어온다. 개방부터 랜섬웨어 실행까지 24시간이 걸리지 않는 사례가 흔하다.
그래서 질문을 바꿔야 한다. “포트를 어떻게 안전하게 여느냐”가 아니라 “여는 문을 인터넷에서 안 보이게 하느냐”다. 방향은 크게 세 갈래로 갈린다. 내 손으로 세우는 VPN(WireGuard), 설정을 걷어낸 메시 VPN(Tailscale), 그리고 아웃바운드로 빠져나가는 리버스 터널(Cloudflare Tunnel)이다. 세 방법 모두 공통의 목표를 다른 방식으로 달성한다. 서버의 관리 포트를 인터넷에서 지우는 것이다.
나도 처음 NAS를 들였을 때는 포트포워딩으로 열었다. 집에서 Home Assistant로 스마트홈을 굴리다 보니 밖에서 대시보드와 파일에 닿을 일이 잦았고, 그게 제일 빠른 길이었다. 방식을 바꾼 계기는 어느 날 접속 로그에 찍힌, 내가 만든 적 없는 계정 이름들의 로그인 실패 기록이었다.
포트포워딩이 최악의 출발점인 이유
포트포워딩의 위험은 설정 실수에서 나오지 않는다. 정상적으로 동작하는 그 상태 자체가 위험이다. 공유기에 포트를 여는 것은 “이 주소의 이 문을 두드리면 안쪽 서버가 응답한다”고 인터넷에 광고하는 일이다. 광고 대상은 나만이 아니라 그 포트를 찾는 모든 자동화된 스캐너다.
스캔은 표적을 정해 놓고 하는 작업이 아니다. Shodan과 Censys 같은 검색엔진, 그리고 공격자가 운영하는 봇넷이 IPv4 전 대역을 쉼 없이 조사하며 어떤 포트가 열려 있고 그 뒤에 무엇이 있는지 목록으로 만든다. NAS는 특히 표적 가치가 높다. 한집의 사진과 문서가 한곳에 모여 있어, 암호화해 인질로 잡았을 때 몸값을 받아내기 좋기 때문이다.
공격의 진입점도 정형화돼 있다. 시놀로지 DSM의 기본 접속 포트는 5000번과 5001번이다. 공격자는 이 포트로 응답하는 기기를 스캔으로 추려낸 뒤, 그 목록을 상대로 아이디와 비밀번호 조합을 기계적으로 던진다. 초당 수천 건의 로그인 시도를 자동으로 생성하는 도구가 붙는다. 관리자 계정이 기본값 admin에 흔한 비밀번호를 쓰고 있다면, 이 과정은 오래 걸리지 않는다.
한국인터넷진흥원(KISA)이 랜섬웨어 예방 권고에서 가장 앞세우는 항목도 여기에 있다. 외부에 열려 있는 시스템(NAS·DB·공유기 등)의 현황부터 파악하고, 꼭 필요하지 않은 연결은 차단하라는 것이다. 필요한 경우에도 접속 IP와 단말을 제한하고 다중 인증을 걸고 접근을 통제하라고 못 박는다. 다시 말해 “열어 두고 잘 지키는” 구성은 권고의 마지막 순위이지 첫 순위가 아니다.
NAS가 실제로 털린 세 가지 방식
추상적인 위험이 아니다. 인터넷에 직접 노출된 NAS가 어떻게 뚫렸는지는 지난 몇 년의 대형 사고가 그대로 보여 준다. 방식은 크게 세 갈래이고, 각각이 포트포워딩의 다른 약점을 찌른다.
첫째는 애플리케이션 취약점이다. 2022년 QNAP NAS를 덮친 DeadBolt 랜섬웨어가 대표적이다. 사진 관리 앱인 Photo Station의 취약점(CVE-2022-27593)을 통해 시스템 파일을 조작하고 랜섬웨어를 심었다. 당시 Censys가 인터넷에 노출된 QNAP 기기를 13만 대 넘게 확인했고, 감염된 기기는 파일이 .deadbolt 확장자로 암호화된 채 로그인 화면이 몸값 요구 문구로 바뀌었다. 요구액은 기기당 0.03비트코인, 당시 환산으로 약 1,100달러였다. QNAP이 내놓은 1차 대응은 패치이기 전에 “포트포워딩과 UPnP를 끄고 NAS를 인터넷 노출에서 빼라”는 것이었다.
둘째는 무차별 대입이다. 취약점이 없어도 뚫린다. 시놀로지는 2023년 자사 기기를 겨냥한 대규모 무차별 대입 공격이 늘고 있다고 경고했다. StealthWorker 봇넷이 노출된 NAS의 로그인 창에 조합을 쏟아부어 성공하면 랜섬웨어를 심는 방식이었다. 여기서 뚫린 원인은 시놀로지의 결함이 아니라, 인터넷에 열린 로그인 창과 약한 비밀번호의 조합이었다.
셋째는 인증조차 필요 없는 취약점이다. 2024년 공개된 CVE-2024-10443은 시놀로지 기기에서 사용자의 어떤 조작도 없이(제로클릭) 원격 코드 실행과 root 권한 탈취를 허용했다. 취약 추정 기기가 100만~200만 대에 이르렀고, 특히 포트포워딩이나 QuickConnect로 인터넷에 노출된 기기가 위험했다. 이 유형에서는 비밀번호를 아무리 길게 잡아도 소용이 없다. 노출면 자체가 문제이기 때문이다.
여기서 QuickConnect를 짚어야 한다. 포트포워딩을 직접 만지지 않고도 외부 접속을 열어 주는 이 편의 기능은 설정이 간단해 국내 사용자 사이에서도 널리 쓰인다. 그런데 세 번째 사고에서 보듯 편의의 대가로 기기를 인터넷에서 닿을 수 있게 만든다는 본질은 포트포워딩과 다르지 않다. 관리 화면을 밖에서 여는 통로가 존재하는 한, 그것이 손으로 연 포트든 자동화된 관계 서비스든 공격면은 그대로 남는다. QuickConnect를 켜 두고 “포트를 안 열었으니 안전하다”고 여기는 것이 흔한 착각이다.
| 사고 | 뚫린 경로 | 비밀번호로 막히나 |
|---|---|---|
| DeadBolt (QNAP, 2022) | 앱 취약점 (Photo Station) | 아니오 — 노출 자체가 문제 |
| StealthWorker (시놀로지, 2023) | 로그인 무차별 대입 | 부분적 — 강한 암호+2FA로 완화 |
| CVE-2024-10443 (시놀로지, 2024) | 제로클릭 원격 코드 실행 | 아니오 — 노출 자체가 문제 |
세 사고의 공통 교훈은 하나다. 강한 비밀번호와 2단계 인증은 무차별 대입은 늦추지만, 취약점 공격은 막지 못한다. 관리 화면이 인터넷에서 보이는 한, 아직 공개되지 않은 다음 취약점이 나오는 날 그 기기는 다시 표적이 된다. 근본 대책은 화면을 인터넷에서 지우는 것이다.
안전한 대안이 공유하는 하나의 원리
이어서 볼 세 가지 방법은 겉모습이 꽤 다르지만 뼈대는 같다. 서버가 인터넷을 향해 “여기 문이 있다”고 응답하지 않게 만드는 것이다. 접근 방식은 두 갈래로 나뉜다.
하나는 아웃바운드 연결을 쓰는 것이다. 서버가 밖에서 걸려 오는 연결을 기다리는 대신, 서버 쪽에서 먼저 바깥으로 연결을 걸어 그 통로를 유지한다. 방화벽은 대부분 나가는 연결은 기본 허용하고 들어오는 연결만 막는다. 그래서 이 방식에서는 공유기에 아무 포트도 열 필요가 없고, 요청받지 않은 외부 패킷은 방화벽 앞에서 그대로 버려진다. Tailscale과 Cloudflare Tunnel이 이 계열이다.
다른 하나는 인증 없는 트래픽에는 침묵하는 것이다. WireGuard 기반 VPN이 여기 해당한다. 통로를 위해 UDP 포트 하나는 열지만, 올바른 암호 키가 없는 패킷에는 아무 응답도 보내지 않는다. 스캐너 입장에서 그 포트는 닫힌 것과 구분되지 않는다. 열려 있지만 보이지 않는 문이다.
두 계열 모두 결과는 같다. 무차별 대입을 시도할 로그인 창 자체가 인터넷에 존재하지 않는다. 공격자가 상대할 것이 없어지는 것이 개방 포트를 열심히 지키는 것과 다른 지점이다.
숨기는 것만이 이득은 아니다. 세 방식 모두 누가 들어올 수 있는지를 기기 단위로 관리하게 해 준다. 특정 기기의 키나 접근 권한을 그 하나만 즉시 회수할 수 있어, 폰을 잃어버렸을 때 그 기기만 사설망에서 끊어내면 나머지는 그대로 쓴다. 인터넷에 열어 둔 포트는 이런 선택적 차단이 불가능하다. 열려 있으면 모두에게 열려 있고, 닫으면 나까지 닫힌다. 접근을 개인이 세밀하게 조율할 수 있다는 점은 이 방식들이 개방 포트보다 나은 두 번째 이유다.
WireGuard — 전부 내가 쥐는 대신 전부 내가 세운다
WireGuard는 현대적인 VPN 프로토콜이다. 자기 서버나 공유기, 라즈베리파이 같은 기기에 직접 올려 나만의 사설망을 세우는 방식이라, 중간에 제3의 회사가 끼지 않는다. 트래픽이 어디를 거치는지 전부 내 통제 아래 있다는 점이 이 방법의 핵심 가치다.
성능도 강점이다. WireGuard는 리눅스 커널 5.6부터 커널에 내장됐고 코드베이스가 약 4,000줄로 매우 작다. 코드가 작다는 것은 검토하기 쉽고 공격면이 좁다는 뜻이다. 처리량도 앞선다. 1기가 회선에서 구형 OpenVPN이 절반 수준에 그칠 때 WireGuard는 회선 대역폭에 근접하고, 연결을 맺는 핸드셰이크도 1초 안에 끝난다. 밖에서 NAS의 대용량 파일을 다룰 때 체감이 다르다.
보안 관점의 결정적 특성은 앞서 짚은 침묵이다. WireGuard 포트는 유효한 키로 서명된 패킷이 아니면 응답하지 않는다. 스캐너에게 그 포트는 아무것도 없는 것처럼 보인다. 개방된 DSM 포트가 스캔 목록에 바로 올라가는 것과 정반대다.
대가는 손이 간다는 것이다. 서버를 직접 세우고, 키를 발급·관리하고, 접속할 기기마다 설정을 넣어야 한다. 공유기나 NAS가 WireGuard 서버 기능을 내장했다면 부담이 줄지만, 그래도 아웃바운드 방식들보다 초기 설정이 무겁다. 통제권을 최대로 쥐는 대신 관리 책임도 온전히 내 몫이 되는 구조다.
Tailscale — 열린 포트 0, 신원으로 여는 문
Tailscale은 WireGuard의 암호화를 그대로 쓰되 가장 번거로운 부분인 키 관리와 연결 수립을 자동화한 메시 VPN이다. 기기마다 앱을 깔고 같은 계정으로 로그인하면, 그 기기들이 서로를 사설망의 이웃처럼 인식한다. 공유기 설정도, 포트포워딩도 건드릴 일이 없다.
동작 구조가 안전성의 핵심이다. Tailscale의 코디네이션 서버는 기기들이 서로를 발견하고 암호 키를 교환하도록 중개만 한다. 실제 데이터는 기기와 기기 사이를 직접(P2P) 오가며, 그 구간은 종단 간 암호화된다. 즉 내 파일 내용은 Tailscale 서버를 거치지 않고, 서버는 그것을 볼 수 없다. 양쪽 기기가 서로 다른 NAT 뒤에 있어도, 열린 포트 없이 연결이 성립한다. 직접 연결이 안 되는 드문 경우에만 DERP라는 중계 서버가 암호화된 상태 그대로 우회로가 된다.
접근 권한이 비밀번호가 아니라 로그인 신원(SSO)에 묶인다는 점도 중요하다. 인터넷에 노출된 로그인 창을 상대로 조합을 던지는 무차별 대입이라는 공격 방식 자체가 성립하지 않는다. 설정이 가볍고 무료로 시작할 수 있어, 밖에서 NAS와 홈서버에 닿는 개인 용도라면 진입 장벽이 가장 낮은 선택지다.
고려할 지점은 신뢰의 위치가 이동한다는 것이다. 데이터는 종단 간 암호화되지만, 어떤 기기가 내 사설망에 들어올 수 있는지를 조율하는 통제면은 Tailscale이라는 외부 서비스에 의존한다. 자가 호스팅의 순수함을 원한다면 같은 방식을 직접 운영하는 Headscale 같은 대안이 있지만, 그 경우 관리 부담은 다시 WireGuard 쪽으로 돌아간다.
Cloudflare Tunnel — 웹으로 열되 포트는 열지 않는다
Cloudflare Tunnel은 앞의 둘과 결이 다르다. VPN처럼 내 기기를 사설망에 넣는 것이 아니라, 특정 웹 서비스를 도메인 주소로 공개하되 서버의 포트는 열지 않는 방식이다. cloudflared라는 작은 프로그램이 서버에서 Cloudflare 엣지로 아웃바운드 연결을 걸어 유지하고, 방문자의 요청은 그 통로를 거꾸로 타고 서버에 도달한다. 방화벽은 요청받지 않은 외부 패킷을 애초에 보지 못하고, 서버의 공인 IP도 밖으로 드러나지 않는다.
덤으로 따라오는 보안 이점이 크다. 모든 요청이 Cloudflare를 먼저 통과하므로, 인터넷을 향한 위험을 Cloudflare가 대신 흡수한다. DDoS와 스캔이 그 앞단에서 걸러지고, 웹 방화벽(WAF)과 레이트 리밋을 통과한 요청만 서버에 닿는다. 여기에 Cloudflare Access를 붙이면 서버에 닿기 전에 신원 확인 단계를 한 겹 더 세울 수 있다. 무료 티어에서 개인이 쓰기에 충분한 기능이 열려 있다.
다만 보안 비교에서 반드시 짚어야 할 트레이드오프가 있다. TLS 암호화가 Cloudflare 엣지에서 풀린다는 점이다. 통신이 Cloudflare 구간에서 한 번 평문이 됐다가 서버로 다시 전달되는 구조라, Cloudflare가 원리상 그 내용을 볼 수 있다. Tailscale이 데이터를 종단 간 암호화해 중개자가 내용을 못 보게 하는 것과 갈리는 지점이 바로 여기다. 그래서 Cloudflare Tunnel은 남과 공유하거나 브라우저로 공개해야 하는 웹 서비스에 어울리고, 순수하게 나만 쓰는 파일 접근에는 VPN 계열이 더 맞는다. 또 이 방식은 Cloudflare에 도메인을 올려 두는 것을 전제로 한다.
포트포워딩에서 넘어오던 저녁
앞서 말한, 로그에 찍힌 낯선 계정 이름들이 방식을 바꾼 계기였다. NAS의 접속 로그를 열어 보니 admin, test, root, 그리고 흔한 이름들로 로그인을 시도하다 실패한 기록이 하루에도 수백 줄씩 쌓여 있었다. 내가 5001 포트를 연 지 며칠 되지도 않은 시점이었다. 점검을 다니며 개방된 관리 포트가 얼마나 빨리 발견되는지는 익히 봐 왔지만, 우리 집 NAS의 로그에서 그 패턴을 직접 확인하니 감각이 달랐다. 비밀번호를 아무리 길게 잡아도 이 창이 인터넷에 떠 있는 한 다음 취약점 한 방이면 끝이라는 게 분명했다.
그날 저녁에 한 일은 두 가지다. 먼저 공유기에서 NAS로 향하던 포트포워딩을 전부 닫았다. 그리고 밖에서 닿는 통로를 두 갈래로 다시 세웠다. 나와 아내 폰처럼 내 사설망에 들어와야 하는 기기는 메시 VPN으로 묶어 파일과 관리 화면에 닿게 했고, 스마트홈 대시보드처럼 웹으로 열어 두고 싶은 것 하나만 아웃바운드 터널로 도메인에 붙였다. 관리 포트는 인터넷에서 완전히 사라졌다.
바뀐 것은 접속 방식만이 아니었다. 다음 날 로그에서 그 수백 줄의 실패 기록이 통째로 사라졌다. 두드릴 문이 없어지니 두드리는 소리도 없어진 것이다. 두 아이의 사진이 전부 그 NAS에 들어 있다는 사실을 떠올리면, 저녁 한 번의 수고로 바꿀 만한 거래였다.
그래도 NAS를 직접 노출해야 한다면
사정상 특정 서비스를 포트로 직접 열어야 하는 경우가 있다. 그럴 때는 노출을 전제로 방어를 겹겹이 쌓는다. 순서는 위험을 줄이는 효과가 큰 것부터다.
- 기본 admin 계정을 비활성화한다. 관리자 권한의 새 계정을 별도 이름으로 만들고 기본 admin은 끈다. 공격자가 아이디부터 알고 시작하는 상황을 없애는 것이 첫걸음이다.
- 2단계 인증을 건다. 인증 앱(OTP)을 쓰고 문자(SMS)는 피한다. 유심 탈취나 악성 앱으로 문자가 새면 문자 인증은 무력화된다.
- 자동 차단과 계정 보호를 켠다. 시놀로지 기준 제어판의 보안 > 보호에 있다. 일정 시간 안에 로그인 실패가 정해진 횟수를 넘으면 그 주소를 차단한다. 기본값은 5분에 10회이며, 차단 만료 없음으로 두면 더 강해진다.
- 방화벽으로 접속 국가와 IP를 제한한다. 국내에서만 접속한다면 해외 IP 대역을 통째로 막는 것만으로 스캔·무차별 대입의 대부분이 걸러진다.
- 관리 포트를 기본값에서 바꾸고 HTTPS를 강제한다. 5000·5001을 다른 번호로 옮기면 표적형 스캔을 늦춘다. 접속은 HTTPS로만 받도록 리다이렉트하고 HSTS를 켠다.
- 펌웨어를 최신으로 유지한다. 제로클릭 취약점처럼 노출 자체가 위험한 결함은 패치가 유일한 방어다. 자동 업데이트를 켜 두는 편이 안전하다.
- 쓰지 않는 서비스와 계정을 끈다. SSH·Telnet·기본 공유 폴더처럼 지금 안 쓰는 통로는 그 자체가 공격면이다. 필요할 때만 켜고 평소에는 닫아 둔다.
이 목록은 노출을 안전하게 만드는 것이 아니라 덜 위험하게 만드는 조치다. 포트를 여는 순간 공격면이 생긴다는 사실 자체는 바뀌지 않는다. 그래서 이 방법은 아웃바운드 터널이나 VPN이 도저히 안 되는 서비스에 한정해 쓰고, 가능한 것은 앞의 세 방식으로 옮기는 편이 낫다.
무엇을 고를 것인가
세 방법은 경쟁 관계가 아니라 용도가 다른 도구다. 나만 쓰는 파일·관리 접근인지, 남과 공유할 웹 서비스인지, 통제권을 어디까지 직접 쥐고 싶은지에 따라 갈린다.
| 방식 | 열리는 포트 | 맞는 용도 | 트레이드오프 |
|---|---|---|---|
| 포트포워딩 | 관리 포트 직접 개방 | 권장하지 않음 | 스캔·무차별 대입·취약점에 그대로 노출 |
| WireGuard 직접 구축 | UDP 1개 (무응답·은폐) | 통제권 최대, 최고 성능 | 서버·키를 직접 세우고 관리 |
| Tailscale | 없음 | 나만 쓰는 파일·관리 접근 | 통제면을 외부 서비스에 의존 |
| Cloudflare Tunnel | 없음 | 공개할 웹 서비스, DDoS·WAF 보호 | TLS가 엣지에서 풀림, 도메인 필요 |
정리하면 판단의 축은 단순하다. 밖에서 내 파일과 관리 화면에만 닿으면 되는 개인 용도라면 설정이 가벼운 Tailscale이 기본값이고, 성능과 완전한 통제권이 필요하면 WireGuard를 직접 세운다. 남에게 웹으로 열어야 하는 서비스는 Cloudflare Tunnel로 포트 없이 공개하되 그 내용이 엣지를 지난다는 점을 감안한다. 어느 쪽을 고르든 출발점은 같다. 공유기에 열어 둔 포트포워딩부터 닫는 것이다. 두드릴 문이 없는 서버가, 아무리 잘 지킨 열린 문보다 안전하다.
![ApoorvCTF 2025 - [AI] Pokédex Neural Network Write Up 3 ApoorvCTF 2025 – [AI] Pokédex Neural Network Write Up](https://redchupa.com/wp-content/uploads/2026/04/20250304_1638_32.png)
