Dmitri Alenitchev
March, 2006
© 2006 Copyright Dmitri Alenitchev
Authpf это пользовательская оболочка (shell), предназначенная для создания аутентификационных шлюзов.
Смысл состоит в том, что после успешной аутентификации пользователя через SSH authpf внесет необходимые изменения в активный набор правил pf(4).
Внедрение аутентификационного шлюза позволит контролировать доступ, основываясь на правах зарегистрировавшегося на шлюзе пользователя. Кроме того, использование authpf предоставляет возможность проведения аудита, протоколируя имена пользователей и время их аутентификации.
Схема локальной сети, до внедрения аутентификационного шлюза, приведена ниже.
( Internet )
|
|
=
|
|
fxp0
[ OpenBSD ]
{ 192.168.0.1/24 } fxp1
|
|
|
|
[ SWITCH 1000Mb ]
| |
| |
[ SWITCH 100Mb ] ---+ +--- [ SWITCH 100Mb ]
| |
| |
[ SERVERS ] --+ +-- [ COMPUTERS ]
После подключения точки доступа Wi-Fi в отдельную сеть (и к отдельному сетевому интерфейсу шлюза), приведенная выше схема будет выглядеть следующим образом:
( Internet )
|
|
=
|
|
fxp0 authpf only!
[ OpenBSD ] fxp2 ------+ { 192.168.1.1/24 }
{ 192.168.0.1/24 } fxp1 |
| |
| |
| [ Wi-Fi APN ]
| |
[ SWITCH 1000Mb ] |
| | +-- [ authpf allowed users ]
| |
[ SWITCH 100Mb ] ---+ +--- [ SWITCH 100Mb ]
| |
| |
[ SERVERS ] --+ +-- [ COMPUTERS ]
authpf:\
:shell=/usr/sbin/authpf:\
:tc=default:
После этого, необходимо обновить базу /etc/login.conf.db:
cap_mkdb /etc/login.conf
Теперь для создания authpf-пользователя необходимо определить создаваемому пользователю принадлежность к классу authpf.
Authpf не запустится, если конфигурационный файл /etc/authpf/authpf.conf не существует.
echo -n > /etc/authpf/authpf.conf
Authpf позволяет использовать в наборах правил два предопределенных макроса:
Также, можно использовать таблицу authpf_users, содержащую IP адреса аутентифицированных пользователей. Перед использованием таблицу необходимо объявить:
table <authpf_users> persist
Эта таблица может быть использована в правилах pf, применяемым ко всем аутентифицированным пользователям.
Общие для всех пользователей правила хранятся в файле /etc/authpf/authpf.rules. Пример для доступа к ssh, http и https из Wi-Fi сети:
wifi_net = "fxp2"
pass in quick on $wifi_net proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
Правила для определенных пользователей записываются в файл /etc/authpf/users/$USER/authpf.rules.
Например, администратору (пользователь dmitri) необходимо иметь доступ к определенным сервисам, которые должны оставаться недоступными для остальных пользователей, аутентифицировавшихся на шлюзе из Wi-Fi сети. Если создать файл /etc/authpf/users/dmitri/authpf.rules со следующим содержимым, то пользователь dmitri получет доступ к SMTP и POP3 серверам:
wifi_net = "fxp2"
pass in quick on $wifi_net proto tcp from $user_ip to port smtp \
flags S/SA keep state
pass in quick on $wifi_net proto tcp from $user_ip to port pop3 \
flags S/SA keep state
pass in quick on $wifi_net proto tcp from $user_ip to port { ssh, http, \
https } flags S/SA keep state
Обратите внимание на то, что, в приведенном выше примере, правила из общего файла /etc/authpf/authpf.rules также присутствуют, так как если существует набор правил для определенного пользователя, то он полностью замещает общие правила, а не добавляется к ним.
Также необходимо создать набор правил для pf, к которому и будут добавлены общие или пользовательские наборы правил в случае успешной аутентификации пользователя. Правила для pf обычно записываются в файл /etc/pf.conf. Пример для шлюза Wi-Fi сети:
wifi_net = "fxp2"
ext_if = "fxp0"
dns_servers = "{ 192.168.0.5, 192.168.1.5 }"
table persist
scrub in all
block drop all
pass out quick on $ext_if inet proto tcp from \
{ $wifi_net:network, $ext_if } flags S/SA modulate state
pass out quick on $ext_if inet proto { udp, icmp } from \
{ $wifi_net:network, $ext_if } keep state
pass in quick on $wifi_net inet proto tcp from $wifi_net:network to $wifi_net \
port ssh flags S/SA keep state
pass in quick on $wifi_net inet proto { tcp, udp } from \
to $dns_servers port domain keep state
anchor "authpf/*" in on $wifi_net
Этот набор правил для шлюза делает следующее:
В файл /etc/authpf/authpf.message (аналог /etc/motd для пользователей authpf) при желании можно добавить сообщение, выводимое при входе в систему.
Protocol 2 ClientAliveInterval 15 ClientAliveCountMax 3
После этого перезапустите sshd.