Organización do traballo remoto dunha organización de pemes en OpenVPN
Declaración de problemas
O artigo describe a organización do acceso remoto para os empregados en produtos de código aberto e pode ser usado tanto para construír un sistema completamente autónomo, como será útil para a súa expansión cando haxa escaseza de licenzas no sistema comercial existente ou o seu rendemento sexa insuficiente.
O obxectivo do artigo é implementar un sistema completo para proporcionar acceso remoto a unha organización, que é pouco máis que "instalar OpenVPN en 10 minutos".
Como resultado, obteremos un sistema no que se utilizarán certificados e (opcionalmente) o Active Directory corporativo para autenticar usuarios. Iso. obteremos un sistema con dous factores de verificación: o que teño (certificado) e o que sei (contrasinal).
Un sinal de que un usuario pode conectarse é a súa pertenza ao grupo myVPNUsr. A autoridade de certificación empregarase sen conexión.
O custo de implementación da solución é só de pequenos recursos de hardware e 1 hora de traballo do administrador do sistema.
Usaremos unha máquina virtual con OpenVPN e Easy-RSA versión 3 en CetntOS 7, á que se lle asignan 100 vCPU e 4 GiB de RAM por cada 4 conexións.
No exemplo, a rede da nosa organización é 172.16.0.0/16, na que o servidor VPN co enderezo 172.16.19.123 está situado no segmento 172.16.19.0/24, os servidores DNS 172.16.16.16 e 172.16.17.17 e 172.16.20.0, e a subrede 23. .XNUMX/XNUMX está asignado para clientes VPN.
Para conectarse desde fóra, utilízase unha conexión a través do porto 1194/udp e creouse un rexistro A gw.abc.ru no DNS para o noso servidor.
Non se recomenda estrictamente desactivar SELinux! OpenVPN funciona sen desactivar as políticas de seguranza.
Usamos a distribución CentOS 7.8.2003. Necesitamos instalar o sistema operativo nunha configuración mínima. É conveniente facelo usando kickstart, clonando unha imaxe do sistema operativo instalada previamente e outros medios.
Despois da instalación, asignando un enderezo á interface de rede (segundo os termos da tarefa 172.16.19.123), actualizamos o SO:
$ sudo yum update -y && reboot
Tamén temos que asegurarnos de que a sincronización horaria se realiza na nosa máquina.
Para instalar o software da aplicación, necesitará os paquetes openvpn, openvpn-auth-ldap, easy-rsa e vim como editor principal (necesitará o repositorio EPEL).
Aquí descríbense os parámetros para a organización condicional ABC LLC; pode corrixilos aos reais ou deixalos do exemplo. O máis importante nos parámetros é a última liña, que determina o período de validez do certificado en días. O exemplo usa o valor 10 anos (365*10+2 anos bisiestos). Este valor terá que ser axustado antes de emitir certificados de usuario.
A continuación, configuramos unha autoridade de certificación autónoma.
A configuración inclúe a exportación de variables, a inicialización da CA, a emisión da clave raíz e o certificado da CA, a clave Diffie-Hellman, a clave TLS e a clave e o certificado do servidor. A chave CA debe estar coidadosamente protexida e manterse en segredo. Todos os parámetros de consulta pódense deixar como predeterminados.
Isto completa a parte principal da configuración do mecanismo criptográfico.
Configurando OpenVPN
Vaia ao directorio OpenVPN, cree directorios de servizos e engade unha ligazón a easy-rsa:
cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/
Cree o ficheiro de configuración principal de OpenVPN:
$ sudo vim server.conf
contidos seguintes
port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf
Algunhas notas sobre os parámetros:
se se especificou un nome diferente ao emitir o certificado, indíqueo;
especifique o conxunto de enderezos para adaptarse ás súas tarefas*;
pode haber unha ou máis rutas e servidores DNS;
As últimas 2 liñas son necesarias para implementar a autenticación en AD**.
*O rango de enderezos seleccionados no exemplo permitirá que ata 127 clientes se conecten simultaneamente, porque a rede /23 está seleccionada e OpenVPN crea unha subrede para cada cliente usando a máscara /30.
Se é especialmente necesario, pódese cambiar o porto e o protocolo, non obstante, hai que ter en conta que cambiar o número de porto do porto implicará configurar SELinux, e o uso do protocolo tcp aumentará a sobrecarga, porque O control de entrega de paquetes TCP xa se realiza a nivel de paquetes encapsulados no túnel.
**Se non é necesaria a autenticación en AD, coméntaas, omite a seguinte sección e no modelo eliminar a liña auth-user-pass.
Autenticación AD
Para soportar o segundo factor, utilizaremos a verificación da conta en AD.
Necesitamos unha conta no dominio cos dereitos dun usuario común e dun grupo, a pertenza no que determinará a posibilidade de conectarse.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Expedición e revogación do certificado
Porque Ademais dos propios certificados, necesitas claves e outras configuracións; é moi cómodo envolver todo isto nun ficheiro de perfil. Este ficheiro transfírese entón ao usuario e o perfil impórtase no cliente OpenVPN. Para iso, crearemos un modelo de configuración e un script que xere o perfil.
Debe engadir o contido dos ficheiros de certificado raíz (ca.crt) e clave TLS (ta.key) ao perfil.
Antes de emitir certificados de usuario non esqueza establecer o período de validez necesario para os certificados no ficheiro de parámetros. Non debes facelo demasiado longo; recoméndoche que te limites a un máximo de 180 días.
vim /usr/share/easy-rsa/3/vars
...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpn
client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>
key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>
Notas:
cordas POÑA O TEU... cambiar ao contido dos seus certificados;
na directiva remota, especifique o nome/enderezo da súa pasarela;
a directiva auth-user-pass úsase para a autenticación externa adicional.
No directorio de inicio (ou outro lugar conveniente) creamos un script para solicitar un certificado e crear un perfil:
vim ~/make.profile.sh
#!/bin/bash
if [ -z "$1" ] ; then
echo Missing mandatory client name. Usage: $0 vpn-username
exit 1
fi
#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn
#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client
cd $basepath
if [ -f client/$client* ]; then
echo "*** ERROR! ***"
echo "Certificate $client already issued!"
echo "*** ERROR! ***"
exit 1
fi
. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client
#Make profile
cp $clntpath/template.ovpn $profile
echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile
echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt
echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile
#remove tmp file
rm -f $basepath/$1.crt
echo Complete. See $profile file.
cd ~
Facendo o ficheiro executable:
chmod a+x ~/make.profile.sh
E podemos emitir o noso primeiro certificado.
~/make.profile.sh my-first-user
Comentarios
En caso de compromiso dun certificado (pérda, roubo), é necesario revogar este certificado:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Consulta os certificados emitidos e revogados
Para ver os certificados emitidos e revogados, basta con ver o ficheiro índice:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Explicacións:
a primeira liña é o certificado do servidor;
primeiro personaxe
V (válido) - válido;
R (Revogado) - recordado.
Configuración da rede
Os últimos pasos son configurar a rede de transmisión: enrutamento e cortalumes.
Nun entorno corporativo, é probable que haxa subredes e teñamos que indicarlle aos enrutadores como enviar paquetes destinados aos nosos clientes VPN. Na liña de comandos executamos o comando do xeito (dependendo do equipo utilizado):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
e gardar a configuración.
Ademais, na interface do enrutador de fronteira onde se serve o enderezo externo gw.abc.ru, é necesario permitir o paso de paquetes udp/1194.
No caso de que a organización teña regras de seguridade estritas, tamén se debe configurar un firewall no noso servidor VPN. Na miña opinión, a maior flexibilidade prodúcese configurando cadeas FORWARD de iptables, aínda que configuralas é menos conveniente. Un pouco máis sobre configuralos. Para iso, é máis conveniente usar "regras directas": regras directas, almacenadas nun ficheiro /etc/firewalld/direct.xml. A configuración actual das regras pódese atopar da seguinte maneira:
$ sudo firewall-cmd --direct --get-all-rule
Antes de cambiar un ficheiro, faga unha copia de seguridade do mesmo:
Estas son esencialmente regras de iptables habituais, doutro xeito empaquetadas despois da chegada do firewalld.
A interface de destino coa configuración predeterminada é tun0, e a interface externa para o túnel pode ser diferente, por exemplo, ens192, dependendo da plataforma utilizada.
A última liña é para rexistrar paquetes soltos. Para que o rexistro funcione, cómpre cambiar o nivel de depuración na configuración do firewalld:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Aplicar a configuración é o comando habitual de firewalld para volver ler a configuración:
$ sudo firewall-cmd --reload
Podes ver os paquetes soltos como este:
grep forward_fw /var/log/messages
Que hai a continuación
Isto completa a configuración!
Só queda instalar o software do cliente no lado do cliente, importar o perfil e conectarse. Para os sistemas operativos Windows, o kit de distribución atópase activado sitio para desenvolvedores.
Finalmente, conectamos o noso novo servidor aos sistemas de seguimento e arquivo, e non esquezamos instalar actualizacións regularmente.