VPN сервер на CentOS 7

Настройка VPN сервера на CentOS7

С каждым годом вопрос защиты данных становится все более актуальным. На сегодняшний день одной из удачных реализаций средств защиты – является создание частной виртуальной сети или кратко VPN. Virtual Private Network (VPN) – обобщенное название технологий, позволяющих обеспечивать сетевые соединения по верх основной сети (например, Интернет). При этом независимо от уровня надежности основной сети, Вы получаете надежное соединение (виртуальную сеть построенную поверх основной) благодаря использованию средств криптографии. В данной статье мы рассмотрим создание VPN сервера на CentOS 7 с использованием OpenVPN – свободная реализация технологии VPN с открытым исходным кодом, OpenVPN может использоваться для создания зашифрованных каналов типа точка-точка или сервер-клиенты.

Все команды в этой статье выполняются от имени пользователя root!
Вы должны отключить selinux, он может вызвать проблемы во время установки.
Настройка хоста
Подготовка окружения

Отключите Selinux:

sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/sysconfig/selinux
sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config

Epel репозиторий :

yum -y install epel-release

Выполните обновление системы:

yum -y update

Перезагрузите сервер:

reboot

После перезагрузки проверьте статус SELinux командой «sestatus», Вы должны увидеть следующий вывод:

SELinux status: disabled
Установка и настройка OpenVPN сервера

Установите пакет openvpn:

yum -y install openvpn

Скопируйте пример файла настройки сервера:

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/server.conf

Внесите необходимые изменения:

mcedit /etc/openvpn/server.conf

Рабочий пример конфигурации VPN сервера:

port 2086
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
push "route 10.10.0.0 255.255.0.0"
push "route 10.8.0.0 255.255.0.0"
keepalive 5 15
comp-lzo
user nobody
group nobody
persist-key
persist-tun
crl-verify /etc/openvpn/easy-rsa/keys/crl.pem
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 3
mute 20
Установка и настройка Easy-rsa

Установите пакет easy-rsa:

yum -y install easy-rsa

Создайте директорию для хранения ключей:

mkdir -p /etc/openvpn/easy-rsa/keys

Скопируйте скрипты для генерации сертификатов и ключей:

cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

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

mcedit /etc/openvpn/easy-rsa/vars

Список необходимых переменных:

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="RU"
export KEY_PROVINCE="RU"
export KEY_CITY="Moscow"
export KEY_ORG="OpenVPN"
export KEY_EMAIL="it@domain.su"
export KEY_OU="IT"

# X509 Subject Field
export KEY_NAME="gate"

# If you'd like to sign all keys with the same Common Name, uncomment the KEY_CN export below
# You will also need to make sure your OpenVPN server config has the duplicate-cn option set
export KEY_CN="OpenVPN"

Отредактируйте файл конфигурации версии SSL, для избежания проблем, из-за невозможности определения версии SSL некоторыми клиентами:

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Сертификаты и ключи VPN сервера
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-dh

Необходимо скопировать созданные сертификаты и ключи в конфигурационную директорию OpenVPN:

cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

Сгенерируем ta сертификат сервера:

openvpn --genkey --secret ta.key
Сертификаты и ключи пользователя
cd /etc/openvpn/easy-rsa
source ./vars
./build-key client1
Форвардинг IP v4

Редактируем:

mcedit /etc/systemctl.conf

Добавим в самом верху файла строку:

net/ipv4.ip_forward = 1

Сохраните и перезапустите:

sysctl -p
Настройка Firewalld для OpenVPN

Установите пакет Firewalld:

yum -y install firewalld

Запустите:

systemctl start firewalld

Включаем в автозагрузку:

systemctl enable firewalld

Проверьте:

systemctl status firewalld

Посмотрим что разрешено по умолчанию:

firewall-cmd --permanent --list-all

Вывод команды:

public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не использую на сервере ip v6, поэтому уберу соответствующее правило:

firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Добавим необходимые правила для работы OpenVPN сервера.

Откроем порт 2086:

firewall-cmd --permanent --zone=public --add-port=2086/udp

Наложим masquerade на зону public:

firewall-cmd --permanent --zone=public --add-masquerade

Перезагрузим правила:

firewall-cmd --reload

На этом настройка сетевого экрана завершена.

Запуск VPN сервера

В случае возникновения проблем можно проверить файл конфигурации:

openvpn --config /etc/openvpn/server.conf

Включаем автозагрузку и запускаем службу:

systemctl enable openvpn@server.service
systemctl start openvpn@server.service
Установка и настройка VPN клиента

Необходимо передать безопасным способом следующие сертификаты:

ca.crt
ta.key
client1.crt
client1.key

Рабочий пример конфигурации VPN клиента:

client
nobind
dev tun
proto udp
remote your.domain 2086
resolv-retry infinite
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
cipher AES-256-CBC
remote-cert-tls server
tls-auth ta.key 1
auth SHA1
comp-lzo
verb 3
mute 20
keepalive 5 15
Отзыв сертификата VPN клиента

Скрипт revoke-full создает CRL (certificate revocation list) - crl.pem. Этот файл (не является секретным) должен быть скопирован в каталог, видимый OpenVPN сервером, а путь к нему прописан в конфиге server.conf

crl-verify /etc/openvpn/easy-rsa/keys/crl.pem

Отозвать сертификат клиента (client1):

cd /etc/openvpn/easy-rsa/
./revoke-full client1

 

Раздел: Unix сервера
Top
2 комментария
Добавить комментарий