Создайте OpenVPN

задняя часть Эксплуатация и обслуживание
Создайте OpenVPN

Это 18-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов

Создайте OpenVPN

OpenVPN

Что делать, если наши сервисы развернуты во внутренней сети и к ним нельзя получить доступ из внешней сети, но мы не можем получить доступ к внутренней сети извне? Доступ ко многим услугам компании возможен только через интрасеть из соображений безопасности.В настоящее время для этого мы можем использовать OpenVPN с открытым исходным кодом.

OpenVPN — это полнофункциональная SSL VPN, которая реализует безопасные сетевые расширения OSI Layer 2 или Layer 3 с использованием стандартных отраслевых протоколов SSL/TLS, поддерживает гибкие методы аутентификации клиентов на основе сертификатов, смарт-карт и/или учетных данных имени пользователя/пароля, а также разрешает пользователям или политики управления доступом для конкретных групп с использованием правил брандмауэра, применяемых к виртуальным интерфейсам VPN.

Установить зависимости

yum install -y epel-release 
yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel
  • Установите исходники epel-release, так как официальный rpm-репозиторий часто отстает от версии безопасности, и даже некоторые пакеты недоступны, поэтому используйте для скачивания исходники epel-release.
  • пакет пакетов openssl
  • пакет lzo для сжатия данных

Установите openvpn и easy-ras

yum install -y easy-rsa
yum install -y openvpn
  • Пакет easy-ras предоставляет несколько сценариев генерации сертификатов, файлы конфигурации шаблонов и т. д. для создания связанных каталогов.
  • openvpn — это пакет, который мы собираемся установить сегодня.

Настройте ключ сертификата

cp -rf /usr/share/easy-rsa/3.0.8 /etc/openvpn/server/easy-rsa
cd /etc/openvpn/server/easy-rsa



./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1 nopass
./easyrsa build-client-full client2 nopass
./easyrsa gen-dh
openvpn --genkey --secret ta.key
  • init-pki: Инициализируйте, создайте папку pki для хранения создаваемого сертификата.

  • build-ca: вам будет предложено ввести имя центра сертификации, как показано ниже.

openvpn1.pngВведите в соответствии с подсказкой или нажмите Enter, чтобы использовать значение по умолчанию. Будут сгенерированы корневой сертификат и ключевые файлы, такие как ca.crt.

  • build-server-full client1: создание сертификатов сервера/клиента,nopassПараметр устанавливает сертификат без пароля, в противном случае необходимо установить пароль сертификата.

  • gen-dh: Создать Диффи-Хеллмана, обмен ключами Диффи-Хеллмана — это протокол безопасности. Он позволяет двум сторонам создать ключ по незащищенному каналу без какой-либо предварительной информации о другой стороне. Этот ключ можно использовать в качестве симметричного ключа для шифрования содержимого связи при последующей связи.

  • --genkey --secret ta.key: Необязательно, сгенерируйте ta.key для защиты от вредоносных атак, таких как DoS и UDP-флуд.

Написать сценарии аутентификации

vim /etc/openvpn/server/user/checkpsw.sh

Содержание выглядит следующим образом

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# 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/server/user/psw-file"
LOG_FILE="/var/log/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

Измените разрешения файла.Я написал здесь 755. Предполагается, что разрешения должны быть уменьшены, а также допустимы только разрешения группы пользователей на чтение и выполнение.

chmod 755 /etc/openvpn/server/user/checkpsw.sh
chown openvpn:openvpn /etc/openvpn/server/user/checkpsw.sh

Создайте файл аутентифицированного пользователя

Команда tee используется для чтения данных из стандартного ввода и вывода их содержимого в файл.

tee /etc/openvpn/server/user/psw-file << EOF

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

test test

конец ввода

EOF

разрешение на редактирование

chmod 600 /etc/openvpn/server/user/psw-file
chown openvpn:openvpn /etc/openvpn/server/user/psw-file

Настроить серверную часть

mkdir -p /var/log/openvpn/
mkdir -p /etc/openvpn/server/user
chown openvpn:openvpn /var/log/openvpn
  • Первая папка используется для хранения файлов журнала opencv.
  • Вторая папка, пользовательский файл, в котором хранится пароль учетной записи и скрипт для проверки авторизации при входе.
  • Третья команда назначает разрешение папки журнала пользователю openvpn в группе пользователей openvpn, потому что openvpn после запуска запускается с разрешения пользователя openvpn.
vim /etc/openvpn/server/server.conf

новый файл, напишите в файле

#################################################
# This file is for the server side              #
# of a many-clients <-> one-server              #
# OpenVPN configuration.                        #
#                                               #
# Comments are preceded with '#' or ';'         #
#################################################
port 1194
proto tcp-server
## Enable the management interface
# management-client-auth
# management localhost 7505 /etc/openvpn/user/management-file
dev tun     # TUN/TAP virtual network device
user openvpn
group openvpn
ca /etc/openvpn/server/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt
key /etc/openvpn/server/easy-rsa/pki/private/server.key
dh /etc/openvpn/server/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/server/easy-rsa/ta.key 0
## Using System user auth.
# plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
## Using Script Plugins
auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
script-security 3
# client-cert-not-required  # Deprecated option
verify-client-cert
username-as-common-name
## Connecting clients to be able to reach each other over the VPN.
client-to-client
## Allow multiple clients with the same common name to concurrently connect.
duplicate-cn
# client-config-dir /etc/openvpn/server/ccd
# ifconfig-pool-persist ipp.txt
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 114.114.114.114"
push "dhcp-option DNS 1.1.1.1"
push "route 192.168.1.0 255.255.255.0"
# comp-lzo - DEPRECATED This option will be removed in a future OpenVPN release. Use the newer --compress instead.
compress lzo
# cipher AES-256-CBC
ncp-ciphers "AES-256-GCM:AES-128-GCM"
## In UDP client mode or point-to-point mode, send server/peer an exit notification if tunnel is restarted or OpenVPN process is exited.
# explicit-exit-notify 1
keepalive 10 120
persist-key
persist-tun
verb 3
log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
  • порт: номер порта, может быть изменен
  • сервер 10.8.0.0, виртуальный шлюз для vpn
  • push «route 192.168.1.0 255.255.255.0» указывает шлюз интрасети, чтобы мы могли получить доступ к интрасети под шлюзом через openvpn.
  • ca указывает корневой сертификат и только что сгенерированные файлы ключей.
  • cert указывает сертификат сервера
  • key указывает ключ сервера
  • dh указывает файл обмена ключами, который является только что сгенерированным файлом обмена ключами Диффи Хеллмана.
  • log указывает файл журнала
  • status указывает файл журнала состояния
  • auth-user-pass-verify указывает сценарий аутентификации

Создать программную ссылку

cd /etc/openvpn/server/
ln -sf server.conf .service.conf

Настроить брандмауэр

firewall-cmd --permanent --add-masquerade
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --zone=public --add-port=1194/tcp --permanent
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
firewall-cmd --reload
  • add-masquerade: Разрешить брандмауэру маскировать IP-адрес. Чтобы включить переадресацию портов, вам необходимо сначала включить эту функцию.
  • add-service: навсегда открыть эту службу
  • add-port: открыть номер порта
  • direct: установите правила NET для переадресации ipv4 на канал openvpn
  • перезагрузить: обновить конфигурацию, чтобы вышеуказанная конфигурация вступила в силу.

Запустить сервер

systemctl start openvpn-server@.service.service

Если сообщения об ошибке не выводятся, запуск выполнен успешно и настройка на стороне сервера завершена.

Установить клиент

ссылка на скачивание:Официальный сайтСкачать и установить, вы можете указать каталог установки файла на первом шаге. Например, я установил вD:\openvpn

Загрузите файл сертификата, необходимый клиенту

оба на сервере

  • ca.crt : в/etc/openvpn/server/easy-rsa/pki/в папке

  • та.ключ: в/etc/openvpn/server/easy-rsa/в папке

  • client1.key: в/etc/openvpn/server/easy-rsa/pki/private/в папке

  • client1.crt: в/etc/openvpn/server/easy-rsa/pki/issued/в папке

Загрузите вышеуказанные четыре файла в клиентD:\openvpn\config, и создайте файлclient.ovpn

Введите следующее

client
proto tcp-client
dev tun
auth-user-pass
remote Openvpn的公网地址 1194
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
remote-cert-tls server
auth-nocache
persist-tun
persist-key
compress lzo
verb 4
mute 10

Измените общедоступный сетевой адрес удаленного openvpn.

запустить клиент

Запустите от имени администратора, введите тест имени пользователя и пароль, которые мы создали выше, при подключении, и после успешного подключения получите локальный доступ к IP-адресу интрасети на удаленном сервере и успешно получите к нему доступ.

openvpn2.png