Openvpn Google authenticator настройка

Write The F* Manual — Заметки о сетях, администрировании и вообще

Двухфакторная аутентификация OpenVpn клиентов (OpenVpn + Google Authenticator) на CentOs 7/8

UPD 01.02.2021 — Сегодня обнаружил что часть команд «побилась» в визуальном редакторе WordPress. Те что увидел — исправил, но могут где-то попасться удалённые кавычки итп

1. Устанавливаем необходимые компоненты для работы и настройки OpenVpn:

yum install epel-release yum -y —enablerepo=epel install openvpn easy-rsa nano cd /etc/openvpn/ mkdir ccd mkdir clients

Для более удобной работы с easy-rsa копируем все его файлы в /etc/openvpn/easy-rsa/
Путь до директории источника может отличаться, перед копированием проверьте где у вас лежат файлы easy-rsa

cp -a /usr/share/easy-rsa/3.0.3 /etc/openvpn/easy-rsa

Важно! Если у вас CentOs 8 то в репозитории нет easy-rsa, устанавливается так:

yum -y install unzip zip wget cd ~ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip cp -a easy-rsa-master/easyrsa3/ /etc/openvpn/easy-rsa/

OpenVPN. Большой практический выпуск


2. Преднастраиваем переменные для всех генерируемых сертификатов:

3. Создаём CA с crl и ключ для tls-аутентификации, в выделенной строке поменяйте vpn.server.example на CN вашего сервера:

cd /etc/openvpn ./easy-rsa/easyrsa init-pki ./easy-rsa/easyrsa build-ca ./easy-rsa/easyrsa gen-dh /dev/null 2 openvpn —genkey —secret pki/ta.key ./easy-rsa/easyrsa build-server-full vpn.server.example nopass ./easy-rsa/easyrsa gen-crl

4. Скачиваем и компилируем Google Authenticator pam модуль:

yum -y groupinstall Development Tools yum -y install pam-devel mkdir /usr/src cd /usr/src git clone https://github.com/google/google-authenticator-libpam cd google-authenticator-libpam ./bootstrap.sh ./configure make make install
nano /etc/pam.d/openvpn #Содержимое файла: auth required /usr/local/lib/security/pam_google_authenticator.so forward_pass auth include system-login use_first_pass account required pam_nologin.so account include system-auth use_first_pass password include system-auth session include system-auth

Директива forward_pass указывает на то что одноразовый пароль будет передаваться в одной строке с паролем пользователя, т.к. клиент не может отдельным окном запросить его.
Со всеми опциями библиотеки можно ознакомиться тут: https://github.com/google/google-authenticator-libpam

Как восстановить whatsapp из резервной копии Google на iphone

5. Создаём конфигурационный файл OpenVpn, в выделенных строках поменяйте имена сертификатов сервера. Всё что касается двухфакторной аутентификации подключено в самом первом блоке, далее просто произвольный конфиг сервера:

cd /etc/openvpn/server/ nano server.conf #Содержимое конфига: # 2FA plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn dev tun proto udp mode server persist-key persist-tun keepalive 10 900 reneg-sec 10800 tls-server username-as-common-name client-to-client verb 3 mute 10 log-append /var/log/openvpn.log status openvpn-status.log # crypto cipher AES-256-CBC auth SHA512 tls-auth /etc/openvpn/pki/ta.key 0 # certs ca /etc/openvpn/pki/ca.crt cert /etc/openvpn/pki/issued/vpn.server.example.crt key /etc/openvpn/pki/private/vpn.server.example.key dh /etc/openvpn/pki/dh.pem crl-verify /etc/openvpn/pki/crl.pem # networking server 10.1.0.0 255.255.254.0 #push all traffic to openvpn-server push «redirect-gateway def1 bypass-dhcp» push «dhcp-option DNS 8.8.8.8» push «dhcp-option DNS 8.8.4.4» # clients ifconfig-pool-persist /etc/openvpn/ipp.txt client-config-dir /etc/openvpn/ccd max-clients 100

6. Для удобства подключения пользователей к серверу будем использовать шаблон и скрипт.

Как настроить OpenVPN соединение 2 офисов (конфиг сервера и клиента), сетевые папки Windows ↔️ ️


Создаём шаблон для конфига пользователя, меняем IP сервера на свой:

cd /etc/openvpn/ nano template-client.conf #Содержимое файла: client auth-user-pass auth-nocache dev tun proto udp sndbuf 0 rcvbuf 0 remote 111.111.111.111 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 cipher AES-256-CBC key-direction 1 verb 3

7. Создаём bash-скрипт для создания пользователя, генерации сертификатов и подключения пользователя к Google authenticator:

cd /etc/openvpn/ nano newuser.sh #Содержимое файла # set the variables we’ll use later DIR_CLIENT=/etc/openvpn/clients/$1 # create the certificate and key cd /etc/openvpn /etc/openvpn/easy-rsa/easyrsa build-client-full $1 nopass # create a directory to save all the files mkdir -p $ # copy certificate, key, tls auth and CA cp -v /etc/openvpn/pki/ca.crt $DIR_CLIENT/ca.crt cp -v /etc/openvpn/pki/ta.key $DIR_CLIENT/ta.key cp -v /etc/openvpn/pki/issued/$1.crt $DIR_CLIENT/ cp -v /etc/openvpn/pki/private/$1.key $DIR_CLIENT/ # copy and customize the client configuration cp -v /etc/openvpn/template-client.conf $/$1.ovpn # inserting certs into single ovpn file # ca echo «» >> $/$1.ovpn cat $DIR_CLIENT/ca.crt >> $/$1.ovpn echo «» >> $/$1.ovpn # cert echo «» >> $/$1.ovpn sed -n ‘/——BEGIN CERTIFICATE——/,$p’ $DIR_CLIENT/$1.crt >> $/$1.ovpn echo «» >> $/$1.ovpn # key echo «» >> $/$1.ovpn cat $DIR_CLIENT/$1.key >> $/$1.ovpn echo «» >> $/$1.ovpn # tls echo «» >> $/$1.ovpn sed -n ‘/——BEGIN OpenVPN Static key V1——/,$p’ $DIR_CLIENT/ta.key >> $/$1.ovpn echo «» >> $/$1.ovpn # create a new local user PASS=$(head -n 4096 /dev/urandom | tr -dc a-zA-Z0-9 | cut -b 1-20) useradd -m $1 echo $PASS | passwd —stdin $1 echo $PASS >> $/sshpass.txt # run the google authenticator as the local user and save the code su $1 -c «/usr/local/bin/google-authenticator -C -t -f -D -r 3 -Q UTF8 -R 30 -w3» > $/authenticator_code.txt

Как сделать красивый Гугл документ

8. Делаем скрипт исполняемым и создаем пользователя. Имя пользователя задаётся через пробел после вызова скрипта.

chmod +x newuser.sh ./newuser.sh client1

Необходимые пользователю файлы создаются в директории /etc/openvpn/clients/ в индивидуальной папке для каждого.
Отдельно сертификаты можно не передавать, они вшиты в ovpn файл конфигурации. Что пользователю понадобится:

  • client.ovpn — файл с настройками и сертификатами
  • sshpass.txt — пароль пользователя
  • authenticator_code.txt — файл с секретным ключом для подключения Google Authenticator

9. Чтобы при попытке аутентификации пользователя не было ошибки «Failed to read /home/username/.google_authenticator» необходимо снять защиту домашних директорий для сервиса openvpn-server

10. Разрешаем маршрутизацию, настраиваем selinux и firewalld.

nano /etc/sysctl.conf #Добавляем строку если её нет: net.ipv4.ip_forward = 1 #Перезапускаем сеть: systemctl restart network.service #Настраиваем selinux semanage port -a -t openvpn_port_t -p udp 1194 #Настраиваем firewalld firewall-cmd —permanent —add-service openvpn

11. Разрешаем автозапуск openvpn-server и запускаем его:

На этом всё, при подключении указываем имя пользователя и пароль+одноразовый пароль (в одном поле)

Двухфакторная аутентификация OpenVpn клиентов (OpenVpn + Google Authenticator) на CentOs 7/8 : 32 комментария

  1. mno Автор записи 03.01.2020 в 21:22 Добрый день, при выполнении скрипта в консоли нужно передать параметром имя пользователя через пробел:
    ./newuser.sh client1
  1. шшшшш03.01.2020 в 22:27 спасибо!

Источник: wtfm.info

Настройка двухфакторной аутентификации в OpenVPN

В статье описывается настройка сервера OpenVPN для включения двухфакторной аутентификации.

OpenVPN — широко известный, бесплатный VPN сервер с открытым исходным кодом, который повсеместно используется для предоставления защищенного доступа сотрудников к внутренним ресурсам организации.

В качестве проверки подлинности для подключения к VPN серверу, как правило используется комбинация из ключа и логина/пароля пользователя. При этом, сохраненный на клиенте пароль превращает весь набор в единый фактор, не обеспечивающий должный уровень безопасности. Злоумышленник, получив доступ к клиентскому компьютеру, получает доступ и к VPN серверу в том числе. Особенно это касается подключения с машин под управлением Windows.

Как посмотреть свою улицу в Гугл мапс

Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.

Возможные способы аутентификации:

  • Мобильное приложение MultiFactor
  • Telegram
  • Звонок (нужно принять вызов и нажать #)
  • Аппаратные OTP токены
  • Приложения OTP: Google Authenticator или Яндекс.Ключ

Принцип работы​

  1. OpenVPN использует плагин openvpn-plugin-auth-pam для проверки подлинности
  2. Плагин запрашивает второй фактор через RADIUS протокол в сервисе Мультифактора
  3. Пользователь подтверждает в телефоне запрос доступа или вводит одноразовый код и подключается к VPN

OpenVPN можно настроить в двух конфигурациях: с проверкой логина и пароля пользователя на сервере и без проверки. Во втором случае, одним из факторов аутентификации будет являться сертификат пользователя.

Установка OpenVPN сервера​

В интернете множество статей, описывающих процесс установки и настройки OpenVPN, поэтому мы не будем их дублировать. Если вам нужна помощь, в конце статьи есть несколько ссылок на обучающие материалы.

Настройка Мультифактора​

Зайдите в систему управления Мультифактором, зайдите в раздел «Ресурсы» и создайте новый OpenVPN. После создания вам будут доступны два параметра: NAS-IDentifier и Shared Secret, они потребуются для последующий настройки.

Настройка OpenVPN сервера​

Откройте файл /etc/openvpn/server.conf и добавьте плагин для аутентификации с помощью PAM модуля

plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so openvpn

Плагин может находиться в директории /usr/lib/openvpn/plugins/ или /usr/lib64/openvpn/plugins/ в зависимости от вашей системы.

Далее создайте файл для service-type openvpn

$ sudo vi /etc/pam.d/openvpn

и впишите в него

  • C проверкой логина и пароля
  • Без проверки
  • С OTP

/etc/pam.d/openvpn

auth required pam_radius_auth.so skip_passwd client_id=NAS-IDentifier auth substack password-auth account substack password-auth
/etc/pam.d/openvpn
auth sufficient pam_radius_auth.so skip_passwd client_id=NAS-IDentifier account sufficient pam_permit.so session sufficient pam_permit.so
/etc/pam.d/openvpn
auth sufficient pam_radius_auth.so client_id=NAS-IDentifier account sufficient pam_permit.so session sufficient pam_permit.so

первая строчка подключает PAM модуль pam_radius_auth с параметрами:

  • skip_passwd — отключает передачу в RADIUS сервер Мультифактора пароль пользователя.
  • client_id — вставьте вместо NAS-Identifier соответствующий параметр из настроек VPN ресурса Мультифактор. Все возможные параметры описаны в документации к модулю.

Вторая и третья строки включают системную проверку логина, пароля и прав пользователя на вашем сервере вместе с вторым фактором аутентификации.

Как изменить пароли в аккаунте Google

Далее необходимо установить модуль pam_radius_auth

$ sudo yum -y install epel-release $ sudo yum -y install pam_radius

Откройте для редактирования файл /etc/pam_radius.conf и укажите адрес RADIUS сервера Мультифактора

radius.multifactor.ru shared_secret 40

  • radius.multifactor.ru — адрес сервера
  • shared_secret — скопируйте из соответствующего параметра настроек VPN ресурса Мультифактор
  • 40 — таймаут ожидания запроса

Остальные сервера необходимо удалить или закомментировать (поставить в начале точку с запятой)

Настройка клиента​

Включите в конфигурационный файл клиента запрос логина и пароля пользователя

auth-user-pass

Если вы настроили OpenVPN без проверки логина и пароля, то указывайте логин, который знает Мультифактор и произвольный пароль.

Проверка​

Запустите клиента для OpenVPN, подключитесь к серверу, укажите логин и пароль. На телефон придет запрос доступа с двумя кнопками

Одна кнопка разрешает доступ, вторая блокирует.

Теперь смело можно сохранять пароль на клиенте, второй фактор надежно защитит ваш OpenVPN сервер от несанкционированного доступа.

Если что-то не работает​

Последовательно проверьте, что вы ничего не упустили:

  • С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
  • Параметры NAS-Identifier и Shared Secret указаны корректно
  • В системе Мультифактор заведен пользователь и ему предоставлен доступ в группу пользователей VPN
  • Пользователь настроил способ аутентификации через Telegram

Если ничего не сработало, обращайтесь, поможем.

  • How To Set Up and Configure an OpenVPN Server on CentOS 7.
  • Настройка сервера OpenVPN в Ubuntu 18.04.
  • Установка и настройка OpenVPN на сервере под управлением CentOS 7.

Источник: multifactor.ru

Openvpn google authenticator настройка

4te.me

Ранее я писал как поднять OpenVPN сервер и подключаться к нему используя только клиентский сертификат из .ovpn файла. А сейчас покажу как запустить OpenVPN с двухфакторной аутентификацией пользователей. Использовать буду тот же готовый docker-образ kylemanna/docker-openvpn .

Как это работает

Общая схема такая: в докер-контейнере работает OpenVPN-сервер и PAM-плагин google-authenticator. Клиент подключается и для аутентификации предоставляет клиентский сертификат из конфига .ovpn (первый фактор) и одноразовый пароль, генерируемый приложением в телефоне (второй фактор). Приложение называется Google Authentificator, хотя подойдет любое приложение реализующее TOTP-алгоритм для генерации одноразовых паролей.

Схема работы

Запускаем сервер

Предполагаю, что на сервере уже работает Docker, поэтому для создания OpenVPN-сервера потребуется всего пара команд.

Как сделать пост в Гугл

Создадим директорию для конфига:

mkdir -p /etc/openvpn
docker run -v /etc/openvpn:/etc/openvpn —rm kylemanna/openvpn ovpn_genconfig -u udp://vpn.example.com -2 -C AES-256-CBC

  • вместо vpn.example.com подставьте свой домен или IP-адрес сервера
  • параметр -2 указывает, что мы хотим сгенерировать конфиг с 2FA
  • шифр AES-256-CBC

Создаем корневые сертификаты. Потербуется ввести пассфразу. Она понадобится в дальнейшем при создании пользователей:

docker run -v /etc/openvpn:/etc/openvpn —rm -it kylemanna/openvpn ovpn_initpki
docker run -v /etc/openvpn:/etc/openvpn -d —name openvpn —restart=always -p 1194:1194/udp —cap-add=NET_ADMIN kylemanna/openvpn

Готово. Сервер работает. Теперь создадим пользователя.

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

  • в параметре username задайте имя пользователя
  • vpn.example.com замените на свой домен или IP-адрес

Командой выше мы генерируем клиентский сертификат (первый фактор) и настраиваем TOTP-алгоритм (второй фактор). Во время выполнения на консоль будет дважды выведен QR-код, наc интересует второй. Выполнение остановится и потребует код из приложения:

Your new secret key is: YD******************** Enter code from app (-1 to skip):

Вводим -1 и пропускаем этот шаг. Если все успешно, в текущем каталоге появится файл конфигурции клиента user1.ovpn . Клиенту для подключения понадобится этот файл и QR-код (второй). Ссылку на QR-код можно найти в выводе команды.

ВАЖНО. Нельзя шарить QR-код ни с кем кроме клиента. Иначе это скомпрометирует второй фактор.

Настройка клиента

Google Authentificator

Клиент берет QR-код, который мы ему передали, и добавляет его в свое мобильное приложение Google Authentificator. После этого у него появится OTP-пароль, который явлется вторым фактором для подключения и обновляется каждые 30 секунд.

Импорт конфига

Далее в OpenVPN клиенте импортирует конфиг .ovpn. Важно при импорте указать Username:

После нажатия на кнопку Connect потребуется ввести пароль, тот самый OTP из мобильного приложения Google Authentificator. Если пароль верный, то соединение пройдет успешно.

  1. Вот здесь есть доп. информация о 2FA в данном докер образе.
  2. Здесь я делал OpenVPN-сервер с некоторыми кастомизациями (не дефолтный пароль и возможность одному клиенту подключаться много раз одновременно). Там есть готовые копипастные команды. Возможно тоже будет полезно
  3. Удаление пользователя:

docker run —rm -it -v /etc/openvpn:/etc/openvpn kylemanna/openvpn ovpn_revokeclient user1 remove

Источник: 4te.me

Рейтинг
Загрузка ...