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