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]