Категорії
Linux

Openvpn: авторизация по паролю без ключей через pam

Данная статья является комбинацией разных статей по установке и настройке openvpn’a, но только на систему Centos Linux. Здесь рассматривается пример в котором авторизация пользователей будет через pam, то есть достаточно завести пользователя в систему, выдать ему 3 сертификата сервера (ca.crt, ta.key, dh1024.pem). При подключении весь трафик будет идти через vpn туннель.

Тестовый стенд: ОС Centos 6.3, openvpn 2.2.1

1) Установка.

В репозиториях Centos’a openvpn’a нет, поэтому нужно подключить дополнительный репозиторий:

#rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm

После этого ставим openvpn

#yum install openvpn.x86_64

2) Настройка серверной части

После установки создаём папку /etc/openvpn (если она не существует). Копируем в эту папку файлы служебные скрипты:

#cp -R /usr/share/openvpn/easy-rsa /etc/openvpn/

удаляем папку 1.0 из каталога /etc/openvpn/easy-rsa

#rm -rf /etc/openvpn/easy-rsa/1.0

переходим в папку

#cd /etc/openvpn/easy-rsa/2.0

После этого правим файл vars – меняем имя компании на своё, а так же прочие данные, если не знаете, что менять, а что нет – можно ничего не менять.
Узнаём версию openssl

#openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

и делаем соответствующий симлинк на нужный файл (в нашем случае это версия 1.0.0, но в папке так же содержаться файлы для версий 0.9.8 и 0.9.6):

#ln -s openssl-1.0.0.cnf openssl.cnf

после этого делаем такое

#source ./vars
#./clean-all
#./build-ca

Можно просто жать Enter или отвечать честно на вопросы.

Если команда ./build-ca выдала ошибки, то нужно сделать несколько раз ./clean-all, а потом уже source ./vars, а потом опять ./build-ca. После этого делаем (естественно со всем соглашаемся и везде ставим y):

#./build-key-server server
#./build-dh
#openvpn --genkey --secret keys/ta.key

Всё ключи для сервера сгенерированы. Переходим непосредственно к написанию конфига. Создаём файл /etc/openvpn/server.conf такого содержания:

port 2294
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
tls-auth /etc/openvpn/easy-rsa/2.0/keys/ta.key 0
client-to-client
server 10.11.0.0 255.255.255.0
push "route 10.11.0.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway"
tls-server
compress lzo
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
keepalive 10 120
management 127.0.0.1 5555 /etc/openvpn/management.pwd
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so login
username-as-common-name
tmp-dir /etc/openvpn/tmp
script-security 2
client-cert-not-required

Примечание.

Для Windows версии openvpn сервера есть пока единственный доступный вариант pam-аутентификации, реализованный в виде dll-библиотеки OpenVPNSSPI.dll. Скачать можно с сайта проекта

Проверить обязательно размещение ключей и правильность путей. Для VPN’a будет использоваться сеть 10.11.0.0/24, работать он будет от юзера openvpn, логи будет писать в /var/log/openvpn (создать эту папку). Так же используется интерфейс управления, который запускается на 5555 порту (если не надо – просто закоментируй эту строку, если хочешь использовать – создай соответствующий файл и положи туда пароль в открытом виде). Так же нужно создать папку /etc/openvpn/tmp и дать ей права 0777 рекурсивно (иначе будут ошибки permission denied)

После этого можно запускать openvpn:

#service openvpn start

Если всё удачно, появиться новый интерфейс tun0.

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

Для клиента достаточно будет после установки самого openvpn’a и ключей ca.crt, ta.key, dh1024.pem. Их желательно поместить в c:\vpn. Далее создаём такой файл client.ovpn в папке c:\program file\openvpn\config (или соответственно другой, если openvpn установлен у другую) такого содержания (если у вас Windows XP то последние 2 строки нужно убрать):

client
dev tun
tls-client
proto udp
remote XX.XX.XX.XX 2294
resolv-retry infinite
nobind
remote-cert-tls server
verb 3
cipher DES-EDE3-CBC
compress lzo
ca C:\\vpn\\ca.crt
dh C:\\vpn\\dh1024.pem
tls-auth C:\\vpn\\ta.key 1
persist-key
persist-tun
auth-user-pass
route-method exe
route-delay 2

Обратите внимание на двойные слеши в пути – это обязательно
После этого запускайте openvpn gui ТОЛЬКО ОТ ИМЕНИ АДМИНИСТРАТОРА через правый клик, иначе не будет работать.

4) Заключительные действия

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

#sysctl net.ipv4.ip_forward=1

а так же добавим в файл /etc/sysctl.conf строку

net.ipv4.ip_forward=1

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

#chkconfig openvpn on

Что бы работал интернет у клиентов, нужно добавить трансляцию NAT. Выполним команду:

#/sbin/iptables --table nat --append POSTROUTING --out-interface eth0 -j SNAT --to-source XX.XX.XX.XX

а что бы при ребуте не слетало, добавим эту же строку в файл /etc/rc.d/rc.local

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Домашняя страничка Andy
Записки молодого админа
Самостоятельная подготовка к Cisco CCNA
Самостоятельная подготовка к Cisco CCNP
Powered by Muff