MyDNS×Certbot(DNS-01)でSSL証明書を全自動更新

■ はじめに:なぜDNS-01認証なのか
通常、Certbotでよく使われるのは80番ポートを利用した http-01 認証(ACMEチャレンジ)だが、本環境ではセキュリティ対策として 80番ポートおよび443番ポートへのアクセスを国内限定に絞っている。

Let’s Encryptの認証サーバーは海外からもアクセスしてくるため、この制限下では通常のWeb認証が通らない。
そこで、ポート開放状況に左右されずに証明書を発行・更新できる DNS-01チャレンジ を採用した。

また、ハニーポット(迷い込み用サイト)運用において、あえて正規ドメイン(sky.0t0.jp)用の証明書をハニーポット側にセットすることで、アクセス者に「ドメイン不一致の警告」を見せ、意図的に隙があるように演出している。
この正規証明書の更新プロセスを自動化した際の記録。

■ 1. 構築環境と課題
・対象ドメイン: sky.0t0.jp, deepsky.0t0.jp

・手法: Certbotの manual モード + MyDNS DirectEdit(PHPスクリプト)

・直面した課題: certbot renew を実行すると、設定ファイル (.conf) に dns と記述していても、なぜかhttp-01 認証(Web 経由のチャレンジ)を試行してしまい、更新に失敗する。

■ 2. なぜ設定ファイルの記述だけでは不十分なのか
検証の結果、Certbotの仕様による以下の挙動が原因であることが判明した。

・設定ファイルの限界: /etc/letsencrypt/renewal/xxx.conf 内に preferred_challenges = dns と書いても、コマンドライン引数で明示的に上書きしない限り http-01 認証が実行されてしまう。
Certbot 1.12.0 では、renew 実行時に認証方式が明示されていない場合、manual 認証であっても http-01 が選択される挙動が確認された。
renewal 設定ファイル内の preferred_challenges = dns だけでは、この挙動を抑止できないケースがある。

・解決策: challenge 選択の曖昧さを回避するため、実行コマンド側に直接オプションを付与する必要がある。

■ 3. 運用のポイント:certbot.timer に頼らない自動化
certbot.timer はディストリビューション標準の ExecStart 設定で certbot renew を実行するため、
認証方式を上書きするオプションを注入できない。
そのため、上述した「履歴優先」の仕様によって http-01 に戻ってしまい、DNS-01認証が動かない。

完全排除

自宅サーバー(本サーバー)に対し、一定期間継続していた不審なアクセスについて、PCルーターのネットフィルターによりWebアクセスを国内限定とする対策を実施し、排除を完了しました。

【背景】 この一連のアクセスは、長期間にわたるつきまとい行為に関連しており、その影響により長らく継続してきた習慣が損なわれる事態となりました。

ログ分析および対策は既に実施済みであり、現状の把握もできています。

しかしながら、本件はこれ以上の技術的対応(観測や記録を含む)を継続する価値が低いと判断しました。

今後は状況に応じてサービスの停止、またはドメイン名の変更も検討します。

なお、本環境は実験用途であり、運用継続を前提としていません。

本件に関する記述は、この記事をもって終了といたします。

背割堤

例により、背割堤を散歩

この時期としては気温高め

ところで、この猫を飼い猫にしたいのだが、色々な制約があって難しい・・・
田舎の古い家屋に引っ越すか?!

無意味

やはり、Webサーバーアクセス制限を再度強化し、国内限定にして以降、サーチボット以外のアクセスが殆ど無くなってしまった・・・

これでは、何のためのWebサーバーかわからない。

それに、最近はメールのやり取りも全くないんで、メールサーバーとしても無意味な状況で、全て不要になってきた(笑)

いよいよ、全廃止か?!

ドメインを変えて、ストーカーアクセスを消滅させて再開するかだな・・・結局無意味だけど(笑)

やはり、いい加減冥界に引っ越したい

養老

養老で養老

今日もスメタナ定食にした。
生煮え気味のキャベツが美味い。

中国から団体観光客が来てる。
AI過熱がさめてきたようだし、キティちゃんの株もようやく上がるかな。