Macのファイアウォールをオンにしたのに、コマンドで見ると「オフ」と出ました。
しかも調べていくと、オンでもMAMPは通ってしまうかもしれない設定でした。
🎥 この記事の内容は動画でも解説しています。
先に結論です。
- 自分のMacでは、MAMPのApacheがMac以外からの接続も受ける設定で、同じネットワーク(LAN)のほかの機器から届く可能性があった
- 自分のMacのファイアウォールは「署名済みのアプリは自動で許可」がオンで、MAMPのApacheも署名つきだった
- なので、ファイアウォールだけに頼らず、MAMPは使うときだけ動かして、終わったら止める運用にした
きっかけは、PHPの緊急修正の夜
10月21日の夜、PHPに深刻な穴(PHP2Shell)が見つかって、修正版が出ました。
ブログ本番のサーバーをどうするかと一緒に、手元のMacも見てもらいました。
見たのはCodexで、自分は指示を出していただけです。
分かったのは、この3つです。
- MAMPのApacheが
*:8888、MySQLが*:8889で待ち受けていた(*は、Mac以外からの接続も受けるという意味) - MAMPのPHPは8.3.14で、修正版の8.3.36より古い
- Macのファイアウォールはオフ
同じWi-Fiにいる機器から、古いPHPで動いているローカルのWordPressに届くかもしれない状態でした。
家のルーターの外(インターネット)から届くかは、ルーターの設定を見ていないので分かりません。
その夜は、MAMPを止めました。
翌朝、自分でシステム設定からファイアウォールをオンにしました。
設定画面はオンなのに、コマンドは「オフ」
オンにしたあと、Codexに確かめてもらいました。
システム設定の画面ではオン。
なのに、コマンドで見ると「オフ」と出ました。
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
2回見て、2回ともオフでした。
原因は分かっていません。
1週間後の10月29日に、同じコマンドをもう一度見てもらうと、今度はオンでした。
Firewall is enabled. (State = 1)
なので、どちらか片方だけ見て「オフだ」「オンだ」と決めないほうがいいです。
画面とコマンドの両方を見て、合わなければ時間をおいてもう一度見る。
自分はそうすることにしました。
オンでも、署名済みのアプリは自動で通ることがある
本題はここからです。
ファイアウォールの設定を、ターミナルのコマンドで見てもらいました。
/usr/libexec/ApplicationFirewall/socketfilterfw --getallowsigned
Automatically allow built-in signed software ENABLED.
Automatically allow downloaded signed software ENABLED.
自分のMacでは、「Macに入っている署名済みアプリ」と「ダウンロードした署名済みアプリ」を、自動で許可する設定でした。
Appleのヘルプにも、一覧にないアプリでも、ほかのアプリから自動で開かれる署名済みアプリなどは、ファイアウォールを通ることがあると書かれています。
実際、ファイアウォールの許可の一覧(--listapps)に、MAMPのApacheは載っていませんでした。
では、MAMPのApacheは署名されているのか。
codesign -dv --verbose=2 /Applications/MAMP/Library/bin/httpd
Authority=Developer ID Application: MAMP GmbH (5KCB5KHK77)
MAMPの会社の署名つきでした。
つまり、ファイアウォールをオンにしても、MAMPのApacheは自動で通る可能性があります。
ほかの機器から実際に届くかまでは、試していません。
だから、MAMPは使うときだけ動かす
自分には、ファイアウォールの設定をいじるより、使わないときは止めておくほうが確実に思えました。
今は、ブログの記事を入れるときだけMAMPを動かして、終わったら止めています。
/Applications/MAMP/bin/start.sh
/Applications/MAMP/bin/stop.sh
止めたあとは、待ち受けが消えたかをコマンドで見ます。
lsof -nP -iTCP -sTCP:LISTEN | grep -E ":8888|:8889|:33060"
何も出なければ、この3つのポート(8888・8889・33060)で待ち受けているものはありません。
ポートは自分のMAMPの設定に合わせてください。
ただ、止める運用は「使っていない間に待ち受けをなくす」対策です。
動かしている間は古いPHPのままなので、その間は気をつける必要があります。
Apacheの設定(/Applications/MAMP/conf/apache/httpd.conf)にはListen 8888と書かれていて、Mac以外からの接続も受ける形でした。
Apacheの一般的な書き方なら、Listen 127.0.0.1:8888にすると自分のMacからだけ受ける形になりますが、自分はまだ試していません。
まとめ
ファイアウォールをオンにして安心していたら、署名済みのアプリは自動で通る設定でした。
MAMPのApacheも署名つきなので、ファイアウォールだけでは止まらないかもしれません。
ローカル環境は、使うときだけ動かして、終わったら止める。
止めたら、待ち受けが消えたかをコマンドで見る。
MAMPを入れっぱなしにしている人は、一度lsofで待ち受けを見てみてください。