{{tag>сервисы табуретка демо}}
====== Сервис Пользовательский VPN ======
{{inventory:service:17}}
==== Заказчик ====
{{inventory:user:NazarAleksandrov}}
==== Назначение ====
Предоставить возможность пользователям подключаться удаленно к внутренним ресурсам компании с разграничением доступности ресурсов для каждого пользователя
==== Описание ====
* OpenVPN сервер и скрипт выпуска клиентских конфигов.
* IP адреса клиентам выдаются статические через CCD файлы, что позволяет четко идентифицировать каждого клиента по IP и управлять его доступом на FW
* Учет свободных и занятых адресов ведется скриптом автоматически в инвентори/сети {{inventory:net:10.50.50.0/24}} - челябинские клиенты, {{inventory:net:10.20.50.0/24}} - московские: скрипт закрепляет за новым конфигом первый свободный IP
Если при генерации нового конфига скрипт найдет одноименного пользователя в инвентори - закрепит за ним выделенный IP (иначе просто сделает описание к IP адресу в виде ovpn-username)
==== Доступ ====
Доступ отзывается/активируется удалением/восстановлением CCD файлов: сервер настроен так, что на каждый конфиг должен присутствовать одноименный CCD файл, удаление CCD деактивирует конфиг (правда не рвет активную сессию)
Дополнительно индивидуальный сетевой доступ клиентов регулируется на FW {{inventory:comp:msk-gw}} и {{inventory:comp:chl-gw}}
{{drawio>сервисы:openvpn-scheme.png}}
==== Инструкция ====
/etc/openvpn/usr.new pupkin_ii
Создает новый конфиг для //pupkin_ii//. Конфиг располагается в папке **/etc/openvpn/clients/taburetka-pupkin_ii**
* taburetka_pupkin_ii.conf - для linux
* taburetka_pupkin_ii.ovpn - для windows клиента
Содержимое файлов ничем не отличается, просто в разных окружениях по умолчанию используются разные расширения
При создании смотрит какой первый адрес свободен в подсети местной площадки
* прописывает его в CCD для пользователя pupkin_ii
* прописывает в инвентори комментарий для занятого IP (название VPN конфига) - тем самым "занимая его" во избежание коллизий
* если в инвентори есть пользователь pupkin_ii - привязывает к нему занятый IP
Созданный CCD находится в папке с конфигом и называется **ccd**, по умолчанию туда прописывается только назначение IP адреса клиенту, но содержание можно изменить по своему усмотрению.
=== Активация доступа ===
По умолчанию новый конфиг не активирован
/etc/openvpn/usr.enable pupkin_ii
или **_enable** в папке конфига
Конфигурация сервера такова, что при подключении он ищет файл /etc/openvpn/ccd/pupkin_ii,
а скрипт делает линк /etc/openvpn/clients/taburetka-pupkin_ii/ccd -> /etc/openvpn/ccd/pupkin_ii
=== Отзыв доступа ===
/etc/openvpn/usr.disable pupkin_ii
или **_disable** в папке конфига
а скрипт удаляет линк /etc/openvpn/clients/taburetka-pupkin_ii/ccd -> /etc/openvpn/ccd/pupkin_ii
=== Пересборка CCD ===
Может понадобиться при появлении новых сетей
Удалить существующий ccd файл и
/etc/openvpn/usr.new pupkin_ii
или **_renew** в папке конфига
При этом закрепленный за пользователем IP сохранится
==== Отказоустойчивость ====
Не предусмотрена
==== Резервное копирование ====
RPO - достаточно ежедневной копии папки /etc/openvpn
RTO - на усмотрение заказчика
==== Мониторинг ====
В zabbix-agent зарегистрирована метрика **ovpn.users.online**
///etc/zabbix/zabbix_agentd.d/userparam_ovpn.conf//
UserParameter=ovpn.users.online[*],/etc/zabbix/scripts/ovpn.userlist.sh /var/log/openvpn.status
Который парсит файл /var/log/openvpn.status скриптом ++++/etc/zabbix/scripts/ovpn.userlist.sh|
#!/bin/bash
f=$1
userlist=`cat $f | sed -n '/^Common Name/,/^ROUTING TABLE/ p'| tail -n +2 |head -n -1`
rtable=`cat $f | sed -n '/^ROUTING TABLE$/,/^GLOBAL STATS$/ p'`
echo "$userlist" | \
while read userline; do
username=`echo $userline|cut -d, -f1`
since=`echo $userline|cut -d, -f5`
utcsince=`date --date="$since" +"%s"`
localutc=$(( $utcsince + 18000 ))
localsince=`date --date="@$localutc" +"%Y-%m-%d %H:%M:%S"`
localip=`echo "$rtable"|grep $username|cut -d, -f1`
echo $username,$localip,$localsince
done
++++
==== Логирование ====
Логи расположены по пути
/var/log/openvpn-server.log
/var/log/openvpn-status
Хранить не менее 60 дней
==== Отказоустойчивость ====
Предусмотрена ли, если предусмотрена то как реализуется
==== Резервное копирование ====
Как делается, какие предъявлены требования по RPO и RTO
==== Логирование ====
Требования предъявленые к логированию (глубина хранения, подробность)
Детали логротейта
==== Мониторинг ====
=== Задача ===
Что нужно мониторить
Кого нужно оповещать
=== Реализация ===
Как настроены метрики, триггеры, оповещения
==== Журнал изменений доступа ====
//если доступ к сервису не контролируется, то эту секцию нужно убрать за ненадобностью//
| Дата | Изменение | Комментарий |
| 30.06.2020 | Добавлен доступ Ревякину А.А. | СЗ №12345 в ELMA (Утверждена Бондаревой и Комиссаровым) |
| 01.07.2020 | Добавлен доступ из подсети 10.10.30.0/24 | Письмо комиссарова по почте (Тема FW:Доступ из сети ИТ) |