воскресенье, 4 июня 2017 г.

Как настроить сервер OpenVPN в Ubuntu 17.10

Бывает нужно пустить трафик программы 1С через интернет.
Для этого нам понадобиться OpenVPN server и client
Если вебсервер 1С не находится на одном сервере с сервером OpenVPN
Нужно задать фиксированные ip адреса в виртуальной сети.
------------------------------------------------------------------------------------------
Установка в соответствии с:
Как настроить сервер OpenVPN в Ubuntu 16.04
Про упаковку ключей в файл конфигурации
Про работу на одном порту с вебсервером
# apt update && apt upgrade -y
# apt install mc
# apt install openvpn easy-rsa -y
# make-cadir ~/openvpn-ca
# cd ~/openvpn-ca
# source vars
# ./clean-all
# ./build-ca
# ./build-key-server server
# ./build-dh
# openvpn --genkey --secret keys/ta.key
Генерация ключей для клиента
# cd ~/openvpn-ca
# source vars
# ./build-key client1
...............................
# ./build-key client9
Скопируем ключи:
# cd ~/openvpn-ca/keys
# cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
# gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/server.conf
# cp /etc/openvpn/server.conf /etc/openvpn/server.conf.bak

Настройка конфигурации сервера
# nano /etc/openvpn/server.conf
После tls-auth ta.key 0 # This file is secret
Добавим:

key-direction 0


После cipher AES-256-CBC
Добавим:
auth SHA256
 
Раскоментировать:  
user nobody
group nogroup

Сохранить.

# nano /etc/openvpn/server.conf
Или так (Перевод Google):
#################################################
# Пример файла конфигурации OpenVPN 2.0 для #
# Многоклиентский сервер. #
# #
# Этот файл для серверной части #
# Из нескольких клиентов <-> one-server #
# Конфигурация OpenVPN. #
# #
# OpenVPN также поддерживает #
# Одиночная машина <-> одиночная машина #
# Конфигурации (см. Страницу примеров #
# На веб-сайте для получения дополнительной информации). #
# #
# Этот конфиг должен работать на Windows #
# Или Linux / BSD. Запомнить на #
# Windows для цитирования путей и использования #
# Двойной обратной косой черты, например: #
# "C: \\ Program Files \\ OpenVPN \\ config \\ foo.key" #
# #
# Комментариям предшествуют '#' или ';' #
#################################################

# Какой локальный IP-адрес должен быть OpenVPN
# Слушать? (необязательный)
;local a.b.c.d

# Какой порт TCP / UDP должен прослушивать OpenVPN?
# Если вы хотите запустить несколько экземпляров OpenVPN
# На том же компьютере, используйте другой порт
# Номер для каждого. Вам нужно будет
# Откройте этот порт на вашем брандмауэре.
port 1194

# TCP or UDP server?
proto tcp
;proto udp

# «Dev tun» создаст маршрутизируемый туннель IP,
# "Dev tap" создаст туннель ethernet.
# Используйте «dev tap0», если вы являетесь мостом Ethernet
# И предварительно обработали виртуальный интерфейс tap0
# И подключили его с помощью интерфейса ethernet.
# Если вы хотите контролировать политики доступа
# Над VPN, вы должны создать брандмауэр
# Для интерфейса TUN / TAP.
# В системах, отличных от Windows, вы можете дать
# Явный номер единицы, например tun0.
# В Windows для этого используйте «dev-node».
# В большинстве систем VPN не будет функционировать
# Если вы не полностью или полностью отключите
# Брандмауэр для интерфейса TUN / TAP.
;dev tap
dev tun

# Windows требуется имя адаптера TAP-Win32
# С панели «Сетевые подключения», если вы
# Есть несколько. На XP SP2 или выше,
# Вам может потребоваться выборочно отключить
# Брандмауэр Windows для адаптера TAP.
# Не-Windows-системы обычно не нуждаются в этом.
;dev-node MyTap

# Корневой сертификат SSL / TLS (ca), сертификат
# (Cert) и закрытый ключ (ключ). Каждый клиент
#, И сервер должен иметь свой собственный сертификат и
# Ключевой файл. Сервер и все клиенты будут
# Использовать тот же файл ca.
#
# См. Каталог «easy-rsa» для серии
# Сценариев для генерации сертификатов RSA
# И закрытые ключи. Не забудьте использовать
# Уникальное общее имя для сервера
# И каждого сертификата клиента.
#
# Любая система управления ключами X509 может использоваться.
# OpenVPN также может использовать файл с отформатированным файлом PKCS # 12
# (См. Директиву «pkcs12» на странице руководства).
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh2048.pem 2048
dh dh2048.pem

# Топология сети
# Должна быть подсеть (адресация через IP)
# Если клиенты Windows v2.0.9 и ниже не должны
# Быть поддержанным (тогда net30, то есть a / 30 на клиента)
# Defaults to net30 (not recommended)
topology subnet

# Настроить режим сервера и предоставить VPN-подсеть
# Для OpenVPN для вывода адресов клиента.
# Сервер возьмет 10.8.0.1 для себя,
# Остальное будет доступно для клиентов.
# Каждый клиент сможет дойти до сервера
# На 10.8.0.1. Прокомментируйте эту строку, если вы
# Ethernet-мосты. Дополнительную информацию см. На странице руководства.
server 10.8.0.0 255.255.255.0

# Ведение записи виртуального IP-адреса клиента <->
# Ассоциаций в этом файле. Если OpenVPN спускается или
# Перезапускается, можно назначить повторное подключение клиентов
# Тот же виртуальный IP-адрес из пула, который был
# Ранее присвоенный.
;ifconfig-pool-persist ipp.txt

# Настроить режим сервера для моста Ethernet.
# Вы должны сначала использовать возможности моста вашей ОС
# Для соединения интерфейса TAP с ethernet
# Интерфейс NIC. Затем вы должны вручную установить
# IP / netmask на интерфейсе моста, здесь мы
# Предположим, 10.8.0.4/255.255.255.0. Наконец, мы
# Необходимо отложить диапазон IP в этой подсети
# (Start = 10.8.0.50 end = 10.8.0.100), чтобы выделить
# Для подключения клиентов. Оставьте эту строку прокомментированной
# Out, если вы не являетесь сетевым мостом.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# Настройка режима сервера для моста Ethernet
# С использованием DHCP-прокси, где клиенты говорят
# На сервер DHCP на стороне сервера OpenVPN
# Для получения их распределения IP-адресов
# И DNS-сервера. Вы должны сначала использовать
# Модификация вашей ОС для подключения TAP
# С интерфейсом сетевого интерфейса Ethernet.
# Примечание: этот режим работает только на клиентах (например,
# Windows), где клиентский адаптер TAP
# Привязан к клиенту DHCP.
;server-bridge

# Нажимайте маршруты клиенту, чтобы разрешить
# Для доступа к другим частным подсетям
# сервер. Помните, что эти
# Частные подсетей также понадобятся
# Знать маршрут маршрутизации клиента OpenVPN
# Пул адресов (10.8.0.0/255.255.255.0)
# Обратно на сервер OpenVPN.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# Чтобы назначить определенные IP-адреса конкретным
# Клиентов или если у подключающегося клиента есть приватный
# Подсеть за ней, которая также должна иметь доступ к VPN,
# Используйте подкаталог «ccd» для клиентских
# Файлов конфигурации (см. Справочную страницу для получения дополнительной информации).

# ПРИМЕР: Предположим, что клиент
# С общим именем сертификата "Thelonious"
# Также имеет небольшую подсеть за его подключением
# Машина, такая как 192.168.40.128/255.255.255.248.
# Во-первых, раскомментируйте эти строки:
client-config-dir /etc/openvpn/ccd
;route 192.168.40.128 255.255.255.248

# Затем создайте файл ccd / Thelonious с помощью этой строки:
# iroute 192.168.40.128 255.255.255.248
# Это позволит частной сети Thelonious
# Доступ к VPN. Этот пример будет работать только
# Если вы маршрутизируете, а не мосты, т. Е. Вы
# С использованием «dev tun» и «server».

# ПРИМЕР: Предположим, вы хотите дать
# Thelonious фиксированный IP-адрес VPN 10.9.0.1.
# Сначала раскомментируйте эти строки:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Then add this line to ccd/Thelonious:
#   ifconfig-push 10.9.0.1 10.9.0.2

# Предположим, вы хотите включить разные
# Политики доступа к брандмауэру для разных групп
#Количество клиентов. Существует два метода:
# (1) Запустить несколько демонов OpenVPN, по одному для каждого
# Group и брандмауэром интерфейс TUN / TAP
# Для каждой группы / демона.
# (2) (Дополнительно) Создайте сценарий для динамического
# Изменить брандмауэр в ответ на доступ
# От разных клиентов. Просмотреть человека
# Страница для получения дополнительной информации о скрипте learn-address.
;learn-address ./script

# Если включено, эта директива настроит
# Всем клиентам перенаправить свои дефолты
# Сетевой шлюз через VPN,
# Весь IP-трафик, такой как просмотр веб-страниц и
# И поиск DNS для прохождения через VPN
# (Серверу OpenVPN может понадобиться NAT
# Или подключить интерфейс TUN / TAP к Интернету
#, Чтобы это нормально работало).
;push "redirect-gateway def1 bypass-dhcp"

# Определенные сетевые настройки для Windows
# Может быть нажата на клиенты, такие как DNS
# Или WINS. ПРЕДОСТЕРЕЖЕНИЕ:
# Http://openvpn.net/faq.html#dhcpcaveats
# Адреса ниже относятся к общественным
# DNS-серверы, предоставляемые opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# Раскомментируйте эту директиву, чтобы
# Клиентов, чтобы иметь возможность «видеть» друг друга.
# По умолчанию клиенты будут видеть только сервер.
# Чтобы заставить клиентов видеть сервер, вы
# Также необходимо соответствующим образом настроить межсетевой экран
# Интерфейса TUN / TAP сервера.
client-to-client

# Раскомментировать эту директиву, если несколько клиентов
# Может подключаться к тому же сертификату / ключу
# Файлов или общих имен. Это рекомендуется
# Только для целей тестирования. Для использования в производстве,
# У каждого клиента должен быть собственный сертификат / ключ
# Пара.
#
# ЕСЛИ ВЫ НЕ ПОЛУЧЕНЫ ИНДИВИДУАЛЬНЫМ
# СЕРТИФИКАТ / ОСНОВНЫЕ ПАРЫ ДЛЯ КАЖДОГО КЛИЕНТА,
# КАЖДЫЙ, ИМЕЮЩИЙ ЕГО СОБСТВЕННОЕ УНИКАЛЬНОЕ "ОБЩЕЕ ИМЯ",
# ОТКРЫТИЕ ЭТОЙ ЛИНИИ.
;duplicate-cn


# Директива keepalive вызывает ping-like
# Сообщений, отправляемых туда и обратно
# Ссылка, чтобы каждая сторона знала, когда
# Другая сторона опустилась.
# Пинг каждые 10 секунд, предположим, что удаленный
# Peer не работает, если пинг не получен во время
# 120 секунд.
keepalive 10 120

# Для дополнительной безопасности, кроме предоставляемой
# По протоколу SSL / TLS, создайте "HMAC firewall"
#, Чтобы блокировать атаки DoS и наводнение портов UDP.
#
# Создать с помощью:
#   openvpn --genkey --secret ta.key
#
# Сервер и каждый клиент должны иметь
# Копия этого ключа.
# Второй параметр должен быть «0»
# На сервере и «1» на клиентах.
tls-auth ta.key 0 # This file is secret
key-direction 0

# Выберите криптографический шифр.
# Этот элемент конфигурации должен быть скопирован в
# Файл конфигурации клиента.
# Обратите внимание, что 2.4 клиент / сервер будет автоматически
# вести переговоры AES-256-GCM in TLS mode.
# См. Также параметр ncp-encipher в man-странице
cipher AES-256-CBC
auth SHA256

# Включить сжатие по линии VPN и нажать
# Для клиента (только с 2.4+, для более ранних
# Версии см. Ниже)
;compress lz4-v2
;push "compress lz4-v2"

# Для сжатия, совместимого со старыми клиентами, используйте comp-lzo
# Если вы включите его здесь, вы также должны
# Включить его в файл конфигурации клиента.
;comp-lzo

# Максимальное количество одновременно подключенных
# Клиентов, которые мы хотим разрешить.
;max-clients 100

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
user nobody
group nogroup

# Параметры persist будут стараться избегать
# Обращение к определенным ресурсам при перезапуске
#, Которые могут быть недоступны, поскольку
# С понижением привилегий.
persist-key
persist-tun

# Вывести короткий файл состояния, отображающий
# Текущие соединения, усеченные
# И переписывается каждую минуту.
status openvpn-status.log

# По умолчанию сообщения журнала будут отправляться в syslog (или
# В Windows, если они работают как служба, они
# Каталог «\ Program Files \ OpenVPN \ log»).
# Используйте log или log-append для переопределения этого значения по умолчанию.
# «Log» будет обрезать файл журнала при запуске OpenVPN,
#, В то время как «log-append» будет добавлен к нему. Используйте один
# Или другой (но не оба).
;log         openvpn.log
;log-append  openvpn.log

# Установите соответствующий уровень журнала
# Многословность файла.
#
# 0 является тихим, за исключением фатальных ошибок
# 4 является разумным для общего использования
# 5 и 6 могут помочь отладить проблемы подключения
# 9 - чрезвычайно подробный
verb 3

# Повторяющиеся сообщения молчания. Не более 20
# Последовательных сообщений одного и того же сообщения
# Будет выводиться в журнал.
;mute 20

# Сообщите клиенту, что когда сервер перезагружается, так что
# Может автоматически повторно подключаться.
explicit-exit-notify 1
###############################################################
Сохранить.
# nano /etc/sysctl.conf
Раскоментировать:

net.ipv4.ip_forward=1

Сохранить.

# sysctl -p


# systemctl start openvpn@server
# systemctl enable openvpn@server
# systemctl status openvpn@server

# mkdir -p ~/client-configs/files
# chmod 700 ~/client-configs/files
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
# cp ~/client-configs/base.conf ~/client-configs/base.conf.bak
# nano ~/client-configs/base.conf
# nano ~/client-configs/make_config.sh
Добавить:
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn
Сохранить.
# chmod 700 ~/client-configs/make_config.sh
# cd ~/client-configs
# ./make_config.sh client1
.........................................
# ./make_config.sh client9
 -------------------------------------------------------------------------------------------------------------------------
Для понимания фиксированных адресов прочитать 2 ссылки ниже обязательно!
Topology in OpenVPN
Configuring client-specific rules and access policies

По умолчанию
# Defaults to net30 (not recommended)
;topology subnet

# nano /etc/openvpn/server.conf 
Закоментируйте:
;topology subnet
;ifconfig-pool-persist ipp.txt
Сначала раскомментируйте эти строки:
client-to-client
client-config-dir /etc/openvpn/ccd

Сохранить.

Создать файлы  /etc/openvpn/ccd/clientX по числу сертификатов
В файлах прописать
ifconfig-push 10.8.0.Y 10.8.0.Z

Каждая пара адресов ifconfig-push представляет собой конечные точки виртуального клиента и сервера IP. Они должны быть взяты из последовательных / 30 net30 для совместимости с клиентами Windows и драйвером TAP-Windows. В частности, последний октет в IP-адресе каждой пары конечных точек должен быть взят из этого набора:

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

ccd/client1  -->  ifconfig-push 10.8.0.5 10.8.0.6
ccd/client2  -->  ifconfig-push 10.8.0.9 10.8.0.10
ccd/client3  -->  ifconfig-push 10.8.0.13 10.8.0.14
ccd/client4  -->  ifconfig-push 10.8.0.17 10.8.0.18
ccd/client5  -->  ifconfig-push 10.8.0.21 10.8.0.22
ccd/client6  -->  ifconfig-push 10.8.0.25 10.8.0.26
ccd/client7  -->  ifconfig-push 10.8.0.29 10.8.0.30
ccd/client8  -->  ifconfig-push 10.8.0.33 10.8.0.34
ccd/client8  -->  ifconfig-push 10.8.0.37 10.8.0.38
......................................................................
Рекомендованный (>2.0.9) метод:
# nano /etc/openvpn/server.conf 
Закоментируйте:
;ifconfig-pool-persist ipp.txt
Сначала раскомментируйте эти строки:
topology subnet
client-to-client
client-config-dir /etc/openvpn/ccd

Сохранить.

ccd/client1  -->  ifconfig-push 10.8.0.2 255.255.255.0
ccd/client2  -->  ifconfig-push 10.8.0.3 255.255.255.0
ccd/client3  -->  ifconfig-push 10.8.0.4 255.255.255.0
ccd/client4  -->  ifconfig-push 10.8.0.5 255.255.255.0
ccd/client5  -->  ifconfig-push 10.8.0.6 255.255.255.0
ccd/client6  -->  ifconfig-push 10.8.0.7 255.255.255.0
ccd/client7  -->  ifconfig-push 10.8.0.8 255.255.255.0
ccd/client8  -->  ifconfig-push 10.8.0.9 255.255.255.0
ccd/client8  -->  ifconfig-push 10.8.0.10 255.255.255.0

-------------------------------------------------------------------------------------------------------------------------
При входе клиентом через несколько маршрутизаторов (в локальной сети OK!)
В логе такие сообщения, вылечилось в конфигурации сервера:

ubuntu ovpn-server[1106]: TLS Error: cannot locate HMAC in incoming packet from [AF_INET]X.X.X.X:54389


-------------------------------------------------------------------------------------------------------------------------
Настройка ufw
# ufw reset
# ufw status
# ufw enable
# ufw default deny incoming
# ufw default deny outgoing
# ufw default deny forward
# ufw allow out on tun0
# ufw allow in on tun0
!!!# ufw allow 1194/udp
# ufw allow 1194/tcp
# ufw allow 443/tcp
# ufw allow from 192.168.1.0/24 proto tcp to any port 22
# ufw allow from x.x.x.x proto tcp to any port 21
# ufw allow from x.x.x.x proto tcp to any port 22
# ufw allow from y.y.y.y proto tcp to any port 21
# ufw allow from y.y.y.y proto tcp to any port 22
# ufw allow from z.z.z.z/21 proto tcp to any port 21
# ufw reload
# ufw status
Simple IPtables script for an OpenVPN server 

Автозапуск из под windows
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client2.ovpn

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

OpenVPN
How To Setup OpenVPN Server In 5 Minutes on Ubuntu Server
Установки и настройка OpenVPN в Ubuntu Linux за 5 минут
HOWTO
Iptables!!!!
Install bridged OpenVPN on Ubuntu 14.04 x64 Server and configure Windows 8.1 x64 client
How to Setup Your Own VPN Server
OpenVPN Ubuntu Server
IT рабочие заметки
Установка сервера
OpenVPN and LXC
OpenVPN (client) in Linux containers
OpenVPN (server) in Linux containers
OpenVPN server as an LXC container
VPN в контейнере
OpenVPN and port forwarding to containers lxc DO
Setting up a VPN gateway in Ubuntu using LXC containers and OpenVPN
Running OpenVPN in LXC
LXC Openvpn TUN/TAP issue

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

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