: | : |
‹ | › | |||||
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
2018-05-28 09:36:09 6859 0
Установка и настройка сервера Openvpn на CentOS
OpenVPN — свободная реализация технологии виртуальной частной сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами
настройку будем проводить на сервере с операционной системой CentOS6.
Подключаем репозиторий epel
sudo yum install epel
Устанавливаем необходимые пакеты:
sudo yum install openvpn easy-rsa
Генерируем сертификат и ключ удостоверяющего центра и сертификат и ключ для сервера и клиента
Переходим в каталог с easy-rsa
cd /usr/share/easy-rsa/3.0.3/
Выполняем инициализацию инфраструктуры PKI
sudo ./easyrsa init-pki
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /usr/share/easy-rsa/3.0.3/pki
Создаем корневой сертификат:
sudo ./easyrsa build-ca
Generating a 2048 bit RSA private key .......................+++ ........................................................................... ...............+++ writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private/ca.key.taxrJtnBx4" Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- 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. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: CA CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /usr/share/easy-rsa/3.0.3/pki/ca.crt
Будет запрошена парольная фраза и потом имя сервера.
Создаем ключи Диффи-Хелмана:
sudo ./easyrsa gen-dh
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ............................................................................ ....+....................................................................... ...........................+................................................ ............................................................................ .........................................................................+.. .+.......................................................................... .......................................+...................................+ ........+................................................................... ............................................................................ ...............................................................+............ ............+.....+....................................................++*++* DH parameters of size 2048 created at /usr/share/easy-rsa/3.0.3/pki/dh.pem
Создаем запрос для сертификата сервера (при этом указываем опцию nopass, без пароля на сертификат, или иначе этот пароль будет запрашиваться при каждом старте сервера)
sudo ./easyrsa gen-req test-server nopass
Generating a 2048 bit RSA private key .........................................................+++ ............................................................ ...................................................+++ writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private /tss-vpn.key.pFE2GhHg8h" ----- 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. ----- Common Name (eg: your user, host, or server name) [test-server]: Keypair and certificate request completed. Your files are: req: /usr/share/easy-rsa/3.0.3/pki/reqs/test-server.req key: /usr/share/easy-rsa/3.0.3/pki/private/test-server.key
Теперь из запроса создаем сам сертификат сервера:
sudo ./easyrsa sign-req server test-server
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 3650 days: subject= commonName = test-server Type the word "yes" to continue, or any other input to abort. Confirm request details: yes Using configuration from ./openssl-1.0.cnf Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject"s Distinguished Name is as follows commonName :PRINTABLE:"test-server" Certificate is to be certified until May 7 07:36:26 2028 GMT (3650 days) Write out database with 1 new entries Data Base Updated Certificate created at: /usr/share/easy-rsa/3.0.3/pki/issued/test-server.crt
При подписи сертификата ключом CA, будет запрошена парольная фраза, которую мы задавали при создании сертификата CA.
Копируем все полученные ключи и сертификаты в директорию с openvpn
mkdir /etc/openvpn/keys
cp /usr/share/easy-rsa/3.0.3/pki/ca.crt /etc/openvpn/keys/
cp /usr/share/easy-rsa/3.0.3/pki/dh.pem /etc/openvpn/keys/
cp /usr/share/easy-rsa/3.0.3/pki/private/test-server.key /etc/openvpn/keys/
cp /usr/share/easy-rsa/3.0.3/pki/issued/test-server.crt /etc/openvpn/keys/
Создадим HMAC ключ для защиты от DOS и от UDP флуда:
cd /etc/openvpn/keys
sudo openvpn --genkey --secret ta.key
Создаем файл конфиг сервера /etc/openvpn/server.conf
cat /etc/openvpn/server.conf
#Указываем порт на которм сервер будет принимать запросы port 1197 # Протоко tcp или udp proto udp # Указываем имя виртуального интерфейса (tun или tap) # tun - инкапсулирует пакеты IPv4 и IPv6 (3 уровнь OSI_, # tap - инкапсулирует пакеты Ethernet ( 2 уровнь OSI) dev tun # Указываем пользователя и группу с правами которых будет работать сервер user nobody group nobody # Указываем расположение файлов ключей и сертификатов dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/tss-vpn.crt key /etc/openvpn/keys/tss-vpn.key tls-auth /etc/openvpn/keys/ta.key 0 # 0 - на сервере, 1 - на клиенте # Указываем алгоритм шифрования cipher AES-256-CBC # Указание режима для работы с TLS tls-server # Использовать lzo сжатие comp-lzo # Не перечитывать ключи, при получении сигнала SIGUSR1 persist-key # Не закрывать и открывать заново интерфейс TUN/TAP при получении сигнала SIGUSR1 persist-tun # Максимильно возможно количество подключаемых клиентов max-clients 10 # Интервал и таймаут для сохранение соединения открытым keepalive 10 900 # Виртуальная сеть для VPN server 10.20.0.0 255.255.255.0 # Указываем файл в котором будет храниться соответствие ip-адреса и клиента, #можно добавить время в секундах, сколько будет храниться запись, #по-умолчанию 600 секунд ifconfig-pool-persist ipp.txt # Указываем файл для записи статуса соединений и формат записей status /var/log/openvpn/openvpn-status.log 1 status-version 3 # Указываем расположение файла логов и уровень записи log-append /var/log/openvpn/openvpn-server.log verb 3 # Указываем к каким сетям будет построен маршрут через VPN тунель push "192.168.10.0 255.255.255.0" # Если хотим что бы весь трафик шел через VPN, то добавляем такую запись #push "redirect-gateway def1"
Для обзора полного перечня возможностей, обращайтесь к официальной документации openvpn
Создаем директорию для логов
mkdir /var/log/openvpn
Запускаем сервер Openvpn
sudo service openvpn start
Настройка клиента Openvpn
Сначала создадим ключ и сертификат для клиента на нашем сервере Openvpn
cd /usr/share/easy-rsa/3.0.3
Создаем запрос на получения сертификата:
sudo ./easyrsa gen-req User nopass
Generating a 2048 bit RSA private key ...................................+++ .............................................................. .............................................................. .........+++ writing new private key to "/usr/share/easy-rsa/3.0.3/pki/private /User.key.0LiAZkb7Ff" ----- 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. ----- Common Name (eg: your user, host, or server name) [User]: Keypair and certificate request completed. Your files are: req: /usr/share/easy-rsa/3.0.3/pki/reqs/User.req key: /usr/share/easy-rsa/3.0.3/pki/private/User.key
Создаем сертификат пользователя (ограничим срок действия одним годом):
sudo ./easyrsa sign-req client User -days 365
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a client certificate for 365 days: subject= commonName = User Type the word "yes" to continue, or any other input to abort. Confirm request details: yes Using configuration from ./openssl-1.0.cnf Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject"s Distinguished Name is as follows commonName :PRINTABLE:"User" Certificate is to be certified until May 7 08:15:47 2019 GMT (365 days) Write out database with 1 new entries Data Base Updated Certificate created at: /usr/share/easy-rsa/3.0.3/pki/issued/User.crt
Теперь необходимо перекинуть клиенту необходимые ключи и сертификаты (сертификат CA, ключ и сертификат клиента, ключ ta.key)
Создаем файл с настройками клиента client.conf
cat /etc/openvpn/client.conf
# Указываем режим работы client client # Имя интерфейса dev tun # Протокол работы proto udp # ip-адрес сервера Openvpn и порт remote "x.x.x.x" 1197 # Алгоритм шифрования (как на сервере) cipher AES-256-CBC # Режим работы с TSL tls-client # Расположение ключей и сертификатов ca /etc/openvpn/keys/ca.crt key /etc/openvpn/keys/User.key cert /etc/openvpn/keys/User.crt tls-auth /etc/openvpn/keys/ta.key 1 # 1- для клиента # Включение сжатия lzo comp-lzo # Не связывать локальный адрес и порт. Будет выделен динамический # порт для получениявозвращаемых пакетов. nobind
Настройка файервола
для того что бы VPN работал необходимо открыть порт Openvpn (тот что мы указали в настройках сервера) и разрешить маршрутизацию пакетов между физическими интерфейсами и интерфейсами VPN
Пример настройки на iptables
sudo iptables -A INPUT -p tcp --dport 1197 -j ACCEPT
sudo iptables -A FORWARD -i tun+ -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun+ -j ACCEPT
Настройка клиента на операционной системе Windows выполняется по аналогии с Linux, тот же свмый конфигурационный файл. После установки клиента на Windows скопировать конфигурационный файл и ключи с сертификатами в каталог C:\Program Files\OpenVPN\config. Конфигурациооный файл назвать client.ovpn. Запускать приложение Openvpn только с правами администратора.
В концовке рассмотрим процесс отзыва сертификатов, на случай если вы захотите кому то запретить доступ к вашему VPN серверу
Переходим в директорию с easy-rsa
cd /usr/share/easy-rsa/3.0.3/
Генерируем файл отозванных сертификатов
sudo ./easyrsa gen-crl
Using configuration from ./openssl-1.0.cnf Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key: An updated CRL has been created. CRL file: /usr/share/easy-rsa/3.0.3/pki/crl.pem
В конфигурационный файл openvpn добавляем строку
crl-verify /usr/share/easy-rsa/3.0.3/pki/crl.pem
Выполним отзыв сертификата для пользователя
sudo ./easyrsa revoke TEST
Please confirm you wish to revoke the certificate with the following subject: subject= commonName = TEST Type the word "yes" to continue, or any other input to abort. Continue with revocation: yes Using configuration from ./openssl-1.0.cnf Enter pass phrase for /usr/share/easy-rsa/3.0.3/pki/private/ca.key: Revoking Certificate EF4B7054B0B274BA0DCBC2C4CA7CE6B5. Data Base Updated IMPORTANT!!! Revocation was successful. You must run gen-crl and upload a CRL to your infrastructure in order to prevent the revoked cert from being accepted.
После каждого отзыва, необходимо обновлять файл отозванных сертификатов
sudo ./easyrsa gen-crl
Список отозванных и действующих сертификатов можно найти в /usr/share/easy-rsa/3.0.3/pki/index.txt
cat /usr/share/easy-rsa/3.0.3/pki/index.txt
V 280507073626Z 2788BD2B2FAECBC5812768D9EF70E7CF unknown/CN=test-server V 280507081547Z C9C30E24CA97E1A68DE077970CA7CAA6 unknown/CN=User R 280507091636Z 180510091706Z EF4B7054B0B274BA0DCBC2C4CA7CE6B5 unknown /CN=TEST
В первом столбце указан статус сертификата V - действующий, R - отозванный
Введите ответ:
+
=