Ukrainian Cyber Alliance

Настройка собственного VPN-сервера (OpenVPN, CentOS 7)

Вы можете попробовать как работает VPN с нашим бесплатым VPN-сервисом Гарда. Но вы можете поднять свой личный VPN. Для начала вам понадобится собственный сервер. Его можно арендовать у таких компаний как OVH или Digital Ocean по цене от одного доллара в месяц. Используем виртуальный сервер с системой CentOS 7. Заходим на сервер с помощью SSH (доступен в Windows 10, для более старых версий есть клиент PuTTY):

ssh root@1.2.3.4

Редактируем файл /etc/systemctl.conf и включаем:

net.ipv4.ip_forward = 1

в файле /etc/sysconfig/selinux отключаем SELinux:

SELINUX=disabled

Перезагружаемся

reboot

Обновляем систему и устанавливаем OpenVPN

yum update
yum install epel-release
yum install openvpn

Устанавливаем EasyRSA3 и создаем ключи:

./easyrsa init-pki
./easyrsa build-ca

необходимо указать пароль для ключа CA и его имя (CN)

Создаем сертификаты сервера и клиента: ./easyrsa build-server-full server nopass
./easyrsa build-client-full client nopass

Устанавливаем в тот же самый каталог EasyTLS

./easytls init-tls
./easytls build-tls-crypt

Создаем конфигурационный файл сервера /etc/openvpn/server.conf

dev-type tun user openvpn group openvpn topology subnet persist-key persist-tun remote-cert-tls client dh none ncp-ciphers AES-256-GCM cipher AES-256-GCM reneg-sec 36000 server 10.1.1.0 255.255.255.0 max-clients 128 script-security 2 dev tun1 port 1194 proto tcp local :: tls-version-min 1.2 tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384 log /dev/null tcp-nodelay push "redirect-gateway def1 block-local" push "block-outside-dns" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 1.1.1.1" <ca> -----BEGIN CERTIFICATE----- ... </ca> <cert> -----BEGIN CERTIFICATE----- ... </cert> <key> -----BEGIN PRIVATE KEY----- ... </key> <tls-crypt> <tls-crypt> -----BEGIN OpenVPN Static key V1----- ... </tls-crypt>

Создаем конфигурационный файл клиента (client.ovpn)

dev tun client nobind remote-cert-tls server verb 3 server-poll-timeout 10 ncp-ciphers AES-256-GCM cipher AES-256-GCM reneg-sec 0 tls-version-min 1.2 tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384 remote 1.2.3.4 1194 tcp <ca> -----BEGIN CERTIFICATE----- ... </ca> <cert> -----BEGIN CERTIFICATE----- ... </cert> <key> -----BEGIN PRIVATE KEY----- ... </key> <tls-crypt> <tls-crypt> -----BEGIN OpenVPN Static key V1----- ... </tls-crypt>

Внутри тэгов <ca>, <cert>, <key> и <tls-crypt> вставляем файлы из каталога easyrsa3/pki: ca.crt, issued/server.crt, private/server.key, easytls/tls-crypt.key для сервера и ca.crt, issued/client.crt, private/client.key, easytls/tls-crypt.key для клиента.

Редактируем правила сетевого фильтра /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1194 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -i tun+ ! -o tun+ -j ACCEPT
-A FORWARD ! -i tun+ -o tun+ -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

-A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
COMMIT

Запускаем

systemctl enable openvpn@server
systemctl start openvpn@server
systemctl restart iptables

Если у вас возникают вопросы, напишите на ruheight (at) gmail

© 2020 Ukrainian Cyber Alliance