정보실

웹학교

정보실

기타 오픈 소스 인증 기관에서 SSL을 사용하여 스팸 제거

본문

STARTTLS 및 SSL에 MailCleaner와 함께 Let 's Encrypt 인증서를 사용하십시오. 방법은 다음과 같습니다.


https://opensource.com/article/20/6/secure-open-source-antispam 


MailCleaner는 기능이 풍부한 오픈 소스 안티 스팸 솔루션입니다. 배포 할 수 있는 가상 어플라이언스 (VM)는 웹 인터페이스와 MTA 서비스 모두에 대해 자체 서명 된 인증서와 함께 기본 제공됩니다.


이를 위해서는 공개적으로 신뢰할 수 있는 고유 한 인증서를 제공해야 합니다. Let 's Encrypt 인증서를 사용하면 무료이고 안전하며 자동화되어 있으므로 이를 달성 할 수 있습니다.


Let 's Encrypt 인증서를 요청할 때 가장 중요한 단계는 호스트 이름 유효성 검사입니다. 모르는 경우 설명서를 참조하십시오.


방화벽 요구 사항 


우선 MX 레코드를 포함하여 사용할 호스트 이름을 정의해야 하며 MailCleaner 서버를 게시하는 데 사용하는 IP 주소를 가리켜야 합니다.


MailCleaner 상자에서 로컬 포트 ​​80을 사용하여 유효성 검사를 수행하도록 선택한 경우 인증서 요청 중에 Apache 서비스를 일시적으로 중지하기 위한 몇 가지 명령을 포함해야 합니다. 그렇기 때문에 예제에서 포트 TCP 8090이 되는 대체 포트를 사용하는 것이 좋습니다.


이 시나리오에는 몇 가지 옵션이 있습니다.


옵션 1 : 리버스 프록시에서 규칙을 작성하여 유효성 검증 요청을 MailCleaner 서버로 전달하십시오. 대상 호스트 이름이 MailCleaner 외부 FQDN 인 포트 TCP 80으로 전송 된 모든 요청을 경로 재지정해야 하며 경로는 /.well-known/acme-challenge/로 시작하여 MailCleaner 서버의 TCP 8090 포트로 경로를 지정해야 합니다.


옵션 2 : 예를 들어 NAT 규칙을 사용하여 TCP 80 포트로 전송 된 트래픽을 MailCleaner 서버의 TCP 8090 포트로 리디렉션 하십시오.


옵션 3 : MailCleaner 서버의 실제 포트 TCP 80으로 포트 TCP 80으로 전송 된 트래픽을 리디렉션 / 허용합니다. 이는 덜 안전하고 덜 유연하며 권장되지 않습니다.


또는 인증서 요청과 이름 유효성 검사를 방화벽과 같은 다른 곳에서 수행하고 인증서 파일을 MailCleaner 상자에 복사하는 루틴을 만들 수 있습니다. 예를 들어 ACME 패키지가 포함 된 pfSense 방화벽이 있는 경우 이 문서의 개념을 이 방법과 병합 할 수 있습니다.


Certbot 설치 


Certbot은 Let 's Encrypt 인증서를 요청하고 관리하기 위한 오픈 소스 도구입니다.


MailCleaner 서버에 Certbot을 설치하려면 (콘솔에서 또는 SSH를 통해) 루트로 로그인하고 다음을 실행하십시오.


wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto 


인증서 이름 유효성 검사 테스트 


대체 포트를 사용하는 경우 MailCleaner 서버의 로컬 방화벽에서 해당 포트를 열어야 합니다.


iptables -A INPUT -p tcp -m tcp --dport 8090 -j ACCEPT 


참고 : MailCleaner는 데이터베이스에 로컬 방화벽 규칙을 유지하고 서버가 로드 될 때마다 iptables 구성을 설정합니다. MailCleaner의 MySQL 데이터베이스 내부의 방화벽 테이블에 포트 8090을 추가해야 합니다. 그렇지 않으면 모든 갱신 프로세스가 실패합니다. 이 작업을 수행하는 방법을 알아 보려면 MailCleaner 2020.01 설치 방법 기사에서 "MailCleaner의 MySQL 데이터베이스 액세스"섹션을 참조하십시오.


이제 Let 's Encrypt의 준비 (테스트) 서버를 사용하여 인증서를 발급 해 봅시다. 적절한 값을 이메일 주소 및 MailCleaner 서버 호스트 이름으로 바꾸십시오.


옵션 1 : 대체 포트 8090을 사용하는 경우 다음 명령 행을 사용하십시오.


$ certbot-auto certonly --standalone --preferred-challenges http \
--http-01-port 8090 --email myemail@domain.com --no-eff-email \
--agree-tos --staging -d myhostname.mydomain.com 


이름이 둘 이상인 경우 끝에 "-d"를 추가하십시오.


-d mx1.mydomain.com \
-d mx2.mydomain.com \
-d spam.mydomain.com 


옵션 2 : 로컬 포트 ​​80을 사용하는 경우 다음 명령 행을 사용하십시오.


$ certbot-auto certonly --standalone --preferred-challenges http \
 --email myemail@domain.com --no-eff-email --agree-tos --staging \
-d myhostname.mydomain.com \
--pre-hook "/usr/mailcleaner/etc/init.d/apache stop" \
--post-hook "/usr/mailcleaner/etc/init.d/apache start" 


참고 :이 명령을 실행하면 누락 된 종속성 (대부분 Python 패키지)을 식별하는 부트스트랩 루틴을 수행하게 됩니다. 필요한 소프트웨어를 설치하십시오.


모든 것이 잘 되었다면 다음과 같은 결과가 나타납니다.


root#mailcleaner:~#
root@mailcleaner:~# certbot-auto certonly \
--standalone --preferred-challenges http \
--http-01-port 8090 --email victor@domain.com \
--no-eff-email --agree-tos --staging \
-d mail.example.com

Saving debug log to /var/log/letsencrypt/
Plugins selected: Authenticator standalone
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mail.example.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
Your certificate and chain have been saved at:
/etc/letsencrypt/live/mail.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/ live/mail.example.com/privkey.pem
[...]
root@mailcleaner:~# 


제대로 진행되지 않으면 이 프로세스에서 발생하는 대부분의 오류는 Let 's Encrypt 서버가 서버에 도달 할 수 없기 때문에 발생합니다. 방화벽 구성이 실제로 올바른지 확인하십시오.


인증서 요청 


스테이징 서버에서 인증서 발행 프로세스가 올바르게 작동하면 스테이징 매개 변수를 제거하여 프로덕션 용으로 인증서를 요청하십시오.


certbot-auto certonly --standalone --preferred-challenges http --http-01-port 8090 --email myemail@domain.com --no-eff-email --agree-tos --force-renewal -d myhostname.mydomain.com 


참고 : 대체 포트 8090을 사용하지 않는 경우 명령 행을 조정하십시오.이 경우 사전 후크 및 사후 후크를 잊지 마십시오.


결과 화면은 매우 비슷합니다. 이제 다음 경로에 유효한 인증서가 있습니다.


/etc/letsencrypt/live/my__hostname_.yourdomain.com_/ 


root#mailcleaner:~# ls /etc/letsencrypt/live/mail.example.com
cert.pem chain.pem fullchain.pem privkey.pem README
root@mailcleaner:~# 


인증서 할당 및 갱신 자동화 


이 퍼즐의 마지막 부분은 이 MailCleaner 포럼 주제에서 "GRahamJB"가 제공하는 훌륭한 스크립트입니다. 여기에서 스크립트를 다운로드 할 수 있습니다.


이 스크립트를 서버에 저장합시다. 다음 파일을 작성하십시오.


nano /usr/local/bin/set-certificates.pl 


그런 다음 스크립트의 내용을 붙여 넣고 저장하십시오 (Ctrl + X). 그리고 스크립트에 다음을 실행할 권한을 부여하십시오.


chmod +x /usr/local/bin/set-certificates.pl 


이제 스크립트를 실행하여 인증서를 웹 인터페이스 및 MTA 서비스에 지정하십시오.


root@mailcleaner:~# set-certificates.pl --set_web \
--set_mta_in --set_mta_out \
--key /etc/letsencrypt/live/mail.example.com/privkey.pem \
--data /etc/letsencrypt/live/mail.example.com/cert.pem \
--chain /etc/letsencrypt/live/mail.example.com/chain.pem

Stopping Apache: stopped.
Starting Apache: started.
Stopping Exim stage 1: stopped.
Starting Exim stage 1: started.
Stopping Exim stage 4: stopped.
Starting Exim stage 4: started.
root@mailcleaner:~# 


cron과 Certbot의 내장 갱신 루틴을 사용하여 매주 실행되도록 다음 명령을 예약하십시오.


nano /etc/letsencrypt/renewal/yourhostname.yourdomain.com.conf 


옵션이 올바르게 표시되는지 확인하고 끝에 다음 줄을 추가하십시오 (방금 실행 한 것과 동일한 set-certificates.pl, renew_hook =).


.
.
# Options used in the renewal process
[renewalparams]
authenticator = standalone
account = 9d670ed7c63c6238f90f042f852fc33e
pref_challs = http-01,
http01_port = 8090
server = https://acme-v02.api.letsencrypt.org/directory
# Set MailCleaner certs
renew_hook = set-certificates.pl --set_web --set_mta_in --set_mta_out --key /etc/letsencrypt/live/myhostname.mydomain.com/privkey.pem --data /etc/letsencrypt/live/myhostname.mydomain.com/cert.pem --chain /etc/letsencrypt/live/myhostname.mydomain.com/chain.pem 


"renew_hook = set-cert…"명령은 한 줄이어야 합니다. 파일을 저장하고 다음 명령을 실행하여 테스트하십시오.


certbot-auto renew --force-renewal 


갱신에 성공하면 아래와 비슷한 결과가 나타납니다. renew_hook 명령이 어떻게 호출되었는지 확인하십시오. MailCleaner에서 인증서가 업데이트 되었으며 필요한 서비스가 다시 시작되었습니다.


root@mailcleaner:~# certbot-auto renew --force-reneval
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Processing /etc/ letsencrypt/renewal/mail.example.com.conf
Plugins selected: Authenticator standalone, Installer None
Renewing an existing certificate
Running deploy-hook command: set-certificates.pl \
--set_web --set_mta_in --set_mta_out \
--key /etc/letsencrypt/live/mail.example.com/privkey.pem \
--data /etc/letsencrypt/live/mail.example.com/cert.pem \
--chain /etc/letsencrypt/live/mail.example.com/chain.pem
Output from deploy-hook conmtwand set-certificates.pl:

Stopping Apache: stopped.
Starting Apache: started.
Stopping Exim stage 1: stopped.
Starting Exim stage 1: started.
Stopping Exim stage 4: stopped.
Starting Exim stage 4: started.

new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/mail.example.com/fullchain.pem

Congratulations, all renewals succeeded.
The following certs have been renewed:
/etc/letsencrypt/live/mail.example.com/fullchain.pem (success)
root@mailcleaner:~# 


이제 갱신 명령을 cron에 추가하겠습니다 :


crontab -e 


다음 줄을 추가하고 파일을 저장하십시오. 이렇게 하면 Certbot이 매주 일요일 오전 2시에 실행됩니다.


0 2 * * 7 /usr/local/bin/certbot-auto renew 


crontab이 원하는 방식으로 열리지 않으면 select-editor를 실행하여 원하는 편집기를 선택하십시오 (예 : nano). 결과를 확인하려면 crontab -l을 실행하십시오.


기본적으로 Certbot은 만료일 30 일 이내에 남아있는 인증서 만 갱신합니다. 인증서 만료 기한이 아닌 경우 Certbot은 인증서를 갱신하지 않습니다 (물론 전화 후크도 아님).


테스트 결과 


MailCleaner의 웹 인터페이스에 액세스하면 SSL 인증서가 유효한 것을 볼 수 있습니다. 그리고 서버에서 다음 명령을 실행하면 STARTTLS에 표시되는 인증서가 방금 설정 한 새로운 Let 's Encrypt 인증서임을 알 수 있습니다.


openssl s_client -connect localhost:25 -starttls smtp 



페이지 정보

조회 20회 ]  작성일20-06-25 11:02

웹학교