Назад | Перейти на главную страницу

Настроить OpenVPN для блокировки клиентов по ОС?

Есть ли способ настроить сервер OpenVPN так, чтобы он ограничивал клиентов, которые подключаются к нему, операционной системой?

В настоящее время мы используем сервер OpenVPN для подключения наших ноутбуков к нашим серверам на AWS (работающем в VPC). Один из наших клиентов попросил нас запретить доступ к VPN с мобильных устройств, поэтому мы хотим заблокировать клиентов Android, iOS и Windows Phone.

Используйте информацию об узле IV_PLAT и сценарий подключения (на сервере), чтобы отклонять подключения, если они используют неправильную ОС (выход с ненулевым значением)

Здесь есть небольшое объяснение: https://books.google.co.uk/books?id=_1MoDwAAQBAJ&pg=PA318&lpg=PA318&dq=openvpn+peer+info+as+environment+variable&source=bl&ots=CIue3PwB-g&sig=ACfU3U1QW1IKrjiRPyRyBRM1wC6GQlNVeg&hl=en&sa=X&ved=2ahUKEwjawdOe-JfqAhVzsHEKHetZDKwQ6AEwBnoECAwQAQ# v = onepage & q = openvpn% 20peer% 20info% 20as% 20environment% 20variable & f = false

Скопируйте / вставьте сюда для будущих поколений.

  1. Добавьте следующие строки в файл конфигурации сервера basic-udp-server.conf:

    script-security 2 
    client-connect /etc/openvpn/cookbook/example9-11.sh
    
  2. Затем создайте сценарий подключения: /etc/openvpn/cookbook/example9-11.sh

     #!/bin/bash
     # Redirect the default gateway for all Android clients 
     if [ "x_${IV_PLAT}" = "x_android" ] then
       echo "push "redirect-gateway def1" >> $1
     fi
    

Вы можете изменить команду «echo» на «exit 99» или аналогичную, которая должна отключать клиента. (Я не пробовал.) И, очевидно, используйте разные имена для файла conf и скрипта!

OpenVPN делает передать информацию о клиенте на сервер через --push-peer-info ... клиентская ОС входит в число тех элементов, которые выдвигаются и теоретически могут использоваться для проверки соединения на основе ожидаемой / заблокированной клиентской ОС.

Пример журнала сервера:

Tue Dec 19 13:21:42 2017 us=348489 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_PLAT=linux
Tue Dec 19 13:21:42 2017 us=348521 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_PROTO=2
Tue Dec 19 13:21:42 2017 us=348551 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_NCP=2
Tue Dec 19 13:21:42 2017 us=348580 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZ4=1
Tue Dec 19 13:21:42 2017 us=348608 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZ4v2=1
Tue Dec 19 13:21:42 2017 us=348636 v3.rsa.anet.cli.lx64/x.4.232.194:51806 peer info: IV_LZO=1

Поэтому, если у вас есть доступ к серверу OpenVPN, вы можете заблокировать там запросы, используя Пассивное снятие отпечатков пальцев ОС. и osf добавить ОС в белый список.

Я собираюсь написать это для Centos, поскольку именно тогда я его использовал. Вы устанавливаете приложение nfnl_osf, а затем базу данных сигнатур отпечатков пальцев из OpenBSD, чтобы помочь сопоставить машины.

yum -y install libpcap libpcap-devel iptables-utils
wget http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/etc/pf.os?rev=1.27 -O /usr/libexec/iptables/pf.os
nfnl_osf -f /usr/libexec/iptables/pf.os

После того, как мы установили их обе, мы импортируем базу данных в iptables, а затем запускаем следующие команды iptables, чтобы запустить проверку.

iptables -I INPUT -j ACCEPT -p udp --dport 1194 -m osf --genre Windows --log 2 --ttl 2    
iptables -I INPUT -j ACCEPT -p udp --dport 1194 -m osf --genre Mac --log 2 --ttl 2     
iptables -A INPUT -p udp --dport 1194 -j DROP

Надеюсь, это поможет!