カーネルレベルで動作するPPP mpd - Multi-Link PPP daemon for FreeBSD - を使ってPPPoE接続し、pfでフィルタリングすることにする。
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
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起動設定を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
参考