macOS Catalina のファイアウォールを pf (packet filter)で強化する

macOS のファイアウォールはこのようなもので非常に簡易なものです。

macOS Catalina ファイアウォール

例えば、上記だとすべての環境から SSH が可能になります。

IPv4 のプライベートIPアドレスなら問題はないものの、IPv6 の場合、たいていの場合 ISP からグローバルユニキャストアドレスが付与されるため、適切な設定を行わないと、外部から SSH によるログインが可能となってしまします。

一時的な IPv6 アドレス(匿名 IPv6 アドレス)が有効化されている場合、アドレスが頻繁に変わるのですが、何らかの原因で現在の IPv6 アドレスが知られた場合、ログイン試行される懸念があります。

今回は、macOS 標準の pf(packet filter)の紹介を行います。
インターネットにも日本語の資料がほとんどないので、役に立てばと思います。

Windows の場合

Windows 10 では「セキュリティが強化された Windows Defender ファイアウォール」という機能があります。

Windows 10 セキュリティが強化された Windows Defender ファイアウォール

アプリケーションだけでなく、IP アドレス、ポートでも制限が可能で、様々な制限が可能です。

macOS pf 設定方法

今回は、下記の環境です。

  • macOS Catalina 10.15.4

pf を便利に使うための GUI ツールとして、IceFloor というのがあるとのことですが、Catalina では動作しませんでした。

pf の有効化・無効化

-s info (-si)オプションで確認できます。
出力が多いですが、最初のほうだけ確認すれば OK です。

停止中

% sudo pfctl -si | head -n 1
No ALTQ support in kernel
ALTQ related functions disabled
Status: Disabled                              Debug: Urgent

動作中

% sudo pfctl -si | head -n 1
No ALTQ support in kernel
ALTQ related functions disabled
Status: Enabled for 0 days 01:11:41           Debug: Urgent

有効化

-e オプションで有効化できますが、これは一時的なもので、再起動時には自動で起動されません。

下記が参考になりました。

/System/Library/LaunchDaemons/com.apple.pfctl.plist を書き換えるとよいのですが正常に書き換えできず、

システム環境設定 → セキュリティとプライバシー → ファイアウォール → ファイアウォールのオプション → ステルスモードを有効にする
(記事最初の画像)

を有効にすると、自動的に pf が有効化されました。

pf 設定変更

基本的には下記の流れになります。

  1. /etc/pf.conf の編集
  2. pfctl -nf /etc/pf.conf による確認
  3. sudo pfctl -f /etc/pf.conf による反映
  4. sudo pfctl -v -sr (-s rules)による現在ロードされているルールの確認

信頼できるネットワークからのみ SSH をログイン

  • 192.0.2.0/24
  • 2001:db8:1234:5678::/64

をプライベートIP、ISP からアサインされている IPv6 サブネットとした場合の、特定のネットワークからのみ SSH ログインする設定は下記となります。

priv_nw = "{192.0.2.0/24, 2001:db8:1234:5678::/64}"

block in proto tcp from any to any port = 22
pass in proto tcp from $priv_nw to any port = 22

基本的に pass 設定となっているため、事前に block を入れておきます。

また、priv_nw という変数としておくことで、汎用性も考慮しています。

この設定の場合、異なる IPv6 ネットワークに接続している場合、家庭からの SSH も可能になりますが、グローバルユニキャストアドレスのためここは許可しています。

pf では NIC 名 :network で該当ネットワークの IP アドレスが自動的に反映されるのですが、pf 起動時にネットワークに接続していなかったり、ネットワーク環境が変わった場合に正常に設定が入らないため、このような設定にしています。

ログの確認

最初の一回だけ、ログを出力するためのインターフェースを作成します。

ifconfig pflog0 
ifconfig pflog0 create # does not exist と表示される場合のみ

block in / pass in のあとに log を記載したルールがログに出力されるようになります。

tcpdump -v -n -e -ttt -i pflog0

まとめ

情報が少ない、macOS のファイアウォールについて、設定方法を確認し、反映されることを確認しました。

昨今の在宅勤務の増加に伴い、IPv6 が利用可能な回線に切り替えている方が増えていますので、これを機にセキュリティも考慮していただけたらと思います。

参考資料

Comments

comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)