Organizacija oddaljenega dela organizacije SMB na OpenVPN

Izjava o težavah

Članek opisuje organizacijo oddaljenega dostopa za zaposlene do odprtokodnih produktov in se lahko uporablja tako za izgradnjo popolnoma avtonomnega sistema kot tudi za širitev, ko v obstoječem komercialnem sistemu primanjkuje licenc ali je njegova zmogljivost nezadostna.

Cilj članka je implementacija celotnega sistema za zagotavljanje oddaljenega dostopa do organizacije, kar je malo več kot »namestitev OpenVPN v 10 minutah«.

Kot rezultat bomo dobili sistem, v katerem bodo za avtentikacijo uporabnikov uporabljeni certifikati in (opcijsko) korporativni imenik Active Directory. to. dobili bomo sistem z dvema faktorjema preverjanja - kaj imam (certifikat) in kaj vem (geslo).

Znak, da je uporabniku dovoljeno povezovanje, je njegovo članstvo v skupini myVPNUsr. Overitelj potrdil bo uporabljen brez povezave.

Cena implementacije rešitve je le majhna strojna oprema in 1 ura dela sistemskega administratorja.

Uporabili bomo virtualni stroj z OpenVPN in Easy-RSA različico 3 na CetntOS 7, ki ima dodeljene 100 vCPU-je in 4 GiB RAM-a na 4 povezav.

V primeru je omrežje naše organizacije 172.16.0.0/16, v katerem se strežnik VPN z naslovom 172.16.19.123 nahaja v segmentu 172.16.19.0/24, strežnika DNS 172.16.16.16 in 172.16.17.17 ter podomrežje 172.16.20.0. .23/XNUMX je dodeljen za odjemalce VPN.

Za povezavo od zunaj se uporablja povezava prek vrat 1194/udp, v DNS za naš strežnik pa je ustvarjen A-zapis gw.abc.ru.

Strogo ni priporočljivo onemogočiti SELinux! OpenVPN deluje brez onemogočanja varnostnih pravilnikov.

Vsebina

  1. Namestitev OS in aplikacijske programske opreme
  2. Nastavitev kriptografije
  3. Konfiguracija OpenVPN
  4. Preverjanje pristnosti AD
  5. Zagon in diagnostika
  6. Izdaja in preklic potrdila
  7. Nastavitev omrežja
  8. Kaj je naslednje?

Namestitev OS in aplikacijske programske opreme

Uporabljamo distribucijo CentOS 7.8.2003. OS moramo namestiti v minimalni konfiguraciji. To je priročno narediti z uporabo kickstart, kloniranje predhodno nameščene slike OS in druga sredstva.

Po namestitvi, dodelitvi naslova omrežnemu vmesniku (v skladu s pogoji naloge 172.16.19.123), posodobimo OS:

$ sudo yum update -y && reboot

Prav tako moramo zagotoviti, da se na našem stroju izvaja časovna sinhronizacija.
Za namestitev aplikacijske programske opreme potrebujete pakete openvpn, openvpn-auth-ldap, easy-rsa in vim kot glavni urejevalnik (potrebovali boste repozitorij EPEL).

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

Koristno je namestiti gostujočega agenta za virtualni stroj:

$ sudo yum install open-vm-tools

za gostitelje VMware ESXi ali za oVirt

$ sudo yum install ovirt-guest-agent

Nastavitev kriptografije

Pojdite v imenik easy-rsa:

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

Ustvari spremenljivo datoteko:

$ sudo vim vars

naslednjo vsebino:

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

Parametri za pogojno organizacijo ABC LLC so opisani tukaj, lahko jih popravite na dejanske ali jih pustite iz primera. Najpomembnejša stvar v parametrih je zadnja vrstica, ki določa obdobje veljavnosti potrdila v dnevih. Primer uporablja vrednost 10 let (365*10+2 prestopni leti). To vrednost bo treba prilagoditi pred izdajo uporabniških potrdil.

Nato konfiguriramo avtonomnega overitelja potrdil.

Nastavitev vključuje izvoz spremenljivk, inicializacijo CA, izdajo korenskega ključa CA in potrdila, ključa Diffie-Hellman, ključa TLS ter ključa in potrdila strežnika. CA ključ mora biti skrbno varovan in tajen! Vse parametre poizvedbe lahko pustite kot privzete.

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

S tem je glavni del nastavitve kriptografskega mehanizma zaključen.

Konfiguracija OpenVPN

Pojdite v imenik OpenVPN, ustvarite imenike storitev in dodajte povezavo do 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/

Ustvarite glavno konfiguracijsko datoteko OpenVPN:

$ sudo vim server.conf

naslednje vsebine

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

Nekaj ​​opomb o parametrih:

  • če je bilo ob izdaji potrdila navedeno drugo ime, ga navedite;
  • določite skupino naslovov, ki ustreza vašim nalogam*;
  • obstaja lahko ena ali več poti in DNS strežnikov;
  • Zadnji 2 vrstici sta potrebni za implementacijo avtentikacije v AD**.

*Razpon naslovov, izbran v primeru, bo omogočil hkratno povezavo do 127 odjemalcev, ker izbrano je omrežje /23 in OpenVPN ustvari podomrežje za vsakega odjemalca z uporabo maske /30.
Če je posebej potrebno, je mogoče spremeniti vrata in protokol, vendar je treba upoštevati, da bo sprememba številke vrat povzročila konfiguracijo SELinuxa, uporaba protokola tcp pa bo povečala stroške, ker Nadzor dostave paketov TCP se izvaja že na ravni paketov, enkapsuliranih v tunelu.

**Če avtentikacija v AD ni potrebna, jih komentirajte, preskočite naslednji razdelek in v predlogi odstranite vrstico auth-user-pass.

Preverjanje pristnosti AD

Za podporo drugemu dejavniku bomo uporabili preverjanje računa v AD.

V domeni potrebujemo račun s pravicami navadnega uporabnika in skupine, članstvo v kateri bo določalo možnost povezovanja.

Ustvarite konfiguracijsko datoteko:

/etc/openvpn/ldap.conf

naslednje vsebine

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

Osnovne parametre:

  • URL “ldap://ldap.abc.ru” - naslov krmilnika domene;
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - kanonično ime za vezavo na LDAP (UZ - bindUsr v vsebniku abc.ru/Users);
  • Geslo b1ndP@SS — uporabniško geslo za vezavo;
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — pot, s katere se začne iskanje uporabnika;
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – vsebnik dovoljene skupine (skupina myVPNUsr v vsebniku abc.rumyGrp);
  • SearchFilter "(cn=myVPNUsr)" je ime skupine, ki omogoča.

Zagon in diagnostika

Zdaj lahko poskusimo omogočiti in zagnati naš strežnik:

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

Preverjanje ob zagonu:

systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

Izdaja in preklic potrdila

Ker Poleg samih potrdil potrebujete ključe in druge nastavitve, zelo priročno je, da vse to zavijete v eno datoteko profila. Ta datoteka se nato prenese k uporabniku in profil se uvozi v odjemalca OpenVPN. Za to bomo ustvarili predlogo nastavitev in skript, ki ustvari profil.

V profil morate dodati vsebino datotek korenskega potrdila (ca.crt) in ključev TLS (ta.key).

Pred izdajo uporabniških potrdil ne pozabite nastaviti zahtevanega obdobja veljavnosti potrdil v datoteki s parametri. Ne smete trajati predolgo; priporočam, da se omejite na največ 180 dni.

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>

Opombe:

  • linije POSTAVITE SVOJ... sprememba vsebine njihovo potrdila;
  • v oddaljeni direktivi določite ime/naslov vašega prehoda;
  • direktiva auth-user-pass se uporablja za dodatno zunanjo avtentikacijo.

V domačem imeniku (ali drugem priročnem mestu) ustvarimo skripto za zahtevo po potrdilu in ustvarjanje profila:

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 ~

Naredite datoteko izvršljivo:

chmod a+x ~/make.profile.sh

In lahko izdamo svoj prvi certifikat.

~/make.profile.sh my-first-user

Povratne informacije

V primeru ogroženosti certifikata (izguba, kraja) je potrebno to potrdilo preklicati:

cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl

Ogled izdanih in preklicanih certifikatov

Če si želite ogledati izdana in preklicana potrdila, si oglejte indeksno datoteko:

cd /usr/share/easy-rsa/3/
cat pki/index.txt

Pojasnilo:

  • prva vrstica je potrdilo strežnika;
  • prvi znak
    • V (veljaven) - veljaven;
    • R (preklicano) - odpoklicano.

Nastavitev omrežja

Zadnji koraki so konfiguracija prenosnega omrežja – usmerjanje in požarni zidovi.

Dovolite povezave v lokalnem požarnem zidu:

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

Nato omogočite usmerjanje prometa IP:

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

V poslovnem okolju je verjetno, da obstaja podomrežje in usmerjevalnikom moramo povedati, kako naj pošiljajo pakete, namenjene našim odjemalcem VPN. V ukazni vrstici izvedemo ukaz na način (odvisno od uporabljene opreme):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

in shranite konfiguracijo.

Poleg tega je treba na mejnem vmesniku usmerjevalnika, kjer se streže zunanji naslov gw.abc.ru, omogočiti prehod paketov udp/1194.

V primeru, da ima organizacija stroga varnostna pravila, mora biti na našem VPN strežniku konfiguriran tudi požarni zid. Po mojem mnenju je največja prilagodljivost zagotovljena z nastavitvijo verig iptables FORWARD, čeprav je njihova nastavitev manj priročna. Še nekaj o njihovi postavitvi. Če želite to narediti, je najbolj priročno uporabiti "neposredna pravila" - neposredna pravila, shranjena v datoteki /etc/firewalld/direct.xml. Trenutna konfiguracija pravil je na voljo na naslednji način:

$ sudo firewall-cmd --direct --get-all-rule

Preden spremenite datoteko, naredite njeno varnostno kopijo:

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

Približna vsebina datoteke je:

<?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>

Pojasnila

To so v bistvu običajna pravila iptables, sicer pakirana po pojavu požarnega zidu.

Ciljni vmesnik s privzetimi nastavitvami je tun0, zunanji vmesnik za tunel pa je lahko drugačen, na primer ens192, odvisno od uporabljene platforme.

Zadnja vrstica je za beleženje odpadlih paketov. Da bo prijava delovala, morate spremeniti raven odpravljanja napak v konfiguraciji požarnega zidu:

vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2

Uporaba nastavitev je običajen ukaz požarnega zidu za ponovno branje nastavitev:

$ sudo firewall-cmd --reload

Izpuščene pakete si lahko ogledate takole:

grep forward_fw /var/log/messages

Kaj je naslednje?

S tem je nastavitev končana!

Ostane le še namestitev odjemalske programske opreme na strani odjemalca, uvoz profila in povezava. Za operacijske sisteme Windows se distribucijski komplet nahaja na spletno mesto razvijalca.

Na koncu povežemo naš novi strežnik s sistemi za spremljanje in arhiviranje ter ne pozabimo redno nameščati posodobitev.

Stabilna povezava!

Vir: www.habr.com

Dodaj komentar