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 }" tablepersist 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.