Авторизация клиентов openvpn по логину и паролю.

admin 27.10.2019 2

У вас уже наверно есть настроенный vpn и вы задумались, что уже порядком надоело генерировать сертификаты каждому клиенту, потом отзывать их когда человек перестал пользоваться. Предлагаем вам простой и удобный способ авторизовывать клиентов на вашем vpn сервер по логину и паролю. В данном примере за авторизацию будет отвечать php скрипт который взаимодействует с базой данных mysql. Но вы можете использовать любой другой язык программирования. Openvpn ожидает от скрипта 2 ответа: 0 — авторизация успешна, 1 — авторизация не успешна.
Вам необходимо перейти на ваш сервер и установить php, mysql. Для удобства использования можно сразу установить lamp и через phpmyadmin управлять вашими пользователями:
Статьи о том как установить lamp:
Установка LAMP на Debian 10.

LAMP вы успешно установили переходим с созданию базы данных и пользователя для работы с базой данных:

mysql -u root -p

create database vpn;
CREATE USER 'vpn'@'localhost' IDENTIFIED BY 'strongpassword';
Назначаем полные привелегии пользователю:
GRANT ALL PRIVILEGES ON vpn.* to 'vpn'@'localhost' IDENTIFIED BY 'strongpassword' WITH GRANT OPTION;
Перезагружаем привелегии:
FLUSH PRIVILEGES;

Переходим в phpmyadmin
http://ip/phpmyadmin/
Выбираем базу данных vpn и переходим на вкладку sql и выполняем следующий sql запрос:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE users (
id int(5) NOT NULL,
username varchar(15) NOT NULL,
password varchar(100) NOT NULL,
date int(18) NOT NULL DEFAULT '1835008257',
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE users
ADD PRIMARY KEY (id);
ALTER TABLE users
MODIFY id int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
COMMIT;

Рассмотрим подробней структуру таблицы:
id — идентификато пользователя
username — имя пользователя
password — пароль. в базе дынных хранится в виде md5 хеша.
date — дата в формате Unix Time Stamp, после которой пользователю будет отказано в авторизации. По умолчанию устанавливается 1835008257 (02/24/2028 @ 12:30pm (UTC))

Переходим на вкладку Вставить. И добавляем новую строку в базу данных.

Перейдем к донастройке vpn, если у Вас ещё не настроен vpn почитайте статью:
Установка openvpn на Debian 10 (Buster)
Нам необходио добавить в конфигурационный файл
script-security 3
auth-user-pass-verify "/usr/bin/php /etc/openvpn/verify.php" via-env
client-cert-not-required
username-as-common-name

И создать файл /etc/openvpn/verify.php он будет отвечать за авторизацию клиентов.

#!/usr/bin/php
<?php
$bd = mysqli_connect("localhost","vpn","strongpassword");
mysqli_select_db($bd,"vpn");
$user = getenv("username");
$password = md5(getenv("password"));
$nowtime=time();
$qr="SELECT * FROM users where username='".$user."' AND password='".$password."' AND date>".$nowtime;
$query=mysqli_query($bd,$qr) or die(mysqli_error());
$strok=mysqli_num_rows($query);
if ($strok==1)
exit(0);
}else
{
exit(1);
}
?>

Настройки на сервере закончены. Переходим к настройкам клиента.
Рядом с конфигурационным файлом необходимо созадть файл user.txt с содержимым
user
password
И добавить в конфигурационный файл строку:
auth-user-pass user.txt
Теперь всем клиентам можно выдавать один и тот же комплект сертификатов, поскольку commonname будет определен как username при авторизации.

Оцените статью

средняя оценка 5 / 5. оценок 1

No votes so far! Be the first to rate this post.

Возможно вам понравится

2 Комментария
  • Роман 14 Ноя. 2019

    https://nix-notes.com/debian/nastrojka-double-vpn-na-debian-10/
    как к этой статье применить?

    Ответить
  • den 27 Дек. 2019

    script-security 3
    auth-user-pass-verify «/usr/bin/php /etc/openvpn/verify.php» via-env
    client-cert-not-required
    username-as-common-name

    я добавил в конфиг сервера к которому конектятся клиенты вот это и поставил php на сервер.
    и в клиентский конфиг добавил адреса.

    Ответить

Оставьте свой комментарий

Ваш email не будет опубликован.