Согласно этому посту , common_name
не может быть подделан пользователем.
Добавьте это к openvpn server.conf
script-security 2
# untrusted state
auth-user-pass-verify /etc/openvpn/scripts/check_cn_on_connect.sh via-env
/etc/openvpn/scripts/check_cn_on_connect.sh
содержит
#!/bin/bash
# username and common_name must be the same to allow access.
# users are not allowed to share their cert
if [ $username != $common_name ]; then
echo "$(date +%Y%m%d-%H%M%S) DENIED username=$username cert=$common_name" >> /var/log/openvpn-access.log
exit 1
fi
echo "$(date +%Y%m%d-%H%M%S) GRANTED username=$username cert=$common_name" >> /var/log/openvpn-access.log
exit 0
Обновить
Это для OpenVPN 2.1.4. В 2.2.0 они добавили много новых переменных, по которым вы можете видеть env >> /tmp/env
, где одной из этих новых переменных является отпечаток / серийный номер сертификата.
auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-env
чтобы получить имя пользователя пользователя. Вы знаете, могу ли я также получить идентификатор из сертификата, который использует пользователь? Если так, то я могу написать сценарий Perl, который проверяет файл yaml с известными идентификаторами сертификатов.Я не профессионал в области безопасности, я строго отношусь к безопасности. Ваш вопрос точно достигает сути информационной безопасности: доверие. Насколько я понимаю, никогда не следует предполагать, что Бобу можно доверять. Конечно, Боб может быть действительно хорошим и заслуживающим доверия парнем. Он работает в вашей компании более 20 лет. Однако человек «Боб» совершенно не имеет отношения к вашей ИТ-инфраструктуре.
Боб использует произвольные «реле», которые разрешают доступ. Реле может быть любым: пароль, сертификат, аппаратный токен, сканирование радужной оболочки, ДНК. Это ключи, которые разрешают доступ к вашей системе. Если ваш вопрос касается проверки личности человека, который использует ключ, единственный честный ответ, вероятно, заключается в том, что вам придется находиться в одной комнате. Во всех других случаях я думаю, что вы не должны уверять себя, что этот Боб действительно Боб и в настоящее время его не держат под дулом пистолета, пока он получает доступ. Поэтому в вашем плане проектирования ИТ-инфраструктуры логично не ссылаться на «Боба»: объект получил доступ к вашему сайту.
Поскольку вы действительно можете знать, что «сущность» получила доступ с помощью ключа, который вы раздавали в прошлом, правильная перспектива, вероятно, заключается в ограничении количества дверей, которые ключ может открыть. Чем больше ключей вы раздаете, тем меньше дверей они открывают.
OpenVPN также имеет возможность разрешить только одно одновременное соединение для каждого ключа. Затем, если Алиса входит в систему с ключом Боба, когда Боб уже находится внутри, Алисе будет отказано в доступе. К сожалению, это также означает, что Боб не может войти в систему, когда Алиса входит в систему с ключом Боба. Поэтому вы должны настроить свою систему так, чтобы она информировала вас о одновременных попытках входа с нескольких исходных IP-адресов. И начните оба, когда произойдет какое-то нарушение, так что Бобу придется позвонить за помощью.
Суть в том, что вы не должны быть уверены в вещах, в которых вы не уверены, и помните об этом при разработке плана обеспечения безопасности. Предположим, что всегда есть умный человек, далеко впереди вас, который не может дождаться, чтобы доказать, что вы ошибаетесь ... просто "за лулз". :-)
источник