FreeBSDのPF(Packet Filter)の環境構築
今回使用する環境
OS:FreeBSD14.2
Packet Filter: pf
1. はじめに
FreeBSDに搭載されているpf(Packet Filter)は、非常に強力なパケットフィルタリング機能を備えています。
その理由の一つとして、OSI参照モデルの物理層(電気信号レベル)にまで制御が及ぶ設計が可能である点が挙げられます。
本稿では、pfの構築手順について解説します。
2. FreeBSDのインストール
FreeBSDのインストール手順については、以下のサイトを参考にしてください。
記載されているFreeBSDのバージョンは異なる場合がありますが、基本的な手順は共通しているため、そのまま進めて問題ありません。
3. PFの構築
3-1. カーネル書き換え
FreeBSD 12までは、PFを使用するにはカーネルの書き換えが必要でした。
しかし現在のバージョンでは、デフォルトのカーネルでもPFを利用することが可能です。
とはいえ、私は現在もカーネルを書き換えてPFを使用しています。
(※デフォルトのカーネルでPFのどこまでの機能が使用可能か、正確に把握していないためです。)
カーネルの書き換えは任意ですので、必要に応じて実施してください。
su -
cd /usr
# mainブランチをクローンしていますが、
# OSバージョンのブランチをダウンロードしたほうが安全かと思います。
git clone https://git.freebsd.org/src.git
cd /usr/src/sys/amd64/conf/
# カーネルを書き換えるため,コピーを作成し変更する
# コピーファイル名:MYKERNELは任意のもので構いません
cp GENERIC MYKERNEL
vi MYKERNEL
まずは,カーネル名を変更する。
- ident GENERIC
+ ident MYKERNEL
次に、PF設定を最終行に追加する
# Enabling Packet Filter(PF)
device pf # Packet filter
device pflog # Packet filter logging
device pfsync # Packet filter state table logging
# Enabling ALTQ (for Packet Filter(PF))
options ALTQ # Enable ALTQ.
options ALTQ_CBQ # Build the ``Class Based Queuing'' discipline.
options ALTQ_RED # Build the ``Random Early Detection'' extension.
options ALTQ_RIO # Build ``Random Early Drop'' for input and output.
options ALTQ_HFSC # Build the ``Hierarchical Packet Scheduler'' discipline.
options ALTQ_CDNR # Build the traffic conditioner.
options ALTQ_PRIQ # Build the ``Priority Queuing'' discipline.
options ALTQ_NOPCC # Required if the TSC is unusable.
設定を保存してviを終了する
3-2. カーネルのビルド
3-1で書き換えたカーネル設定ファイルをビルドします。
cd /usr/src
make buildkernel KERNCONF=MYKERNEL←新たなカーネルの名前
# ビルドにかなり時間を要します。
# ビルド終了後カーネルをインストール
make installkernel KERNCONF=MYKERNEL
# インストール完了後サーバを再起動する
shutdown -r now
再起動に成功すればカーネルのビルドとインストールが完了します。
4. PFの有効化
4-1. pfサービスの有効化
サーバ再起動後「/etc/rc.conf」にpfの設定を追加してpfを有効化します。
su -
vi /etc/rc.conf
以下の設定をrc.confに追加する
設定する項目は以下になります。
pf_enable=pfサービスの有効化
pf_rules=pfのルールを記述したファイル
pflog_enable=pfのログ出力有効化
pflogd_flags=pfログの出力先
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflogd_flags="-f /var/log/my_pflog"
設定を追加後以下のコマンドを実行します。
service pf start
service pflog start
5. pfの設定
5-1. pfのルール評価順序
FreeBSDのpfのルールには記述順序があります。
下記の順序で記述しないとエラーになります。
()の中には対応する設定を一部記載しています
- options
- normalization(scrub)
- queueing(queue)
- translation(rdr, nat)
- filtering(pass, block)
ルールの詳細は気が向いたら詳細を書こうと思います。
ルールが気になる方は以下のサイトなどを見てください。
5-2. pfコマンド(一部)
pfのコマンドの一部を記載します。
# 設定ファイルの文法チェック
pfctl -nf /etc/pf.conf
# 設定の反映(リロード)
pfctl -f /etc/pf.conf
# 一時的にpfを止める
pfctl -d
6. おわり
以上でFreeBSDのPF環境構築手順は完了です。
PFのルール設定については、気が向いたときにでも追記しようと思います。
ここまで読んでいただき、ありがとうございました!
Discussion