Postfix3.3 ソース版 マルチドメイン グローバル証明書TLS(SSL)対応版

Postfix 3.4 [SSL 送受信] CentOS7(マルチドメイン)
↑こちらもご覧ください。記事が新しいです。

今回、無料の証明書発行サービス、「Let’s Encrypt」を利用して、PostfixのTLS(SSL)に対応してみたいと思います。

Let’s Encrypt certbotインストール

amazon linux 2 で、「certbot」をインストールしてみます。

# yum install certbot

と、yumで、cerbotのインストールを行うと、

Installing : certbot-0.27.1-1.el7.noarch
ERROR: policydb version 31 does not match my version range 15-30
ERROR: Unable to open policy //etc/selinux/targeted/policy/policy.31.
ValueError: Type cert_t is invalid, must be a file or device type

と、エラーになってしまいます。

今回、手動で、certbotをゲットして、実行します。

wget https://dl.eff.org/certbot-auto
chmod 700 certbot-auto
# ./certbot-auto

Sorry, I don't know how to bootstrap Certbot on your operating system!

You will need to install OS dependencies, configure virtualenv, and run pip install manually.
Please see https://letsencrypt.readthedocs.org/en/latest/contributing.html#prerequisites
for more info.

↑エラーになってしまいました。どうも、「Let’s Encrypt」が「amazon linux 2」が対応していないみたい・・・
Amazon Linux 2でLet’s Encryptが使えない
の、ありがたいサイトを参考に、ファイルの中身の一部を書き換えます。
--------------------------------------------------------------------
  Bootstrap() {
    DeprecationBootstrap "macOS" BootstrapMac
  }
  BOOTSTRAP_VERSION="BootstrapMac $BOOTSTRAP_MAC_VERSION"
elif [ -f /etc/issue ] && grep -iq "Amazon Linux" /etc/issue ; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
--------------------------------------------------------------------
  ↓
--------------------------------------------------------------------
  Bootstrap() {
    DeprecationBootstrap "macOS" BootstrapMac
  }
  BOOTSTRAP_VERSION="BootstrapMac $BOOTSTRAP_MAC_VERSION"
elif grep -i "Amazon Linux" /etc/issue > /dev/null 2>&1 || \
  grep 'cpe:.*:amazon_linux:2' /etc/os-release > /dev/null 2>&1; then
  Bootstrap() {
    ExperimentalBootstrap "Amazon Linux" BootstrapRpmCommon
  }
--------------------------------------------------------------------

Let’s Encrypt certbotの起動

# ./certbot-auto --debug
Bootstrapping dependencies for Amazon... (you can skip this with --no-bootstrap)
yum is /usr/bin/yum
yum is hashed (/usr/bin/yum)
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                               | 2.4 kB     00:00
218 packages excluded due to repository priority protections
++++++++++++++++
(略)
++++++++++++++++
Complete!
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log

↑「Let’s Encrypt」の「certbot」がうまくいったようです。

TLS(SSL)証明書作成

# ./certbot-auto certonly --standalone -d (ホスト名) -m (通知先メールアドレス) --agree-tos -n

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for (ホスト名)
Cleaning up challenges
Problem binding to port 80: Could not bind to IPv4 or IPv6.

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

↑エラーが出た。
「certonly –standalone」を指定しているに、httpが起動している(80番ポートが塞がっている)。
「certonly –standalone」のフラグは、certbot内部で、80番ポートを起動して、証明書を取得するというモードなので、既に起動していたら、エラーとなる。ということです・・・
# ps ax |grep http
 3676 ?        Ss     0:00 /usr/sbin/httpd -DFOREGROUND
 3678 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 3679 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 3680 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 3681 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 3682 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 4145 ?        Sl     0:00 /usr/sbin/httpd -DFOREGROUND
 4306 pts/0    S+     0:00 grep --color=auto http

↑httpd(80番ポート)が、起動していた・・
# systemctl stop httpd.servic

と、httpdのサービスを止める。
# ./certbot-auto certonly --standalone -d (ホスト名) -m (通知先メールアドレス) --agree-tos -n
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for (ホスト名)
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/(ホスト名)/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/(ホスト名)/privkey.pem
   Your cert will expire on 2019-XX-XX. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - 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

↑再度、証明書取得コマンドを発行。成功!

postfix,dovectに証明書ファイルの設定を

vi /etc/postfix/main.cf

smtpd_tls_cert_file = /etc/letsencrypt/live/(ホスト名)/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/(ホスト名)/privkey.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache

↑postfix側の証明書を変更する。
vi /etc/dovecot/conf.d/10-ssl.conf

ssl_cert = </etc/letsencrypt/live/(ホスト名)/fullchain.pem
ssl_key = </etc/letsencrypt/live/(ホスト名)/privkey.pem

↑dovecot側の証明書を変更する
# /etc/rc.d/init.d/dovecot start
# /usr/sbin/postfix stop
# /usr/sbin/postfix start

↑サービス再起動

グローバル証明書での送受信テスト

>>> Connecting to "(ホスト名)" (SSL/TLS) [2018/XX/XX XX:XX:XX] <<<
+OK Dovecot ready.
USER (受信メールアドレス)
+OK
PASS ********
+OK Logged in.
STAT
+OK 4 3264
LIST
+OK 4 messages:
1 647
2 702
3 702
4 1213
.
UIDL
+OK
1 000000015ba10240
2 000000025ba10240
3 000000035ba10240
4 000000045ba10240
.
QUIT
+OK Logging out.

↑POP3s(ポート995)OK
>>> Connecting to "(ホスト名)" (SSL/TLS) [2018/XX/XX XX:XX:XX] <<<
220 (ホスト名) ESMTP Postfix
EHLO [127.0.0.1]
250-(ホスト名)
250-PIPELINING
250-SIZE 20480000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
235 2.7.0 Authentication successful
RSET
250 2.0.0 Ok
MAIL FROM:<(受信メールアドレス)>
250 2.1.0 Ok
RCPT TO:<(送信先メールアドレス)>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
.
250 2.0.0 Ok: queued as B0A7B2700AB
QUIT
221 2.0.0 Bye

↑SMTPs(ポート465) OK

タイトルとURLをコピーしました