Raspberry Pi (Linux)

443ポートを塞いだまま Let’s Encrypt 更新

ここ最近、ストーカーのような海外アクセスが多く、
サーバーの 443 ポートを「日本+検索ボット限定」に絞り込んでいました。

ところが、思わぬ副作用が。
Let’s Encrypt(certbot)で証明書を更新しようとしたところ、

Timeout during connect (likely firewall problem)

というエラー。
原因は 認証サーバーが海外から 443 にアクセスしてくるのに、こちらで塞いでいたため。

試行錯誤の記録

preferred-challenges = http を設定してみた
→ でも /.well-known/acme-challenge/ が https にリダイレクトされてしまうため、やはり失敗。

ログに outbound1.letsencrypt.org のアクセスを発見!
→ これで「確かに来ているのに 301 リダイレクトされてる」ことが判明。

RewriteCond で acme-challenge を例外扱い に修正

RewriteEngine On

Let’s Encrypt 用は例外

RewriteCond %{REQUEST_URI} ^/.well-known/acme-challenge/ [NC]
RewriteRule ^ - [L]

それ以外は HTTPS 強制 & 正規ドメイン以外拒否

RewriteCond %{HTTP_HOST} !^(www.|pacific.)?sky.0t0.jp$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ %{REQUEST_URI} [R=301,L]