웹사이트 검색

Debian 11에서 Let's Encrypt로 Apache를 보호하는 방법


소개

필요한 단계의 대부분(전부는 아님)을 자동화하려고 시도하는 Certbot. 현재 인증서를 얻고 설치하는 전체 프로세스는 Apache와 Nginx 모두에서 완전히 자동화되어 있습니다.

이 자습서에서는 Certbot을 사용하여 Debian 11에서 Apache용 무료 SSL 인증서를 얻고 인증서가 자동으로 갱신되도록 설정합니다.

이 자습서에서는 기본 구성 파일 대신 별도의 Apache 가상 호스트 파일을 사용합니다. 일반적인 실수를 방지하고 기본 파일을 폴백 구성으로 유지하는 데 도움이 되므로 각 도메인에 대해 새 Apache 가상 호스트 파일을 생성하는 것이 좋습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • sudo 권한과 방화벽이 있는 루트가 아닌 사용자를 포함하여 데비안 11 튜토리얼의 초기 서버 설정에 따라 데비안 11 서버 설정.\n
  • 완전히 등록된 도메인 이름. 이 자습서에서는 전체적으로 your_domain을 예로 사용합니다. Freenom에서 도메인 이름을 구입하거나 선택한 도메인 등록 기관을 사용할 수 있습니다.\n
  • 다음 DNS 레코드는 모두 서버에 대해 설정됩니다. 이를 설정하려면 다음 지침에 따라 DNS 레코드를 생성할 수 있습니다.\n
    • 서버의 공용 IP 주소를 가리키는 your_domain이 있는 A 레코드
    • 서버의 공개 IP 주소를 가리키는 www.your_domain이 있는 A 레코드

    도메인에 설정된 가상 호스트 파일에 따라 Apache가 설치됩니다. 이 자습서에서는 /etc/apache2/sites-available/your_domain.conf를 예로 사용합니다.

    1단계 - Certbot 설치

    SSL 인증서를 얻기 위해 Let’s Encrypt를 사용하는 첫 번째 단계는 서버에 Certbot 소프트웨어를 설치하는 것입니다.

    참고: 이 튜토리얼은 snap이라는 형식으로 패키지를 설치하는 Linux 시스템용으로 개발된 패키지 관리자인 snappy를 따릅니다. apt를 사용하여 기본 Debian 리포지토리에서 Certbot을 설치할 수 있지만 이렇게 하면 Certbot 스냅(버전 1.29.0, 이 작성 시점의 최신 버전)보다 이전 버전(버전 1.12.0)이 설치됩니다. .

    Debian에서 Certbot을 스냅으로 설치하려면 먼저 서버에 snapd를 설치해야 합니다. snapd는 스냅을 설치, 사용 및 관리하는 데 필요한 데몬입니다. snapd 패키지를 설치하면 snap 명령도 서버에 설치됩니다.

    snapd를 설치하려면 최근에 수행하지 않은 경우 로컬 패키지 인덱스를 업데이트하십시오.

    1. sudo apt update

    그런 다음 snapd 패키지를 설치합니다.

    1. sudo apt install snapd

    이 명령을 실행하면 snapd 및 해당 종속성을 설치할 것인지 확인하는 메시지가 표시됩니다. Y를 누른 다음 ENTER를 눌러 동의할 수 있습니다.

    다음으로 snap 명령을 사용하여 core 스냅을 설치합니다. 이렇게 하면 Certbot 스냅을 포함하여 설치하는 모든 스냅에 필요한 일부 종속성이 서버에 설치됩니다.

    1. sudo snap install core

    그런 다음 코어 스냅을 새로 고칩니다. 이렇게 하면 최신 버전의 snapd와 종속 항목이 설치되어 있는지 확인할 수 있습니다.

    1. sudo snap refresh core

    스냅은 시스템에서 다양한 수준의 격리를 제공하는 세 가지 제한 수준 중 하나에 설치할 수 있습니다. 예를 들어 대부분의 스냅은 기본적으로 --strict 제한 수준 아래에 설치되어 이러한 프로그램이 시스템의 파일이나 네트워크에 액세스하지 못하도록 합니다. 인증서를 올바르게 설정하려면 Certbot이 특정 구성 파일을 편집할 수 있어야 하므로 이 명령에는 --classic 옵션이 포함됩니다. 이 제한 수준은 그 아래에 설치된 모든 스냅이 기존 패키지와 동일한 시스템 리소스에 대한 액세스를 허용합니다.

    이를 염두에 두고 다음 명령으로 certbot 스냅을 설치할 수 있습니다.

    1. sudo snap install --classic certbot

    이 설치 프로세스는 certbot 실행 파일을 /snap/bin/ 디렉토리에 설치합니다. /usr/bin/ 디렉토리에 이 파일에 대한 심볼릭 링크를 생성하여 시스템 어디에서나 certbot 명령을 실행할 수 있도록 합니다.

    1. sudo ln -s /snap/bin/certbot /usr/bin/certbot

    이제 Certbot을 사용할 준비가 되었지만 Apache용 SSL을 구성하려면 Apache가 올바르게 구성되었는지 확인해야 합니다.

    2단계 - SSL 인증서 설정

    Certbot은 SSL을 자동으로 구성하기 위해 Apache 구성에서 올바른 가상 호스트를 찾을 수 있어야 합니다. 특히 인증서를 요청한 도메인과 일치하는 ServerName 지시문을 검색하여 이를 수행합니다.

    Apache 설치 자습서의 가상 호스트 설정 단계를 따른 경우 /etc/apache2/sites-available/your_domainVirtualHost 블록이 있어야 합니다. >.conf에 ServerName 지시문이 이미 적절하게 설정되어 있습니다.

    확인하려면 nano 또는 자주 사용하는 텍스트 편집기를 사용하여 도메인의 가상 호스트 파일을 엽니다.

    1. sudo nano /etc/apache2/sites-available/your_domain.conf

    기존 ServerName 줄을 찾습니다. your_domain 대신 자신의 도메인 이름을 사용하여 다음과 같아야 합니다.

    ...
    ServerName your_domain;
    ...
    

    아직 업데이트하지 않은 경우 도메인 이름을 가리키도록 ServerName 지시문을 업데이트합니다. 그런 다음 파일을 저장하고 편집기를 종료합니다. nano를 사용한 경우 CTRL + X, Y, ENTER를 차례로 누릅니다.

    다음으로 구성 편집의 구문을 확인합니다.

    1. sudo apache2ctl configtest

    구문 오류가 없으면 출력은 다음을 반환합니다.

    Output
    . . . Syntax OK

    오류가 발생하면 가상 호스트 파일을 다시 열고 오타나 누락된 문자가 있는지 확인하십시오. 구성 파일의 구문이 정확하면 Apache를 다시 로드하여 새 구성을 로드합니다.

    1. sudo systemctl reload apache2

    Certbot은 이제 올바른 VirtualHost 블록을 찾아 업데이트할 수 있습니다.

    다음으로 HTTPS 트래픽을 허용하도록 방화벽을 업데이트하겠습니다.

    3단계 - 방화벽을 통한 HTTPS 허용

    전제 조건 가이드에서 권장하는 대로 ufw 방화벽을 활성화한 경우 HTTPS 트래픽을 허용하도록 설정을 조정해야 합니다. 다행스럽게도 Debian에 설치할 때 ufw는 HTTP 및 HTTPS 트래픽에 대한 방화벽 규칙을 변경하는 프로세스를 돕는 몇 가지 프로필과 함께 패키지로 제공됩니다.

    다음을 실행하여 현재 설정을 확인할 수 있습니다.

    1. sudo ufw status

    Debian 11에 Apache를 설치하는 방법에 대한 가이드의 2단계를 따른 경우 이 명령의 출력은 다음과 같으며 웹 서버에 HTTP 트래픽만 허용됨을 나타냅니다.

    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere WWW ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW (v6) ALLOW Anywhere (v6)

    HTTPS 트래픽을 허용하려면 "WWW Full\ 프로필을 허용하고 중복 "WWW\ 프로필 허용을 삭제하십시오.

    1. sudo ufw allow 'WWW Full'
    2. sudo ufw delete allow 'WWW'

    이제 귀하의 상태는 다음과 같아야 합니다.

    1. sudo ufw status
    Output
    Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere WWW Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) WWW Full (v6) ALLOW Anywhere (v6)

    다음으로 Certbot을 실행하고 인증서를 가져오겠습니다.

    4단계 - SSL 인증서 받기

    Certbot은 플러그인을 통해 SSL 인증서를 얻는 다양한 방법을 제공합니다. Apache 플러그인은 Apache를 재구성하고 필요할 때마다 구성을 다시 로드합니다. 이 플러그인을 사용하려면 다음을 실행하십시오.

    1. sudo certbot --apache -d your_domain -d www.your_domain

    이것은 --apache 플러그인과 함께 certbot을 실행하고 -d를 사용하여 유효한 인증서 이름을 지정합니다.

    certbot을 처음 실행하는 경우 이메일 주소를 입력하고 서비스 약관에 동의하라는 메시지가 표시됩니다. 또한 디지털 권리를 옹호하고 Certbot의 제작자이기도 한 비영리 조직인 Electronic Frontier Foundation과 이메일 주소를 공유할 의향이 있는지 묻습니다. 이메일 주소를 공유하려면 Y를 입력하고 거절하려면 N을 입력하세요.

    이렇게 하면 certbot이 Let’s Encrypt 서버와 통신한 다음 인증서를 요청하는 도메인을 제어하는지 확인하기 위해 챌린지를 실행합니다.

    성공하면 구성이 자동으로 업데이트되고 Apache가 새 설정을 선택하기 위해 다시 로드됩니다. certbot은 프로세스가 성공했고 인증서가 어디에 저장되었는지 알려주는 메시지로 마무리됩니다.

    Output
    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-10-31. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Successfully deployed certificate for www.your_domain to /etc/apache2/sites-available/your_domain-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://your_domain and https://www.your_domain - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    인증서가 다운로드, 설치 및 로드됩니다. https://를 사용하여 웹사이트를 새로고침하고 브라우저의 보안 표시기를 확인하세요. 일반적으로 녹색 자물쇠 아이콘과 함께 사이트가 적절하게 보호되었음을 나타내야 합니다. SSL Labs 서버 테스트를 사용하여 서버를 테스트하면 A 등급을 받습니다.

    갱신 프로세스를 테스트하여 마치겠습니다.

    5단계 - Certbot 자동 갱신 확인

    Let’s Encrypt 인증서는 90일 동안만 유효합니다. 이는 사용자가 인증서 갱신 프로세스를 자동화하도록 권장하기 위한 것입니다. 설치한 certbot 패키지는 갱신 스크립트를 /etc/cron.d에 추가하여 이를 처리합니다. 이 스크립트는 하루에 두 번 실행되며 만료 30일 이내의 모든 인증서를 자동으로 갱신합니다.

    갱신 프로세스를 테스트하려면 certbot을 사용하여 시험 실행을 할 수 있습니다.

    1. sudo certbot renew --dry-run

    오류가 발생하지 않으면 모든 설정이 완료된 것입니다. 필요한 경우 Certbot은 인증서를 갱신하고 Apache를 다시 로드하여 변경 사항을 적용합니다. 자동 갱신 프로세스가 실패하면 Let’s Encrypt는 지정한 이메일로 메시지를 보내 인증서가 만료될 때 경고합니다.

    결론

    이 자습서에서는 Let’s Encrypt 클라이언트 certbot을 설치하고, 도메인용 SSL 인증서를 다운로드하고, 이러한 인증서를 사용하도록 Apache를 구성하고, 자동 인증서 갱신을 설정했습니다. Certbot 사용에 대한 추가 질문이 있는 경우 해당 문서에서 시작하는 것이 좋습니다.