De acordo com este post , common_name
não pode ser falsificado pelo usuário.
Adicione isso ao 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
contém
#!/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
Atualizar
Isto é para o OpenVPN 2.1.4. No 2.2.0, eles adicionaram muitas variáveis novas que você pode ver env >> /tmp/env
, onde uma dessas novas variáveis é a impressão digital / número de série dos certificados.
auth-user-pass-verify /etc/openvpn/scripts/connect.sh via-env
para obter o nome de usuário do usuário. Você sabe se eu também posso obter o ID do certificado que o usuário está usando? Nesse caso, posso escrever um script Perl que verifique um arquivo yaml com IDs de certificação conhecidas.Eu não sou um profissional de segurança, sou rigoroso com segurança. Sua pergunta atinge precisamente o núcleo da segurança de TI: confiança. A meu ver, nunca se deve presumir que Bob possa ser confiável. Claro, Bob pode ser um cara muito legal e confiável. Ele trabalha na sua empresa há mais de 20 anos. No entanto, a pessoa "Bob" é totalmente irrelevante em sua infraestrutura de TI.
Bob usa 'relés' arbitrários que permitem acesso. Os relés podem ser qualquer coisa: uma senha, certificado, token de hardware, verificação de íris, DNA. São chaves que permitem o acesso ao seu sistema. Se sua pergunta é sobre a verificação da identidade da pessoa que está usando uma chave, a única resposta honesta provavelmente é que você precisará estar na mesma sala. Em todos os outros casos, acho que você não deve se assegurar de que Bob realmente é Bob e que atualmente não está sendo mantido à mão armada enquanto obtém seu acesso. Portanto, no seu plano de design de infraestrutura de TI, o lógico é não se referir a "Bob": uma entidade obteve acesso ao seu site.
Como você só pode realmente saber que 'uma entidade' obteve acesso com uma chave que você distribuiu no passado, a perspectiva correta provavelmente é limitar o número de portas que a chave pode abrir. Quanto mais chaves você passa, menos portas se abrem.
O OpenVPN também tem uma opção para permitir apenas uma conexão simultânea por chave. Então, se Alice fizer login com a chave de Bob enquanto Bob já estiver dentro, terá acesso negado a Alice. Infelizmente, isso também significa que Bob não pode fazer login quando Alice estiver logada com a chave de Bob. Portanto, você deve configurar seu sistema para informá-lo sobre tentativas simultâneas de login de vários IPs de origem. E comece os dois quando ocorrer alguma violação, para que Bob precise discar para obter ajuda.
O ponto é: não se assegure de coisas das quais não tenha certeza e lembre-se disso ao criar seu plano de segurança. Suponha que sempre exista uma pessoa mais inteligente lá fora, muito à sua frente, que mal pode esperar para provar que está errado ... apenas 'pelo prazer'. :-)
fonte