Авторизация пользователей в сети при помощи authpf

Одной из проблем в организации домашней сети является защита пользовательского трафика. Речь идет не о шифровании данных, а о возможности скачать пару-тройку гигабайт информации "за счет" другого абонента. Ведь, как правило, домашние сети строятся на дешевом оборудовании, и часто о применении дорогих коммутаторов с возможностью привязки IP/MAC к порту не может быть и речи. Так как использование средств типа статической arp-таблицы или простое отслеживание смены адреса утилитами вроде arpwatch неэффективно (поменять себе MAC-адрес, пока жертва не находится в сети, весьма легко), традиционно для защиты от кражи трафика применяют различные VPN-решения, с ипользованием FreeRadius, MySQL/PostgreSQL, mpd/poptop, и т.д. Это весьма громоздко, и не всегда надежно (достаточно посмотреть на историю обсуждения проблем "FreeBSD+mpd+WindowsXP" на OpenNET).

А в то же время есть, на мой взгляд, гораздо более элегантное решение, которое состоит в использовании пакетного фильтра OpenBSD/PF и авторизационного шелла authpf. PF и authpf входят в базовую систему OpenBSD и портированы во FreeBSD начиная с ветки 5, а в NetBSD - начиная с ветки 3.

[Антон Карпов (toxa AT toxahost.ru)]

Authpf - это авторизационный шелл, назначаемый пользователю системы в качестве login shell. При авторизации пользователя в системе (по ssh), к текущим правилам пакетного фильтра присоединяются (с помощью механизма anchor'ов) правила, указанные в файле /etc/authpf/authpf.rules либо в /etc/authpf/$USER/authpf.rules, где USER - имя пользователя. При этом в добавляемых правилах допустимо использование переменных $user_ip (IP-адрес пользователя) и $user_id (имя пользователя), которые берутся из переменных окружения ssh. Отличное руководство по authpf входит в OpenBSD FAQ: http://www.openbsd.org/faq/pf/authpf.html Так что считаю лишним дублировать информацию оттуда, приводя здесь шаги настройки системы для использования authpf.

Наша задача - настроить правила авторизации таким образом, чтобы при заходе пользователя по ssh поднимался NAT на тот адрес, который присвоен этому пользователю. Так, если пользователю foobar назначен адрес 192.168.0.100, то на шлюзе создаем файл:

# echo " nat pass on $ext_if inet from 192.168.0.100 to any  -> $ext_if" > /etc/authpf/users/foobar/authpf.rules
Разумеется, трансляции адресов из пользовательской подсети в pf.conf глобально присутствовать не должны.

Теперь, даже если foobar изменит свой IP-адрес на адрес соседа, в надежде выкачать пару гигабайт смешных картинок, пока сосед отдыхает на даче, при авторизации на шлюзе поднимется NAT-правило для родного foobar'овского адреса, 192.168.0.100, и любитель халявы останется ни с чем.

Foobar - это пользователь в системе, с паролем и назначенным в качестве login shell /usr/sbin/authpf. Под Windows для ssh-авторизации проще всего использовать консольную утилиту plink из набора putty: http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe. Для комфортной работы пользователя следует создать bat-файл с командой "plink.exe user@gateway -pw userpass", и положить его на рабочий стол. Теперь двойной клик по файлу активизирует ssh-сессию, поднимет NAT-правило для заранее указанного адреса, и пользователь сможет работать в интернете. Файл можно также поместить в автозагрузку.

Использование такой авторизации позволит доверять простому учету трафика, например программой cnupm, и избавит от необходимости использовать громоздкие конструкции авторизации по VPN с использованием RADIUS-сервера, и т.п.

Статья взята с сайта OpenNet.

[ опубликовано 23/09/2005 ]

Антон Карпов (toxa AT toxahost.ru) - Авторизация пользователей в сети при помощи authpf   Версия для печати