Категорії
FreeBSD OpenBSD Windows

[pf] Авторизация на базе authpf

Что же это такое? Это очень удобный механизм предоставления доступа после авторизации по ssh. Чем-то напоминает port knoking. Идея заключается в следующем: пользователь авторизируется через ssh (можно использовать пароль, но ключи удобнее) и после успешной авторизации запускаются соответствующие правила файервола pf. В них-то можно указать разрешения или нужные пробросы.

Тестовый стенд: OpenBSD 5.0/FreeBSD8.2 (server), FreeBSD 8.2 (client), Windows XP (client)

1) Подготовка

Создадим новый класс

# vi /etc/login.conf
authpf:\
	:shell=/usr/sbin/authpf:\
	:tc=default:

и обновим хэшированную базу данных /etc/login.conf.db:

#cap_mkdb /etc/login.conf

В него будем помещать наших authpf юзеров

2) Настройка authpf.

Для минимальной работоспособности нам потребуется создать пустой файл

#echo -n > /etc/authpf/authpf.conf

и подготовить текст приветствия:

echo 'Welcome to organization' > /etc/authpf/authpf.message

Создаем нового пользователя, который принадлежит классу authpf, входит в группу authpf и в качестве оболочки получает /usr/sbin/authpf:

#useradd -m -c 'authpf user' -g authpf -L authpf -s /usr/sbin/authpf testuser

далее можно либо назначить юзеру пароль, либо использовать ключи.

Для каждого пользователя нужно создать отдельно папку и файл с правилами:

#mkdir -p /etc/authpf/users/testuser
#cat /etc/authpf/users/testuser/authpf.rules
ext_if = "fxp0"
nat on $ext_if inet from $user_ip to any -> ($ext_if)

Для того, что бы заработал authpf можно использовать следующие соответствующие “якоря” в конфиг pf’a:

nat-anchor "authpf/*"
rdr-anchor "authpf/*"
binat-anchor "authpf/*"
anchor "authpf/*"

На это настройка серверной части в OpenBSD заканчивается, но настройка во FreeBSD продолжается (ввиду кривого портирования pf/authpf из OpenBSD). И так, нам ещё нужно сделать следующее:

– установить такие параметры в /etc/ssh/sshd_config:

ClientAliveInterval 20
ClientAliveCountMax 3

– создать каталог /var/authpf и поставить ему права 0770 и владельца root:authpf В этой папке будут храниться сессии подключенных клиентов

– смонтировать fdescfs (иначе будем получать ошибку pfctl: /dev/fd/4: No such file or directory):

#mount -t fdescfs fdescfs /dev/fd

Дополнительно можно включить логгирование authpf’a. Для этого добавим в /etc/syslog.conf такой код (естественно, что создать соответствующий файл и перегрузить syslog)

!authpf
*.*           -/var/log/authpf.log

3) Клиентское подключение Windows

Для подключения нам потребуется бинарник plink.exe из пакета PuTTy. Вот как нужно его запускать:

c:\putty>plink.exe -pw secret testuser@192.168.1.1
Hello testuser. You are authenticated from host "192.168.1.2"
Welcome to organization

При этом закрывать это окно нельзя!

4) Клиентское подключение FreeBSD

Для подключения можно использовать обычное подключение по ssh. Так же как и в предыдущем примере, закрывать эту сессию нельзя. Но как же быть, ведь, к примеру, нужно настроить сервер что бы он автоматически подключался после ребута? Выход есть: использовать screen:

#/usr/local/bin/screen -d -m /usr/bin/ssh testuser@192.168.1.1

5) Диагностика.

Что бы посмотреть список активных подключений authpf, вводим такую команду:

# pfctl -a authpf -sA
authpf/testuser(18527)

Посмотрим, какие правила при этом выполнились:

# pfctl -a "authpf/wifi(18527)" -s rules
pass in quick on ral0 inet from 192.168.2.3 to any flags S/SA keep state

# pfctl -a "authpf/wifi(18527)" -s nat
nat on tun0 inet from 192.168.2.3 to any -> (tun0) round-robin
rdr on ral0 inet proto tcp from 192.168.2.3 to any port = ftp -> 127.0.0.1 port 8021

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff