Ubuntu 18.04에서 서버 환경(Nginx+PHP+MySQL) 구축하기(3)

김동욱·2022년 3월 30일
0

개발 환경 구축

목록 보기
9/12
post-thumbnail

Let's Encrypt와 Certbot

Let's Encrypt는 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관이고, Certbot은 수동으로 관리되는 웹사이트에서 Let's Encrypt 인증서를 자동으로 사용하여 HTTPS를 활성화하는 무료 오픈 소스 소프트웨어 도구이다. 이를 활용하여 웹 서버에 HTTPS를 적용 해보겠다.

Certbot 설치하기

sudo snap install --classic certbot 명령어로 certbot을 설치한다. snap 명령어를 사용한 이유는 Certbot 프로젝트에서 대부분의 사용자가 스냅을 통해 소프트웨어를 설치할 것을 권장하기 때문이다.

그런 다음 sudo ln -s /snap/bin/certbot /usr/bin/certbot 명령어로 /usr/bin/ 디렉토리에서 새로 설치된 /snap/bin/certbot 실행 파일에 대한 심볼릭 링크를 만든다. 이렇게 하면 서버에서 certbot 명령을 올바르게 실행할 수 있다. 이를 수행하려면 다음 ln 명령을 실행한다. 여기에는 -s 플래그가 포함되어 있다. 이 플래그는 하드 링크가 아닌 심볼릭 링크 또는 소프트 링크를 만든다.

Nginx 구성 확인하기

Certbot은 SSL을 자동으로 설정하기 위해 Nginx 설정에서 올바른 서버 블록을 찾을 수 있어야 한다. 구체적으로는 증명서를 요구하는 도메인과 일치하는 server_name 디렉티브를 검색하여 이 작업을 수행합니다.

Nginx 설치 튜토리얼에서 권장되는 서버 블록 설정 절차를 따르면 server_name 디렉티브가 이미 적절하게 설정된 /etc/nginx/sites-available/your_domain에 도메인용 서버 블록이 있다. 하지만 여태 default에서 작업했기 때문에 vi 편집기로 default 파일을 연다.

Default server configuration 블록의 server name이 위와 같이 되어 있는지 확인한 후 저장한다. 변경 사항이 있었다면 sudo nginx -t / sudo systemctl reload nginx 명령로 nginx를 테스트, 재시작을 한다.

방화벽을 통한 HTTPS 허용

로컬 환경에서 진행할 경우

다음은 방화벽을 비활성화 해야한다. Ubuntu는 기본적으로 ufw라는 방화벽을 사용한다. 다음의 명령어들을 순차적으로 입력한다.

sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw status

모든 프로토콜에 대한 접근 허용을 하고 HTTP 프로토콜에 대한 접근권은 삭제한다. 마지막으로 방화벽 상태를 확인했을 때 OpenSSH, Nginx Full에 대한 Action이 ALLOW 상태이면 옳바르게 된 것이다.

클라우드 환경에서 진행할 경우

만약 aws와 같은 클라우드 환경이라면 기본적으로 방화벽이 비활성화 되어있다. 따라서 보안 그룹 설정에서 인바운드 규칙을 통해 관리할 수 있다.

aws에서 진행한다면 다음과 같이 인바운드 규칙 편집에 들어가서 HTTPS 규칙을 추가한다.

SSL 인증서 받기

Certbot은 플러그인을 통해 SSL 인증서를 얻을 수 있는 다양한 방법을 제공한다. Nginx 플러그인은 Nginx를 재구성하고 필요할 때마다 설정을 새로고침한다.

다음의 명령어로 SSL 인증서를 발급받을 수 있다. 서브 도메인이 있다면 같이 입력해주자.

sudo certbot --nginx -d your_domain -d your_domain

명령을 실행한 후 certbot 클라이언트는 명령에 제공된 목록에 따라 자동으로 인증서를 얻는다. -d 옵션으로 도메인 추가를 할 수 있다.(nginx 구성 확인을 했던 곳에 도메인을 추가후 진행해야 한다.)

certbot을 처음 실행하는 것이라면 이메일 주소를 입력해야 하고 서비스 약관에 동의하라는 메세지가 나온다. 동의를 하고 진행하면 certbot은 Let's Encrypt 서버와 통신하여 도메인에 대한 인증서를 요청한다. 성공했을 경우, 다음과 같은 화면을 볼 수있다.

이제 인증서 발급과 설치가 끝났다. 이제 nginx를 테스트하고 재시작을 해보자. 그리고 URL로 접속해보자.

URL 옆에 좌물쇠 표시가 있는 것을 확인할 수 있다.

SSL Labs Server Test에서 도메인의 보안 정도를 테스트 해볼 수 있다. 해당 사이트에 접속 후 테스트하고자 하는 URL을 입력한다.

Certbot 자동 갱신 확인

암호화 인증서는 90일 동안만 유효하다. 이는 사용자가 인증서 갱신 프로세스를 자동화하도록 장려하기 위한 것이다. 하지만 설치한 certbot 패키지에는 /etc/cron.d에 갱신 스크립트가 추가돼있어 인증서를 자동으로 갱신한다.

갱신 프로세스를 테스트하기 위해서 다음의 명령어를 입력한다.

sudo certbot renew --dry-run

오류가 발생하지 않으면 모든 설정이 완료된 것이다. 만약 자동 갱신 프로세스가 실패하는 경우 Let's Encrypt는 지정된 이메일로 인증서가 만료될 때 경고 메시지를 보낸다.







참고
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04
https://millo-l.github.io/Ubuntu-1804%EC%97%90%EC%84%9C-letsencrypt-HTTPS-%ED%99%98%EA%B2%BD%EA%B5%AC%EC%B6%95/
https://velog.io/@banjjoknim/Lets-encrypt%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-Nginx%EC%97%90-HTTPS-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0#1-certbot-%EC%84%A4%EC%B9%98

profile
안녕하세요! 질문과 피드백은 언제든지 환영입니다:)

0개의 댓글