Раздел: Админство

Freeradius + openvpn на debian 8

Настройка vpn-сервера openvpn с авторизацией на radius-сервере freeradius на delphi 8.


Установку обоих систем можно производить как на одном сервере, так и на разных, значения не имеет.
В этой части настраиваем freeradius.

Устанавливаем необходимые пакеты:

apt-get install freeradius freeradius-mysql freeradius-utils mysql-server php5-mysql php5

Если будут какие-то ошибки типа этой:

Errors were encountered while processing: freeradius-mysql[/bash]

просто перезапустите mysql и попробуйте переустановить этот пакет.

Если во время установки mysql система не запросила установить пароль для root пользователя mysql, можно запустить:

/usr/bin/mysql_secure_installation

Заходим в mysql:

mysql -u root -p

В интерфейсе mysql создаём базу с названием radius

CREATE DATABASE radius;

и пользователя radius, с паролем, например, qwerty123:

GRANT ALL PRIVILEGES ON radius.* TO radius@localhost IDENTIFIED BY "qwerty123";
flush privileges;
exit

Далее, добавляем в базу готовую схему:
mysql -uradius -p radius < /etc/freeradius/sql/mysql/schema.sql

Настраиваем конфиг соединения freeradius с бд в файле /etc/freeradius/sql.conf.
В разделе «server» нас интересуют следующие настройки:

# Connection info:
server = "localhost"
port = 3306
login = "radius" # пользователь бд
password = "qwerty123" # наш пароль к бд
radius_db = "radius" # название бд

Далее, в файле /etc/freeradius/radiusd.conf Необходимо раскомментировать строку:

$INCLUDE sql.conf

Далее, в файле /etc/freeradius/sites-available/default следует раскомментировать строку, содержащую параметр sql в разделе authorize {…}, ещё одну строку с параметром sql в разделе accounting {…}, и ещё одну строку с параметром sql в разделе session{…}.

По аналогии, в файле /etc/freeradius/sites-available/inner-tunnel следует раскомментировать строку, содержащую параметр sql в разделе authorize {…} и в разделе session{…}.

Дальше, редактируем файл, содержащий настройки freeradius-клиентов /etc/freeradius/clients.conf (клиенты радиуса — это те сервисы, которые будут коннектиться к нему, т.е. в нашем случае, это openvpn). В самом низу можно добавить:

client openvpn_IP {
secret = shared_secret
nastype = other
}

Вместо openvpn_IP следует вписать ip-адрес openvpn-сервера (который может быть как на этом хосте, так и на любом другом). Вместо shared_secret можно вписать любой другой ключ, который потом нужно будет вписать в настройках openvpn.

Далее, настраиваем веб-морду для работы с freeradius. Здесь следует сказать, что я перепробовал множество веб-интерфейсов из гугла или с sourceforge, но большинство из них устарели и более не разрабатываются; и ни одна из них не обладает «коробочным» функционалом или хотя бы какой-то вменяемой работоспособностью. Интерфейс daloradius тоже не блещет: такое чувство, что верстальщики сделали много всяких разделов, но без функционала; дата последнего обновления — 2014.05.10. Ну, здесь хотя бы можно создавать пользователей для openvpn.

Устанавливаем необходимые пакеты:

apt-get install php-pear php5-gd php5-mysql php-db php-dbg

Точно не помню, на debian 8 jessie вроде бы этих пакетов для корректной работы daloradius хватило.

Качаем и настраиваем daloradius:

wget http://sourceforge.net/projects/daloradius/files/latest/download?source=files
tar -zxvf daloradius-0.9-9.tar.gz
mysql -uradius -p radius < daloradius-0.9-9/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

Редактируем конфиг daloradius-0.9-9/library/daloradius.conf.php ,
а конкретно — вот в этих строках указываем наши настройки:

$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'qwerty123';
$configValues['CONFIG_DB_NAME'] = 'radius';

Перемещаем папку с daloradius на веб-сервер:

mv daloradius-0.9-9 /var/www/html/daloradius

Перезапускаем freeradius:

service freeradius restart

Теперь в интерфейс daloradius можно зайти по адресу http://freeradius_ip/daloradius

Учётные данные
логин: administrator
пароль: radius

можно поменять в интерфейсе.

Всё самое сложное позади, осталось только настроить vpn. Все дальнейшие команды выполняются на том хосте, где планируется установить и использовать openvpn.

Установка:

apt-get install openvpn easy-rsa
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa/

Редактируем часть файла /etc/openvpn/easy-rsa/vars по своему усмотрению:

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"

Далее
Инициализация переменных:

source ./vars

Выполнить файл vars (если не сработает, скорее всего нет прав на выполнение, и следует сделать chmod +x vars):

./vars

Очистка от старых сертификатов:

./clean-all

Создание корневого сертификата:

./build-ca

Создаём ключ и сертификат сервера:

./build-key-server server

Создаём ключ Диффи-Хеллмана:

./build-dh

Создавать сертификаты клиента смысла не имеет, т.к. клиентов мы будем заводить на freeradius-сервере через daloradius.

Копируем ключи в корневую директорию Openvpn:

cd /etc/openvpn/easy-rsa/keys/
cp server.crt server.key ca.crt dh2048.pem /etc/openvpn/

Теперь, займёмся настройкой плагина freeradius для того, чтобы наш сервер смог к нему подключаться. Установим необходимые пакеты:

apt-get install make g++ libgcrypt20 libgcrypt20-dev

Скачаем и установим плагин:

wget http://www.nongnu.org/radiusplugin/radiusplugin_v2.1a_beta1.tar.gz
tar -zxvf radiusplugin_v2.1a_beta1.tar.gz
cd radiusplugin_v2.1a_beta1
make

Скопируем файлы плагина в директорию openvpn:

cp radiusplugin.so /etc/openvpn/
cp radiusplugin.cnf /etc/openvpn/

Отдерактируем файл /etc/openvpn/radiusplugin.cnf
Нас будет интересовать следующие настройки:

server
{
        # The UDP port for radius accounting.
        acctport=1813
        # The UDP port for radius authentication.
        authport=1812
        # The name or ip address of the radius server.
        name=x.x.x.x #ip адрес нашего freeradius сервера.
        # How many times should the plugin send the if there is no response?
        retry=1
        # How long should the plugin wait for a response?
        wait=1
        # The shared secret.
        sharedsecret=shared_secret # тот самый ключ, который мы вписывали в /etc/freeradius/clients.conf 
}

Создаём файл /etc/openvpn/server.conf со следующим содержимым:

local x.x.x.x # здесь нужно указать ip этого vpn сервера, к которому должны коннектиться наши клиенты
port 1194
proto tcp
dev tun0
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log openvpn.log
verb 6
tcp-queue-limit 256
status /etc/openvpn/openvpn-status.log
plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf # подключение плагина freeradius
client-cert-not-required #эта строка говорит о том, что с клиента не следует спрашивать сертификат

Далее, следует убедиться, что в файле /etc/sysctl.conf выставлен и раскомментирован параметр:

net.ipv4.ip_forward=1

Выполняем от рута:

sysctl -p

Чтобы клиенты не только соединялись с openvpn сервером, но и лазили через него в интернет, следует прописать маскарад:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

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

Чтобы клиент смог подключиться к серверу, требуется:
-завести нового клиента в интерфейсе daloradius, указав логин и пароль;
-Установить клиенту openvpn-клиент
-передать файлы ca.crt с сервера и конфиг с настройками клиента:

 
client
dev tun
proto tcp
remote x.x.x.x 1194 # – УКАЗАТЬ ip адрес openvpn-сервера!
nobind
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
reneg-sec 0
verb 3

Если у клиента windows, то файл следует положить в папку программы openvpn-клинета с конфигами.
на windows 7 это директория C:\Program Files\OpenVPN\config
Сюда же следует положить ca.crt
Во время подключения, клиент должен ввести логин и пароль, которые были указаны в daloradius.

Вот и всё. Настройка не быстрая, много где можно ошибиться.
Немного Траблшутинга.
Если клиент не может подключиться, то проверьте iptables на openvpn и freeradius серверах.
openvpn общается с freeradius как минимум по udp портам 1812, 1813 и 1814.
Клиент обращается с openvpn по порту tcp 1194; ответ может идти по любому порту, поэтому исходящие следует разрешить.

Если на openvpn не пишется лог /etc/openvpn/openvpn.log, значит, не хватает прав, т.к. в конфиге openvpn сервера мы указали запускать сервер от nobody. Следует либо закомментировать строки в целях отладки (тогда openvpn будет запускаться от рута) либо пошаманить с правами.

Комментировать

Комментарии

20 + 15 =