OpenVPN

Создание сертификата для удалённого подключения

Создание сертификатов

Рабочие директории

/etc/openvpn/ccd – директория с конфигурацией пользователей
/etc/openvpn/easy-rsa/pki/issued – директория для подписанных сертификатов пользователей
/etc/openvpn/easy-rsa/pki/private – директоря для приватных ключей пользователей
/etc/openvpn/easy-rsa/easyrsa – утилита для генераци сертфикатов

Генерация сертификатов

1. Запускаем утилиту easyrsa

cd /etc/openvpn/easy-rsa/ 
./easyrsa gen-req fursov.m nopass

image.pngВ процессе работы команды, будет задан вопрос о Common Name (основного имени сертификата).

Можно просто оставить пустым и нажать Enter.

После чего будут сгенерированы два файла *.req – запрос и *.key – закрытый ключ. Так же будут выведены пути, куда положила их программа.

2. Подписание запроса центром сертификации

Когда запрос сформирован, его необходимо подписать командой

./easyrsa sign-req client fursov.m

image.png

У вас уточнят, действительно-ли вы уверены, что вы выпускаете сертификат для данного пользователя.

Необходимо напечатать слово yes и нажать Enter

После подтверждения, будет запрошен пароль от CA, для подписания закрытым ключом и выпуска сертификата

image.png

Вбиваем пароль получаем подписанный сертификат.

image.png

Сборка файла конфигурации для пользователя

У нас на руках есть закрытый и открытый ключи пользователя, теперь из них необходимо собрать файл, при помощи которого пользователь сможет подключаться к сети Центра.

  1.  Открываем блокнот, и кладем в него этот шаблон:

client

dev tun

proto udp

remote 195.9.131.215 1194

resolv-retry infinite

nobind

persist-key

persist-tun

comp-lzo

verb 3

cipher AES-256-CBC

key-direction 1

<ca>

-----BEGIN CERTIFICATE-----

MIIDHjCCAgagAwIBAgIJAK/2Z5IR0hJ2MA0GCSqGSIb3DQEBCwUAMA8xDTALBgNV

BAMMBHBldHIwHhcNMTgxMTIwMDg0ODU3WhcNMjgxMTE3MDg0ODU3WjAPMQ0wCwYD

VQQDDARwZXRyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtAluFx9N

2x29m5scKiHZMc7aISZG2pplP1/HgsOcHF+Dynn7QX0om/0bVmXIsYhTM+69zpAz

E1+Cz05//WIgkptdsaDN/PZ3jnN3YO5/4pwXmNciBR0sqgxE8Te/1sLxZ3DfYcId

cwAARmYraX+1/eADfuBnIXckJT355ec1UCCq9rWOKx4Kcic8NY70dkRWW0YzvW0/

O+oSWi1lck3w7d8GY3doLcy1MmGp6JSceJhlpJ0uJY0h47hcra8lmw3BRsZ9P7Wp

3e0pOqdUs6EEF9eVw6dRlTz760O+BtsNk1VP03FxnBbhfobdj4VulG1/G2an73G7

d1OJyYkhzqu24QIDAQABo30wezAdBgNVHQ4EFgQUMHhGjjVpCKWVMTLaAX3+kXJK

h8EwPwYDVR0jBDgwNoAUMHhGjjVpCKWVMTLaAX3+kXJKh8GhE6QRMA8xDTALBgNV

BAMMBHBldHKCCQCv9meSEdISdjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAN

BgkqhkiG9w0BAQsFAAOCAQEAO0ASfcJszUuqoMYMBl3BC3fBu0yXOZwbKX9hX6T1

7hdQAwEqv+VE8w0Ja8fOKm3pKueZtyxWHP7t4lNjk8/sODXxfErhDqI0w+mBBUMs

FvNBN2MQpscVpW0AvrbxtMYvywMaMRdmrF9aw6Hb1rrZ9AYxC3KsCOPXyHG7ZnrR

R4zt0gCNhOmewbCXcC2hEFbFNvQAfVpB1dcEl9xLd4r2M1vhVwRpGUmnqhnWxhsF

RnNl0KjwzPzMybGijP66Ya0EVv+IeiG4ZKQKQzPf0rYz79DDnZHT1zbRFcHCqz7x

6+rtSuz8PUxq3B6Ee0DeubJZvTw+jMYesPoywX3hMJo90w==

-----END CERTIFICATE-----

</ca>

 

<key>

-----BEGIN PRIVATE KEY-----

Закрытая часть ключа

-----END PRIVATE KEY-----

</key>

 

<cert>

-----BEGIN CERTIFICATE-----

Открытая часть ключа

-----END CERTIFICATE-----

</cert>

<tls-auth>

-----BEGIN OpenVPN Static key V1-----

38a041d63962b26c49e7f8f8419e23a8

b99e62ef7a34001c1a65b4b986195c1b

b8ea61c23cf922628ec1d5020babedc1

c4390b327aeeba9f06df3a680a2bf3d3

f9dc41c83511442073097512c90c27ce

c2fbce1708e34fe2ee797d19da83bcfa

c1dfa76e89456c3c0a48543bcb27f5a2

515b02cc0ea8b994d803c8123f08c2b4

7a3aeade557b90b75ca5275d1570033b

277621b89581faeabc5e2f81668ada18

184dcff965e7fd101147063972ff5062

44dc19f5078e535a9aad747c8efc671c

73b88e1810f71ac9b1ac2cef1fbdca53

cf701498ffa8995a59209f05597f853f

c844ecce0bc8ade8d6763fcabfc15a99

da7937c25e63c53d13d2b480da3b521d

-----END OpenVPN Static key V1-----

</tls-auth>

     2.  Далее открываем на сервере по очереди сертификат пользователя и его закрытый ключ, и вставляем содержимое в шаблон, вместо полей «Закрытая часть ключа» и «Открытая часть ключа»

cat /etc/openvpn/easy-rsa/pki/private/fursov.m.key

image.png

3.  Берем ту часть, которая находится между строками BEGIN PRIVATE KEY и END PRIVATE KEY и вставляем ее в конфиг

4.  Тоже самое и с открытой частью

cat /etc/openvpn/easy-rsa/pki/issued/fursov.m.crt

И не смотря на длинный вывод, так же берем только часть, между BEGIN CERTIFICATE и END CERTIFICATE и вставляем в конфиг.

image.png

5. Конфиг готов, сохраняем его себе на компьютер с расширением *.ovpn

Настройка маршрутов пользователя

1.       Нам необходимо определить какой адрес будет у пользователя при подключении и куда ему разрешается ходить.

2.       Для начала найдем свободный ip-адрес

 grep -rn 10.8.0. /etc/openvpn/ccd

 Команда grep пройдет по всем файлам в директории и выведет в консоль все совпадения с 10.8.0. – адресация openvpn

 3.       Выбираем любой адрес, которого нет в списке от 2 до 254

Проверить что вы не просмотрели свободный адрес, можно той же командой grep, вбив адрес целиком. К примеру:

grep -rn 10.8.0.38 /etc/openvpn/ccd  - найдет в конфиге такой адрес и выведет его в консоль
grep -rn 10.8.0.119 /etc/openvpn/ccd – такого адреса нет, и в консоль ничего не выведет

 

image.png

4.    Создаем конфигурационный файл пользователя

touch /etc/openvpn/ccd/fursov.m

5.    Прописываем в нем конфигурацию

 nano /etc/openvpn/ccd/fursov.m

ifconfig-push 10.8.0.111 255.255.255.0

push "route 10.10.20.105 255.255.255.255"

image.png

Ifconfig-push – какой адрес и какую маску присваивать клиенту

push route – какой маршрут ему давать (до какого узла внутри сети можно будет ходить). В данном случае задан один адрес, но при желании можно указать несколько.

push "route 10.10.20.105 255.255.255.255"

push "route 10.10.20.106 255.255.255.255"

push "route 10.10.20.107 255.255.255.255"

и т.д.

6.       Сохраняем данный конфиг и оставляем в этой директории.

Настройка фаервола

 

      6.1.       На данном шаге у нас уже имеются сертификаты пользователя, его конфиг и настройка. Осталось добавить разрешающие правила в фаервол, чтобы сервер пропустил клиента к его рабочему месту.

      6.2.       В качестве фаервола на сервере настроен iptables

      6.3.       Чтобы посмотреть текущие настройки iptables, можно ввести команду

iptables -vnL

где ключи 

vverbose т.е. подробный вывод

nnumeric, вывод адресов в цифровом формате. По умолчанию он пытается вместо адресов прописать имена хостов

Llist. Собственно, вывести все содержимое

В ответ мы получим достаточно большую табличку с правилами.

image.png

Основными полями являются source (откуда) destination (куда) ну и комментарий, чтобы каждый раз не искать по конфигам, чей это адрес.

    4.       Для того чтобы добавить новое правило, пишем

iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.122/32 -d 10.10.10.96/32 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m– 1C"

Соответственно -s источник отправления (наш адрес клиента), -d адрес назначения, куда мы ему разрешаем ходить. Ну и комментарий.

   5.   Если необходимо прописать еще и порт

iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.119/32 -d 10.10.21.151/32 -p tcp --destination-port 3389 -m conntrack --ctstate NEW -j ACCEPT -m comment --comment "fursov.m – 1C" 

   6.      Еще раз выведем iptables и удостоверимся, что правило появилось

image.png

   7.       (Опционально) Перезапуск openvpn. На случай если при подключении от пользователя, по какой-то причине не применились правила, или что-то работает не корректно. При данном действии, у других пользователей могут порваться сессии, и он отвалятся.

 systemctl restart openvpn@server

   8.       ОБЯЗАТЕЛЬНО ЗАРЕЗЕРВИРОВАТЬ IP КОМПЬЮТЕРА, ИНАЧЕ ПОСЛЕ СМЕНЫ IP НЕОБХОДИМО БУДЕТ МЕНЯТЬ ПРАВИЛО

Проверка работоспособности конфига

image.png

image.png

image.png

image.png

 

 

Удаление правил и отзыв сертификата

 

  1. Если случайно добавили не, то правило в iptables или старое просто нужно удалить, то в выводе команды iptables необходимо добавить еще один ключик –-line-numbers, который добавит в вывод нумерацию строк.image.png

iptables -vnL --line-numbers

Для удаления нужного правила, просто вводим

iptables -D FORWARD номер

номер – собственно номер правила.

iptables -D FORWARD 1 – удалит наше правило.

Отзыв сертификата

Для отзыва сертификата, мы используем ту же самую утилиту easyrsa

./easyrsa revoke fursov.m

В процессе отзыва будет задан вопрос «уверены-ли вы», на который отвечаем yes

А так же будет запрошен пароль CA для отзыва сертификата

image.png

После отзыва сертификата, утилита в консоли напомнит, что необходимо будет обновить файлик crl – файл, в котором содержится список всех отозванных сертификатов.

Делается это в пару команд:

1.       Генерация нового файла CRL:

/etc/openvpn/easy-rsa/easyrsa gen-crl

 (запросит пароль CA)

2.       Копирование его в нужную директорию:

cp /etc/openvpn/easy-rsa/pki/crl/pem /etc/openvpn/keys/crl.pem

Система спросит, перезаписать-ли файл, вводим – y

image.png

3.       Перезапускаем сервер openvpn, чтобы настройки применились.

systemctl restart openvpn@server

Список выданных и отозванных сертификатов

Можно посмотреть в файле

cat /etc/openvpn/easy-rsa/pki/index.txt

RRevoke, отозванный сертификат

VValid, действующий сертификат

Сохранение правил iptables

1.       Если после внесения изменений в iptables, сервер перезагрузится, то те правила, которые были добавлены последние, не сохранятся.

Для сохранения правил используется команда 

iptables-save > /etc/sysconfig/iptables_04_02_2025

 

2.       Последняя часть в сохраняемом файле, просто дата сохранения, чтобы потом можно было понять в какой момент, какие изменения были внесены

3.       Для восстановления правил, используем 

iptables-restore < /etc/sysconfig/ iptables_28_01_2025

 

Отправление файлов пользователю

Если пользователю необходим доступ до своего компьютера

1.       Не забываем добавить в dhcp резервирование его ip адреса, чтобы он не менялся, и пользователь всегда мог подключиться к своему компьютеру.

2.       Не забываем положить сам клиент openvpn в архив, иначе пользователь может самостоятельно скачать что-нибудь не то.

3.       Если пользователь будет подключаться по RDP, желательно так же сохранить ему в архив уже настроенный RDP файлик с его логином и адресом подключения.

4.       Архив очень желательно запаролить.

P.S. Как альтернатива резервированию в dhcp, можно указать имя компьютера KP-WS-0001 к примеру. ДНС имя всегда актуально и обновляется вместе с ip адресом.