Установка openvpn на Linux mint

Прежде всего уясните себе что машина с easy-rsa это машина которая только подписывает ключи. И по логике безопасности должна быть отдельной машиной. Не стоит хранить генератор ключей и в особенности приватный CA на самом VPN сервере.

1) ставим openvpn на VPN сервере

# apt-get install openvpn

2) ставим easy-rsa на станции подписей

# apt-get install easy-rsa

3) создаём каталог куда скопируем easy-rsa и там будем изменять настройки, создавать и подписывать сертификаты

# mkdir -p /root/sign-host/easy-rsa
# cd /root/sign-host/easy-rsa
# cp /usr/share/easy-rsa/* ./


4) проверяем что скопировалось

# ls -1
build-ca
build-dh
build-inter
build-key
build-key-pass
build-key-pkcs12
build-key-server
build-req
build-req-pass
clean-all
inherit-inter
list-crl
openssl-0.9.6.cnf
openssl-0.9.8.cnf
openssl-1.0.0.cnf
pkitool
revoke-full
sign-req
vars
whichopensslcnf

5) меняем переменные в конце файла vars. Размер ключики. Если параноя входит в ваши должностные обязанности то нужно побольше ставить. :)

# mcedit vars
.......
export KEY_SIZE=1024
.......
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_EMAIL=mail@host.domain
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme
export PKCS11_MODULE_PATH=changeme
export PKCS11_PIN=1234

changeme – замените на свои значения. Остальные также можно изменить если хотите. На работоспособность это никак не влияет.

Затем генерируем ключи. Команда vars запускается из шела. перед ней через пробел точка.
После её запуска нужно запускать остальные.

# . vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /root/easy-rsa/keys
# ./clean-all 
# ./build-ca myvpn-ca
Generating a 1024 bit 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.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [my-organization]:
Common Name (eg, your name or your server's hostname) [myvpn-server]:
Name [myvpn-key]:
Email Address [mail@host.domain]:

Получили ключик центра сертификации. Публичный и приватный.

ca.crt
ca.key

Следом создадим ключик Diffie Hellman

# ./build-dh

Он может довольно долго работать и создавать ключ. Для 1024-х бит получим файл ./keys/dh1024.pem
Теперь генерируем и подписываем ключ сервера.

./build-key-server myvpn-server-key
Generating a 1024 bit RSA private key
............++++++
.......++++++
writing new private key to 'myvpn-server-key.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.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [my-organization]:
Common Name (eg, your name or your server's hostname) [myvpn-server-key]:
Name [myvpn-key]:
Email Address [mail@host.domain]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
organizationalUnitName:PRINTABLE:'my-organization'
commonName            :PRINTABLE:'myvpn-server-key'
name                  :PRINTABLE:'myvpn-key'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until May 17 13:58:59 2024 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

Это добавило ещё 3 файла в каталог ./keys/

myvpn-server-key.crt
myvpn-server-key.csr
myvpn-server-key.key

Ну и теперь генерируем ключи для клиентов. Если клиенты будут иметь разные ключи то сколько клиентов столько раз и запускать. Не забывайте каждый раз менять (номер) ключа. Ну или можете назвать по именам реальных клиентов vasya-key, roma-key и т д.

./build-key myvpn-client1-key
Generating a 1024 bit RSA private key
...................++++++
................++++++
writing new private key to 'myvpn-client1-key.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.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [Fort-Funston]:
Organizational Unit Name (eg, section) [my-organization]:
Common Name (eg, your name or your server's hostname) [myvpn-client1-key]:
Name [myvpn-key]:
Email Address [mail@host.domain]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /root/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'Fort-Funston'
organizationalUnitName:PRINTABLE:'my-organization'
commonName            :PRINTABLE:'myvpn-client1-key'
name                  :PRINTABLE:'myvpn-key'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until May 17 14:03:29 2024 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

Получили три файла на каждого клиента

myvpn-client1-key.crt
myvpn-client1-key.csr
myvpn-client1-key.key

Ну и для комплекта сгенерим ещё и TA ключ.

openvpn --genkey --secret "$EASY_RSA/keys/myvpn-server-ta.key"

В результате добавится ключик ./keys/myvpn-server-ta.key
Поздравляю! С ключами закончили.

Теперь берите пять (5) ключей:

dh1024.pem
ca.crt
myvpn-server-ta.key
myvpn-server-key.crt
myvpn-server-key.key

и копируете на сервер в каталог /etc/openvpn/
Копируете по закрытому соединению. scp например. или флешкой перенесите.
Затем берёте четыре (4) ключа:

ca.crt
myvpn-server-ta.key
myvpn-client1-key.crt
myvpn-client1-key.key

и копируете их на клиента в каталог /etc/openvpn/ или в соответствующий каталог на windows
Аналогично копируете соблюдая меры безопасности.
Теперь осталось сделать конфиги.
Сервер /etc/openvpn/myvpn-server.conf

port 443
proto udp
dev tun1

user nobody
group nogroup

dh       /etc/openvpn/dh1024.pem
ca       /etc/openvpn/ca.crt
cert     /etc/openvpn/myvpn-server-key.crt
key      /etc/openvpn/myvpn-server-key.key
tls-auth /etc/openvpn/myvpn-server-ta.key 0

server 10.10.0.0 255.255.255.0
push "redirect-gateway"
push "dhcp-option DNS 10.10.0.1"
push "explicit-exit-notify 3"

client-config-dir ccd
keepalive 10 60

#duplicate-cn

auth SHA1
cipher AES-256-CBC   # AES
comp-lzo

max-clients 128
persist-key
persist-tun

ifconfig-pool-persist /var/log/openvpn-ipp-udp443.txt
status                /var/log/openvpn-status-udp443.log
log                   /var/log/openvpn-udp443.log
verb 3

Клиенты /etc/openvpn/myvpn-client.conf

client
dev tun1
proto udp
remote xxx.xxx.xxx.xxx 443
resolv-retry infinite
nobind
persist-key
persist-tun

ns-cert-type server

ca       /etc/openvpn/ca.crt
cert     /etc/openvpn/myvpn-client1-key.crt
key      /etc/openvpn/myvpn-client1-key.key
tls-auth /etc/openvpn/myvpn-server-ta.key 1

# разрешаем запускать скрипты
script-security 2
# на поднятие и опускание vpn запускаем скрипт обновления файла resolv.conf
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

cipher AES-256-CBC
log /var/log/openvpn.log
comp-lzo
verb 3

Готово.
Заускаем

# service openvpn start

Проверяем что запустился

# netstat -nlp -A inet | grep openvpn
udp        0      0 0.0.0.0:443             0.0.0.0:*                           2075/openvpn

Теперь важно открыть на Firewall UDP 443 на нужном интерфейсе.

# ufw allow 443/udp

И не забыть проверить и настроить SELinux если он установлен и включён.
Если вдруг openvpn не запустился временно отключить SELinux можно так:

# setenforce 0

Дальше нужно включить автозапуск как на сервере так и на клиентах если это нужно.
Для этого раскомментируем или добавим опцию AUTOSTART

# mcedit /etc/default/openvpn
...
AUTOSTART=all
...