Настройка OPENVPN


Невероятная куча статей в интернет по настройке openvpn. Решили поделиться с Вами опытом настройки Openvpn.

Рассмотрим на примере дистрибутива Centos7

Установили базовую систему.

После этого добавим необходимые репозитории и полезные пакеты.

yum install epel-release

после этого я устанавливаю пакеты openssh-server и nano

yum install openssh-server nano

Далее приступим openvpn. Устанавливаем его.

yum install openvpn

устанавливаем пакет скриптов для работы с openssl easy-rsa

yum install easy-rsa

Заходим в каталог

cd /usr/share/easy-rsa/2.0/

находим файл vars и немного правим под себя

Я использую nano, можно vim,vi кому как ...

nano ./vars

Достаточно поправить директивы

export KEY_COUNTRY="RU" export KEY_PROVINCE="MOSCOW" export KEY_CITY="Moscow" export KEY_ORG="ORG000116" export KEY_EMAIL="alex@netbizon.com" export KEY_OU="IT" после этого скрипт vars нужно выполнить

source ./vars

После этого выполним очистку каталогов ключей

Это делается один раз для обнуления счетчика и очистки каталогов, при последующих генерациях это делать не нужно.

./clean-all Приступим к созданию CA ( Offline Root Certification Authority)

./build-ca

Generating a 2048 bit RSA private key .....................................................................................+++ ........................................................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [RU]: State or Province Name (full name) [MOSCOW]: Locality Name (eg, city) [Moscow]: Organization Name (eg, company) [ORG000116]: Organizational Unit Name (eg, section) [IT]: Common Name (eg, your name or your server's hostname) [ORG000116 CA]: Name [EasyRSA]: Email Address [alex@netbizon.com]: Далее приступим к созданию пары ключей для нашего сервера

./build-key-server greg

где greg это имя нашего сервера (можете выбирать произвольно)

Запускаем процесс создания

Увидим вывод

The Subject's Distinguished Name is as follows countryName :PRINTABLE:'RU' stateOrProvinceName :PRINTABLE:'MOSCOW' localityName :PRINTABLE:'Moscow' organizationName :PRINTABLE:'ORG000116' organizationalUnitName:PRINTABLE:'IT' commonName :PRINTABLE:'greg' name :PRINTABLE:'EasyRSA' emailAddress :IA5STRING:'alex@netbizon.com' Certificate is to be certified until Aug 31 15:13:32 2025 GMT (3650 days) Sign the certificate? [y/n]:y

Обязательно отвечаем : y

и на вопрос 1 out of 1 certificate requests certified, commit? [y/n] отвечаем : y

Получим сообщение: Write out database with 1 new entriesData Base Updated

Пара ключей готова и размещена в папке ./keys

Запустим генерацию параметров Диффи-Хеллмана с параметрами из файла ./vars

./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ......................................................................................................................+............................................................+.................................+..................+..+.............

По завершении будет создан ключ DH2048bit

Затем приступим к созданию ключа нашего первого клиента, client1

./build-key client1

Generating a 2048 bit RSA private key ...........................................................................................................................................................+++ ..............................................+++ writing new private key to 'client1.key' ----- Все аналогично ключам для сервера, также поле A challenge password лучше оставить пустым.

Мы получили пару клюей для клиента.

Отключим selinux для использования отличного от стандартного порта

nano /etc/selinux/selinux.conf

SELINUX=disabled

Добавим наш порт на firewalld

firewall-cmd --permanent --add-port=1897/udp

и перезагружаем сервер

reboot

Приступим к заполнению Файла конфигурации клиента и сервера.

Файл /etc/openvpn/server.conf

nano /etc/openvpn/server.conf

Заполняем директивы local 10.96.22.124 # адрес интерфейса port 1897 # порт proto udp # транспорт dev tun # тип устройства ca "/etc/openvpn/keys/ca.crt" cert "/etc/openvpn/keys/greg.crt" key "/etc/openvpn/keys/greg.key" # This file should be kept secret dh "/etc/openvpn/keys/dh2048.pem" server 10.105.12.0 255.255.255.0 # Сеть интерфейса tun0 #ifconfig-pool-persist ipp.txt # файл для записи выданных ip адресов клиентам push "route 172.68.10.0 255.255.255.0" # сети в качестве стат маршрутов клиентам ;client-config-dir ccd # можно определить сетевые параметры индивидуально по клиентам client-config-dir /etc/openvpn/fixed-ip # это как мы решили это сделать ;push "redirect-gateway" # можно передать клиенту перенаправлять трафик в ovpn ;push "dhcp-option DNS 192.168.0.1" # можно передать dns server ;push "dhcp-option WINS 10.8.0.1" # можно передать wins server client-to-client # разрешить трафик между клиентами ;duplicate-cn # разрешить множественное подключение keepalive 10 120 # в сек. клиент попробует соеденится черз 10 сек. по недоступности сервера, прежде чем сервер через 120 сек сбросит соединение сам. ;tls-auth /etc/openvpn/keys/ta.key 0 # Это дополнительный уровень защиты от DoS атак. cipher AES-128-CBC # шифрование AES comp-lzo yes # используем сжатие LZO ;max-clients 100 # ограничиваем число клиентов ;user nobody ;group nobody persist-key # не перечитывать ключ через SIGUSR1 (процесс межпоточного взаимодействия) persist-tun # не перезапускать tun/tap через SIGUSR1 #crl-verify "/etc/openvpn/keys/crl.pem" # проверка через файл отозванных сертификатов status /var/log/openvpn-status.log # журнал со статусом клиентов log /var/log/openvpn.log # журнал событий openvpn ;log-append /var/log/openvpn.log # дополняемый файл журнала verb 3 # определяем уровень наполнения вывода (3 по умолчанию, чтобы не забивать лог) ;mute 20 # ограничение повторяющихся событий лога 20 повторениями.

-------------------------------------------------------------------------------------------------

Файл готов. Сохраняем конфигурационный файл Ctrl+O и выходим Ctrl+X.

Копируем ключи в созданный для ключей каталог.

mkdir /etc/openvpn/keys

cp /usr/share/easy-rsa/2.0/keys/* /etc/openvpn/keys

Далее разрешаем пересылку пакетов

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/forwarding.conf

sysctl --system

проверяем

sysctl -a | grep forwarding

net.ipv4.ip_forward = 1

далее включаем и запускаем сервис через systemctl

systemctl enable openvpn@service

systemctl startup openvpn@service

Смотрим journalctl -xn и логи

cat /var/log/openvpn.log

если все врорядке, то продолжим.

создадим файл клиента

client.conf

Здесь уже не будем расписывать каждую директиву.

Пример файла для win клиента с каталогом хранения ключей на съемном (шифрованном) носителе.

client dev tun proto udp remote 72.27.52.42 1897 ;remote xxx.xxx.xxx.xxx 1194 resolv-retry infinite nobind persist-key persist-tun ;http-proxy-retry # retry on connection failures ;http-proxy [proxy server] [proxy port #] ;mute-replay-warnings tls-client ifconfig-nowarn ns-cert-type server keepalive 10 60 dh dh2048.pem dh 'M:/openvpnconfigs/client1/dh2048.pem'

ca 'M:/openvpnconfigs/client1/ca.crt'

cert 'M:/openvpnconfigs/client1/client1.crt'

key 'M:/openvpnconfigs/client1/client1.key' ;tls-auth ta.key 1 cipher AES-128-CBC comp-lzo verb 3 ;mute 20 Файлы ключей обязательно размещать на защищенных носителях и передавать лично, а при невозможности, по защищенным каналам в шифрованном виде.

Пробуем делать подключение и смотрим логи.

Thu Sep 3 22:38:45 2015 77.239.247.79:65322 TLS: Initial packet from [AF_INET]77.239.247.79:65322, sid=c092bd9b ea9f36c7 Thu Sep 3 22:38:45 2015 77.239.247.79:65322 VERIFY OK: depth=1, C=RU, ST=MOSCOW, L=Moscow, O=ORG000116, OU=IT, CN=ORG000116 CA, name=EasyRSA, emailAddress=alex@netbizon.com Thu Sep 3 22:38:45 2015 77.239.247.79:65322 VERIFY OK: depth=0, C=RU, ST=MOSCOW, L=Moscow, O=ORG000116, OU=IT, CN=client1, name=EasyRSA, emailAddress=alex@netbizon.com Thu Sep 3 22:38:45 2015 77.239.247.79:65322 Data Channel Encrypt: Cipher 'AES-128-CBC' initialized with 128 bit key Thu Sep 3 22:38:45 2015 77.239.247.79:65322 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Sep 3 22:38:45 2015 77.239.247.79:65322 Data Channel Decrypt: Cipher 'AES-128-CBC' initialized with 128 bit key Thu Sep 3 22:38:45 2015 77.239.247.79:65322 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Sep 3 22:38:45 2015 77.239.247.79:65322 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA Thu Sep 3 22:38:45 2015 77.239.247.79:65322 [client1] Peer Connection Initiated with [AF_INET]77.239.247.79:65322 Thu Sep 3 22:38:45 2015 client1/77.239.247.79:65322 MULTI_sva: pool returned IPv4=10.105.12.2, IPv6=(Not enabled) Thu Sep 3 22:38:45 2015 client1/77.239.247.79:65322 MULTI: Learn: 10.105.12.2 -> client1/77.239.247.79:65322 Thu Sep 3 22:38:45 2015 client1/77.239.247.79:65322 MULTI: primary virtual IP for client1/77.239.247.79:65322: 10.105.12.2 Thu Sep 3 22:38:47 2015 client1/77.239.247.79:65322 PUSH: Received control message: 'PUSH_REQUEST' Thu Sep 3 22:38:47 2015 client1/77.239.247.79:65322 send_push_reply(): safe_cap=940 Thu Sep 3 22:38:47 2015 client1/77.239.247.79:65322 SENT CONTROL [client1]: 'PUSH_REPLY,route 172.68.10.0 255.255.255.0,route-gateway 10.105.12.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.105.12.2 255.255.255.0' (status=1)

#Vacation

Featured Posts