openvpn (режим логин-пароль)

Оглавление

1. Введение

1. Определение

2. Принцип

3. Шифрование и аутентификация

2. Соберите openvpn на centos 7.5.

1. Установите openvpn и easy-rsa (этот пакет используется для создания сертификата CA)

2. Настройте каталог /etc/openvpn/

3. Создайте сертификат сервера и ключ

4. Создайте сертификат клиента

5. Поместите необходимые файлы на стороне сервера в директорию etc/openvpn/

6. Поместите необходимые файлы клиента в каталог root/client/

7. Напишите файл конфигурации для сервера

8. iptables устанавливает правила nat и открывает переадресацию маршрутов

9. Откройте сервис openvpn

3. Клиент подключается к openvpn

1. Загрузите клиент openvpn и установите его.

2. Настройте файл конфигурации клиента и импортируйте его.


1. Введение

1. Определение

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

2. Принцип

Техническим ядром OpenVPN является виртуальная сетевая карта, за которой следует реализация протокола SSL.

Виртуальная сетевая карта — это программное обеспечение драйвера, реализованное с использованием базовой технологии сетевого программирования. После установки такой программы к хосту будет добавлена ​​ненастоящая сетевая карта, и ее можно будет настроить как другие сетевые карты. Сервисная программа может открыть виртуальную сетевую карту на уровне приложения.Если прикладное программное обеспечение (такое как веб-браузер) отправляет данные на виртуальную сетевую карту, сервисная программа может прочитать данные. Если сервисная программа записывает соответствующие данные на виртуальную сетевую карту, прикладное программное обеспечение также может их получить. Виртуальные сетевые карты реализованы во многих операционных системах, что является важной причиной, по которой OpenVPN можно использовать на разных платформах.

  В OpenVPN , если пользователь получает доступ к удаленному виртуальному адресу (принадлежащему к серии адресов, используемой виртуальной сетевой картой, которая отличается от реального адреса), операционная система отправит пакет данных (режим TUN) или фрейм данных (TAP). режим) через механизм маршрутизации На виртуальной сетевой карте, после того, как сервисная программа получит данные и выполнит соответствующую обработку, она отправит их из внешней сети через SOCKET . Это завершает процесс односторонней передачи и наоборот. Когда удаленная сервисная программа получает данные из внешней сети через SOCKET и после соответствующей обработки, она отправляет их обратно на виртуальную сетевую карту, и прикладное программное обеспечение может их получить.

3. Шифрование и аутентификация

( 1 ) шифрование

  OpenVPN использует библиотеку OpenSSL для шифрования данных и управляющей информации. Это означает, что он может использовать любой алгоритм, поддерживаемый OpenSSL . Он предоставляет дополнительную функцию пакетного HMAC для повышения безопасности соединения. Кроме того, аппаратное ускорение OpenSSL также может повысить его производительность . Версии после 2.3.0 вводят PolarSSL .

( 2 ) Аутентификация

OpenVPN предоставляет различные методы аутентификации для подтверждения личности обеих сторон, в том числе:

Предварительный обмен секретным ключом

②Сторонний сертификат

③Комбинация имени пользователя /пароля

  Предварительно общий ключ является самым простым, но в то же время его можно использовать только для создания VPN типа «точка-точка» , сторонний сертификат на основе PKI предоставляет наиболее полные функции, но требует дополнительного сопровождения Система сертификатов PKI . После OpenVPN2.0 вводится метод аутентификации с комбинацией имени пользователя и пароля, который может не использовать сертификат клиента, но по-прежнему требует сертификат сервера для шифрования.

2. Соберите openvpn на centos 7.5.

1. Установите openvpn и easy-rsa (этот пакет используется для создания сертификата CA )

( 1 ) Установите исходный код хранилища epel

yum install epel-release -y

( 2 ) Установить опенвпн

[root@localhost ~]# yum -y install openvpn

( 3 ) На github загрузите последнюю версию easy-rsa

https://github.com/OpenVPN/easy-rsa скачать пакет  

②Загрузить , распаковать

[root@localhost ~]# mkdir openvpn
[root@localhost  openvpn]# unzip easy-rsa-3.0.5.zip
[root@localhost  openvpn]# mv easy-rsa-3.0.5 easy-rsa

2. Настройте каталог /etc/openvpn/

( 1 ) Создайте каталог и скопируйте каталог easy-rsa

[root@localhost  ~]# mkdir -p /etc/openvpn/
[root@localhost  openvpn]# cp -Rp easy-rsa /etc/openvpn/

( 2 ) Настройте, отредактируйте файл vars и настройте в соответствии с вашей собственной средой.

[root@localhost  test]# cd /etc/openvpn/easy-rsa/easyrsa3
[root@localhost  easyrsa3]# cp vars.example vars
[root@localhost  easy-rsa3]# vim vars (将下面6行写入文件)

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Beijing"
set_var EASYRSA_REQ_ORG         "username"
set_var EASYRSA_REQ_EMAIL       "[email protected]"
set_var EASYRSA_REQ_OU          "My OpenVPN"

3. Создайте сертификат сервера и ключ

Войдите в каталог /etc/openvpn/easy-rsa/easyrsa3/

①Инициализация _

[root@localhost  ~]# cd /etc/openvpn/easy-rsa/easyrsa3/
[root@localhost  easyrsa3]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki

Создайте корневой сертификат

[root@localhost easyrsa3]# ./easyrsa build-ca

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

Создайте сертификат на стороне сервера

[root@localhost easyrsa3]# ./easyrsa gen-req server nopass

В этом процессе вам необходимо ввести общее имя , которое является необязательным, но не совпадает с предыдущим корневым сертификатом.

④Подпишите сертификат сервера

[root@localhost easyrsa3]# ./easyrsa сервер сервера подписи

В этой команде вам нужно подтвердить генерацию, вы должны ввести yes , а также вам нужно указать пароль, когда мы создали ЦС в то время. Если вы забудете свой пароль, то вы начнете с нуля

⑤Создайте Diffie-Hellman , чтобы убедиться, что ключ проходит через команду небезопасной сети .

[root@localhost easyrsa3]# ./easyrsa gen-dh

4. Создайте сертификат клиента

①Войдите в корневой каталог, чтобы создать новую папку клиента , папку можно назвать по желанию, затем скопируйте папку easy-ras, полученную в результате предыдущей распаковки, в папку клиента и войдите в следующий каталог.

[root@localhost  ~]# mkdir client
[root@localhost  ~]# cp /etc/openvpn/easy-rsa client -Rp
[root@localhost  ~]# cd client/easy-rsa/easyrsa3/

②Инициализация _

[root@localhost easyrsa3]# ./easyrsa init-pki // Введите yes для подтверждения

③Создайте ключ клиента и сгенерируйте сертификат (не забудьте сгенерировать пароль, введенный вашим собственным логином клиента)

 [root@localhost easyrsa3]# ./easyrsa gen-req username // Определите имя самостоятельно

④Импортируйте полученный пользовательский запрос и подпишите сертификат

А. Перейдите в /etc/openvpn/easy-rsa/easyrsa3/

[root@localhost easyrsa3]# cd /etc/openvpn/easy-rsa/easyrsa3/

б. запрос на импорт

[root@localhost  easyrsa3]# ./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/username.req username

в. Сертификат подписи

[root@localhost easyrsa3]# ./easyrsa подписывает имя пользователя клиента

Примечание. Здесь создается клиент , поэтому он должен быть клиентом , а имя пользователя должно соответствовать ранее импортированному имени.

Сертификат подписи выше аналогичен серверному , поэтому скриншот делать не буду, но пароль ЦС вводить все же нужно в период

5. Поместите необходимые файлы на стороне сервера в директорию etc/openvpn/

Сертификат ЦС , сертификат сервера, секретный ключ

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn/

6. Поместите необходимые файлы клиента в каталог root/client/

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

[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /root/client/
[root@localhost  ~]# cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/username.crt /root/client/
[root@localhost  ~]# cp /root/client/easy-rsa/easyrsa3/pki/private/username.key /root/client

 Просмотр файла CA клиента для копирования в файл конфигурации клиента

7. Напишите файл конфигурации для сервера

( 1 ) Когда вы установили openvpn , он предоставит пример файла конфигурации сервера , в /usr/share/doc/openvpn-2.4.11/sample/sample-config-files будет файл server.conf , мы копируем этот файл в /etc/openvpn

[root@localhost ~]# rpm -ql openvpn |grep server.conf

[root@localhost ~]# cp /usr/share/doc/openvpn-2.4.11/sample/sample-config-files/server.conf /etc/openvpn/

( 2 ) Изменить файл конфигурации

[root@localhost ~]# vim /etc/openvpn/server.conf

[root@localhost ~]# grep '^[^#|;]' Модификация /etc/openvpn/server.conf выглядит следующим образом:

A. Файл конфигурации режима входа в систему с ключом не очень практичен и может быть проигнорирован.Используйте файл конфигурации B.

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3

B. Файл конфигурации режима входа в систему с именем пользователя и паролем

local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key  # This file should be kept secret
dh /etc/openvpn/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
client-to-client
keepalive 10 120
cipher AES-256-CBC
comp-lzo
max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 3
script-security 3
auth-user-pass-verify /etc/openvpn/checkpw.sh via-env    #指定用户认证脚本
username-as-common-name
verify-client-cert none

( 3 ) Настройка пользовательских файлов и проверка сценариев

#检查脚本
[root@localhost ~]# vim /etc/openvpn/checkpw.sh 
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/pw-file"
LOG_FILE="/var/log/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1


#密码文件
[root@localhost ~]# vim /etc/openvpn/pw-file 
user1 123456789
user2 haha2023

( 4 ) Настройка разрешений

[root@localhost  ~]# mkdir /var/log/openvpn
[root@localhost  ~]# chown -R openvpn.openvpn /var/log/openvpn/
[root@localhost  ~]# chown -R openvpn.openvpn /etc/openvpn/*

8. iptables устанавливает правила nat и открывает переадресацию маршрутов

[root@localhost  ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE
[root@localhost  ~]# iptables -vnL -t nat
[root@localhost  ~]# vim /etc/sysctl.conf //打开路由转发
net.ipv4.ip_forward = 1
[root@localhost  ~]# sysctl -p

9. Откройте сервис openvpn

[root@localhost  ~]# openvpn /etc/openvpn/server.conf &

[root@localhost ~]# netstat -ntlp 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      14948/openvpn       

3. Клиент подключается к openvpn

1. Загрузите клиент openvpn и установите его.

https://download.csdn.net/download/zhangxueleishamo/87688762

Просто скачайте и установите

2. Настройте файл конфигурации клиента и импортируйте его.

client
proto tcp
remote 服务器ip 1194
dev tun
nobind
persist-key
persist-tun
cipher AES-128-GCM
verb 3
comp-lzo
auth-user-pass
<ca>
将上文二.6中ca密码在上文中有直接复制进来,即可
</ca>

 3. Войти

В-четвертых, оптимизация openvpn

1. Настройте маршрутизацию и DNS

Добавьте маршрут в основной файл конфигурации openvpn.Когда клиент обращается к указанному сегменту сети, используется линия vpn.В остальное время используется исходная сеть машины, чтобы избежать ненужных операций, занимающих трафик линии vpn.

Добавьте dhcp для автоматического получения dns, вы можете указать dns интрасети

push "route 10.0.0.0 255.0.0.0"
#push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 202.106.0.20"
push "dhcp-option DNS 94.140.14.14"

 2. Отключить сжатие comp-lzo

Убрана функция сжатия comp-lzo как на сервере, так и на клиенте, а производительность улучшена в 2-4 раза

3. Измените протокол proto tcp ----> порт proto udp 21194.

Все мы знаем, что udp намного быстрее, чем tcp, смена протокола и номера порта не только ускоряет, но и повышает безопасность

port 21194
proto udp

4. Настройте одну учетную запись для нескольких входов в систему

duplicate-cn

5. Ошибки

1. Нет сертификата сервера

Пт, 14 апреля, 17:49:21 2023 ПРЕДУПРЕЖДЕНИЕ: метод проверки сертификата сервера не включен. См. http://openvpn.net/howto.html#mitm для получения дополнительной информации.
Решается путем добавления в файл клиента

сервер удаленного сертификата tls

2. При импорте файла обнаруживается ошибка: отсутствует внешний сертификат

Решается добавлением в файл клиента

client-cert-not-required 

рекомендация

отblog.csdn.net/zhangxueleishamo/article/details/130130211
рекомендация