Organització del treball remot d'una organització SMB a OpenVPN
Declaració de problemes
L'article descriu l'organització de l'accés remot per als empleats en productes de codi obert i es pot utilitzar tant per construir un sistema completament autònom, com serà útil per a l'expansió quan hi hagi escassetat de llicències en el sistema comercial existent o el seu rendiment sigui insuficient.
L'objectiu de l'article és implementar un sistema complet per proporcionar accés remot a una organització, que és poc més que "instal·lar OpenVPN en 10 minuts".
Com a resultat, obtindrem un sistema en el qual s'utilitzaran certificats i (opcionalment) l'Active Directory corporatiu per autenticar els usuaris. Això. obtindrem un sistema amb dos factors de verificació: el que tinc (certificat) i el que sé (contrasenya).
Un signe que un usuari pot connectar-se és la seva pertinença al grup myVPNUsr. L'autoritat de certificació s'utilitzarà fora de línia.
El cost d'implementar la solució és només de petits recursos de maquinari i 1 hora de treball de l'administrador del sistema.
Utilitzarem una màquina virtual amb OpenVPN i Easy-RSA versió 3 a CetntOS 7, a la qual se li assignen 100 vCPU i 4 GiB de RAM per cada 4 connexions.
A l'exemple, la xarxa de la nostra organització és 172.16.0.0/16, en la qual el servidor VPN amb l'adreça 172.16.19.123 es troba al segment 172.16.19.0/24, servidors DNS 172.16.16.16 i 172.16.17.17 i 172.16.20.0, i sub.23. .XNUMX/XNUMX s'assigna per als clients VPN.
Per connectar-se des de l'exterior, s'utilitza una connexió a través del port 1194/udp i s'ha creat un registre A gw.abc.ru al DNS per al nostre servidor.
No es recomana desactivar SELinux! OpenVPN funciona sense desactivar les polítiques de seguretat.
Utilitzem la distribució CentOS 7.8.2003. Hem d'instal·lar el sistema operatiu en una configuració mínima. És convenient fer-ho utilitzant posada en marxa, clonant una imatge del sistema operatiu instal·lada prèviament i altres mitjans.
Després de la instal·lació, assignant una adreça a la interfície de xarxa (segons els termes de la tasca 172.16.19.123), actualitzem el sistema operatiu:
$ sudo yum update -y && reboot
També hem d'assegurar-nos que la sincronització horària es realitza a la nostra màquina.
Per instal·lar el programari d'aplicació, necessiteu els paquets openvpn, openvpn-auth-ldap, easy-rsa i vim com a editor principal (necessitareu el repositori EPEL).
Aquí es descriuen els paràmetres de l'organització condicional ABC LLC; podeu corregir-los als reals o deixar-los de l'exemple. El més important en els paràmetres és l'última línia, que determina el període de validesa del certificat en dies. L'exemple utilitza el valor 10 anys (365*10+2 anys de traspàs). Aquest valor s'haurà d'ajustar abans d'emetre els certificats d'usuari.
A continuació, configurem una autoritat de certificació autònoma.
La configuració inclou exportar variables, inicialitzar la CA, emetre la clau arrel i el certificat de la CA, la clau Diffie-Hellman, la clau TLS i la clau i el certificat del servidor. La clau CA s'ha de protegir i mantenir en secret! Tots els paràmetres de consulta es poden deixar per defecte.
Això completa la part principal de la configuració del mecanisme criptogràfic.
Configuració d'OpenVPN
Aneu al directori OpenVPN, creeu directoris de serveis i afegiu un enllaç 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/
Creeu el fitxer de configuració principal d'OpenVPN:
$ sudo vim server.conf
continguts següents
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
Algunes notes sobre els paràmetres:
si en emetre el certificat s'ha especificat un nom diferent, indiqueu-lo;
especifiqueu el conjunt d'adreces que s'adaptin a les vostres tasques*;
pot haver-hi una o més rutes i servidors DNS;
Les últimes 2 línies són necessàries per implementar l'autenticació en AD**.
*El rang d'adreces seleccionades a l'exemple permetrà que fins a 127 clients es connectin simultàniament, perquè la xarxa /23 està seleccionada i OpenVPN crea una subxarxa per a cada client utilitzant la màscara /30.
Si és especialment necessari, el port i el protocol es poden canviar, però, cal tenir en compte que canviar el número de port del port implicarà configurar SELinux, i l'ús del protocol tcp augmentarà la sobrecàrrega, perquè El control de lliurament de paquets TCP ja es realitza a nivell de paquets encapsulats al túnel.
**Si no cal l'autenticació a AD, comenta-los, salta la secció següent i a la plantilla elimineu la línia auth-user-pass.
Autenticació AD
Per donar suport al segon factor, utilitzarem la verificació del compte a AD.
Necessitem un compte al domini amb els drets d'un usuari normal i un grup, la pertinença al qual determinarà la possibilitat de connectar-nos.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Expedició i revocació del certificat
Perquè A més dels propis certificats, necessiteu claus i altres configuracions; és molt convenient embolicar tot això en un fitxer de perfil. A continuació, aquest fitxer es transfereix a l'usuari i el perfil s'importa al client OpenVPN. Per fer-ho, crearem una plantilla de configuració i un script que genera el perfil.
Heu d'afegir el contingut dels fitxers de certificat arrel (ca.crt) i de clau TLS (ta.key) al perfil.
Abans d'emetre certificats d'usuari no oblideu establir el període de validesa requerit per als certificats al fitxer de paràmetres. No hauríeu de fer-ho massa llarg; us recomano limitar-vos a un màxim de 180 dies.
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>
Notes:
cordes POSA EL TEU... canvi de contingut la seva certificats;
a la directiva remota, especifiqueu el nom/adreça de la vostra passarel·la;
la directiva auth-user-pass s'utilitza per a l'autenticació externa addicional.
Al directori d'inici (o un altre lloc convenient) creem un script per sol·licitar un certificat i 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 ~
Fent executable el fitxer:
chmod a+x ~/make.profile.sh
I podem emetre el nostre primer certificat.
~/make.profile.sh my-first-user
retirada
En cas de compromís d'un certificat (pèrdua, robatori), cal revocar aquest certificat:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Consulta els certificats emesos i revocats
Per veure els certificats emesos i revocats, només cal que visualitzeu el fitxer d'índex:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Explicació:
la primera línia és el certificat del servidor;
primer personatge
V (vàlid) - vàlid;
R (Revocat) - recordat.
Configuració de la xarxa
Els últims passos són configurar la xarxa de transmissió: enrutament i tallafocs.
En un entorn corporatiu, és probable que hi hagi subxarxes i hem d'indicar als encaminadors com enviar paquets destinats als nostres clients VPN. A la línia d'ordres executem l'ordre de la manera (segons l'equip utilitzat):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
i deseu la configuració.
A més, a la interfície de l'encaminador de frontera on es serveix l'adreça externa gw.abc.ru, cal permetre el pas dels paquets udp/1194.
En cas que l'organització tingui regles de seguretat estrictes, també s'ha de configurar un tallafoc al nostre servidor VPN. En la meva opinió, la major flexibilitat es proporciona configurant les cadenes d'iptables FORWARD, encara que configurar-les és menys convenient. Una mica més sobre com configurar-los. Per fer-ho, és més convenient utilitzar "regles directes": regles directes, emmagatzemades en un fitxer /etc/firewalld/direct.xml. La configuració actual de les regles es pot trobar de la següent manera:
$ sudo firewall-cmd --direct --get-all-rule
Abans de canviar un fitxer, feu-ne una còpia de seguretat:
Aquestes són essencialment regles d'iptables regulars, d'altra manera empaquetades després de l'arribada de firewalld.
La interfície de destinació amb la configuració predeterminada és tun0 i la interfície externa del túnel pot ser diferent, per exemple, ens192, segons la plataforma utilitzada.
L'última línia és per registrar els paquets abandonats. Perquè el registre funcioni, heu de canviar el nivell de depuració a la configuració del tallafoc:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
L'aplicació de la configuració és l'ordre habitual de firewalld per tornar a llegir la configuració:
$ sudo firewall-cmd --reload
Podeu veure els paquets deixats com aquest:
grep forward_fw /var/log/messages
Què és el següent
Això completa la configuració!
Només queda instal·lar el programari client al costat del client, importar el perfil i connectar-se. Per als sistemes operatius Windows, el kit de distribució es troba activat lloc del desenvolupador.
Finalment, connectem el nostre nou servidor als sistemes de monitorització i arxiu, i no oblidem instal·lar actualitzacions periòdicament.