【FreeBSD】CloudflareでSSL証明書の自動更新【Let's Encrypt】

Let’s EncryptのSSL証明書の自動更新をCloudflare環境で設定しました。
設定方法について紹介したいと思います。

Cloudflareとは, 特徴

CloudflareはWikipediaや、公式サイトの以下ページの通り、CDNだけでなくDDoS対策やEdge Computingなど様々な機能を提供しています。

単にContent Delivery Network(CDN)サービスとしてだけでなく、インターネットに接続されているすべてのもののセキュリティ、パフォーマンス、および信頼性を高めるために、お客様はCloudflareのグローバルネットワークを利用します。

イメージとしては自分の所有しているドメインのDNSサーバをCloudflareに設定し、

  1. CloudflareがDNSサーバとして、DNSレコードをCloudflareのサーバに向ける
  2. Cloudflareのサーバがコンテンツサーバへアクセスし、キャッシュしたコンテンツを返す(CDN)
  3. コンテンツサーバへのアクセスはCloudflareのみ経由させれば不正な通信はCloudflareで遮断(DDoS対策)
  4. コンテンツサーバへのアクセスでCloudflareのエッジサーバを使って複雑な処理を行う事も可能(Cloudflare Workers)

と色々なことが出来ます。しかも無料枠でかなりの機能が利用出来ます。

Cloudflareの登録

Cloudflareはメールアドレスとドメインがあれば簡単に無料で利用出来ます。

登録の際にメジャーなDNSレコード、サブドメインなど既存DNSサーバに対してスキャンをかけて、Cloudflare側でレコードを自動登録してくれます。すべて設定されるわけではないので不足分を追加登録し、ドメインレジストラ側のDNSサーバの設定をCloudflareに向けると準備完了です。

Cloudflareでポイントとなるのが、各DNSレコード毎のプロキシステータスです。プロキシを行うとDNS応答としてはCloudflareのサーバのIPアドレスを返し、CloudflareのCDN経由でのアクセスとなります。
CloudflareのCDNはHTTP/HTTPSのプロトコルをプロキシし、以下のポート番号が対象となります。

Cloudflare Spectrumを使えば上記以外のプロトコルもプロキシ可能です。(有償プラン)
このためSSHアクセスなど行う際にプロキシ設定しているサブドメインなどにアクセスを行うと、Cloudflareのサーバに向いてしまうため、HTTP/HTTPS以外のプロトコルを利用する場合には、DNSレコードでプロキシさせない設定にする必要があります。

Let’s EncryptによるSSL証明書の更新

本題のLet’s EncryptによるSSL証明書の更新ですが、CloudflareではDNS-01 チャレンジで必要となるDNSレコードの更新をAPI提供しており、certbotのpluginで証明書の更新が可能です。

certbotのインストール

pkg install py37-certbot
pkg install py37-certbot-dns-cloudflare

インストール後、以下のドキュメントの通り設定していきます。

Cloudflare側で実行権限を制限したAPI tokenを発行します。

token発行後、ファイルに保存し以下コマンドでSSL証明書の再発行を行います。

certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.secrets/certbot/cloudflare.ini -d "*.spg-games.net"

再発行後、 openssl コマンド等で証明書の有効期限を確認し、更新されていることを確認します。

openssl x509 -noout -dates -in ${cert_path}
notBefore=Apr 29 12:28:41 2021 GMT
notAfter=Jul 28 12:28:41 2021 GMT

問題なければ次回以降、 certbot renew コマンドをcronなどで定期的に実行する事で証明書の更新自動化が出来ました。

まとめ

今回Cloudflareを使ったLet’s Encryptの証明書更新について紹介しました。Cloudflare自体無料で使える機能が非常に多くあり、またドメイン移管を良く行う場合にはClouflareにDNSサーバを設定する事で、Let’s Encryptの証明書更新をcertbotで固定化出来ます。(ドメインレジストラのDNSサーバ毎にcertbotの対応等大変なので)
Cloudflareの活用方法としては他にもGCPのアクセス元をCloudflareのサーバに制限し、中国とオーストラリアのトラフィック課金を防いだり、Cloudflare Workersを活用すると様々なことが出来ます。
今回API Tokenも割と細かな権限制限が出来ることを知り、サービスとして機能がとても充実しているなと思いました。
Cloudflare、個人的に無料で様々な機能が使えるので非常にオススメです!(推しサービス)
今度はCloudflare Workersを使った活用方法などでについて紹介したいと思います!😊

Share Comments
comments powered by Disqus