|
www.lissyara.su
—> статьи
—> FreeBSD
—> Security
—> Установка и настройка OpenVPN
Установка и настройка OpenVPN с ключом pkcs12
Автор: Cancer.
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах, а, в свою очередь, админы имели удаленный доступ к ПК филиалов по VNC, RDP итд итп.
В офисе 2 канала в интернет:
IP=86.86.ххx.x (основной канал) и IP=90.90.xx.x (резервный канал).
В офисе работает скрипт переключение каналов, если вдруг упадет основной канал скрипт переключится на резервный канал. Филиалы должны переподключиться на резервный канал при падении основного интернет-канала в офисе, а при восстановлении основного интернет-канала в офисе, переподключиться обратно на основной.
Почему OpenVPN?
1. OpenVPN - кроссплатформенное программное обеспечение, а для меня это очень важно, так как на гейтах филиалах находятся разные операционные системы.
OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X, QNX и Microsoft Windows.
2. Нужно видеть всю сеть за гейтом филиала и обратно, а именно объединить все подсети.
3. Компрессия с помощью библиотеки компрессии LZO, для сжатия потока данных.
4. Шифрование канала, для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL.
Исходные данные:
+---------------+----------------+--------------------+
|Подразделение | Подсеть | ОС гейта/клиента |
+---------------+----------------+--------------------+
|Офис | 192.168.0.0/24 | FreeBSD |
|Филиал №1 | 192.168.1.0/24 | FreeBSD |
|Филиал №2 | 192.168.2.0/24 | Windows XP |
|Филиал №3 | 192.168.3.0/24 | CentOS |
|Sysadmin | | Windows XP |
+---------------+----------------+--------------------+
|
Схема сети:
//> cd /usr/ports/security/openvpn
/usr/ports/security/openvpn/> make config
|
+--------------------------------------------------------------------+
| Options for openvpn 2.1.4 |
| +----------------------------------------------------------------+ |
| | [ ] PW_SAVE Interactive passwords may be read from a file | |
| | [ ] PKCS11 Use security/pkcs11-helper | |
| | | |
| | | |
| | | |
| | | |
| | | |
+-+------v(+)------------------------------------------------------+-+
| [ OK ] Cancel |
+--------------------------------------------------------------------+
|
/usr/ports/security/openvpn/> make install clean
| Далее переходим в каталог ../easy-rsa/2.0/
//> cd /usr/local/share/doc/openvpn/easy-rsa/2.0/
|
/usr/local/share/doc/openvpn/easy-rsa/2.0/> ee vars
| В нем меняем 1 строку
# Меняем export KEY_DIR="$EASY_RSA/keys" на
export KEY_DIR="$EASY_RSA/keys/server"
# меняем export KEY_SIZE=1024 на 2048
# (тем самым увеличим размер ключей с 1024 бит до 2048 бит)
export KEY_SIZE=2048
|
Даем на скрипты права на исполняемость r-xr--r--
/usr/local/share/doc/openvpn/easy-rsa/2.0/> chmod 544 *
|
Создаем директорию куда у нас будут создаваться/храниться ключи и сертификаты.
/usr/local/share/doc/openvpn/easy-rsa/2.0/> mkdir -p keys/server
|
Далее запускаем shell
/usr/local/share/doc/openvpn/easy-rsa/2.0/> sh
|
#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server
#./clean-all
|
Создаем ключи для нашего сервера OpenVPN
Создаем 2 ключа (ca.key и dh2048.pem) и по 1 ключу/сертификату (server.key и server.crt) только для сервера OpenVPN и дополнительный ключ (ta.key) для сервера и клиента.
Создаем их один раз и навсегда.
1. Создаем 1-ый ключ Certificate 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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:server
Name []:server
Email Address [me@myhost.mydomain]:root@localhost
#
|
2. Создаем сертификат X.509
# ./build-key-server server
Generating a 2048 bit RSA private key
.........++++++
..........................++++++
writing new private key to 'server.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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [server]:server
Name []:server
Email Address [me@myhost.mydomain]:root@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:server
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Rostov-on-Don'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'server'
name :PRINTABLE:'server'
emailAddress :IA5STRING:'root@localhost'
Certificate is to be certified until Sep 6 19:11:59 2020 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
#
|
3. Генерируем 2048 битный ключ с помощью алгоритма Диффи Хеллмана
# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...............................+.......+..............................++*++*++*
..............+.....*................++*..............................++.......
#
|
Выходим из shell
4. Создаем TLS-ключ (который нужен как и серверу, так и клиенту)
/../../../../openvpn/easy-rsa/2.0/> openvpn --genkey --secret keys/server/ta.key
|
Создаем директории для нашего OpenVPN сервера где будут храниться конфиг, ключи, сертификаты и настройки клиентов
//> mkdir /usr/local/etc/openvpn
//> mkdir /usr/local/etc/openvpn/keys
//> mkdir /usr/local/etc/openvpn/ccd
|
Переходим в директорию с ключами OpenVPN
//> cd /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/
|
Копируем ключи из /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/
в директорию /usr/local/etc/openvpn/keys
/../../easy-rsa/2.0/keys/server/> cp ca.crt /usr/local/etc/openvpn/keys/
/../../easy-rsa/2.0/keys/server/> cp server.crt /usr/local/etc/openvpn/keys/
/../../easy-rsa/2.0/keys/server/> cp server.key /usr/local/etc/openvpn/keys/
/../../easy-rsa/2.0/keys/server/> cp dh2048.pem /usr/local/etc/openvpn/keys/
/../../easy-rsa/2.0/keys/server/> cp ta.key /usr/local/etc/openvpn/keys/
|
получим следующий список файлов которые нужны для работы сервера
//> ls /usr/local/etc/openvpn/keys
ca.crt dh2048.pem server.crt server.key ta.key
|
Создаем конфигурационный файл нашего OpenVPN сервера.
//> ee /usr/local/etc/openvpn/server.conf
|
# указываем на каком локальном интерфейсе OpenVPN будет слушать
# по умолчанию OpenVPN слушает все интерфейсы
#local xxx.xxx.xx.x
# порт на котором работает сервер
port 1194
# протокол - TCP или UDP
proto udp
# используемый тип устройства и номер
dev tun0
# указываем по каким интерфейсам можно подключаться к OpenVPN по telnet
# указывать нужно IP адреса интерфейсов сервера
management localhost 8329
#management 192.168.0.xx 8329
#management 86.86.xxx.xx 8329
# указываем файл CA
ca /usr/local/etc/openvpn/keys/ca.crt
# указываем файл с сертификатом сервера
cert /usr/local/etc/openvpn/keys/server.crt
# указываем файл с ключем сервера
key /usr/local/etc/openvpn/keys/server.key
# указываем файл с генерированный алгоритмом Диффи Хеллмана
dh /usr/local/etc/openvpn/keys/dh2048.pem
# указываем где находится файл отозванных сертификатов
#crl-verify /usr/local/etc/openvpn/crl.pem
# задаем IP-адрес сервера и маску подсети (виртуальной сети)
server 10.10.100.0 255.255.255.0
# указываем внутренний DNS и WINS серверы
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 192.168.0.10"
push "dhcp-option WINS 192.168.0.1"
# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть за OpenVPN сервером
# Офис
push "route 192.168.0.0 255.255.255.0"
# Филиал №1
push "route 192.168.1.0 255.255.255.0"
# Филиал №2
push "route 192.168.2.0 255.255.255.0"
# Филиал №3
push "route 192.168.3.0 255.255.255.0"
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd
# добавляем маршрут сервер-клиент
route 10.10.100.0 255.255.255.252
# Филиал №1
route 192.168.1.0 255.255.255.0
# Филиал №2
route 192.168.2.0 255.255.255.0
# Филиал №3
route 192.168.3.0 255.255.255.0
# делает сервер OpenVPN основным шлюзом у клиентов
#push "redirect-gateway"
# разрешает видеть клиентам друг друга (по виртуальным IP)
# по умолчанию клиенты видят только сервер
client-to-client
# разрешать подключаться с одинаковым сертификатом/ключом
#duplicate-cn
# включаем TLS аутентификацию
tls-server
# для дополнительной безопасности при
# использовании SSL/TLS, создайте "HMAC firewall"
# для защиты от DoS аттак и флуда UDP порта.
#
# сгенерируйте с помощью:
# openvpn --genkey --secret ta.key
#
# сервер и каждый клиент должны иметь копию этого ключа.
# второй параметр выставляется в '0' для сервера и '1' для клиентов.
tls-auth keys/ta.key 0
# TLS таймаут, полезен если выход в интернет осуществляется
# через GPRS мобильных операторов
tls-timeout 120
# выбираем алгоритм хеширования по умолчанию используется SHA1
# вывод полного списка командой openvpn --show-digests
auth SHA1
# выберите криптографический сертификат.
# этот пункт конфига должен копироваться
# в конфиг клиента, так же как он установлен здесь.
# по умолчанию используется/рекомендуется BF-CBC
# вывод полного списка командой openvpn --show-ciphers
#cipher BF-CBC # Blowfish (default)
#cipher AES-128-CBC # AES
#cipher DES-EDE3-CBC # Triple-DES
cipher BF-CBC
# проверяет активность подключения каждые 10 секунд,
# если в течении 120 сек. нет ответа, подключение закрывается
keepalive 10 120
# сжатия трафика VPN туннеля с помощью библиотеки LZO
# если вы включили сжатие на сервере,
# вы так же должны включить и в конфиге у клиента
comp-lzo
# максимальное количество одновременно подключенных клиентов
max-clients 100
# от какого пользователя и группы будет работать OpenVPN
user nobody
group nobody
# имеет смысл использовать при использовании протокола udp
#mssfix 1450
# эти опции позволяют избежать необходимости
# получения доступа к определенным ресурсам
# после рестарта, т.к. это может быть невозможным
# из-за понижения привилегий.
persist-key
persist-tun
# путь к файлу записи статуса OpenVPN в лог
status /var/log/openvpn/openvpn-status.log
# путь к файлу записи событий происходящих на сервере
# "log" - запись событий в лог будет перезаписываться при перезагрузке демона
# "log-append" - запись событий будет добавляться в лог
log /var/log/openvpn/openvpn.log
# установите необходимый уровень логирования.
# 0 - ничего, за исключением фатальных ошибок
# 4 - подойдет для получения общих сведений
# 5 и 6 пригодяться для отладки проблем соединения
# 9 - максимально возможная информация
verb 3
# макс кол-во однотипных записей в лог
#mute 20
|
Создаем директорию /var/log/openvpn/ и 2 файла где будут храниться логи
//> mkdir /var/log/openvpn/
//> touch /var/log/openvpn/openvpn-status.log
//> touch /var/log/openvpn/openvpn.log
|
Добавляем OpenVPN в автозагрузку системы
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"
|
И запускаем OpenVPN сервер
//> /usr/local/etc/rc.d/openvpn start
Starting openvpn.
//>
|
Проверим в процесcах
//> ps axw | grep openvpn
|
2983 ?? Ss 0:00.00 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/server.conf
|
Создаем ключи PKCS12 для Филиалов №1,2,3
Переходим в директорию и создаем ключи для филиалов №1,2,3:
filial1.p12, filial2.p12, filial3.p12
pkcs12 имя файла в формате PKCS#12, содержащего сертификат CA, ключ и сертификат клиента. Такой файл и команда заменяют сразу 3 соответствующих файла и команды - .ca, .cert, .key
//> cd /usr/local/share/doc/openvpn/easy-rsa/2.0/
/usr/local/share/doc/openvpn/easy-rsa/2.0/> sh
|
Эту команду нужно запускать при каждом создании новых ключей.
#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server
#
|
Создаем ключ для Филиала №1
# ./build-key-pkcs12 filial1
Generating a 2048 bit RSA private key
................................++++++
...........................................++++++
writing new private key to 'filial1.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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [filial1]:
Name []:filial1
Email Address [me@myhost.mydomain]:filial1@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:filial1
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Rostov-on-Don'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'filial1'
name :PRINTABLE:'filial1'
emailAddress :IA5STRING:'filial1@localhost'
Certificate is to be certified until Sep 6 19:20:11 2020 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password:
Verifying - Enter Export Password:
#
|
Создаем ключ для Филиала №2
# ./build-key-pkcs12 filial2
Generating a 2048 bit RSA private key
................................++++++
...........................................++++++
writing new private key to 'filial2.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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [filial2]:
Name []:filial2
Email Address [me@myhost.mydomain]:filial2@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:filial2
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Rostov-on-Don'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'filial2'
name :PRINTABLE:'filial2'
emailAddress :IA5STRING:'filial2@localhost'
Certificate is to be certified until Sep 6 19:21:14 2020 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password:
Verifying - Enter Export Password:
#
|
Создаем ключ для Филиала №3
# ./build-key-pkcs12 filial3
Generating a 2048 bit RSA private key
................................++++++
...........................................++++++
writing new private key to 'filial3.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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [filial3]:
Name []:filial3
Email Address [me@myhost.mydomain]:filial3@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:filial3
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Rostov-on-Don'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'filial3'
name :PRINTABLE:'filial3'
emailAddress :IA5STRING:'filial3@localhost'
Certificate is to be certified until Sep 6 19:23:16 2020 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password:
Verifying - Enter Export Password:
#
|
Создаем ключ для Системного администратора
# ./build-key-pkcs12 sysadmin
Generating a 2048 bit RSA private key
................................++++++
...........................................++++++
writing new private key to 'sysadmin.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) [US]:RU
State or Province Name (full name) [CA]:Rostov-on-Don
Locality Name (eg, city) [SanFrancisco]:Rostov-on-Don
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [sysadmin]:
Name []:sysadmin
Email Address [me@myhost.mydomain]:sysadmin@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:sysadmin
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Rostov-on-Don'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'sysadmin'
name :PRINTABLE:'sysadmin'
emailAddress :IA5STRING:'sysadmin@localhost'
Certificate is to be certified until Sep 6 19:27:27 2020 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password:
Verifying - Enter Export Password:
#
|
Вот мы и создали 3 ключа для филиалов и 1 для системного администратора
//> ls /usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server | grep .p12
filial1.p12
filial2.p12
filial3.p12
sysadmin.p12
//>
|
В директории /usr/local/etc/openvpn/ccd создаем файла с настройками для Филиалов и системного администратора
Филиал №1
//> ee /usr/local/etc/openvpn/ccd/filial1
| С содержанием:
ifconfig-push виртуальный IP клиента,
iroute какая подсеть за клиентом
ifconfig-push 10.10.100.2 10.10.100.1
iroute 192.168.1.0 255.255.255.0
| Филиал №2
//> ee /usr/local/etc/openvpn/ccd/filial2
| С содержанием:
ifconfig-push виртуальный IP клиента,
iroute какая подсеть за клиентом
ifconfig-push 10.10.100.6 10.10.100.5
iroute 192.168.2.0 255.255.255.0
| Филиал №3
//> ee /usr/local/etc/openvpn/ccd/filial3
| С содержанием:
ifconfig-push виртуальный IP клиента,
iroute какая подсеть за клиентом
ifconfig-push 10.10.100.10 10.10.100.9
iroute 192.168.3.0 255.255.255.0
|
Системный администратор
//> ee /usr/local/etc/openvpn/ccd/sysadmin
| С содержанием:
ifconfig-push виртуальный IP клиента
ifconfig-push 10.10.100.14 10.10.100.13
|
Перезапустим OpenVPN Сервер
//> /usr/local/etc/rc.d/openvpn restart
Stopping openvpn.
Starting openvpn.
//>
|
Проверим работу OpenVPN
//> sockstat | grep 1194
nobody openvpn 29578 5 udp4 *:1194 *:*
//>
|
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.10.100.1 --> 10.10.100.2 netmask 0xffffffff
Opened by PID 29517
| Все нормально работает
Не забываем открыть порт 1194 если вы используете firewall
Для pf правило выглядит так
pass in quick on $ext_if inet proto {udp} from any to self port 1194
|
Установка и настройка OpenVPN Филиала №1 (FreeBSD)
Будем настраивать гейт у филиала №1 на FreeBSD
//> cd /usr/ports/security/openvpn/
/usr/ports/security/openvpn/> make config
|
+--------------------------------------------------------------------+
| Options for openvpn 2.1.4 |
| +----------------------------------------------------------------+ |
| | [ ] PW_SAVE Interactive passwords may be read from a file | |
| | [ ] PKCS11 Use security/pkcs11-helper | |
| | | |
| | | |
| | | |
| | | |
| | | |
+-+------v(+)------------------------------------------------------+-+
| [ OK ] Cancel |
+--------------------------------------------------------------------+
|
/usr/ports/security/openvpn/> make install clean
|
//> mkdir /usr/local/etc/openvpn
//> mkdir /usr/local/etc/openvpn/keys
| Создаем конфиг клиента
//> ee /usr/local/etc/openvpn/filial1.conf
|
dev tun
proto udp
# IP сервера (основной канал)
remote 86.86.ххx.x
# IP сервера (резервный канал)
remote 90.90.xx.x
port 1194
client
resolv-retry infinite
pkcs12 keys/filial1.p12
tls-client
tls-auth keys/ta.key 1
auth SHA1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
verb 3
|
Создаем директорию /var/log/openvpn/ и 2 файла где будут храниться логи
//> mkdir /var/log/openvpn/
//> touch /var/log/openvpn/openvpn-status.log
//> touch /var/log/openvpn/openvpn.log
|
Теперь нам нужны ключи с самого сервера
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/filial1.p12
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/ta.key
| копируем их на гейт Филиала №1 /usr/local/etc/openvpn/keys
Добавляем OpenVPN в автозагрузку системы
openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/filial1.conf"
openvpn_dir="/usr/local/etc/openvpn"
|
И запускаем OpenVPN на филиале
//> /usr/local/etc/rc.d/openvpn start
Starting openvpn.
//>
|
Проверим в процессах
//> ps axw | grep openvpn
|
2983 ?? Ss 0:00.00 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/filial1.conf
|
Попробуем теперь пингануть DNS сервер Офиса
//> ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1): 56 data bytes
64 bytes from 192.168.0.1: icmp_seq=1 ttl=127 time=30.6 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=127 time=65.5 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=127 time=31.5 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=127 time=31.7 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 30.651/39.875/65.579/14.845 ms
|
Ну и посмотрим трассировку.
//> traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 64 hops max, 40 byte packets
1 10.10.100.1 (10.10.100.1) 28.550 ms 81.022 ms 80.970 ms
2 192.168.0.1 (192.168.0.1) 80.915 ms 80.877 ms 80.831 ms
|
на этом настройка Филиала №1 закончена.
Установка и настройка OpenVPN Филиала №2 (Windows XP)
Будем настраивать гейт у филиала №2 на Windows XP. (Не забываемым расшарить сетевую карту на которую приходит интернет).
Качаем дистрибутив для Windows и устанавливаем его. Скачать
Копируем с сервера ключи в директорию C:\Program Files\OpenVPN\config
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/filial2.p12
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/ta.key
|
Далее создаем конфиг C:\Program Files\OpenVPN\config\filial2.ovpn
dev tun
proto udp
# IP сервера (основной канал)
remote 86.86.ххx.x
# IP сервера (резервный канал)
remote 90.90.xx.x
port 1194
client
resolv-retry infinite
pkcs12 filial2.p12
tls-client
tls-auth ta.key 1
auth SHA1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
|
Теперь нужно что бы служба OpenVPN стартовала с включением ПК
Топаем по пути
Пуск -> Панель управления -> Администрирование -> Службы
|
Попробуем теперь пингануть DNS сервер Офиса
C:\Users\Cancer>ping 192.168.0.1
Обмен пакетами с 192.168.0.1 по с 32 байтами данных:
Ответ от 192.168.0.1: число байт=32 время=28мс TTL=127
Ответ от 192.168.0.1: число байт=32 время=29мс TTL=127
Ответ от 192.168.0.1: число байт=32 время=28мс TTL=127
Ответ от 192.168.0.1: число байт=32 время=28мс TTL=127
Статистика Ping для 192.168.0.1:
Пакетов: отправлено = 4, получено = 4, потеряно = 0 (0% потерь),
Приблизительное время приема-передачи в мс:
Минимальное = 28мсек, Максимальное = 29 мсек, Среднее = 28 мсек
C:\Users\Cancer>
|
Ну и посмотрим трассировку
C:\Users\Cancer>tracert 192.168.0.1
Трассировка маршрута к pdc.domain.local [192.168.0.1]
с максимальным числом прыжков 30:
1 32 ms 30 ms 27 ms GATE [10.10.100.1]
2 33 ms 31 ms 30 ms pdc.domain.local [192.168.0.1]
Трассировка завершена.
C:\Users\Cancer>
|
на этом настройка Филиала №2 закончена.
Установка и настройка OpenVPN Филиала №3 (CentOS)
Будем настраивать гейт у филиала №3 на CentOS.
Подключаем epel репозиторий, инфа есть тут
Устанавливаем OpenVPN сервер.
[root@filial3 /]# yum -y install openvpn
|
Копируем с сервера ключи в директорию /etc/openvpn
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/filial3.p12
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/ta.key
|
Создаем конфигурационный файл
[root@filial3 /]# vi /etc/openvpn/filial3.conf
|
dev tun
proto udp
# IP сервера (основной канал)
remote 86.86.ххx.x
# IP сервера (резервный канал)
remote 90.90.xx.x
port 1194
client
resolv-retry infinite
pkcs12 filial3.p12
tls-client
tls-auth ta.key 1
auth SHA1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
log-append /var/log/openvpn.log
verb 3
|
Теперь добавляем с помощью chkconfig OpenVPN в автозагрузку.
[root@filial3 /]# chkconfig openvpn on
|
Ну и теперь запускаем службу OpenVPN
[root@filial3 /]# service openvpn start
Запускается openvpn: [ OK ]
[root@filial3 /]#
|
Проверяем процесс
[root@filial3 /]# ps axw | grep openvpn
|
5953 ? Ss 0:00 /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/filial3.pid --config filial3.conf --cd /etc/openvpn --script-security 2
5956 pts/0 S+ 0:00 grep openvpn
|
Попробуем теперь пингануть DNS сервер Офиса
[root@filial3 /]# ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=127 time=30.6 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=127 time=65.5 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=127 time=31.5 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=127 time=31.7 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 30.651/39.875/65.579/14.845 ms
|
Ну и посмотрим трассировку
[root@filial3 /]# traceroute 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 40 byte packets
1 10.10.100.1 (10.10.100.1) 28.550 ms 81.022 ms 80.970 ms
2 192.168.0.1 (192.168.0.1) 80.915 ms 80.877 ms 80.831 ms
|
Видим все нормально, пинги ходят.
на этом настройка Филиала №3 закончена.
Установка и настройка OpenVPN для системного администратора (Windows XP)
Будем настраивать на Windows XP.
Качаем дистрибутив для Windows и устанавливаем его. Скачать
Копируем с сервера ключи в директорию C:\Program Files\OpenVPN\config
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/sysadmin.p12
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server/ta.key
|
Далее создаем конфиг C:\Program Files\OpenVPN\config\sysadmin.ovpn
dev tun
proto udp
remote 86.86.ххx.x
port 1194
client
resolv-retry infinite
pkcs12 sysadmin.p12
tls-client
tls-auth ta.key 1
auth SHA1
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
|
Запускаем OpenVPN GUI.exe
В появившейся иконке в трее, нажимаем Connect.
Далее видим, все нормально, подключились.
Пробуем пинговать офис и филиалы.
Отзыв сертификата клиента из базы данных
Тут напишу немного о том как отзывать сертификаты клиентов из базы данных, для того чтобы клиент не мог использовать сертификат для подключения к OpenVPN серверу.
Думаю эта информация будет полезной.
Переходим в директорию со скриптами
//> cd /usr/local/share/doc/openvpn/easy-rsa/2.0/
|
Запускаем shell
/usr/local/share/doc/openvpn/easy-rsa/2.0/> sh
|
#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server
|
Запускаем скрипт отзыва сертификата клиента из базы данных revoke-full, где user1 имя сертификата клиента.
#./revoke-full user1
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Revoking Certificate 09.
Data Base Updated
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
user1.crt: /C=RU/ST=Rostov-on-Don/L=Rostov-on-Don/O=server/OU=server/CN=user1
/name=user1/emailAddress=user1@localhost
error 23 at 0 depth lookup:certificate revoked
# exit
|
После каждого отозванного сертификата, файл с отозванными сертификатами crl.pem копируем в /usr/local/etc/openvpn
//> cp /../../../../../easy-rsa/2.0/keys/server/crl.pem /usr/local/etc/openvpn
|
Обязательно нужно что бы права на файл были 644 (сделаем на всякий случай)
//> chmod 644 /usr/local/etc/openvpn/crl.pem
|
Указываем в конфиге server.conf файл с отозванными сертификатами.
//> ee /usr/local/etc/openvpn/server.conf
|
# указываем где находится файл отозванных сертификатов
crl-verify /usr/local/etc/openvpn/crl.pem
|
И перезагружаем сервер OpenVPN
//> /usr/local/etc/rc.d/openvpn restart
|
Подключение к OpenVPN по telnet
Тут опишу как можно подключатся удаленно к серверу и смотреть кто подключен в данный момент к нашему серверу
Подключаемся с PC администратора по telnet
>INFO:OpenVPN Management Interface Version 1 — type 'help' for more info
status
OpenVPN CLIENT LIST
Updated,Tue Sep 14 10:13:04 2010
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
filial1,87.xxx.xxx.xx:57603,568651354,1418748913,Fri Sep 10 16:28:18 2010
filial2,83.xxx.xxx.xx:3705,20702,30886,Tue Sep 14 10:07:51 2010
filial3,62.xxx.xxx.xx:1041,685422,462374,Tue Sep 14 09:36:58 2010
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
192.168.1.1C,filial1,87.xxx.xxx.xx:57603,Tue Sep 14 10:13:04 2010
192.168.2.1C,filial2,83.xxx.xxx.xx:3705,Tue Sep 14 10:13:04 2010
192.168.3.1C,filial3,62.xxx.xxx.xx:1041,Tue Sep 14 10:13:00 2010
GLOBAL STATS
Max bcast/mcast queue length,0
END
| Более подробный список команд тут
Есть отличная утилита OpenVPN-Control для подключения к OpenVPN. Скачать ее можно тут
Вот скрины программы
Настройка второго OpenVPN на одном сервере
Дописываю для тех кому вдруг нужно будет запустить на одном и том же сервере второй OpenVPN работающий на другом порту, например 65000 и протокол tcp.
Внимание!!!
Доступ на втором OpenVPN будет только к офису, дублировать роутнги на филиалы нельзя.
Переходим в директорию с демонами, копируем демон под другим названием openvpn2
//> cd /usr/local/etc/rc.d
|
/usr/local/etc/rc.d/> cp openvpn openvpn2
|
/usr/local/etc/rc.d/> ls | grep openvpn
openvpn
openvpn2
|
Далее создаем конфиг 2-го сервер OpenVPN
//> ee /usr/local/etc/openvpn/server2.conf
|
# указываем на каком локальном интерфейсе OpenVPN будет слушать
# по умолчанию OpenVPN слушает все интерфейсы
#local xxx.xxx.xx.x
# порт на котором работает сервер
port 65000
# протокол - TCP или UDP
proto tcp
# используемый тип устройства и номер
dev tun1
# указываем по каким интерфейсам можно подключаться к OpenVPN по telnet
# указывать нужно IP адреса интерфейсов сервера
# прошу заметить порт другой так как 8329 уже используется первым сервером
management localhost 8330
#management 192.168.0.xx 8330
#management 86.86.xxx.xx 8330
# указываем файл CA
ca /usr/local/etc/openvpn/keys/ca.crt
# указываем файл с сертификатом сервера
cert /usr/local/etc/openvpn/keys/server.crt
# указываем файл с ключем сервера
key /usr/local/etc/openvpn/keys/server.key
# указываем файл с генерированный алгоритмом Диффи Хеллмана
dh /usr/local/etc/openvpn/keys/dh2048.pem
# указываем где находится файл отозванных сертификатов
#crl-verify /usr/local/etc/openvpn/crl.pem
# задаем IP-адрес сервера и маску подсети (2-ой виртуальной сети)
# будьте внимательны виртуальная подсеть другая.
server 10.10.101.0 255.255.255.0
# указываем внутренний DNS и WINS сервер
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option DNS 192.168.0.10"
push "dhcp-option WINS 192.168.0.1"
# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть "Офиса" за OpenVPN сервером
# внимание доступа к филиалам не будет
# так как роутинги заняты будут 1-ым OpenVPN
push "route 192.168.0.0 255.255.255.0"
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd2
# добавляем маршрут сервер-клиент
route 10.10.101.0 255.255.255.252
# делает сервер OpenVPN основным шлюзом у клиентов
#push "redirect-gateway"
# разрешает видеть клиентам друг друга (по виртуальным IP)
# по умолчанию клиенты видят только сервер
client-to-client
# разрешать подключаться с одинаковым сертификатом/ключом
#duplicate-cn
# включаем TLS аутентификацию
tls-server
# для дополнительной безопасности при
# использовании SSL/TLS, создайте "HMAC firewall"
# для защиты от DoS аттак и флуда UDP порта.
#
# сгенерируйте с помощью:
# openvpn --genkey --secret ta.key
#
# сервер и каждый клиент должны иметь копию этого ключа.
# второй параметр выставляется в '0' для сервера и '1' для клиентов.
tls-auth keys/ta.key 0
# TLS таймаут, полезен если выход в интернет осуществляется
# через GPRS мобильных операторов
tls-timeout 120
# выбираем алгоритм хеширования по умолчанию используется SHA1
# вывод полного списка openvpn --show-digests
auth SHA1
# выберите криптографический сертификат.
# этот пункт конфига должен копироваться
# в конфиг клиента, так же как он установлен здесь.
# по умолчанию используется/рекомендуется BF-CBC
# вывод полного списка openvpn --show-ciphers
#cipher BF-CBC # Blowfish (default)
#cipher AES-128-CBC # AES
#cipher DES-EDE3-CBC # Triple-DES
cipher BF-CBC
# проверяет активность подключения каждые 10 секунд,
# если в течении 120 сек. нет ответа, подключение закрывается
keepalive 10 120
# сжатия трафика VPN туннеля с помощью библиотеки LZO
# если вы включили сжатие на сервере,
# вы так же должны включить и в конфиге у клиента
comp-lzo
# максимальное количество одновременно подключенных клиентов
max-clients 100
# от какого пользователя и группы будет работать OpenVPN
user nobody
group nobody
# эти опции позволяют избежать необходимости
# получения доступа к определенным ресурсам
# после рестарта, т.к. это может быть невозможным
# из-за понижения привилегий.
persist-key
persist-tun
# путь к файлу записи статуса OpenVPN в лог
status /var/log/openvpn/openvpn2-status.log
# путь к файлу записи событий происходящих на сервере
# "log" - запись событий в лог будет перезаписываться при перезагрузке демона
# "log-append" - запись событий будет добавляться в лог
log /var/log/openvpn/openvpn2.log
# установите необходимый уровень логирования.
# 0 - ничего, за исключением фатальных ошибок
# 4 - подойдет для получения общих сведений
# 5 и 6 пригодяться для отладки проблем соединения
# 9 - максимально возможная информация
verb 3
# макс кол-во однотипных записей в лог
#mute 20
|
Создаем диру где можно клиентам задавать статический IP
//> mkdir /usr/local/etc/openvpn/ccd2
| Создаем логи для второго сервера
//> touch /var/log/openvpn/openvpn2-status.log
//> touch /var/log/openvpn/openvpn2.log
|
Ну и создадим файл для выдачи статического IP сисадмину
//> ee /usr/local/etc/openvpn/ccd2/sysadmin
|
ifconfig-push 10.10.101.10 10.10.101.9
|
Добавляем второй OpenVPN в rc.conf
openvpn2_enable="YES"
openvpn2_if="tun"
openvpn2_configfile="/usr/local/etc/openvpn/server2.conf"
openvpn2_dir="/usr/local/etc/openvpn"
|
Запускаем его
//> /usr/local/etc/rc.d/openvpn2 start
|
Проверяем работу второго OpenVPN
//> sockstat | grep 65000
nobody openvpn 89594 5 tcp4 *:65000 *:*
//>
|
должны увидеть следующее
tun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.10.101.1 --> 10.10.101.2 netmask 0xffffffff
Opened by PID 89587
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500
inet 10.10.100.1 --> 10.10.100.2 netmask 0xffffffff
Opened by PID 29517
|
Список интерфейсных пар:
[ 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]
|
Документация:
http://forum.ixbt.com/topic.cgi?id=14:40906
http://openvpn.net/index.php/open-source/documentation.html
http://openvpn.net/index.php/open-source/documentation/manuals.html
http://openvpn.net/management.html
http://www.lissyara.su/doc/man/safety/openvpn/
размещено: 2010-08-31,
последнее обновление: 2011-06-08,
автор: Cancer
|
|
Комментарии пользователей [51 шт.]