Let’s encryptでおウチサーバーの証明書取得

家のサーバーは 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 の上書きなので、所有者の再設定をしなくてもいいはず。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください