Debian 8의 Let's Encrypt를 사용하여 Apache를 보호하는 방법

Debian 8의 Let's Encrypt를 사용하여 Apache를 보호하는 방법

2022-06-01 last update

12 minutes reading Debian Apache Security Let's Encrypt LAMP Stack

소개


이 강좌에서는 Apache를 웹 서버로 실행하는 Debian 8 서버에서 Let’s Encrypt의 TLS/SSL 인증서를 설정하는 방법을 보여 줍니다.우리는 또한cron 작업 자동화 인증서의 갱신 과정을 어떻게 사용하는지 소개할 것이다.
SSL 인증서는 웹 서버에서 서버와 클라이언트 간의 통신을 암호화하고 응용 프로그램에 접근하는 사용자에게 추가 보안을 제공합니다.Let's Encrypt는 신뢰할 수 있는 인증서를 무료로 얻고 설치하는 간단한 방법을 제공합니다.

선결 조건


이 안내서를 완성하기 위해서는 비root sudo 사용자가 있는 Debian 8 서버가 필요합니다.당신은 우리의 Debian 8 initial server setup guide에 따라 적당한 권한을 가진 사용자를 설정할 수 있습니다.
인증서를 사용할 등록 도메인 이름을 소유하거나 제어해야 합니다.아직 등록된 도메인 이름이 없으면, 여러 도메인 등록 업체 중 한 곳에 도메인 이름을 등록할 수 있습니다. (예:name 싸다, GoDaddy 등)
아직 없으면 도메인을 서버의 공용 IP 주소로 가리키는 레코드를 만드십시오. (DigitalOcean의 DNS를 사용하는 경우 this guide)이것은 필수입니다. Let's Encrypt가 인증서를 발급하는 영역을 어떻게 검증하는지 확인하기 때문입니다.예를 들어 example.com의 인증서를 얻으려면 이 도메인이 서버에 분석되어야 검증 과정이 작동할 수 있습니다.저희 설치 프로그램은 example.comwww.example.com을 도메인 이름으로 사용하기 때문에 이 두 DNS 기록은 모두 필요합니다.
계속할 준비가 되었을 때, sudo 계정을 사용하여 서버에 로그인하십시오.

1단계: 클라이언트를 암호화하기 위한 Certbot 설치


Let's Encrypt를 사용하여 SSL 인증서를 얻는 첫 번째 단계는 서버에 certbot Let's Encrypt 클라이언트를 설치하는 것입니다.
Debian 8 출시 시 certbot 패키지를 사용할 수 없습니다.certbot 패키지에 액세스하려면 서버에서 Jessie backports 저장소를 사용해야 합니다.이 저장소는 안정적인 저장소에 포함된 소프트웨어 버전보다 업데이트된 소프트웨어 버전을 설치하는 데 사용할 수 있습니다.
다음 내용을 입력하여 서버에 backports 저장소를 추가합니다.
  1. echo 'deb http://ftp.debian.org/debian jessie-backports main' | sudo tee /etc/apt/sources.list.d/backports.list
새 저장소를 추가한 후 apt 패키지 인덱스를 업데이트하여 새 패키지에 대한 정보를 다운로드합니다.
  1. sudo apt-get update
저장소를 업데이트하면 python-certbot-apache 패키지를 설치할 수 있습니다. 이 패키지는 backports 저장소를 포지셔닝하여 certbot을 도입합니다.
참고 Backport를 사용할 때는 저장소가 아닌 필요한 특정 패키지만 설치하는 것이 좋습니다.백엔드 패킷은 기본 저장소에 비해 호환성이 낮습니다.
이 저장소를 사용하여 실수로 패키지를 설치하거나 업데이트하지 않으려면 Backport에서 패키지를 설치하기 위해 -t 로고와 저장소 이름을 명시적으로 전달해야 합니다.
  1. sudo apt-get install python-certbot-apache -t jessie-backports
certbot 클라이언트는 이제 사용할 수 있을 것입니다.

2단계: Apache 서버 이름 및 서버 별칭 설정

certbot 실용 프로그램을 호출할 때, 우리가 보호하고자 하는 영역을 매개 변수로 전달할 수 있습니다.그러나 certbot은 아파치 구성 자체에서도 읽을 수 있습니다.서버가 응답해야 할 도메인을 항상 명확하게 하는 것은 좋은 방법이기 때문에 우리는 아파치 설정에서 ServerNameServerAlias을 직접 설정할 것이다.python-certbot-apache 서비스를 설치할 때 시스템에 아파치가 없으면 설치합니다.도메인 이름을 명시적으로 설정할 수 있도록 기본 Apache 가상 호스트 파일을 엽니다.
  1. sudo nano /etc/apache2/sites-available/000-default.conf
가상 호스트 블록 내부에서 ServerName 명령에 대한 설명을 추가하거나 취소하고 주 도메인 이름으로 설정합니다.ServerAlias 명령을 사용하여 이 서버가 응답해야 할 다른 도메인 이름을 추가할 수 있습니다.
우리의 예시에서 우리는 example.com을 규범명칭으로 하고 www.example.com을 별명으로 사용한다.이러한 명령을 설정하면 다음과 같습니다.
/etc/apache2/sitesavailable/000 기본값.형태
<VirtualHost *:80>
    . . .
    ServerName example.com
    ServerAlias www.example.com
    . . .
</VirtualHost>
완료되면 Ctrl 키를 누른 채 X 키를 눌러 파일을 저장하고 닫습니다. Y 를 입력하고 Enter 키를 눌러 파일을 저장합니다.
변경 내용이 가져올 수 있는 구문 오류를 캡처하기 위해 구성 파일을 확인합니다.
  1. sudo apache2ctl configtest
출력에서 이 행을 찾습니다.
Output
Syntax OK
구문 테스트를 통과한 파일의 경우 Apache 서비스를 다시 시작하여 변경합니다.
  1. sudo systemctl restart apache2
현재 아파치가 도메인 이름을 설정했습니다. certbot을 사용하여 SSL 인증서를 받을 수 있습니다.

3단계: 방화벽 조정


방화벽이 활성화되어 있으면 SSL 트래픽을 허용하도록 설정을 조정해야 합니다.필요한 절차는 방화벽 소프트웨어에 따라 다릅니다.현재 방화벽을 설정하지 않았다면 마음대로 앞으로 뛰어내리십시오.

UFW 회사


ufw를 사용하는 경우 다음 내용을 입력하여 현재 설정을 볼 수 있습니다.
  1. sudo ufw status
이 가능하다, ~할 수 있다,...
Output
Status: active To Action From -- ------ ---- SSH ALLOW Anywhere SSH (v6) ALLOW Anywhere (v6)
HTTP 및 HTTPS 트래픽을 추가로 허용하려면 WWW 전체 애플리케이션 구성 파일을 허용할 수 있습니다.
  1. sudo ufw allow 'WWW Full'
현재 상태는 다음과 같습니다.
  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- SSH ALLOW Anywhere WWW Full ALLOW Anywhere SSH (v6) ALLOW Anywhere (v6) WWW Full (v6) ALLOW Anywhere (v6)
서버에서 HTTP 및 HTTPS 요청을 받아들여야 합니다.

IPTables

iptables을 사용하는 경우 다음 내용을 입력하여 현재 규칙을 볼 수 있습니다.
  1. sudo iptables -S
규칙이 활성화되어 있으면 이 규칙이 표시됩니다.예제 구성은 다음과 같습니다.
Output
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
SSL 트래픽을 켜는 데 필요한 명령은 현재 규칙에 따라 달라집니다.위의 기본 규칙 집합의 경우 다음 내용을 입력하여 SSL 액세스를 추가할 수 있습니다.
  1. sudo iptables -I INPUT -p tcp --dport 443 -j ACCEPT
만약 우리가 방화벽 규칙을 다시 본다면 새로운 규칙을 볼 수 있을 것이다.
  1. sudo iptables -S
Output
-P INPUT DROP -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
프로그램이 부트할 때 iptables 규칙을 자동으로 적용하면 새 규칙을 사용하여 설정을 업데이트해야 합니다.

단계 4: SSL 인증서 설정


Let's Encrypt 클라이언트를 사용하여 Apache에 대한 SSL 인증서를 생성하는 것은 매우 간단합니다.클라이언트가 자동으로 새 SSL 인증서를 가져오고 설치합니다. 이 인증서는 아파치 설정의 도메인에 유효합니다.
대화식 설치를 수행하고 Apache 구성에 정의된 모든 도메인에 대한 인증서를 얻으려면 다음을 입력합니다.
  1. sudo certbot --apache
certbot 유틸리티는 요청한 인증서가 덮어쓸 영역을 찾기 위해 아파치 설정을 평가합니다.인증서에 포함하지 않으려는 정의된 도메인을 선택 취소할 수 있습니다.
인증서 옵션을 사용자 정의할 수 있는 단계별 안내서가 제공됩니다.키 복구 및 알림이 누락된 전자 메일 주소가 필요합니다. httphttps에 액세스하거나 모든 요청을 https으로 다시 지정하도록 설정할 수 있습니다.암호화되지 않은 https 데이터가 특별히 필요하지 않으면 일반적으로 http이 가장 안전합니다.
설치가 완료되면 /etc/letsencrypt/live에서 생성된 인증서 파일을 찾을 수 있습니다.다음 링크를 통해 SSL 인증서의 상태를 확인할 수 있습니다. (example.com을 도메인으로 바꾸는 것을 잊지 마십시오.)
https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest
테스트는 몇 분이 걸려야 완성할 수 있습니다.현재 https 접두사를 사용하여 사이트에 접근할 수 있습니다.

단계 5: 자동 갱신 설정


인증서를 암호화하는 유효기간은 90일이지만, 60일에 한 번씩 인증서를 업데이트하여 일정한 오차를 남기는 것을 권장합니다.certbot 클라이언트에는 renew 명령이 있습니다. 이 명령은 현재 설치된 인증서를 자동으로 검사하고 만료일이 30일 미만이면 인증서를 갱신하려고 합니다.
설치된 모든 도메인의 갱신 프로세스를 실행하려면 다음과 같이 하십시오.
  1. sudo certbot renew
최근에 인증서가 설치되었기 때문에, 이 명령은 만료 날짜만 검사하고 메시지를 인쇄할 것입니다. 인증서가 아직 만료되어 갱신되지 않았다는 것을 알립니다.출력은 다음과 같습니다.
Output
Saving debug log to /var/log/letsencrypt/letsencrypt.log ------------------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/example.com.conf ------------------------------------------------------------------------------- Cert not yet due for renewal The following certs are not due for renewal yet: /etc/letsencrypt/live/example.com/fullchain.pem (skipped) No renewals were attempted.
여러 도메인을 포함하는 번들 인증서를 만들면 출력에 기본 도메인 이름만 표시되지만 이 인증서에 포함된 모든 도메인은 유효합니다.
인증서가 만료되지 않도록 하는 실용적인 방법은cron 작업을 만드는 것입니다. 이 작업은 정기적으로 자동 갱신 명령을 실행합니다.갱신은 먼저 만료일을 검사하고 인증서가 만료된 지 30일이 안 될 때만 갱신을 실행하기 때문에 매주 심지어 매일 실행되는cron 작업을 만드는 것이 안전합니다.
매주 갱신 명령을 실행하는 새 작업을 만들기 위해crontab를 편집합니다.루트 사용자의crontab를 편집하려면 다음을 실행하십시오.
  1. sudo crontab -e
편집기를 선택하라는 메시지가 표시될 수 있습니다.
Output
no crontab for root - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny Choose 1-3 [1]:
vim에 익숙하지 않으면 Enter 키를 눌러 기본값 nano을 사용합니다.
crontab의 끝에는 다음 내용이 포함되어 있으며 모두 한 줄에 놓입니다.
crontab
. . . 30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log
저장하고 종료합니다.이것은 매주 월요일 새벽 2시 30분에 letsencrypt-auto renew 명령을 실행하는 새로운cron 작업을 만들 것입니다.명령으로 생성된 출력은 파이프를 통해 /var/log/le-renewal.log에 있는 로그 파일로 전송됩니다.
cron 작업을 만들고 스케줄링하는 방법에 대한 더 많은 정보는 저희 How to Use Cron to Automate Tasks in a VPS 안내서를 보십시오.

결론


이 안내서에서 우리는 아파치가 위탁 관리하는 사이트의 안전을 보호하기 위해 Let's Encrypt에서 무료 SSL 인증서를 설치하는 방법을 이해했다.우리는 당신이 중요한 업데이트를 이해하기 위해 수시로 정부 Let’s Encrypt blog을 조회할 것을 건의합니다.