pfはルールが書きやすく巨大なテーブルを扱えてしかも結構高速なので使いやすいファイアウォール。高いレイヤーまで見ないけど。
pfがあるからFreebsd/OpenBSDをネットワークのファイアウォールに専用で使いたい(使っている)ってくらい。
で、インターネットとの境界にあるファイアウォールだとわけのわからないのも含めて膨大な接続を面倒見なきゃならないんだけどpfの標準設定では制限値を超えてしまうことがある。よく目にするメッセージは下みたいなの。
+[zone: pf states] PF states limit reached
pfの制限値を確認するのは以下。
# pfctl -sm
states hard limit 10000
src-nodes hard limit 10000
frags hard limit 5000
table-entries hard limit 200000
上はFreeBSD10.3のpfの標準値。statesの上限が10000は用途によってはちょっと小さすぎるかと。
テーブルのエントリ数は20万ということで普通に使うには十分。
なのでstatesの制限値を変更。
/etc/pf.confの先頭あたりにでも以下を追加。ついでにタイムアウトも設定。
1 2 3 4 | set limit states 40000 #statesだけ変更する場合
set limit { states 40000, frags 20000 } #statesとfragsを変更する場合
set timeout { adaptive.start 24000, adaptive.end 48000 }
set timeout tcp.established 43200 #半日(秒)
|
adaptive.start, adaptive.endは触らなくても良いかも。
基本値はadaptive.startはstatesの値の60%、adaptive.endはstatesの値の120%。