スタバやホテルなどで WiFi を使うと、たまに共有フォルダが見えていたり、しかも見たらダメそうなファイルが置かれていたりします。
共有フォルダくらいなら都度無効化すればいいかもしれませんが、意外とたくさんのサービスが有効になっています。試しに netstat -an | grep LISTEN
してみると、意外とポートがオープンになっていると思います。
これらをしらみつぶしに無効化していくのは大変ですし、認証が必要とはいえオープンになっているのはあまり気持ちのいいものではありません。
ところで Mac OS X には OpenBSD 由来の pf
という高機能なファイアウォールが搭載されています。これを使って Mac に対する攻撃(いたずら)を防ぐ設定をしてみました。
<追記>
WEP などの脆弱性や、AP での盗聴を防ぐため、公衆無線 LAN では VPN は必須であると言われます。しかし VPN を設定していても AP 内の端末同士の通信は無防備なので、適切にコントロールする必要があります。
追記>
どのようなルールにするのか
おおまかに以下のようなルールにします。
- インターネットへの通信は許可
- WiFi AP にぶら下がっている他の端末からの通信は拒否
- WiFi AP にぶら下がっている他の端末への通信も拒否
pf.conf
/etc/pf.conf
の末尾に以下を追記します。
# loopback インターフェースで処理するものは常に許可
set skip on lo0
# DHCP
pass in quick proto udp from port bootps to port bootpc
# DNS
pass quick proto {tcp,udp} from self to port domain keep state
# WiFi 他端末への通信を拒否
block out quick log on en0 from self to en0:network
# 自発のパケットは許可。
# keep state で戻りパケットの許可ルールを動的に作成
pass out all keep state
# in 方向のパケットは全てブロック
block in all
pfctl
反映などの操作は pfctl(1) から行います
-
pfctl -f /etc/pf.conf
: ルールの反映 -
pfctl -nf /etc/pf.conf
: syntax チェック -
pfctl -d
: pf を無効化する -
pfctl -e
: pf を有効化する -
pfctl -sr
: 反映されているルールの確認
確認
pf.conf に log
と記載したルールは tcpdump でそのログを読むことができます。
# ifconfig pflog0 create # 最初の一回だけ
# tcpdump -v -n -e -ttt -i pflog0
この状態で他の wifi 端末へ/から ping などを実行してみましょう。ダラダラとログが流れるはずです。