반응형

 

 

 

5. HTTPS 를 적용해보자! (NPM 사용)

HTTPS 를 적용하는방법 중 하나인 NPM(nginx proxy manager) 를 사용해보려고 한다.

NPM이 뭐야? nginx 에서 프록시 설정을 UI를 통해 쉽게 설정할 수 있게끔 도와준다.

원래 nginx 에서 리버스 프록시 설정하려면... 아래와 같은 설정을 config 코드로 작성해야한다.

      server {
                listen 80;
                server_name 서버ip;
                return 301 $scheme://서버domain$request_uri;

        }


        server {
                listen 443;
                server_name 서버domain;

                ssl     on;
                ssl_certificate         /root/security/ssl/cert.pem;
                ssl_certificate_key     /root/security/ssl/key.pem;
                ssl_session_timeout     20m;
                ssl_protocols  TLSv2 TLSv3;
                ssl_ciphers  HIGH:!aNULL:!MD5;
                ssl_prefer_server_ciphers   on;

                location / {
                        #proxy_redirect off;
                        proxy_buffering off;
                        #proxy_pass_header Server;
                        proxy_set_header Host $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Forwarded-Proto $scheme;

                        proxy_pass http://서버ip:9000/;
                        #proxy_redirect http://서버ip:9000 https://서버도메인;
                        proxy_http_version 1.1;
                 }
        }

 

하지만 NPM 을 사용하면? 그냥 UI 에서 쉽게 출발지, 목적지만 적어주면 끝! (너무편하다)

password.maaani.kr 를 접속하면 내부에 192.168.205.205:2525 로 접속하게 해주세요!
SSL 은 무료 SSL인 Let's Encrypt 를 적용해주세요! (이게 끝)

 

NPM 목적은 HTTPS 를 적용하려고 사용하는 것 보다

언제까지 IP:포트번호를 입력해서 쓸 수는 없다.. 포트번호 언제 일일히 외우고있어....

리버스 프록시로 내가 A 라는 주소만 입력해도 B : 포트번호 로 이동하게끔 도와준다. 

 

Docker 에서 vaultwarden 이미지를 다운받고 컨테이너를 생성하는것 까지 잘 따라해봤다. 그러면 똑같다.

Docker 에서 레지스트리에서 jlesage-nginx-proxy-manager 를 다운받아보자

 

 

 

 

 

 

임의 포트 3개 정해주자.

4443은 https용

8080은 http용

8181은 관리자용

 

컨테이너 설정도 끝나고 컨테이너가 작동하면 한번 IP:포트로 접속해보자.

먼저 http 용 포트 (30001) 로 접속해보자

나를 축하해준다...!!!  Admin 페이지에 들어가라고 안내해준다. Admin 페이지인 30002 포트로 들어가보자.

 

 

 

6. NPM 설정

 

 

초기 ID/PW

email : admin@example.com
pw : changeme

 

Hosts -> Proxy Hosts -> Add proxy Host 클릭

 

 

 

 

1. Domain Names ▶ 바깥(외부) 에서 서버로 접근할 때 주소 

서브도메인.도메인 으로 편하게 쓰자.

예를들어 maani.synology.me 를 사용하는 중이면. password.maani.synology.me 

 

2. Scheme ▶ http

3. Forward Hostname / IP ▶ 전달할 내부 IP 

4. Forward Port ▶ 전달할 내부 포트 (설마 까먹진 않았겠지..?)

기억을 떠올려봐...

 

 

그리고 대망의 SSL 탭.. 아까 위에서 Details 탭에서 사용하기로 한 도메인 

password.maani.kr 에 SSL을 입혀주세요! 하고 새로운 SSL 인증서를 발급요청하는거다.

 

Save 누르고 끝..?

일줄 알았다. 누르면 이런 에러가 뜰 것이다.

뭐냐 저에러는

 

 

 

 

7. NPM Let's Encrypt SSL 인증서 Internal Error 해결

 

무슨에러일까...? 

 

Error: Command failed: certbot certonly --config "/etc/letsencrypt.ini" --cert-name "npm-6" --agree-tos --authenticator webroot --email "dlrkdaks@gmail.com" --preferred-challenges "dns,http" --domains "password.maani.synology.me" 
Saving debug log to /var/log/letsencrypt/letsencrypt.log
An unexpected error occurred:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Max retries exceeded with url: /directory (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Try again'))
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

    at ChildProcess.exithandler (node:child_process:397:12)
    at ChildProcess.emit (node:events:390:28)
    at maybeClose (node:internal/child_process:1064:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)

 

무료 인증서를 발급해주는 Let's encrypt 서버는 해외에 있다. 혹시 NAS 에서 방화벽 설정은 어떻게 하셨는가

그렇다. 해외 접속을 차단한답시고 방화벽 정책에서 차단을 걸었던게 있었다.

차단을 잠시 풀어주자. SSL 발급 서버가 미국에 있으니까..  

 

풀어주고 아까 하던 설정 다시 시도해보자.

 

Save 눌러보자 드디어!!

 

그럼 이렇게 추가가 된 것을 볼 수 있다. 끝났다. 드디어...  시도해보자

 

 

 

그리고 SSL 인증서가 잘 적용된 것을 확인할 수 있는데 이대로 해외 IP 접근을 허용하게 냅둘셈인가

 

Docker 의 컨테이너 IP 대역은
172.17.0.0 이고
서브넷마스크는 255.255.0.0 을 사용한다
Docker 대역에 접근할 수 있게끔 추가해보자

 

 

 

 

 

 

 

접근방법1 (URL 통한 직접 접근)

 

접근방법2 (크롬 확장프로그램)

 

접근방법3 (휴대폰 어플 사용)

 

 

 

 

--- 23.4.2 추가 ---

오랜만에 다시 도메인 추가했는데

internal error 뜨길래 기록해봄

 

1) 방화벽 문제라고 알려줌. 방화벽 문제 맞음. 다 닫아놨어서

 

2) 방화벽 풀으니까 404 에러라고함. 도메인 페이지를 못찾는다고 함. 

계속 원인 찾기 시간아까워서 우회방법 생각해봄

해봤는데 잘 되서 공유드림

 

시놀로지 제어판->보안->인증서 가보면 

어짜피 와일드카드로 받은 Let's Encrypt 인증서가 있을 것이다

그럼 이런 파일들을 다운로드 할 수 있다. 다운받아놓자

 

그다음 다시 npm 가서 수동으로 ssl 을 만들자

(사진 잘못됨 privkey.pem , cert.pem 순서임)

이렇게 수동으로 ssl 을 만든다음에

호스트 가서 Let's Encrypt 신규 생성 안됐던거를

방금 수동으로 만든 ssl 을 선택하고 저장

 

ssl 적용 잘 된다 굿

 

--- 23.11.17 추가 ---

집이 아니라 외부에서 하니까 Let's Encrypt 발급 그냥 됨;;??

집이 문제였던 것

집 네트워크에서는 도메인으로 나스 접속이 안됐는데 (aaaa.synology.me) 그래서 ip 로만 접속이 가능했고 (192.168.210.210)

 

외부에서는 당연히 ip는 안되고 도메인으로 접속이 가능했다

근데 외부에서 한번 해보니까 발급 그냥 됨 

반응형
도움이 되셨다면 공감 클릭 부탁드리며
출처만 남겨주시면 글 내용은 마음껏 퍼가셔도 좋습니다 :)