시놀로지 로그인 공격 원천차단하기(ddns, 역방향프록시, 서브도메인)
페이지 정보
본문
(과거 클리앙 나스당에 작성했던 글을 다모앙으로 옮겨왔습니다.)
안녕하세요.
최근 시놀로지 nas를 대상으로 하는 무차별 로그인 공격이 엄청나게 늘어 고민인 분들이 많으실거라 생각합니다.
저 또한 최근 공격이 너무 많아져 당황스러웠고, 분명 dsm 포트번호를 변경했는데도 어떻게 알고 공격을 계속하는지도 모르겠고
그렇다고 포트포워딩을 다 막아버리면 나도 외부에서 쓰질 못하니 nas의 존재가치가 없어져버려 고민이었습니다.
이에 대한 해결방법으로 몇몇분들께서 dsm 접속포트에 대한 포트포워딩을 막고 역방향프록시와 서브도메인을 사용하라고 하시는데 도대체 이게 무슨 개념인지도 잘 모르고, 개념까진 이해하더라도 어떻게 적용하는지 상세히 설명한 글을 찾기가 어려웠습니다.
열심히 찾아보고 댓글로 자세하게 알려주신 분들이 계셔서 드디어 적용하는 방법을 찾았고, 저처럼 네트워크 개념도 없고 겨우겨우 포트포워딩해서 쓰던 나린이분들을 위해 도움을 드리고자 이렇게 적용법을 써봅니다.
준비물: dsm 7.0으로 업그레이드된 시놀로지 nas(제 nas가 dsm 7.0이라 하위버전에선 설정이 어떻게 다른지 모릅니다..), 내부망으로 접속가능한 컴퓨터 (외부망에서 작업시 중간에 실수했을 때 접속이 어려울 경우 복구가 안되므로)
0. 기본 개념
우선 역방향프록시와 서브도메인, Let's encrypt 인증서, 와일드카드의 개념이 뭔지 대충은 알아야 아 그래서 이짓을 해야되는구나를 이해하실겁니다.
기존에는 우리가 외부에서 ddns라는 주소를 이용해서 nas에 접속했고, 같은 ddns주소를 입력하면 어느 서비스로 가야할지 모르기 때문에 dsm 메인 또는 각 패키지별로 포트번호라는 것을 부여해서, ddns주소:1234(포트번호) 라는 주소로 접속하면 1234라는 포트번호로 지정해놓은 서비스로 연결되도록 써왔습니다.
매번 공유기/시놀로지 기기에 부여되는 공인 ip주소를 외울 수 없기 때문에 이러한 방식을 써왔고, 외부에서 접속하기 위해서 포트포워딩을 이용해 외부접속자가 내부 포트로 이어질 수 있도록 문을 열어놨습니다.
하지만 해킹공격을 하는 나쁜넘들은 무작위로 ip주소를 대입해 접속해보면서 dsm 기본 접속포트(5000,5001)로 접속되는 시놀로지 기기들이 있는지 확인하고 nas가 발견되면 무작위로 로그인시도를 해봅니다. 기본 접속포트가 바뀌더라도 스캐닝을 하는건지 뭔지 잘은 모르겠지만 어떻게 또 시놀로지 기기를 확인해서 열린 문을 통해 지속적으로 로그인 시도를 합니다.
따라서 이러한 공격시도를 막기 위해선, ip주소에 대한 외부로의 포트포워딩(특히 dsm 기본접속포트)을 꺼야하는데 그럼 우리도 외부접속이 되지 않기 때문에 주인만 아는 숨겨진 주소로 접속할 수 있게 해야합니다.
역방향프록시는 내가 정해놓은 숨겨진 주소로 접속하면 내부에서 원하는 포트로 접속할 수 있게 연결시켜주는 안내원 역할을 하는 기능이고, 각 패키지/기능별로 하나하나 주소를 지정해야만 각각에 맞는 포트로 접속을 해줄 수 있으니 여러개의 숨겨진 주소를 만들기 위해 서브도메인 기능을 사용하게 됩니다.
예시로 우리가 ddns주소를 'example.synology.me'라고 만들었다면, 서브도메인 주소는 'photo.example.synology.me' 라던가 'dsm.example.synology.me' 등으로 기존 ddns 주소 앞에 추가로 이름을 붙여서 세부적인 각각의 독립적인 주소를 만들 수 있습니다.
한편 우리가 사이트주소를 입력해 인터넷을 탐색할 때는 안전한 주소라고 인증을 받은 곳만 가는게 안전한데 그런 인증을 해주는게 인증서 기능이고 Let's encrypt라는 곳이 시놀로지와 계약을 맺은건지(?) '이 사용자가 쓰는 시놀로지 ddns 주소는 접속하기에 안전한 주소입니다 쾅쾅!' 마크를 찍어주는 기능이 시놀로지 제어판에 있습니다.
기본적으로 우리가 쓰는 시놀로지ddns주소에다가 우리가 서브도메인을 이용해 여러 주소들을 사용해야하는데 각 서브도메인마다 따로따로 인증서를 받을 필요 없이 '이 기본 ddns 주소에 서브도메인 붙이는건 다 인증서 찍어주세요'라고 하는게 "와일드카드"라는 옵션이고 이것 또한 시놀로지 사용자들은 복잡한 과정 필요없이 제어판에서 가능합니다.
여기까지 대충이라도 이해되셨다면 이제 적용할 준비가 끝났습니다. 아래에서 사진과 함께 차근차근 설명드리겠습니다.
1. 시놀로지 ddns 생성 및 Let's encrypt로 인증서 적용하기
시놀로지 nas에 접속 후 '제어판-외부 액세스-DDNS'로 들어갑니다.
기존에 쓰시고 접속이 정상적으로 잘 되는 ddns가 있다면 해당 ddns의 편집으로 들어가시고, 만약 이전에 시놀로지 ddns를 쓰지 않았다면 추가를 눌러 원하는 주소로 새로 만들어주세요.
기존 쓰시던 ddns에 대해 편집화면으로 들어간 후 Let's Encrypt 인증서가 발급되었고 기본 인증서로 체크되어있는지 확인해주세요.
이미 Let's Encrypt 인증서가 기본 인증서로 발급되어있으면 체크박스가 비활성화 되어있습니다.
만약 체크박스가 활성화되어있는데 체크는 안 되어있다면 여기서 체크를 해서 발급해도 괜찮지만 후술할 인증서 설명에서 하시는게 조금 더 낫습니다. 체크 안되어있고 인증서를 새로 발급하는게 나을 듯 하면 여기서 체크를 하지 말아주세요.
처음 시놀로지 ddns를 만드는 화면이라면 체크해서 같이 인증서를 발급받아주셔도 됩니다.
'제어판-보안-인증서'로 가시면 현재 내 nas에 발급된 인증서를 확인할 수 있습니다.
만약 synology라는 인증서만 있으면 Let's Encrypt 인증서가 없는 것이니 새로 추가하면 됩니다.
발급자 R3인 인증서가 있다면 Let's Encrypt 인증서가 이미 발급된 것입니다.
만약 발급되어있다면 '주제 대체 이름'에 본인이 쓰는 '시놀로지 ddns주소'와 '*.ddns주소' 두가지가 모두 포함되어있는지 확인해주세요.
(예시: *.example.synology.me, example.synology.me)
만약 '*.example.synology.me'가 없다면 이 인증서는 "와일드카드"옵션이 포함되지 않은 인증서라 새로 발급을 받아야합니다.
또한 Let's Encypt 인증서가 없는 분들도 인증서 추가를 해주시면 됩니다.
인증서 추가를 누를 경우 나타나는 화면입니다. 새 인증서 추가를 하겠습니다.
우리는 Let's Encrypt 인증서를 추가할 겁니다.
기본 인증서로 설정도 체크해주세요!
도메인 이름에 아까 만들었거나 원래 잘 쓰던 ddns 주소를 넣어주세요.
이메일은 당연히 본인(관리자) 이메일 주소를 넣으시면 됩니다.
주제 대체 이름에 윗 사진처럼 '*.ddns주소'와 'ddns주소'를 써넣어주세요.
'*.ddns주소'를 넣게 되면 서브도메인에 어떤 이름을 넣든간에 (*있는 칸에 어떤 이름을 넣든 간에) 전부 인증서 찍어주세요!라고 요청하는겁니다. (와일드카드 옵션)
윗 사진처럼 두가지 이상의 주소를 넣을 땐 쉼표가 아니라 세미콜론(;)으로 구분해서 입력하시면 됩니다. (띄어쓰기 안해도 됨)
제대로 발급이 되었다면
아까 보여드렸던 이 화면처럼 '주제 대체 이름'에 두 주소가 전부 입력되면 내 ddns 주소와 내 ddns 주소의 서브도메인들에 전부 인증서가 부여된 것입니다. 이제 내 ddns주소에 한해서 원하는 어떤 이름으로 서브도메인을 만들어도 안전한 주소라고 공인 인증을 받았습니다.
2. 서브도메인을 통한 DSM 접속주소 변경 및 공격차단
이제 우리는 서브도메인과 역방향프록시를 이용해 우리만 아는 주소로 nas에 접속할 수 있도록 설정하면 됩니다.
시작하기 전에 꼭 세팅해야하는게 있는데 2개의 포트를 포트포워딩을 통해 외부로 열어주어야합니다.
http, https 접속을 위해 시놀로지 나스에 대해 80 (TCP) / 443 (TCP) 포트를 꼭 열어주어야 합니다!
'제어판-로그인 포털-DSM'탭입니다.
이제 DSM 포트를 복잡하게 바꾸던 시절은 안녕입니다.
아래에 있는 도메인에서 내 ddns주소와 원하는 이름을 조합해서 서브도메인을 만드시면 됩니다.
예시: dsm.example.synology.me / hello.example.synology.me / welcome.example.synology.me 등등
그리고 저장을 해주고 테스트를 해보겠습니다.
공유기 또는 시놀로지 제어판 포트포워딩 설정에서 dsm 포트에 대한 포트포워딩을 비활성화해주세요(http, https 모두).
그리고 방금 설정한 서브도메인을 주소창에 입력해서 dsm에 접속되는지 확인해주세요.(뒤에 포트주소같은거 입력필요없음)
내부에서만 접속하면 확실하지 않으니 들고 있는 스마트폰도 셀룰러모드로 하셔서 외부에서 접속하듯 테스트해주세요.
문제없이 잘 되고, 거꾸로 'ddns주소:포트번호'를 통해 dsm 접속이 안되는걸 확인했다면 이제 나쁜넘들의 공격시도는 싹 사라질겁니다.
3. 역방향프록시와 서브도메인을 활용해 편의성 업그레이드
이제 나머지 서비스들도 서브도메인과 역방향프록시를 활용해 세팅해보겠습니다.
사실 나머지 패키지들에 대해선 데이터 전송 관련 포트들때문에 여전히 포트포워딩을 해야해서 보안면에서 더 철저해지진 않습니다. (다만 어느 포트까지 차단해도 패키지 외부접속이 되는진 테스트 안해봐서 잘 모름...)
그러나 dsm 포트가 외부와 차단되어있고 서브도메인으로만 dsm을 접속하도록 세팅이 된 경우 더이상 기본 ddns 주소만으로는 각 패키지에 대한 접속이 되지 않습니다. 특히 모바일 앱들은 dsm 포트를 이용해 접속하기에 외부에서 모바일앱을 사용하기 위해 필수적으로 각 응용프로그램들과 webdav같은 부수기능에 대해 서브도메인과 역방향프록시를 통해 연결시켜주어야 합니다.
먼저 시놀로지 패키지들에 대해 설정해보겠습니다.
'제어판-로그인 포털-응용 프로그램'에 들어가면 시놀로지 패키지들에 대해 서브도메인이나 원하는 포트로 설정 가능합니다.
여기서 각각 패키지를 클릭하고 '편집'으로 들어갑니다.
예시로 photos에 대해 해보겠습니다.
'편집'을 눌러 들어간 창입니다. 여기서 도메인을 원하는 서브도메인 주소로 설정해주면 됩니다.
예시: photos.example.synology.me / photo.example.synology.me 등등 본인이 원하는 대로 다른 서브도메인과 겹치지만 않게 해주세요.
여기서 'HSTS를 활성화하면 브라우저가 보안된 연결을 사용합니다.'를 체크하면 무조건 https로의 연결만 허용하겠다는 뜻입니다. 그러면 모바일 photos 앱에서 무조건 https를 체크하고 로그인해야 접속됩니다. 다만 제 경우 https로 로그인한 photos 앱에선 동영상 재생에 뭔가 자꾸 문제가 생기고 번거로워져서 체크를 안하고 http로 씁니다.
어찌됐든 쓰시는 각 패키지들에다가 서브도메인을 다 만들어주시면 됩니다.
그리고 '응용 프로그램'에 없는 패키지와 다른 기능에 대해선 역방향프록시 기능으로 서브도메인을 부여해야합니다.
'제어판-로그인 포털-고급-역방향 프록시'를 클릭합니다.
저는 '응용 프로그램'탭에 없는 패키지인 ds finder 모바일 앱 접속을 위한 세팅과 webdav 접속용 서브도메인을 만들어서 세팅했습니다.
webdav처럼 포트 하나를 이용하는 통신규격은 모두 가능합니다. (ftp는 데이터 전송용 포트가 따로 있어 역방향프록시를 통한 세팅이 불가능)
webdav를 이렇게 역방향프록시로 설정할 경우 webdav 기본 포트(http 5005, https 5006)를 포트포워딩하지 않아도 외부에서 webdav 접속을 할 수 있습니다.
규칙을 추가해서 역방향프록시를 만들면 되는데 webdav에 대한 예시화면입니다.
'소스'는 내가 어떤 주소로 접속하면 될지에 대해 세팅하는 칸입니다.
'소스-호스트 이름'은 원하는 서브도메인 주소(본인ddns조합해서)를 입력합니다.
'소스-포트'는 서브도메인으로 입력하므로 HTTP는 80 / HTTPS면 443을 입력해줍니다.
'대상'은 어느 서비스로 연결을 할 것인가에 대한 내용을 입력하면 됩니다.
'대상-포트'는 디폴트의 경우 http 5005, https 5006인데 'webdav 서버' 패키지에서 만약 포트번호를 바꿨다면 그 바꾼 포트번호로 입력하시면 됩니다.
DS finder도 비슷하게 해줍니다. (서브도메인은 finder용으로 따로 만들어줌)
다만 DS finder앱은 DSM 포트를 통해 접속하므로 '대상-포트'를 본인이 설정한 DSM 포트로 써넣으면 됩니다.
(안 바꿨다면 HTTP 5000 / HTTPS 5001)
모두 설정이 되었다면 이제 모바일 앱에서 잘 접속되는지 테스트해보겠습니다.
Synology photos를 예시로 보여드리겠습니다.
내가 설정한 서브도메인 주소를 넣고 (포트번호 필요없음) 아이디, 비번 / https 여부 체크하고 로그인하면 문제없이 될 것입니다.
저는 앞서 얘기했듯 https로 photos를 사용할 경우 비디오 재생에서 자잘한 오류가 생겨 그냥 끄고 씁니다.
Synology drive와 photos앱, DS note 앱은 각각 서브도메인 주소만 넣으면 문제없이 접속됩니다.
***하지만 dsm 7.0에 발맞춰 개편되지 않은 일부 고전(?)시놀로지 앱들은 약간의 문제가 있습니다.
DS file, DS finder, DS video는 포트번호가 맞지 않다며 오류로 인해 로그인이 되지 않습니다.
원인은 잘 모르겠지만 해결법은 간단합니다.
문제가 있는 앱들은 위 사진처럼 서브도메인주소 뒤에 포트번호를 입력하면 됩니다.
HTTP 80 / HTTPS 443을 넣어주고 접속하면 마찬가지로 문제없이 됩니다.
위에서 역방향 프록시를 통해 webdav 또한 설정했는데 nPlayer 등에서 webdav연결을 통해 nas의 영상을 감상하려면 마찬가지로 서브도메인을 입력해야합니다.
모바일 nplayer 설정화면이고 '호스트'에 역방향프록시에서 설정한 webdav용 서브도메인을 입력합니다.
역방향프록시에서 http로 설정했다면 포트 80에 https 체크해제 / https로 설정했다면 포트 443에 https 체크해주시면 됩니다.
만약 모바일 앱들에서 서브도메인으로 접속해서 사용하는데 문제가 생긴다면 세팅을 잘 못 했거나
해당 패키지들이 사용하는 별도의 포트들에 대해 포트포워딩이 되지 않았기 때문입니다.
적다보니 내용이 정말 길어졌네요..
그래도 저처럼 개념도 몰라 엄청 헤매실 분들께 조금이나마 쉽게 설명되었을 것이라 믿습니다.
혹시나 잘 안되면 댓글 남겨주세요.. 저도 잘 모르지만 최대한 아는대로 답변드릴게요.
P.S 저는 시놀로지 ddns 만들 때 이상하게 ~~~.synology.me로 만들면 dsm 접속이 잘 안되고 문제가 생겨서 ~~~.myds.me로 ddns 주소를 만들었습니다. 혹시나 ddns부터 문제가 생기면 ddns 주소부터 한번 바꿔서 만들어보시는 것도 추천드립니다.
P.S2 각 ddns 주소에 대한 Let's encrypt 인증서 생성은 일일 횟수제한이 있습니다. 잘 안된다고 인증서 막 지우고 만들고 반복하면 막혀서 다른 이름으로 ddns 주소를 만들어서 하거나 하루 기다려서 해야할지도 모르니 신중하게 만들고 지워주세요.
참치전쟁님의 댓글
날 잡아서 천천히 따라해보겠습니다.
혹시 같은 공유기(사무실) 환경에서 나스를 여러대 쓰면서도 적용이 가능할까요? 유튜브를 보고 따라하다가 막힌 경험이 있어서요.
꽈보님의 댓글의 댓글
새벽노을님의 댓글
워낙 오래전이라 가물 가물 하네요 안되는줄 알고 있었는데
믹스다모앙님의 댓글