逸般の誤家庭のメールサーバーのSSL/TLS認証に必要なフリーの証明書を発行するLet’s Encrypt のDNSチャレンジ認証をめも。
きっかけは certbot コマンドでお馴染みのstandalone オプションが通らない?だったらDNSチャレンジ認証すればいいじゃない(アントワネット並み感)だったと思います。やり方はいろいろネットに出ているので正解は一つではないですがエンカレッジを受けたものです。
チャレンジのタイプ – Let’s Encrypt – フリーな SSL/TLS 証明書
目次
http, https ポートの開放
まず、certbotのサーバー認証に必要なhttp, https ポートをfirewall-cmd で開放します。
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --reload
ヤマハルーターの場合の当拙記事:RTX830 IPoE PPPoEマルチセッション フィルタ型ルーティング設定 が必要でした。ルーターの80,443番のポートフォワーディングを行い、ポートチェック【外部からポート開放確認】 でメールサーバーの80,443 ポート開放を確認します。
certbotのインストール
次に、certbot本体をメールサーバーにインストールします。これは特に問題ないと思います。
# yum -y install epel-release
# yum -y install python2-certbot-apache
認証トークンをゲット
DNS02チャレンジするまえにDNSサーバーに設置する認証トークンをゲットします。
# certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Cert not due for renewal, but simulating renewal for dry run
Simulating renewal of an existing certificate for mail.stuffy.site
Performing the following challenges:
dns-01 challenge for mail.stuffy.site
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.mail.stuffy.site with the following value:
nN7iALVuBdZPGlXVzoG-dpKElP1MmTKWvX9nZkm6dbQ
Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
直ぐに[Enter]キーを押したくなるところですがここは落ち着いてまずは表示されたトークンをコピーします。
BINDにTXTレコードを追加
上記画面でエンターキーを押してもDNSサーバーのzoneファイルにトークンを登録していない場合は認証に失敗します。ここではいったん作業を中断してトークンをコピーしてTXT情報としてDNSサーバーに設置します。「ちょっと、シリアル値(意味深)上げないとマズいですよ。」
stuffy.site.zone IN MX 10 mail.stuffy.site. ; localhost IN A 127.0.0.1 ns1 IN A 116.58.163.5 mail IN A 116.58.163.6 www IN A 116.58.163.4
;
#コ↑コ↓ _acme-challenge.mail IN TXT nN7iALVuBdZPGlXVzoG-dpKElP1MmTKWvX9nZkm6dbQ
chrootディレクトリにzoneファイルをコピー、BIND再起動します。この辺は自己流でツッコミ処満載な操作なのであまり参考にしないで下さい。
[NS Server] # pwd
/var/named
# \cp stuffy.site.zone ./chroot/var/named
# rm -f ./chroot/var/named/*.jnl
# systemctl restart named-chroot
# rndc flush
certbot DNS02 チャレンジ認証
先ほどのメールサーバーの画面で[Enter]キーを押してCongratulations! と表示されれば認証成功です。
Cronで自動更新
メールサーバーのcrontab -e を編集して更新を自動実行するように設定します。以下は2か月に1回、隔月1日の午前4時と6時に証明書の更新をする例です。失敗した場合に備えて2回実行していますがやり過ぎるとレート制限が掛かるので注意が必要です。( –dry-runオプションを付けて動作確認すると良いでしょう。)
# crontab -e
00 04 1 */2 * echo 2 | /usr/bin/certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns --post-hook 'systemctl reload postfix' --post-hook 'systemctl reload dovecot' 00 06 1 */2 * echo 2 | /usr/bin/certbot certonly --manual -d mail.stuffy.site --preferred-challenges dns --post-hook 'systemctl reload postfix' --post-hook 'systemctl reload dovecot'
# systemctl restart crond
cron がちゃんと動いているかログを確認、しよう!(直球)
# cat /var/log/cron | grep certbot