[前に戻る: FTP における問題] [目次] [次に進む: 例 #1: 自宅や小規模事務所用 ファイアウォール]
authpf は、 アンカー点に割り当てられた 名前付きルールセットを追加することで pf(4) のルールセットを変更します。ユーザの認証ごとに authpf は新しい名前付きルールセットを生成し、設定済 フィルタ、nat、 binat および rdr の各ルールを、生成したルールセットにロードします。 authpf がロードするルールは、ユーザ単位、もしくはすべてのユーザに対して設定可能です。
authpf の使用例は次のものを含みます。
authpf は、ユーザ認証に成功したそれぞれのユーザのユーザ名と IP アドレス、ログインセッションの 開始時刻と終了時刻を syslogd(8) 経由でログに記録します。この情報を使用して、管理者は 誰がいつログインしたのかを決定することができるようになり、そのネットワークの トラフィック上のユーザのアカウンティングが可能にもなります。
nat-anchor authpf
rdr-anchor authpf
binat-anchor authpf
anchor authpf
anchor ルールをルールセット中のどこに置いても、PF は authpf のルールを評価するため、主ルールセットから分岐します。 4 つの anchor ルールすべてに必要なものではありません。 たとえば、authpf がひとつも nat ルールをロードしていない場合、 nat-anchor ルールは省略することができます。
ひとつ目のファイルは、ユーザ $USER (これはユーザのユーザ名と 置換されます) がログインする場合にのみロードされるルールが含まれています。 ユーザごとのルールの設定は、管理者のような特定のユーザがデフォルトの ユーザとは異なるルールを必要とする場合に使用されるものです。 ふたつ目のファイルは、自分自身の authpf.rules ファイルを持たない すべてのユーザ用にロードされるデフォルトのルールが含まれています。もし、 ユーザ固有のファイルが存在する場合、それはデフォルトのファイルに優先します。少なくとも、 いずれかひとつのファイルが存在していなければ、authpf を実行することはできません。
フィルタと変換のルールは、他のすべての PF のルールセットと 同じシンタクスになっています。ただし authpf では、そのシンタクスに加えて、 次の予め定義されたふたつのマクロが使用可能です。
$user_ip マクロは、認証されたユーザのコンピュータからの ゲートウェイを通過するトラフィックを許可するためだけに使用することが 推奨されます。
これとは逆に、/etc/authpf/authpf.allow ファイル内にユーザ名を 記述することで、特定のユーザにだけアクセスを許可することもできます。 もし、/etc/authpf/authpf.allow ファイルが存在しないか、その内容が "*" だった場合、明示的にアクセスが禁止されていない限り、authpf は SSH でのログインに成功したすべてのユーザに対してアクセスを許可します。
そのユーザ名が許可されているのか拒否されているのかを authpf が決定できない場合、 短かいメッセージを出力してそのユーザを切断します。また、 /etc/authpf/banned/ にあるエントリは常に /etc/authpf/authpf.allow にあるエントリに優先します。
authpf をユーザのシェルとして割り当てるには、以下のようにふたつの方法があります。
# ps -ax | grep authpf 23664 p0 Is+ 0:00.11 -authpf: charlie@192.168.1.3 (authpf)
ここでは、ユーザ charlie がマシン 192.168.1.3 からログインしています。 この authpf プロセスに SIGTERM シグナルを送信することによって、このユーザを 強制的にログアウトさせることができます。その場合、authpf はそのユーザ用にロードした ルールを除去し、すのユーザがオープンしていた状態を持つ接続をすべて切断します。
# kill -TERM 23664
/etc/authpf/authpf.rules ファイルには、次のルールが含まれています。
wifi_if = "wi0" dns_servers = "{ 10.0.1.56, 10.0.2.56 }" pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \ port domain keep state pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \ https } flags S/SA keep state |
管理用ユーザ charlie は、そのキャンパスの
SMTP、POP3 サーバへのアクセス、および web ブラウズや SSH
でのアクセスができる必要があります。以下のルールは、ゲートウェイの
/etc/authpf/users/charlie/authpf.rules に含まれる設定です。
wifi_if = "wi0" smtp_server = "10.0.1.50" pop3_server = "10.0.1.51" dns_servers = "{ 10.0.1.56, 10.0.2.56 }" pass in quick on $wifi_if proto udp from $user_ip to $dns_servers \ port domain keep state pass in quick on $wifi_if proto tcp from $user_ip to $smtp_server \ port smtp flags S/SA keep state pass in quick on $wifi_if proto tcp from $user_ip to $pop3_server \ port pop3 flags S/SA keep state pass in quick on $wifi_if proto tcp from $user_ip to port { ssh, http, \ https } flags S/SA keep state |
The main ruleset -- located in /etc/pf.conf -- is setup
as follows:
# macros wifi_if = "wi0" ext_if = "fxp0" scrub in all # filter block drop all pass out quick on $ext_if proto tcp from $wifi_if:network flags S/SA \ modulate state pass out quick on $ext_if proto { udp, icmp } from $wifi_if:network \ keep state pass in quick on $wifi_if proto tcp from $wifi_if:network to $wifi_if \ port ssh flags S/SA keep state anchor authpf in on $wifi_if |
このルールセットは非常に単純であり、以下のことを実行します。
主ルールセットの基本的な考え方は、すべてのものをブロックし、 可能な限り最小限度の通過トラフィックを許可するというものです。 トラフィックが外部インターフェイスから出て行くのは自由ですが、デフォルトで拒否する ポリシーにより、無線インターフェイスからのトラフィックはブロックされます。 ユーザが認証されると、認証ユーザのトラフィックは無線インターフェイスを通過し、 ゲートウェイを通過してネットワークの他の部分に送出されるのを許可されるようになります。 quick キーワードは、新しい接続がゲートウェイを通過する際に、PF がそれぞれの名前付きルールセットを全体にわたって評価する必要がないようにするために 使用されるものです。
[前に戻る: FTP における問題] [目次] [次に進む: 例 #1: 自宅や小規模事務所用 ファイアウォール]