続 pf authpf を使う
先日 pf を使って作成した NAT 箱ですが、あのままだとローカルネットワークに繋がった機器は全てお外の世界にアクセス可能になってしまいます。対応としては
1. 物理的に遮断
2. 接続元の IPAddress で規制
3. 接続元の MAC Address で規制
辺りが思いつきますが(他にもたくさんあるでしょう)、今回は pf に付いてる authpf という仕組みを使ってみました。authpf を使うとユーザが認証ゲートウェイに ssh でログインした場合に pf のフィルタルールを動的に変更する事が出来ます。例によって詳しい事は man 見てくださいと。
設定ファイル
/etc/authpf/authpf.conf
auhtpf の設定ファイルです。中身は空でも構いませんが、ファイルの存在自体は必須のようです。
/etc/authpf/authpf.allow
authpf 認証可能なユーザ名を記述します。このファイルが無い場合は全てのユーザが許可されます。ファイルがある場合は、このファイルに名前が無いユーザは
Sorry,you are not allowed to use this facility!
と接続拒否されます。
/etc/authpf/users/ユーザ名/authpf.rules /etc/authpf/authpf.rules
認証された時に読み込まれる pf のルールを記述します。users 以下の個別のファイルが無い場合は /etc/authpf/authpf.rules が使用されます。どちらかのファイルの存在が必須です。
/etc/authpf/authpf.message
認証出来た場合に表示するメッセージを記述します。無くても大丈夫です。
/etc/authpf/banned/ユーザー名
/etc/authpf/banned/ 以下にユーザ名の付いたファイルを置くと、そのユーザは
-**- Sorry, you have been banned! -**-
と怒られて、認証拒否されます。
/etc/fstab
authpf は fdescfs を必要とするので起動時に読み込んでくれるように fstab に追加
fdescfs /dev/fd fdescfs rw 0 0
するか、手動で
# mount_fdescfs fdescfs /dev/fd
する。
pf.conf
#ローカルネットワークからの接続許可ルールをコメントアウト #pass in on $int_if from $int_if:network to any keep state #ローカルネットワークから認証用の ssh アクセス許可と authpf 用アンカー pass in on $int_if prot tcp from $int_if:network to $int_if port 22 keep state anchor "authpf/*"