pf.conf
pfはOpenBSD標準のファイアウォール。自分は、これの使いやすさが OpenBSD の魅力の1つになっていると思っている。
最近の Linux とかは、コマンドラインで設定して永続化する流れになってきているけど、OpenBSD 全体では 設定ファイルで設定してサービスに読み込ませるのが一般的だ。
pf の設定ファイルは /etc/pf.conf で、これに設定して以下のように読み込ませる。
$ pfctl -f /etc/pf.conf -n $ pfctl -f /etc/pf.conf
-n 付きは、所謂 dryrun でエラーをチェックしている。pf の設定誤りはシステム停止の原因になりかねないので慎重に。
現状の設定は、だいたい以下のような感じ(実際はちょっとだけ違うけど)。知らない人でも見れば何をしているかわかると思う。
table <local> const { 127/8 ::1 10/8 172.16/12 192.168/16 169.254/16 fc00::/7 }
table <friend> persist
table <denies> persist
set skip on lo
set skip on enc
set skip on pflog
set block-policy drop
queue q_egress on vio0 flows 256 bandwidth 90M, max 100M default
block log
pass quick proto icmp
pass quick proto ipv6-icmp
block in quick on egress to !vio0
block out quick on egress to <local>
block in quick on egress from <denies>
block out quick on egress to <denies>
pass in on egress proto tcp to vio0 port {http https smtp}
pass in on egress proto udp to vio0 port ntp
pass in on egress proto tcp from <friend> to vio0 port {imaps submission}
pass out on egress inet nat-to smaru.net
pass out on egress inet6 nat-to smaru.net
pass in on vio1 proto tcp to vio1 port ssh
anchor "relayd/*"
nat-toのところで使っている smaru.net は /etc/hosts で以下のように定義している。
153.127.54.171 smaru.net mail.smaru.net www.smaru.net 2401:2500:204:1125:153:127:54:171 smaru.net mail.smaru.net www.smaru.net
<friend> <denies> はテーブルで、pf.conf で直接、以下のように定義しても良いし
table <denies> persist { ads.google.com ads.facebook.com }
後で コマンドラインから以下にように追加、確認、削除できる。
$ doas pfctl -t denies -T add ads.google.com $ doas pfctl -t denies -T show $ doas pfctl -t denies -T delete ads.google.com