家のサーバーは X server のDNS設定をいじるスクリプトを組んで、サブドメインである irc.noizumi.orgが家のIPアドレスを向くようにDDNSモドキになっている。
HTTPは、監視カメラの zoneminder を外から見れるように元々、ルーターでポート10080番→80番としていて、加えてAUTH DIGESTを掛けているから、外から見放題にはなってなかった。
さて、果たしてポート80番が解放されている必要のある Let’s encrypt で、DIGEST認証が掛かっている httpd の証明書が作れるのか?
まあ、作れるのでこの記事を書いている訳だが 🙂
Let’s encryptは外部からアクセス可能かの判定に、/.well-known ってディレクトリを掘って、そこのファイルを外部から読み出し可能かどうかで、証明書作成者がドメインを使用可能で、有効かを判定している。
ちなみに、もう一つの懸念事項として、Let’s encrypt の certbot が動いているマシンから irc.noizumi.org にアクセスする場合、ルーターが IP masquerade を使用していて、繋げられないというのがある。
確か、iptables になって、POSTROUTING を使用すれば、LANからルーターが接続したPPPoEのグローバルIPアドレスに接続しても、いい感じにプライベートアドレスに変換してアクセス可能にできたはずなのだが、安物ルーターだと仕方がないか。
話はそれたが、DIGEST認証に穴を作って、/.well-known/* のアクセスがあったら、認証しないという設定にしてやる。
[/etc/apache2/conf-available/auth_digest.conf]
|
<Location /> AuthType Digest AuthName "irc.noizumi.org" AuthUserFile /etc/apache2/.htdigest SetEnvIf Request_URI "^/.well-known/*" valid-url <RequireAny> Require valid-user Require ip 192.168. Require env valid-url </RequireAny> </Location> |
他にも .htdigest ファイルを作ってるけど、それは割愛。
# a2enconf auth_digest で有効化
わしの場合は元々有効になっているので、auth_digest.conf を弄るだけ。
そして、サーバーへ Let’s encrypt をインストール
# apt install certbot python-certbot-apache
# certbot –apache
参考:Certbot を使い3分で無料の SSL 証明書を取得する
nginx を apache に読み替えて設定。幸い、certbot から直接 irc.noizumi.org へのアクセスは無いようで、問題なく設定できた。
証明書の確認や、自動更新、テストなどは次のサイトが参考になる。
参考:Let’sEncryptの取得&自動更新設定してみた
さすがプロだけあって、論理的で分かりやすい。
ついでに、irc もSSLを稼働。ngircd の設定にちょっと躓いたりもしたが、
[Global]
Ports = 6667
[SSL]
CertFile = /etc/ngircd/cert/fullchain.pem
KeyFile = /etc/ngircd/cert/privkey.pem
Ports = 6697, 9999
を追加する事でいけた。
ルーターのポートフォワードは、非SSLが6667、SSLが6697で、9999はフォワードしてないので、外部からは繋げられない。
Let’s encryptが作成した証明書ファイルは、所有者が root:root で、privkey.pem は root 権限のみ読めるファイルなので、ircの権限で動作するngircdには読む事ができない。
そこで、/etc/ngircd/cert にコピーして、irc:irc の所有者にした。
証明書の自動更新の設定もしたが、ngircd の証明書もコピーするようにしてある。cp の上書きなので、所有者の再設定をしなくてもいいはず。