Использование Authpf для аутентификации в Wi-Fi сетях

Dmitri Alenitchev
March, 2006
© 2006 Copyright Dmitri Alenitchev


Содержание


Введение

OpenBSD содержит в своем составе отличный инструмент, позволяющий обеспечить безопасность, необходимую для разграничения доступа в 802.3/802.11 сетях - authpf(8).

Authpf это пользовательская оболочка (shell), предназначенная для создания аутентификационных шлюзов.

Смысл состоит в том, что после успешной аутентификации пользователя через SSH authpf внесет необходимые изменения в активный набор правил pf(4).

Внедрение аутентификационного шлюза позволит контролировать доступ, основываясь на правах зарегистрировавшегося на шлюзе пользователя. Кроме того, использование authpf предоставляет возможность проведения аудита, протоколируя имена пользователей и время их аутентификации.

Пример сети

Рассмотрим пример вполне типичной ситуации, когда к существующей локальной сети необходимо добавить Wi-Fi сеть, но, при этом, обеспеспечить необходимый уровень безопасности и контроля доступа пользователей к ресурсам локальной сети и Интернет.

Схема локальной сети, до внедрения аутентификационного шлюза, приведена ниже.

                     ( 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 можно создать новый класс в файле login.conf(5):
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) при желании можно добавить сообщение, выводимое при входе в систему.

Защита шлюза от spoofing'а

Для повышения безопасности аутентификационного шлюза добавьте следующие строки в конфигурационный файл sshd (/etc/ssh/sshd_config):
Protocol 2
ClientAliveInterval 15
ClientAliveCountMax 3

После этого перезапустите sshd.


dmitri@dworlds.ru
$Date: 2006/03/16 14:57:02 $