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.

Contingut

  1. Instal·lació de SO i programari d'aplicació
  2. Configuració de la criptografia
  3. Configuració d'OpenVPN
  4. Autenticació AD
  5. Posada en marxa i diagnòstic
  6. Expedició i revocació del certificat
  7. Configuració de la xarxa
  8. Què és el següent

Instal·lació de SO i programari d'aplicació

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).

$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim

És útil instal·lar un agent convidat per a una màquina virtual:

$ sudo yum install open-vm-tools

per als amfitrions VMware ESXi o per a oVirt

$ sudo yum install ovirt-guest-agent

Configuració de la criptografia

Aneu al directori easy-rsa:

$ cd /usr/share/easy-rsa/3/

Creeu un fitxer variable:

$ sudo vim vars

el contingut següent:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="[email protected]"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ru"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

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.

cd /usr/share/easy-rsa/3/
. ./vars
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req myvpngw nopass
./easyrsa sign-req server myvpngw
./easyrsa gen-crl
openvpn --genkey --secret pki/ta.key

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.

Creeu un fitxer de configuració:

/etc/openvpn/ldap.conf

continguts següents

<LDAP>
        URL             "ldap://ldap.abc.ru"
        BindDN          "CN=bindUsr,CN=Users,DC=abc,DC=ru"
        Password        b1ndP@SS
        Timeout         15
        TLSEnable       no
        FollowReferrals yes
</LDAP>
<Authorization>
        BaseDN          "OU=allUsr,DC=abc,DC=ru"
        SearchFilter    "(sAMAccountName=%u)"
        RequireGroup    true
        <Group>
                BaseDN          "OU=myGrp,DC=abc,DC=ru"
                SearchFilter    "(cn=myVPNUsr)"
                MemberAttribute "member"
        </Group>
</Authorization>

Paràmetres clau:

  • URL "ldap://ldap.abc.ru" - adreça del controlador de domini;
  • BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" - nom canònic per a l'enllaç a LDAP (UZ - bindUsr al contenidor abc.ru/Users);
  • Contrasenya b1ndP@SS — contrasenya d'usuari per a l'enllaç;
  • BaseDN "OU=allUsr,DC=abc,DC=ru" — el camí des del qual començar a cercar l'usuari;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – contenidor del grup que permet (agrupa myVPNUsr al contenidor abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" és el nom del grup que permet.

Posada en marxa i diagnòstic

Ara podem intentar activar i iniciar el nostre servidor:

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

Comprovació d'inici:

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.

Permetre connexions al tallafoc local:

$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent

A continuació, activeu l'encaminament del trànsit IP:

$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf

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:

cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bak

El contingut aproximat del fitxer és:

<?xml version="1.0" encoding="utf-8"?>
<direct>
 <!--Common Remote Services-->
  <!--DNS-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT</rule>
  <!--web-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--Some Other Systems-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--just logging-->
    <rule priority="1" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '</rule>
</direct>

Explicacions

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.

Connexió estable!

Font: www.habr.com

Afegeix comentari