MenuBar

mpd pf

カーネルレベルで動作するPPP mpd - Multi-Link PPP daemon for FreeBSD - を使ってPPPoE接続し、pfでフィルタリングすることにする。

Kernel Configuration

mpdはnetgraphを使用するので、カーネルにnetgraphを組み込む。kldloadで組み込んでもよいらしいのであるが、pfでもデバイスを組み込むのでカーネルをコンパイルする。

カーネルに追加する。

# cp /usr/src/sys/xxx/conf/GENERIC  NEWCONFIG
# vi NEWCONFIG
 :
 :
# MagicAir Kernel Options adding
# for mpd
options         NETGRAPH
options         NETGRAPH_BPF
options         NETGRAPH_ETHER
options         NETGRAPH_IFACE
options         NETGRAPH_PPP
options         NETGRAPH_PPPOE
options         NETGRAPH_SOCKET
options         NETGRAPH_VJC

#for pf
device          pf
device          pflog
device          pfsync

options         ALTQ
options         ALTQ_CBQ        # Class Bases Queuing (CBQ)
options         ALTQ_RED        # Random Early Detection (RED)
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler (HFSC)
options         ALTQ_PRIQ       # Priority Queuing (PRIQ)

カーネルを作る

# cd /usr/src
# make buildkernel KERNCONF=NEWCONFIG
# make installkernel KERNCONF=NEWCONFIG
# shutdown -r now

mpd

portsからmpdをインストールする。mpdは net/mpd5。

デフォルトでは、/usr/local/etc/mpd5にmpd.conf, mpd.secret, mpd.scriptのサンプルがあるので、適宜修正しパーミションを400にする。/etc/rc.confにmpdを追加

# vi /etc/rc.conf
   :
#
# mpd
#
mpd_enable="YES"
mpd_flags="-b -s mpd"
   :

インストールと設定が終わったら、テストしてみる。

# mpd5
Multi-link PPP daemon for FreeBSD

process 1612 started, version 5.5 (root@xxx 03:16 24-Oct-2010)
CONSOLE: listening on 127.0.0.1 5005
   :
   :
[xxxx] IFACE: Up event

CTRL-Cで終了する。

pf

pf起動設定をrc.confに記述

   :
#
# pf
#
pf_enable="YES"
pf_rules="/etc/pf.conf"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
   :

pfはpfctlで制御できる。

pfctl -f  /etc/pf_conf/pf.conf   # pf.conf ファイルを読み込む
pfctl -nf /etc/pf_conf/pf.conf   # ファイルを解析するが、読み込みは行わない
pfctl -Nf /etc/pf_conf/pf.conf   # ファイルから NAT ルールだけを読み込み
pfctl -Rf /etc/pf_conf/pf.conf   # ファイルからフィルタルールだけを読み込み

pfctl -sn                        # 現在の NAT ルールを表示します
pfctl -sr                        # 現在のフィルタルールを表示します
pfctl -ss                        # 現在の状態テーブルを表示します
pfctl -si                        # フィルタの状態と計数を表示します
pfctl -sa                        # 現在表示できるすべてのものを表示します

pfctl -e                         # PFの有効化
pfctl -d                         # PFの無効化

ログを読む

# tcpdump -n -e -ttt -r /var/log/pflog

取得されたパケットのログをリアルタイムで表示させる

# tcpdump -n -e -ttt -i pflog0

参考


Last-modified: 2022-05-05 (木) 22:27:10