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