- 论坛徽章:
- 0
|
附加主题
PF: pf验证: 用Shell 进行网关验证
------------------------------------------------------------------------------
简介
Authpf(Cool是身份认证网关的用户shell。类似于普通网关,只不过用户必须在网关上通过身份验证后才能使用该网关。当用户 shell被设置为/usr/sbin/authpf时(例如,代替了ksh(1),csh(1)等),并且用户通过SSH登录,authpf将对pf (4)策略集做必要的修改,以便该用户的数据包可以通过过滤器或者(和)使用NAT、重定向功能。一旦用户退出登录或者连接被断开,authpf将移除加载到该用户上的所有策略,同时关闭该用户打开的所有会话。因此,只有当用户保持着他的SSH会话进程时他才具备透过防火墙发送数据包的能力。
Authpf通过向附加到锚点的命名策略集增加策略来改变pf(4)的策略集。每次用户进行身份验证,authpf建立一个新的命名策略集,并将已经配置好的filter、nat、binat和rdr规则加载上去。被authpf所加载的策略,可以被配置为针对单一用户相关或者针对总体。
Authpf可以应用在:
* 在允许用户访问因特网之前进行身份验证。
* 赋予特殊用户访问受限网络的权利,例如管理员。
* 只允许特定的无线网络用户访问特定的网络。
* 允许公司员工在任何时候访问公司网络,而公司之外的用户不能访问。
* 通过PF限制guest用户对因特网的访问。Authpf可以用来向已注册用户开放完全的因特网连接。
Authpf通过syslogd(8)记录每一个成功通过身份验证用户的用户名、IP地址、开始结束时间。通过这些信息,管理员可以确定谁在何时登陆,也使得用户对其网络流量负责。
配置
配置authpf的基本步骤大致描述如下。详细的信息请查看man手册。
将authpf连入主策略集
通过使用锚点策略将authpf连入主策略集:
nat-anchor authpf
rdr-anchor authpf
binat-anchor authpf
anchor authpf
锚点策略放入策略集的位置,就是PF中断执行主策略集转为执行authpf策略的位置。上述4个锚点策略并不需要全部存在,例如,当authpf没有被设置加载任何nat策略时,nat-anchor策略可被省略。
配置加载的策略
Authpf通过下面两个文件之一加载策略:
* /etc/authpf/users/$USER/authpf.rules
* /etc/authpf/authpf.rules
第一个文件包含只有当用户$USER(替换为具体的用户名)登录时才被加载的策略。当特殊用户(例如管理员)需要一系列不同于其他默认用户的策略集时可以使用每用户策略配置。第二个文件包含没定义authpf.rules文件的用户所默认加载的策略。如果用户定义的文件存在,将覆盖默认文件。这两个文件至少存在其一,否则authpf将不会工作。
过滤器和传输策略与其他的PF策略集语法一样,但有一点不同:authpf允许使用预先定义的宏:
* $user_ip – 登录用户的IP地址
* $user_id – 登录用户的用户名
推荐使用宏$user_ip,只赋予通过身份验证的计算机透过防火墙的权限。
访问控制列表
可以通过在/etc/authpf/banned/目录下,建立以用户名命名的文件来阻止该用户使用authpf。文件的内容将在authpf断开与该用户连接之前显示给他,这为通知该用户被禁止访问的原因。
相反,如果只允许特定的用户访问,可以将用户名写入/etc/authpf/authpf.allow文件。如果该文件不存在或者文件中输入了“*”,则authpf将允许任何成功通过SSH登录的用户进行访问(没有被明确禁止的用户)。
如果authpf不能断定一个用户名是被允许还是禁止,它将打印一个摘要信息并断开该用户的连接。明确禁止将会使明确允许失效。
将authpf配置为用户shell
authpf必须作为用户的登录shell才能正常工作。当用户成功通过sshd(8)登录后,authpf将被作为用户的shell执行。它将检查该用户是否有权使用authpf,并从适当的文件中加载策略,等等。
有两种途径将authpf设置为用户shell:
1.为每个用户手动使用chsh(1), vipw(Cool, useradd(Cool, usermod(Cool,等。
2.通过把一些用户分配到一个登录类,在文件/etc/login.conf中改变这个登录类的shell属性
查看登陆者
一旦用户成功登录,并且authpf调整了PF的策略,authpf将改变它的进程名以显示登录者的用户名和IP地址:
# ps -ax | grep authpf
23664 p0 Is+ 0:00.11 -authpf: charlie@192.168 (authpf)
用户chalie从IP地址为192.168.1.3的主机登录。用户可以通过向authpf进程发送SIGTERM信号退出登录。
Authpf也将移除加载到该用户上的策略,并关闭任何该用户打开的会话连接。
# kill -TERM 23664
更多信息请查询man手册
实例
对一个大型校园无线网的用户进行身份验证。一旦某个用户验证通过,假设他不在禁用列表中,他将被允许SSH并访问网页(包括安全网站https),也可以访问该校园的任一个DNS服务器。
文件 /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除了网页冲浪和使用SSH外,还需要访问校园网的SMTP和POP3服务器。下列策略被配置在/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
定义在/etc/pf.conf中的主策略集配置如下:
# 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
该策略集非常简单,作用如下:
* 阻断所有(默认拒绝)。
* 放行外部网卡接口上的来自无线网络并流向外部的TCP,UDP和ICMP数据包。
* 放行来自无线网络,目的地址为网关本身的SSH数据包。该策略是用户登录所必须的。
* 在无线网络接口上为流入数据建立锚点“authpf”。
设计主策略集的主导思想为:阻断任何包并允许尽可能小的数据流通过。用户一旦通过验证,用户数据包被允许通过无线接口进入,并穿过网关到达其他网络。 |
|