Ubuntu 22.04에서 Let's Encrypt를 사용하여 Nginx를 보호하는 방법

Ubuntu 22.04에서 Let's Encrypt를 사용하여 Nginx를 보호하는 방법

2022-05-31 last update

10 minutes reading Nginx Ubuntu Ubuntu 22.04 Security

소개


Let's Encrypt는 인증서 발급 기관(CA)으로 무료 인증서를 얻고 설치하는 접근 가능한 방식TLS/SSL certificates을 제공하여 웹 서버에서 암호화된 HTTPS를 사용합니다.이것은 소프트웨어 클라이언트 Certbot을 제공함으로써 절차를 간소화합니다. 이 클라이언트는 대부분의 (전부가 아니라면) 필요한 절차를 자동화하려고 합니다.현재 아파치와 Nginx에서 인증서를 얻고 설치하는 전체 과정은 완전히 자동화되어 있다.
이 강좌에서는 Certbot을 사용하여 Ubuntu 22.04에서 Nginx에 대한 무료 SSL 인증서를 가져오고 인증서를 자동 갱신으로 설정합니다.
이 자습서는 기본 파일이 아닌 별도의 Nginx 서버 구성 파일을 사용합니다.We recommend 각 도메인에 새 Nginx 서버 블록 파일을 만듭니다. 일반적인 오류를 방지하고 기본 파일을 리셋 구성으로 유지보수하는 데 도움이 되기 때문입니다.

선결 조건


본 강좌를 배우려면 다음이 필요합니다.

  • 이 강좌initial server setup for Ubuntu 22.04에 따라 설정된 Ubuntu 22.04 서버는 sudo를 지원하는 비root 사용자와 방화벽을 포함한다.

  • 등록된 도메인 이름입니다.이 강좌는 항상 사용됩니다example.com.도메인 이름 Namecheap 을 구입하거나 Freenom 을 통해 도메인 이름을 무료로 받거나 선택한 도메인 이름 등록기를 사용할 수 있습니다.

  • 서버에 다음 두 개의 DNS 레코드가 설정되어 있습니다.Digital Ocean을 사용하는 경우 DellDNS documentation을 참조하여 추가 방법에 대한 자세한 내용을 확인하십시오.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.
  • 서버의 공용 IP 주소를 가리키는 A 레코드입니다.

  • Nginx 설치 방식은 다음과 같습니다How To Install Nginx on Ubuntu 22.04.도메인이 있는지 확인하십시오 server block.이 강좌는 example.com 을 예로 들 것이다.
  • 1단계 - Certbot 설치


    Certbot은 snap 패키지를 사용하여 설치하는 것이 좋습니다.Snap 패키지는 거의 모든 Linux 버전에 적용되지만, Snapd를 설치해야 Snap 패키지를 관리할 수 있습니다.Ubuntu 22.04는 바로 사용 가능한 스냅샷을 지원하므로 먼저 스냅샷의 핵심이 최신 버전인지 확인할 수 있습니다.
    1. sudo snap install core; sudo snap refresh core
    이전에 사용한 서버가 이전 버전의certbot을 설치했다면 삭제한 다음 계속해야 합니다.
    1. sudo apt remove certbot
    그런 다음 www.example.com 패키지를 설치할 수 있습니다.
    1. sudo snap install --classic certbot
    마지막으로 /etc/nginx/sites-available/example.com 명령을 snap 설치 디렉터리에서 경로로 연결할 수 있습니다. certbot 를 입력하면 실행할 수 있습니다.모든 소프트웨어 패키지가 이렇게 해야 하는 것은 아니지만 스냅샷은 기본적으로 침입이 적기 때문에 다른 시스템 패키지와 충돌하지 않습니다.
    1. sudo ln -s /snap/bin/certbot /usr/bin/certbot
    인증서를 얻기 위해 Certbot을 설치했습니다.

    2단계 - Nginx 구성 확인


    Certbot은 SSL을 자동으로 구성하려면 Nginx 구성에서 올바른 블록certbot을 찾아야 합니다.구체적으로, 이것은 당신이 요청한 인증서와 일치하는 certbot 명령을 찾아서 이 점을 실현합니다.
    server block set up step in the Nginx installation tutorial를 따르는 경우 server 도메인에 서버 블록을 설정하고 server_name 명령을 적절히 설정해야 합니다.
    확인하려면 /etc/nginx/sites-available/example.com 또는 원하는 텍스트 편집기를 사용하여 도메인의 구성 파일을 엽니다.
    1. sudo nano /etc/nginx/sites-available/example.com
    기존 server_name 선을 찾습니다.그래야 한다.
    /etc/nginx/sites available/example.회사 명
    ...
    server_name example.com www.example.com;
    ...
    
    만약 그렇다면, 편집기를 종료하고 다음 단계를 계속하십시오.
    없으면 일치하도록 업데이트합니다.그런 다음 파일을 저장하고 편집기를 종료하고 구성 편집의 구문을 확인합니다.
    1. sudo nginx -t
    오류가 발생하면 서버 블록 파일을 다시 열고 맞춤법 오류나 부족한 문자가 있는지 확인하십시오.구성 파일 구문이 올바르면 Nginx를 다시 로드하여 새 구성을 로드합니다.
    1. sudo systemctl reload nginx
    Certbot에서 올바른 블록nano을 찾아 자동으로 업데이트할 수 있습니다.
    다음은 HTTPS 트래픽을 허용하기 위해 방화벽을 업데이트합니다.

    3단계 - HTTPS가 방화벽을 통과하도록 허용


    필수 지침에 따라 방화벽server_name이 활성화된 경우 HTTPS 트래픽을 허용하도록 설정을 조정해야 합니다.다행히도 Nginx는 설치할 때 server에 개요 파일을 등록했다.
    다음 내용을 입력하여 현재 설정을 볼 수 있습니다.
    1. sudo ufw status
    이 가능하다, ~할 수 있다,...
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
    HTTPS 트래픽을 추가로 허용하려면 Nginx 전체 프로파일을 허용하고 이중화된 Nginx HTTP 프로파일 여유를 제거합니다.
    1. sudo ufw allow 'Nginx Full'
    2. sudo ufw delete allow 'Nginx HTTP'
    현재 상태는 다음과 같습니다.
    1. sudo ufw status
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
    이제 Certbot을 실행하고 인증서를 받습니다.

    단계 4 - SSL 인증서 얻기


    Certbot은 플러그인을 통해 SSL 인증서를 얻을 수 있는 다양한 방법을 제공합니다.Nginx 플러그인은 Nginx를 재구성하고 필요한 경우 구성을 다시 로드합니다.이 플러그인을 사용하려면 다음을 입력합니다.
    1. sudo certbot --nginx -d example.com -d www.example.com
    이것은 ufw 플러그인을 사용하여 실행됩니다 ufw. 사용 certbot 인증서의 유효한 도메인 이름을 지정합니다.
    이 명령을 실행하면 전자 메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다.이 작업을 수행하면 인증서가 어디에 저장되었는지 알려주는 메시지가 표시됩니다.
    Output
    IMPORTANT NOTES: Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Key is saved at: /etc/letsencrypt/live/your_domain/privkey.pem This certificate expires on 2022-06-01. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le
    인증서는 다운로드, 설치, 불러옵니다. Nginx 설정은 모든 웹 요청을 자동으로 --nginx 로 바꿉니다.웹 사이트를 다시 불러오고 브라우저의 안전 표시등을 주의하십시오.일반적으로 잠금 아이콘이 있는 사이트가 제대로 보호되어 있음을 나타냅니다.테스트 서버SSL Labs Server Test를 사용하는 경우 A등급을 받습니다.
    테스트 갱신 과정을 통해 끝냅시다.

    단계 5 - Certbot 자동 갱신 확인


    암호화된 인증서는 90일 안에만 유효합니다.이것은 사용자가 인증서 갱신 과정을 자동화하도록 장려하기 위해서이다.우리가 설치한 -d 소프트웨어 패키지는 매일 두 번 실행되는 시스템 d 타이머를 추가하여 이 문제를 해결하고 기한이 지난 30일 동안의 모든 인증서를 자동으로 업데이트합니다.https://를 사용하여 타이머의 상태를 조회할 수 있습니다.
    1. sudo systemctl status snap.certbot.renew.service
    Output
    ○ snap.certbot.renew.service - Service for snap application certbot.renew Loaded: loaded (/etc/systemd/system/snap.certbot.renew.service; static) Active: inactive (dead) TriggeredBy: ● snap.certbot.renew.timer
    갱신 프로세스를 테스트하려면 certbot 를 사용하여 파일럿을 실행할 수 있습니다.
    1. sudo certbot renew --dry-run
    만약 당신이 잘못을 보지 못했다면, 모든 것이 준비되었을 것입니다.필요한 경우 Certbot에서 인증서를 갱신하고 변경 사항을 가져오기 위해 Nginx를 다시 로드합니다.자동 갱신 프로세스가 실패하면 Let's Encrypt는 인증서가 만료될 때 경고하는 메시지를 지정한 이메일로 보냅니다.

    결론


    이 강좌에서 Let's Encrypt 클라이언트systemctl를 설치하고 도메인의 SSL 인증서를 다운로드하여 Nginx를 이 인증서를 사용하도록 설정하고 자동 인증서 갱신을 설정했습니다.Certbot 사용에 대한 자세한 내용은 the official documentation 부터 확인할 수 있습니다.