Интернет е опасно място, особено ако оставяте данните си некриптирани или без подходяща защита. Има няколко начина да защитите данните си; всички на различни нива. Винаги трябва да имате силни правила за защитна стена, криптиране на данни и силни правила за пароли. Друг начин да защитите вашите данни е чрез достъп до тях чрез VPN връзка.
Виртуалната частна мрежа (или VPN) е метод за свързване, използван за добавяне на сигурност и поверителност към частни и обществени мрежи, защитавайки вашите данни.
OpenVPN е пълнофункционално решение с отворен код, SSL VPN за сигурни комуникации. Може да се използва за отдалечен достъп или комуникация между различни сървъри или центрове за данни. Може да се инсталира локално или в облака, в различни операционни системи и може да бъде конфигуриран с много опции за сигурност.
В този блог ще създадем VPN връзка за достъп до база данни в облака. Има различни начини за постигане на тази цел, в зависимост от вашата инфраструктура и колко хардуерни ресурси искате да използвате за тази задача.
Например, можете да създадете две виртуални машини, една on-prem и друга в облака, и те биха могли да бъдат мост за свързване на вашата локална мрежа към облачната мрежа на базата данни чрез Peer-to- Peer VPN връзка.
Друга по-проста опция може да бъде свързването към VPN сървър, инсталиран във възела на базата данни като използвате VPN клиентска връзка, конфигурирана във вашата локална машина. В този случай ще използваме тази втора опция. Ще видите как да конфигурирате OpenVPN сървър в възела на базата данни, работещ в облака, и ще имате достъп до него с помощта на VPN клиент.
За възела на базата данни ще използваме екземпляр на Amazon EC2 с следната конфигурация:
- ОС:Ubuntu Server 18.04
- Обществен IP адрес:18.224.138.210
- Частен IP адрес:172.31.30.248/20
- Отворени TCP портове:22, 3306, 1194
Как да инсталирате OpenVPN на Ubuntu Server 18.04
Първата задача е да инсталирате OpenVPN сървъра във вашия възел на базата данни. Всъщност използваната технология на базата данни няма значение, тъй като работим върху мрежов слой, но за целите на тестване след конфигуриране на VPN връзката, да кажем, че използваме Percona Server 8.0.
И така, нека започнем с инсталирането на OpenVPN пакетите.
$ apt install openvpn easy-rsa
Тъй като OpenVPN използва сертификати за криптиране на вашия трафик, ще ви трябва EasyRSA за тази задача. Това е CLI помощна програма за създаване на главен сертифициращ орган и искане и подписване на сертификати, включително под-CA и списъци за анулиране на сертификати.
Забележка:Налична е нова версия на EasyRSA, но за да запазим фокуса върху инсталацията на OpenVPN, нека използваме версията EasyRSA, налична в хранилището на Ubuntu 18.04 (EasyRSA версия 2.2.2- 2).
Предишната команда ще създаде директорията /etc/openvpn/ за конфигурацията на OpenVPN и директорията /usr/share/easy-rsa/ със скриптовете и конфигурацията на EasyRSA.
За да улесним тази задача, нека създадем символна връзка към пътя на EasyRSA в директорията OpenVPN (или можете просто да я копирате):
$ ln -s /usr/share/easy-rsa /etc/openvpn/
Сега трябва да конфигурирате EasyRSA и да създадете своите сертификати. Отидете до местоположението на EasyRSA и създайте резервно копие за файла „vars“:
$ cd /etc/openvpn/easy-rsa
$ cp vars vars.bak
Редактирайте този файл и променете следните редове според вашата информация:
$ vi vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
След това създайте нова символна връзка към файла openssl:
$ cd /etc/openvpn/easy-rsa
$ ln -s openssl-1.0.0.cnf openssl.cnf
Сега приложете файла vars:
$ cd /etc/openvpn/easy-rsa
$ . vars
ЗАБЕЛЕЖКА:Ако стартирате ./clean-all, ще направя rm -rf на /etc/openvpn/easy-rsa/keys
Изпълнете скрипта за почистване на всички:
$ ./clean-all
И създайте ключа на Diffie-Hellman (DH):
$ ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.....................................................................................................................................................................+
Това последно действие може да отнеме няколко секунди и когато приключи, ще имате нов DH файл в директорията „ключове“ в директорията EasyRSA.
$ ls /etc/openvpn/easy-rsa/keys
dh2048.pem
Сега нека създадем CA сертификатите.
$ ./build-ca
Generating a RSA private key
..+++++
...+++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Това ще създаде ca.crt (публичен сертификат) и ca.key (частен ключ). Публичният сертификат ще се изисква на всички сървъри за свързване с VPN.
$ ls /etc/openvpn/easy-rsa/keys
ca.crt ca.key
Сега имате създаден CA, нека създадем сертификата на сървъра. В този случай ще го наречем „openvpn-server“:
$ ./build-key-server openvpn-server
Generating a RSA private key
.......................+++++
........................+++++
writing new private key to 'openvpn-server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 23 22:44:02 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Това ще създаде CRT, CSR и Key файловете за OpenVPN сървъра:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-server.crt openvpn-server.csr openvpn-server.key
Сега трябва да създадете клиентския сертификат и процесът е доста подобен:
$ ./build-key openvpn-client-1
Generating a RSA private key
.........................................................................................+++++
.....................+++++
writing new private key to 'openvpn-client-1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
...
Certificate is to be certified until Dec 24 01:45:39 2029 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Това ще създаде CRT, CSR и Key файловете за OpenVPN клиента:
$ ls /etc/openvpn/easy-rsa/keys
openvpn-client-1.csr openvpn-client-1.crt openvpn-client-1.key
В този момент имате готови всички сертификати. Следващата стъпка ще бъде да създадете както сървърна, така и клиентска OpenVPN конфигурация.
Конфигуриране на OpenVPN сървър
Както споменахме, инсталацията на OpenVPN ще създаде директорията /etc/openvpn, където ще добавите конфигурационните файлове както за сървърни, така и за клиентски роли, и има примерен конфигурационен файл за всяка една в / usr/share/doc/openvpn/examples/sample-config-files/, така че можете да копирате файловете на споменатото място и да ги променяте, както желаете.
В този случай ще използваме само конфигурационния файл на сървъра, тъй като това е OpenVPN сървър:
$ cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
$ gunzip /etc/openvpn/server.conf.gz
Сега нека видим файл с основна конфигурация на сървъра:
$ cat /etc/openvpn/server.conf
port 1194
# Which TCP/UDP port should OpenVPN listen on?
proto tcp
# TCP or UDP server?
dev tun
# "dev tun" will create a routed IP tunnel,"dev tap" will create an ethernet tunnel.
ca /etc/openvpn/easy-rsa/keys/ca.crt
# SSL/TLS root certificate (ca).
cert /etc/openvpn/easy-rsa/keys/openvpn-server.crt
# Certificate (cert).
key /etc/openvpn/easy-rsa/keys/openvpn-server.key
# Private key (key). This file should be kept secret.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Diffie hellman parameters.
server 10.8.0.0 255.255.255.0
# Configure server mode and supply a VPN subnet.
push "route 172.31.16.0 255.255.240.0"
# Push routes to the client to allow it to reach other private subnets behind the server.
keepalive 20 120
# The keepalive directive causes ping-like messages to be sent back and forth over the link so that each side knows when the other side has gone down.
cipher AES-256-CBC
# Select a cryptographic cipher.
persist-key
persist-tun
# The persist options will try to avoid accessing certain resources on restart that may no longer be accessible because of the privilege downgrade.
status /var/log/openvpn/openvpn-status.log
# Output a short status file.
log /var/log/openvpn/openvpn.log
# Use log or log-append to override the default log location.
verb 3
# Set the appropriate level of log file verbosity.
Забележка:Променете пътищата на сертификата според вашата среда.
И след това стартирайте услугата OpenVPN, като използвате създадения конфигурационен файл:
$ systemctl start [email protected]
Проверете дали услугата слуша в правилния порт:
$ netstat -pltn |grep openvpn
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 20002/openvpn
Накрая, в OpenVPN сървъра, трябва да добавите IP пренасочващата линия във файла sysctl.conf, за да разрешите VPN трафика:
$ echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
И стартирайте:
$ sysctl -p
net.ipv4.ip_forward = 1
Сега нека видим как да конфигурирате OpenVPN клиент да се свързва с тази нова VPN.
Конфигуриране на OpenVPN клиента
В предишната точка споменахме примерните конфигурационни файлове на OpenVPN и използвахме сървърния, така че сега нека направим същото, но използвайки конфигурационния файл на клиента.
Копирайте файла client.conf от /usr/share/doc/openvpn/examples/sample-config-files/ на съответното място и го променете, както желаете.
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
Ще ви трябват и следните сертификати, създадени по-рано, за да конфигурирате VPN клиента:
ca.crt
openvpn-client-1.crt
openvpn-client-1.key
И така, копирайте тези файлове на вашата локална машина или виртуална машина. Ще трябва да добавите това местоположение на файловете в конфигурационния файл на VPN клиента.
Сега нека видим основен клиентски конфигурационен файл:
$ cat /etc/openvpn/client.conf
client
# Specify that we are a client
dev tun
# Use the same setting as you are using on the server.
proto tcp
# Use the same setting as you are using on the server.
remote 18.224.138.210 1194
# The hostname/IP and port of the server.
resolv-retry infinite
# Keep trying indefinitely to resolve the hostname of the OpenVPN server.
nobind
# Most clients don't need to bind to a specific local port number.
persist-key
persist-tun
# Try to preserve some state across restarts.
ca /Users/sinsausti/ca.crt
cert /Users/sinsausti/openvpn-client-1.crt
key /Users/sinsausti/openvpn-client-1.key
# SSL/TLS parms.
remote-cert-tls server
# Verify server certificate.
cipher AES-256-CBC
# Select a cryptographic cipher.
verb 3
# Set log file verbosity.
Забележка:Променете пътищата на сертификата според вашата среда.
Можете да използвате този файл за свързване към OpenVPN сървъра от различни операционни системи като Linux, macOS или Windows.
В този пример ще използваме приложението Tunnelblick за свързване от клиент на macOS. Tunnelblick е безплатен графичен потребителски интерфейс с отворен код за OpenVPN на macOS. Той осигурява лесен контрол на OpenVPN клиенти. Той идва с всички необходими пакети като OpenVPN, EasyRSA и драйвери за тун/кран.
Тъй като конфигурационните файлове на OpenVPN имат разширения .tblk, .ovpn или .conf, Tunnelblick може да чете всички тях.
За да инсталирате конфигурационен файл, плъзнете го и го пуснете върху иконата Tunnelblick в лентата с менюта или в списъка с конфигурации в раздела „Конфигурации“ на прозореца „Подробности за VPN“.
И след това натиснете „Свързване“.
Сега трябва да имате някои нови маршрути във вашата клиентска машина:
$ netstat -rn # or route -n on Linux OS
Destination Gateway Flags Netif Expire
10.8.0.1/32 10.8.0.5 UGSc utun5
10.8.0.5 10.8.0.6 UH utun5
172.31.16/20 10.8.0.5 UGSc utun5
Както можете да видите, има маршрут към локалната мрежа от бази данни през VPN интерфейса, така че трябва да имате достъп до услугата на базата данни чрез IP адреса на частната база данни.
$ mysql -p -h172.31.30.248
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.18-9 Percona Server (GPL), Release '9', Revision '53e606f'
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Работи. Сега имате защитен трафик с помощта на VPN, за да се свържете с вашия възел на базата данни.
Заключение
Защитата на вашите данни е задължителна, ако осъществявате достъп до тях през интернет, локално или в смесена среда. Трябва да знаете как да криптирате и защитите своя отдалечен достъп.
Както можете да видите, с OpenVPN можете да достигнете до отдалечената база данни, като използвате локалната мрежа чрез криптирана връзка, използвайки самоподписани сертификати. Така че OpenVPN изглежда страхотна опция за тази задача. Това е решение с отворен код и инсталирането/конфигурирането е доста лесно. Използвахме основна конфигурация на OpenVPN сървър, така че можете да потърсите по-сложна конфигурация в официалната документация на OpenVPN, за да подобрите своя OpenVPN сървър.