Найти в Дзене
It_live

Связка OpenVPN на Windows Server и Mikrotik с миграцией этого добра в Linux

Доброго!

Эта статья первой переехала из моей учетки с хабра действия, описанные в ней, происходят в 2018 году, но актуальности она не потеряла и доселе. Скрипт, который был написан на коленке будет более атомарным и качественным в более свежей статье. Теперь начнём.

Каждому предприятию рано или поздно, внезапно, становится необходим удаленный доступ.
С необходимостью организовать удаленный доступ к своим сетям на предприятии сталкивается практический каждый АйТишник.
Меня, как и многих, эта потребность накрыла с грифом “вчера”. Проанализировав все «за» и «против», а также перелопатив тонны информации и поковырявшись немного в теории, я решил приступить к установке.

В целях безопасности, был выбрал OpenVPN в следующей реализации: на сервер с операционной системой Windows Server 2012 была установлена виртуальная машина, на ней также, Windows Server 2012, а на нем, в свою очередь, сервер OpenVPN, который выпускал и подписывал сертификаты.

Для удобства обзовем его «сервер сертификации». Далее, взял сертификат сервера, затолкнул его в Mikrotik, а на самом маршрутизаторе Mikrotik поднял OpenVPN с учетными записями, профилями. Для выпуска сертификата клиента также использовал сервер сертификации.

Реализация, конечно, аховая, и, хотя на тот момент моего опыта в подобных вещах было, скажем, не достаточно, в вопросах обеспечения безопасности, это было не самое плохое решение.

Данная связка поработала какое-то время и мне была выдана новая вводная: перенести сервер сертификации на Linux, при этом связь с Mikrotik сохранить — клиенты не должны пострадать.

Мои знания по Linux на тот момент заканчивались на Ubuntu 16.04LTS с графическим интерфейсом, которая использовалась как терминал для подключения по RDP к серверу Windows. То есть, sudo apt-get -f install -y, и ни сантиметра больше.

Изучив вопрос, какая OS из Linux семейства более устойчива и перспективна для моей организации, я остановился на CentOS 7 Minimal.

Для начала я решил немного покопаться в теории, понять как это вообще устроено и работает. Посмотрел видео уроки на канале
www.youtube.com/channel/UCKdRgZWgy42YxoFcTJ30LTA (Вообще не реклама, просто они попались мне первыми). Девушка с приятным голосом ознакомила меня с основами работы в выбранной OS.

Для начала я запустил на своем компе Hyper-V, установил туда CentOS 7 Minimal, во время установки создал пользователя Admin и полностью закрыл ssh для root. Попрощавшись с красивым разноцветным экраном, погрузился в черно-белый мир терминала.

Думаю, нет смысла описывать процесс установки софта, лучше заострить внимание на проблемах, которые возникли в процессе и для решения, которых мне пришлось написать небольшой скрипт (он под катом. Описание каждой из утилит можно найти в интернете, но в тот момент, когда я все это делал, этого скрипта еще не было, все делалось впервые, на ощупь и наугад).

В скрипте я постарался автоматизировать установку минимально необходимых утилит для сервера, отключить Selinux, подключить репозиторий Epel, установить OpenVPN, и пр. Ниже сам скрипт, он простой, но его можно использовать. Разбирать его не буду, но, если кому-то потребуется, пишите отвечу.

После использования скрипта появиться уже настроенный сервер OpenVPN, подмигивающий зеленым глазом.

UPD: внёс некоторые коррективы в скрипт, сделав выводы из комментариев. Удалять свои ошибки не стал, а просто закомментил, чтобы не терялась нить комментариев. Добавленные строки отодвинул для видимости.

Код:

Установка OpenVPN прошла не совсем успешно.

Не зная про особенности политики прав на Linux системах, я потратил массу времени на изучение логов и присвоения всем файлам требуемых прав.

Когда кнопка OpenVPN стала зеленой, я очень обрадовался, но как оказалось, это было только начало. По простоте душевной, я рассчитывал подменить корневые сертификаты и файл crl.pem, надеясь, что все заработает. В итоге, мне понадобилось перенести с сервера на Windows следующие файлы:

Serv.crt — Сертификат сервера
Serv.key — Ключ сервера
Ca.crt — Корневой сертификат
Ca.key — Корневой ключ
Crl.pem — Файл отозванных сертификатов
Dh.pem — ключ Диффи-Хеллмана
Index.txt — Файл с информацией об актуальных сертификатах
Serial — он тоже отвечает за актуальность сертификатов

Также потребовалась папка certs_by_serial, файл vars, и все клиентские ключи и сертификаты.
На Mikrotik сертификаты оставались на месте, поэтому все заработало.

Проблемы появились, когда я попытался отозвать сертификат, это не работало от слова совсем — файл index.txt нужно было перевести в формат unix, а я этого сразу не сделал. Воспользовался утилитой dos2unix.

Теперь сертификаты отзывались, но продолжали работать без каких-либо проблем, потому что Mikrotik не знал о том, что они отозваны и ему нужно было как-то об этом сообщить.

Прочитав инструкции, а также проконсультировавшись с Александром ЭРИ (огромное спасибо!), я поднял на сервере сертификации простой http сервер Apache и опубликовал на нем файл отозванных сертификатов. Полностью закрыл к нему доступ, кроме как к опубликованному файлу с одного ip.

В терминале Mikrotik, во вкладке /System/Certificates/CRL указал путь к опубликованному crl.pem. Тут следует уточнить, что Mikrotik принимает для вкладки CRL только http и абсолютный адрес, т.е. выглядеть должно было приблизительно вот так:
127.0.0.1/crl/1.crl
Все заработало, по крайней мере для версий 6.4.2.х RouterOS, но клиентские конфигурации приходилось создавать руками, и это для меня было прискорбно и вызывало массу неудобств. Когда через неделю мне потребовалось создать конфигурации для порядка 50 клиентов, я решил ускорить этот процесс и для этого использовал кусочек чужого скрипта, найденного на просторах интернета.

Скрипт работает так: после запуска указываем «имя клиента», отвечаем на вопрос «установить пароль или нет», после этого забираем уже готовый файл конфигурации «клиент.ovpn», с интегрированными в него сертификатами и настройками. Чтобы его использовать, надо находиться /etc/openvpn. Я подпишу коментами строки, в которых путь необходимо заменить на свой. Также необходимо создать файл с настройками клиента, чтобы скрипт подставлял их в процессе создания конфигурации.

Код:

Через некоторое время новая вводная на запрет удаленного доступа вынудила убить и этот сервер, и работающую связку с Mikrotik. Был создан новый сервер OpenVPN, для сотрудников IT-отдела, который теперь работает полностью на CentOS. Но это уже совсем другая история.

#системное администрирование #сетевое администрирование #linux #mikrotik #мониторинг