Распределение прав доступа между пользователями OpenVPN через RADIUS
Рецепт был опубликован 15 декабря 2010 года в 17:25, а менялся 15 декабря 2010 года в 19:56.
Постоянная ссылка: http://www.nixp.ru/recipes/32.html
В данном рецепте будет рассмотрена инсталляция сервера OpenVPN с возможностью распределения прав доступа между пользователями и аутентификацией через протокол RADIUS.
Основная мысль в том, чтобы разделить пользователей на две категории: привилегированные и нет (групп может быть и больше, мы рассматриваем самый простой пример). Принадлежность к определенной группе будет определяться с помощью IP адреса пользователя в сети VPN — соответственно, наша задача состоит в том, чтобы выдавать простым пользователям адрес из одного адресного пространства, а привилегированным — из другого. Реализовывать мы это будем с помощью механизма CCD.
В нашем примере вся подсеть VPN будет такой: 172.27.18.0/24. В уме разобьем эту сеть на две:
- 172.27.18.0/25 — для простых пользователей,
- 172.27.18.128/25 — для привилегированных.
Простым пользователям адреса будут выдаваться динамически, а админам — через механизм CCD. Рассмотрим конфиг:
# Тут все ясно mode server tls-server user nobody group nogroup # Рациональнее, конечно, использовать UDP, # но с TCP потенциально меньше проблем у пользователей. port 1194 proto tcp-server dev tun0 keepalive 10 120 persist-key persist-tun # Очень важно! Топология subnet будет работать только # с версией OpenVPN >= 2.1. От Windows-клиентов # требуется наличие драйвера TAP-Win32 версии >= 8.2. # Данная топология является самой логичной на мой взгляд. # К тому же, при других топологиях OpenVPN косячит с CCD. topology subnet push "topology subnet" # Для каждого админа придется создать по файлу # с содержанием: # ifconfig-push [IP из 172.27.18.128/25] 255.255.255.0 # Например: # ifconfig-push 172.27.18.129 255.255.255.0 client-config-dir /etc/openvpn/ccd client-to-client # Настраиваем интерфейс сервера. ifconfig 172.27.18.1 255.255.255.0 route 172.27.18.0 255.255.255.0 route-gateway 172.27.18.1 # Простым клиентам выдаем IP динамически из этого пула: ifconfig-pool 172.27.18.4 172.27.18.126 ifconfig-pool-persist ipp.txt # Сообщаем пользователям о существующих # маршрутах и DNS-ах. push "route 172.27.18.1 255.255.255.0" push "route 10.0.0.0 255.255.0.0" push "route 172.16.0.0 255.255.0.0" push "route 172.27.0.0 255.255.0.0" push "dhcp-option DNS 172.27.18.1" push "route-gateway 172.27.18.1" ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh1024.pem client-cert-not-required username-as-common-name # В данной инсталляции используется RADIUSplugin для OpenVPN. plugin /usr/lib/openvpn/radiusplugin.so verb 3 log /var/log/openvpn/knet.log status /var/log/knet-status.log
Теперь можно настроить сетевой фильтр (из 172.27.18.128/25 можно все):
iptables -P FORWARD DROP iptables -s 172.27.18.128/25 -i tun0 -j ACCEPT iptables -s 172.27.18.0/24 -d 10.0.0.0/24 -i tun0 -j ACCEPT
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
-
REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
-
fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
-
Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
