前回に続いて、Raspberry Piをセットアップしていきます。OSはRaspberry Pi OS Lite (64-bit) bullseye です。
LAN内でWebサーバー立ち上げてあれこれしたいと思っています。
今回はiptablesについて設定しました。
一応、セキュリティに関する記事ですが、記事に書かれている情報が古くなったり不正確なこともありえます。情報のご利用は自己責任でお願いします。
iptablesの設定
全世界に公開するサーバーを立ち上げるわけではないのですが、設定していきます。
設定内容は過去に作ったものをそのまま適用しました。
その後、後述する問題を経て、下記サイトを参考にして変更を加えてあります。
ファイアウォールiptablesを簡単解説~初心者でもよくわかる!VPSによるWebサーバー運用講座(4) さくらのナレッジ[1]
なお、私はファイルに書き込むのではなくシェルスクリプトで記述しています。
例えばループバックの許可はiptables -A INPUT -i lo -j ACCEPT
のように記述しています。
IPv6は今回全てDROPにしました。
iptablesを設定したら新規に繋がらなくなった
(最初、IPv6で接続してて弾かれたのですがまあそれは自明なので省略します。)
新しくssh接続が来ません。
Raspberry Pi Imager でホスト名決めていることもあり、IPアドレス直打ちではなくraspberrypi.local(実際は別のホスト名)のように指定して接続しているので、DNS周りかなということで、調査しました。
調査結果
- IPアドレス直打ちだと新規接続可能
- DNS用のポート53を許可してあるが接続不可
- ログを見るとルーターから
224.0.0.251
宛のパケットを拒否している
224.0.0.251
とは???
mDNS(マルチキャストDNS)
コンピュータネットワークにおいて、マルチキャストDNS(mDNS) はローカルネームサーバーの存在しない小さなネットワーク内でホスト名からIPアドレスを解決するプロトコルである
mDNSメッセージは以下のアドレスに送信されるマルチキャストUDPパケットである。
・IPv4アドレス 224.0.0.251 または IPv6アドレス ff02::fb
・UDPポート 5353
224.0.0.251
とはmDNSとのことでした。なるほど。知りませんでした。
というわけでmDNSに繋ぐポート5353を許可したところ、ssh繋がりました。
iptables設定の永続化
設定はシャットダウンなどで消えてしまうので永続化するためにiptables-persisitentを使いました。
# インストール
sudo apt install iptables-persistent
設定情報が書き込まれるファイル。
# IPv4用の設定ファイル
/etc/iptables/rules.v4
# IPv6用の設定ファイル
/etc/iptables/rules.v6
現在の設定を保存(更新)するためのコマンド
# 設定の保存
sudo netfilter-persistent save
Raspberry Piを再起動して設定が保たれているか確認しました。
# IPv4の設定確認
sudo iptables -L
# IPv6の設定確認
sudo ip6tables -L
まとめ
LAN内での接続時は、LAN内にローカルネームサーバーがない場合、mDNSを考慮する。
前回
参照
[1]ファイアウォールiptablesを簡単解説~初心者でもよくわかる!VPSによるWebサーバー運用講座(4) さくらのナレッジ
https://knowledge.sakura.ad.jp/4048/
[2]マルチキャストDNS – Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%AD%E3%83%A3%E3%82%B9%E3%83%88DNS