
LetsEncrypt를 통해 HTTPS를 사용하는 Nginx 리버스 에이전트
2022-06-03 last update
7 minutes reading Nginx이것은 저의 이전 글의 후속 글입니다. 우리는 Nginx를 사용하여 간단한 역방향 프록시 서버를 설치했습니다.본고에서, 우리는 LetsEncrypt에서 제공하는 무료 TLS(SSL) 인증서를 사용하여 클라이언트와 역방향 프록시 서버 간의 연결을 보호할 것입니다.나는 당신이 상술한 역방향 에이전트에 관한 게시물을 보고 기본 지식을 이해하도록 격려합니다.
정적 공용 IP가 있는 서버.여기가 바로 Nginx가 운행하는 곳입니다. 대상 웹 사이트에서 HTTP를 통해 실행되는 백엔드 서버 도메인 이름을 등록합니다.나는 ranvirslog를 사용할 것이다.com은 제 도메인 이름으로 이 두 사이트는 FQDNS-ww1에 있습니다.란비스로.com 및 ww2ranvirslog.com
따라서 IP 주소가 변경되었습니다.새 IP 및 호스트 이름입니다.
VM/호스트 이름
공용 IP
전용 IP
역할/기능
리버스 에이전트
68.183.214.151
10.135.127.136
TLS 종료점 및 리버스 프록시 서버
웹 1 사이트
해당되지 않음
10.135.126.102
위탁 관리 ww1.란비스로.일반 도메인 이름 형식
포트 80 HTTP를 통해 웹 사이트 액세스
웹 2 사이트
해당되지 않음
10.135.126.187
군중 혹은 부대의 집합
ww2.ranvirslog.일반 도메인 이름 형식
포트 80 HTTP를 통해 웹 사이트 액세스
DNS 레코드는 동일한 정적 공용 IP를 가리키는 두 개의 웹 사이트로 설정됩니다.이것은 바로 우리의 Nginx 리버스 에이전트의 IP 주소입니다.
레코드
가치
ww1.ranvirslog.일반 도메인 이름 형식
68.183.214.151
ww2.ranvirslog.일반 도메인 이름 형식
68.183.214.151
역방향 DNS가 암호화되지 않은 HTTP에서 작동하도록/etc/conf.d/에서 ww1이라는 두 개의 파일을 만들었습니다.형태와 ww2.다음 구성을 사용하여 각 구성을 구성합니다.
역방향 DNS(및 백엔드 사이트)가 시작되고 실행되었습니다. 우리의 목표는 Nginx 역방향 에이전트에 FQDN(즉 ww1.ranvirslog.com과 ww2.ranvirslog.com)에 TLS 인증서를 설치하는 것입니다.
모든 클라이언트와 리버스 에이전트 간의 통신은 암호화되지만, 리버스 에이전트와 백엔드 서버 간의 통신은 암호화되지 않습니다.그러나 이것은 HTTPS가 아예 없는 것보다 더 안전한 선택이다.역방향 프록시와 각종 웹 서버가 같은 호스트에 있는 경우, 예를 들어 Docker 용기를 사용하여 같은 VPS에서 모든 내용을 호스팅하면 암호화되지 않은 데이터도 한 호스트에 포함됩니다.
Certbot은 클라이언트 프로그램으로 우리의 역방향 프록시 서버에서 실행되고 LetsEncrypt와 TLS 인증서를 협상합니다.이것은 LetsEncrypt에 서버가 자신이 제어한다고 주장하는 FQDN을 실제로 제어하고 있음을 증명할 것이다.우리는 Certbot이 이 점을 어떻게 하는지 걱정하지 않을 것이다.
전통적으로 인증서를 가져와 서버에 저장하기만 하면 Certbot을 독립된 소프트웨어로 사용할 수 있습니다.그러나 다행히도 대부분의 운영체제에는 Nginx, Apache와 다른 소프트웨어에 대한 사용자 정의 플러그인이 있다.Nginx 플러그인을 사용하여 Certbot을 설치합니다.이것은 새로 얻은 키를 사용하도록 Nginx를 자동으로 설정하고 포트 80에서 HTTP를 탐색하는 것과 같은 안전하지 않은 규칙을 제거합니다.
만약 데비안 기반 시스템을 사용한다면, 내가 사용하는 Ubuntu 18.04 LTS와 같이 설치가 매우 쉽다.
운영 체제 조합에 Nginx 플러그인이 있는 Certbot을 설치하면 작업을 시작할 수 있습니다.
TLS 인증서를 처음 받으려면 다음 명령을 실행합니다.
이메일 입력 디버그 로그를/var/log/letsencrypt/letsencrypt에 저장합니다.로그
선택한 플러그인: 인증기nginx, 설치 프로그램nginx
전자 메일 주소 입력 (비상 갱신 및 보안 알림용):[email protected] TOS 동의 다음 서비스 약관을 참조하십시오.https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf.다음 위치에서 ACME 서버에 등록하려면 동의해야 합니다.https://acme-v02.api.letsencrypt.org/directory
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(A) 녹색/(C) 취소: A 뉴스레터 옵션 – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
전자 최첨단 재단(Electronic Frontier Foundation)과 이메일 주소를 공유하시겠습니까? 이 재단은 Let's Encrypt 프로젝트의 창시 파트너이자 Certbot을 개발하는 비영리 조직입니까?암호화 네트워크, EFF 뉴스, 활동, 디지털 자유 지원 등의 업무를 소개하는 이메일을 보내려고 합니다.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)아니오: Y 그러면 서버의 도메인 이름을 검색합니다. 모든 도메인을 선택하려면 을 누르십시오.
어떤 이름으로 HTTPS를 활성화하시겠습니까?
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: ww1.란비스로.일반 도메인 이름 형식
제2차 세계대전.란비스로.일반 도메인 이름 형식
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
쉼표 및/또는 공백으로 구분할 적절한 숫자를 선택하거나 표시할 모든 옵션을 선택하려면 [c]를 입력하여 취소합니다. 모든 내용을 TLS로 리디렉션합니다.옵션 2를 선택하여 모든 내용을 SSL로 다시 지정했지만 용례가 다를 수 있습니다.새 백엔드 설치의 경우 옵션 2를 선택하면 안전합니다. HTTP 트래픽을 HTTPS로 재설정하고 HTTP 액세스를 삭제할지 여부를 선택하십시오.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: 리디렉션 없음 - 웹 서버 구성을 더 이상 변경하지 않습니다.
2: 리디렉션 - 모든 요청을 보안 HTTPS로 리디렉션합니다.새 사이트의 경우 또는 사이트에서 HTTPS를 사용할 수 있다고 확신하는 경우 이 옵션을 선택합니다.웹 서버의 설정을 편집해서 이 변경 사항을 취소할 수 있습니다.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
적절한 숫자[1-2]를 선택하고 [입력]("c"를 누르면 취소): 2
만약 모든 것이 순조롭다면, 그것은 당신에게 이 소식을 표시할 것입니다. 단지 당신의 도메인 이름만을 겨냥할 것입니다.
축하활성화되었습니다.https://ww1.ranvirslog.com화목하다https://ww2.ranvirslog.comFQDN에 액세스하여 웹 사이트에 모든 내용이 암호화되어 있음을 나타내는 자물쇠 로고가 있음을 알 수 있습니다.
이전에 만든 프로필, 즉/etc/conf.d/ww1을 보십시오.conf 및/etc/conf.d/ww2.ff에서 모든 "Listen 80"규칙이 사라졌고 서버에 암호화 통신이 필요하고 상기 암호화를 실행하는 데 필요한 인증서와 키의 위치를 알려주는 새로운 줄이 추가되었습니다.
인증서를 정확하게 설치하고 프로필을 작성하는 방법을 가르쳐 줄 수 있기 때문에 프로필을 보는 것을 강력히 권장합니다.
전형적인 LetsEncrypt 인증서의 유효기간은 90일이며, 만료되기 전에 갱신해야 합니다.다음 명령을 실행하면 Certbot을 사용하여 처음으로 갱신할 수 있습니다.
축하합니다. 모든 갱신이 성공했습니다.다음 인증서가 갱신되었습니다.
TLS 인증서의 초보자라면 HST 같은 것을 시도하는 것은 위험할 수 있습니다.이런 변화는 역전할 수 없기 때문이다.하지만 당신이 정말 안전한 토끼굴에 들어가고 싶다면 Troy Hunt’s blog 강력히 추천합니다. 이것은 이 글의 주요 영감 중 하나입니다.
선결 조건
설치 프로그램
따라서 IP 주소가 변경되었습니다.새 IP 및 호스트 이름입니다.
VM/호스트 이름
공용 IP
전용 IP
역할/기능
리버스 에이전트
68.183.214.151
10.135.127.136
TLS 종료점 및 리버스 프록시 서버
웹 1 사이트
해당되지 않음
10.135.126.102
위탁 관리 ww1.란비스로.일반 도메인 이름 형식
포트 80 HTTP를 통해 웹 사이트 액세스
웹 2 사이트
해당되지 않음
10.135.126.187
군중 혹은 부대의 집합
ww2.ranvirslog.일반 도메인 이름 형식
포트 80 HTTP를 통해 웹 사이트 액세스
DNS 레코드는 동일한 정적 공용 IP를 가리키는 두 개의 웹 사이트로 설정됩니다.이것은 바로 우리의 Nginx 리버스 에이전트의 IP 주소입니다.
레코드
가치
ww1.ranvirslog.일반 도메인 이름 형식
68.183.214.151
ww2.ranvirslog.일반 도메인 이름 형식
68.183.214.151
역방향 DNS가 암호화되지 않은 HTTP에서 작동하도록/etc/conf.d/에서 ww1이라는 두 개의 파일을 만들었습니다.형태와 ww2.다음 구성을 사용하여 각 구성을 구성합니다.
/etc/conf.d/ww1。형태
server {
listen 80;
listen [::]:80;
server_name ww1.ranvirslog.com;
location / {
proxy_pass http://10.135.126.102/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}
/etc/conf.d/ww2。형태
server {
listen 80;
listen [::]:80;
server_name ww2.ranvirslog.com;
location / {
proxy_pass http://10.135.126.187/;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
}
}
우리가 사용하는 운영체제는 Ubuntu 18.04 LTS입니다. 우리는 파일/etc/nginx/sites enabled/default를 삭제했습니다. 이렇게 하면nginx는 위에서 보여준 설정을 순수하게 역방향 DNS로 충당할 수 있습니다.객관적
역방향 DNS(및 백엔드 사이트)가 시작되고 실행되었습니다. 우리의 목표는 Nginx 역방향 에이전트에 FQDN(즉 ww1.ranvirslog.com과 ww2.ranvirslog.com)에 TLS 인증서를 설치하는 것입니다.
모든 클라이언트와 리버스 에이전트 간의 통신은 암호화되지만, 리버스 에이전트와 백엔드 서버 간의 통신은 암호화되지 않습니다.그러나 이것은 HTTPS가 아예 없는 것보다 더 안전한 선택이다.역방향 프록시와 각종 웹 서버가 같은 호스트에 있는 경우, 예를 들어 Docker 용기를 사용하여 같은 VPS에서 모든 내용을 호스팅하면 암호화되지 않은 데이터도 한 호스트에 포함됩니다.
Certbot 설치
Certbot은 클라이언트 프로그램으로 우리의 역방향 프록시 서버에서 실행되고 LetsEncrypt와 TLS 인증서를 협상합니다.이것은 LetsEncrypt에 서버가 자신이 제어한다고 주장하는 FQDN을 실제로 제어하고 있음을 증명할 것이다.우리는 Certbot이 이 점을 어떻게 하는지 걱정하지 않을 것이다.
전통적으로 인증서를 가져와 서버에 저장하기만 하면 Certbot을 독립된 소프트웨어로 사용할 수 있습니다.그러나 다행히도 대부분의 운영체제에는 Nginx, Apache와 다른 소프트웨어에 대한 사용자 정의 플러그인이 있다.Nginx 플러그인을 사용하여 Certbot을 설치합니다.이것은 새로 얻은 키를 사용하도록 Nginx를 자동으로 설정하고 포트 80에서 HTTP를 탐색하는 것과 같은 안전하지 않은 규칙을 제거합니다.
만약 데비안 기반 시스템을 사용한다면, 내가 사용하는 Ubuntu 18.04 LTS와 같이 설치가 매우 쉽다.
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt update
$ sudo apt install python-certbot-nginx
RedHat, Gentoo, Fedora와 같은 다른 운영체제는 열거된 공식 설명here을 따를 수 있다.운영 체제 조합에 Nginx 플러그인이 있는 Certbot을 설치하면 작업을 시작할 수 있습니다.
TLS 인증서 가져오기
TLS 인증서를 처음 받으려면 다음 명령을 실행합니다.
$ sudo certbot --nginx
이것은 다음과 같은 일련의 상호작용 문제를 관통시킬 것이다.선택한 플러그인: 인증기nginx, 설치 프로그램nginx
전자 메일 주소 입력 (비상 갱신 및 보안 알림용):[email protected]
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(A) 녹색/(C) 취소: A
전자 최첨단 재단(Electronic Frontier Foundation)과 이메일 주소를 공유하시겠습니까? 이 재단은 Let's Encrypt 프로젝트의 창시 파트너이자 Certbot을 개발하는 비영리 조직입니까?암호화 네트워크, EFF 뉴스, 활동, 디지털 자유 지원 등의 업무를 소개하는 이메일을 보내려고 합니다.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
(Y)es/(N)아니오: Y
어떤 이름으로 HTTPS를 활성화하시겠습니까?
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: ww1.란비스로.일반 도메인 이름 형식
제2차 세계대전.란비스로.일반 도메인 이름 형식
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
쉼표 및/또는 공백으로 구분할 적절한 숫자를 선택하거나 표시할 모든 옵션을 선택하려면 [c]를 입력하여 취소합니다.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
1: 리디렉션 없음 - 웹 서버 구성을 더 이상 변경하지 않습니다.
2: 리디렉션 - 모든 요청을 보안 HTTPS로 리디렉션합니다.새 사이트의 경우 또는 사이트에서 HTTPS를 사용할 수 있다고 확신하는 경우 이 옵션을 선택합니다.웹 서버의 설정을 편집해서 이 변경 사항을 취소할 수 있습니다.
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
적절한 숫자[1-2]를 선택하고 [입력]("c"를 누르면 취소): 2
만약 모든 것이 순조롭다면, 그것은 당신에게 이 소식을 표시할 것입니다. 단지 당신의 도메인 이름만을 겨냥할 것입니다.
축하활성화되었습니다.https://ww1.ranvirslog.com화목하다https://ww2.ranvirslog.comFQDN에 액세스하여 웹 사이트에 모든 내용이 암호화되어 있음을 나타내는 자물쇠 로고가 있음을 알 수 있습니다.
프로필 보기
이전에 만든 프로필, 즉/etc/conf.d/ww1을 보십시오.conf 및/etc/conf.d/ww2.ff에서 모든 "Listen 80"규칙이 사라졌고 서버에 암호화 통신이 필요하고 상기 암호화를 실행하는 데 필요한 인증서와 키의 위치를 알려주는 새로운 줄이 추가되었습니다.
인증서를 정확하게 설치하고 프로필을 작성하는 방법을 가르쳐 줄 수 있기 때문에 프로필을 보는 것을 강력히 권장합니다.
인증서 갱신
전형적인 LetsEncrypt 인증서의 유효기간은 90일이며, 만료되기 전에 갱신해야 합니다.다음 명령을 실행하면 Certbot을 사용하여 처음으로 갱신할 수 있습니다.
$ sudo certbot renew --dry-run
작업이 성공하면 다음 메시지가 표시됩니다.축하합니다. 모든 갱신이 성공했습니다.다음 인증서가 갱신되었습니다.
/etc/letsencrypt/live/ww1.ranvirslog.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
이제 Cron 작업을 추가할 수 있습니다. 이 작업은 매주 업데이트를 시도합니다.인증서가 만료되지 않는 한 Certbot은 인증서를 업데이트하지 않으므로 걱정할 필요가 없습니다.실제 갱신 명령은 다음과 같습니다.$ certbot renew
다음 명령을 사용하여 root의cron 작업에 추가합니다.$ sudo crontab -e
다음 프롬프트에서 원하는 편집기를 선택하고 (확실하지 않으면 Nano) 현재 열려 있는 파일의 끝에 다음 줄을 추가합니다.....
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
* 2 * * 2 certbot renew
매주 다음날 임의의 오전 2시에certbotrenew 명령을 실행합니다.결론
TLS 인증서의 초보자라면 HST 같은 것을 시도하는 것은 위험할 수 있습니다.이런 변화는 역전할 수 없기 때문이다.하지만 당신이 정말 안전한 토끼굴에 들어가고 싶다면 Troy Hunt’s blog 강력히 추천합니다. 이것은 이 글의 주요 영감 중 하나입니다.