自宅サーバーを運用しているがセキュリティーのために外部からアクセスできるポートはウェルノウンポートから変更している。 先月、オレオレ証明書をやめてLet's Encryptを導入したが、証明書の更新(HTTP-01チャレンジ)のために80番ポートを開ける必要が出てきた。 ルーターはYAMAHAのRTX830を使っているが静的フィルタだと常時ウェルノウンポートが開けっ放しになって精神衛生上気持ちが悪いので動的フィルタを使って必要なときにだけ80番ポートが開くようにしたかったのだがうまくいかなかったのでメモ。
正攻法でLAN内のサーバー発信のパケットをout側に設定した静的フィルタで通して、
当該静的フィルタをトリガーとする動的フィルタを設定。Let's Encryptのサーバーからの通信をその動的フィルタで通す、というのをやりたかった。
やりたかったのだが、仕様上、YAMAHAの動的フィルタは送信元、送信先のどちらかのIPアドレスが変わってしまうと同じ動的フィルタでは扱えなくなる。Let's Encryptは最初に通信を確立したサーバー以外のサーバーからもパケットを投げてくるので、この仕様ではどうしてもうまく通せなかった(ip filter dynamic 2 * * filter 2 out 2
とかにしてもダメ)。
ip lan2 secure filter in 1 dynamic 1
ip lan2 secure filter out 2 dynamic 2
ip filter 1 pass * 192.168.0.5 tcpsyn * https <---通常の通信用の静的フィルタ
ip filter 2 pass 192.168.0.5 * * * * <---- Let’s Encryptのサーバーへの最初のパケットを通すための静的フィルタ
ip filter dynamic 1 * 192.168.0.5 https <--- 通常の通信は最初のパケット以降をこの動的フィルタで通す。
ip filter dynamic 2 192.168.0.5 * filter 2 out 2 <--- Let’s Encrypt用の動的フィルタ
なので結局、in側で常時80番ポートを静的フィルタで開けておいて、最初のパケット以降は通常の通信用の動的フィルタで通すようにした。
所感:Luaを使って更新のタイミングだけ静的フィルタを有効にするという手はあるがめんどう。。。