Задача звучит так, нужно запретить доступ к сети OpenVPN устройству, а это у меня — Raspberry Pi 3 Model B (Операционная система Raspbian Stretch). Запрет подразумевает не просто заблокировать правила фаервола доступ, а отозвать сгенерированный сертификат на основе которого осуществляется доступ. И пометить на OpenVPN-сервере под управлением Ubuntu 18.04 Server — что данный сертификат нельзя использовать при подключении.

Шаг №1: Есть заметка Настройка OpenVPN клиент на Raspbian Stretch где я показал как настраивается OpenVPN клиент на Raspbian Stretch чтобы через него с USBмодема (ZTE MF823D) получить откуда угодно доступ в локальную сеть.

root@srv-vpn:~# tail -f /var/log/openvpn/openvpn-status.log | grep raspbian

192.168.0.0/24,craspbian,176.59.38.0:1104,Thu Nov 21 13:45:22 2019

10.8.0.22,craspbian,176.59.38.0:1104,Thu Nov 21 13:47:13 2019

root@srv-vpn:~# ping -n 4 10.8.0.22

connect: Invalid argument

root@srv-vpn:~# ssh -l pi 10.8.0.22 "uname -a"

pi@10.8.0.22's password:

Linux raspberrypi 4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 armv7l GNU/Linux

root@srv-vpn:~#

Шаг №2: Что нужно сделать дабы теперь запретить доступ с сертификатом выданным миникомпьютеру — у меня он именуется, как: craspbian.key, craspbian.crt. Для этого подключаюсь на свой OpenVPN сервер через клиент SSH со своей рабочей системы:

ekzorchik@navy:~$ ssh -l root vpn.remote.ru -p 22

root@srv-vpn:~# cd /etc/openvpn/easy-rsa/

root@srv-vpn:/etc/openvpn/easy-rsa# . ./vars

root@srv-vpn:/etc/openvpn/easy-rsa# ./revoke-full craspbian

Using configuration from /etc/openvpn/easy-rsa/openssl.cnf

Can't load /root/.rnd into RNG

140711028244928:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd

Revoking Certificate 06.

Data Base Updated

Using configuration from /etc/openvpn/easy-rsa/openssl.cnf

Can't load /root/.rnd into RNG

140155723407808:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:88:Filename=/root/.rnd

C = RU, ST = RU, L = MOSCOW, O = RUSSIAN, OU = ekzorchik, CN = craspbian, name = EasyRSA, emailAddress = support@ekzorchik.ru

error 23 at 0 depth lookup: certificate revoked

error craspbian.crt: verification failed

root@srv-vpn:/etc/openvpn/easy-rsa#

В выводе выше присутствует ошибка “error 23” — это естественная ошибка в там случае когда отзывается сертификат. В результате в директории keys создается файл: crl.pem

root@srv-vpn:/etc/openvpn/easy-rsa# ls keys/crl.pem && file keys/crl.pem

keys/crl.pem

keys/crl.pem: ASCII text

root@srv-vpn:/etc/openvpn/easy-rsa#

Который содержит необходимую информацию для отзыва сертификата. Перемещаю его в корневую директорию /etc/openvpn:

root@srv-vpn:/etc/openvpn/easy-rsa# cp keys/crl.pem /etc/openvpn

root@srv-vpn:/etc/openvpn/easy-rsa# cd ~

Далее открываю конфигурационный файл OpenVPN-сервера и в самом низу к примеру добавляю нижеследующую строчку:

root@srv-vpn:~# nano /etc/openvpn/server.conf

crl-verify /etc/openvpn/crl.pem

После не забывает сохранить внесенные изменения.

Перезапускаю OpenVPN-сервис на сервере где работает серверная часть OpenVPN для завершения процесса отзыва сертификата:

root@srv-vpn:~# systemctl restart openvpn

После чего когда кто-либо будет устанавливать соединение с моим OpenVPN-сервером, сам сервис OpenVPN будет проверять список отозванных сертификатов. Если сертификат есть – соединение будет отклонено.

А если все же клиентских сертификат нужен и нужно чтобы клиент вновь был членом OpenVPN сети следует закомментировать строку в openvpn.conf, но только если это один единственный отозванный сертификат. Исходя из этого нужно вести список кому и какой сертификат выдался и список отозванных сертификатов. Я делаю так, а Вы.

Итого я практически разобрал, как отзываются клиентские сертификаты на OpenVPN сервере под управлением Ubuntu 18.04 Server amd64. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.