ProHoster > Blog > uprava > Organizacija udaljenog rada SMB organizacije na OpenVPN
Organizacija udaljenog rada SMB organizacije na OpenVPN
Formuliranje problema
Članak opisuje organizaciju daljinskog pristupa za zaposlenike na proizvodima otvorenog koda i može se koristiti kako za izgradnju potpuno autonomnog sustava, tako i bit će koristan za proširenje kada postoji manjak licenci u postojećem komercijalnom sustavu ili njegove performanse nisu dovoljne.
Cilj članka je implementacija cjelovitog sustava za pružanje udaljenog pristupa organizaciji, što je malo više od “instalacije OpenVPN-a u 10 minuta”.
Kao rezultat, dobit ćemo sustav u kojem će se za autentifikaciju korisnika koristiti certifikati i (po izboru) korporativni Active Directory. Da. dobit ćemo sustav s dva faktora provjere - što imam (certifikat) i što znam (lozinka).
Znak da je korisniku dopušteno povezivanje je njegovo članstvo u grupi myVPNUsr. Tijelo za izdavanje certifikata koristit će se izvan mreže.
Trošak implementacije rješenja su samo mali hardverski resursi i 1 sat rada administratora sustava.
Koristit ćemo virtualni stroj s OpenVPN i Easy-RSA verzijom 3 na CetntOS 7, kojem su dodijeljena 100 vCPU-a i 4 GiB RAM-a na 4 veza.
U primjeru, mreža naše organizacije je 172.16.0.0/16, u kojoj se VPN poslužitelj s adresom 172.16.19.123 nalazi u segmentu 172.16.19.0/24, DNS poslužitelji 172.16.16.16 i 172.16.17.17, a podmreža 172.16.20.0 .23/XNUMX je dodijeljen za VPN klijente.
Za spajanje izvana koristi se veza preko porta 1194/udp, a za naš poslužitelj je u DNS-u kreiran A-record gw.abc.ru.
Strogo se ne preporučuje isključivanje SELinuxa! OpenVPN radi bez onemogućavanja sigurnosnih pravila.
Koristimo distribuciju CentOS 7.8.2003. Moramo instalirati OS u minimalnoj konfiguraciji. Prikladno je to učiniti pomoću Kickstart, kloniranje prethodno instalirane slike OS-a i druga sredstva.
Nakon instalacije, dodjeljivanjem adrese mrežnom sučelju (prema uvjetima zadatka 172.16.19.123), ažuriramo OS:
$ sudo yum update -y && reboot
Također moramo biti sigurni da se sinkronizacija vremena izvodi na našem stroju.
Za instaliranje aplikacijskog softvera potrebni su vam paketi openvpn, openvpn-auth-ldap, easy-rsa i vim kao glavni editor (trebat će vam EPEL repozitorij).
Ovdje su opisani parametri za uvjetnu organizaciju ABC LLC, možete ih ispraviti na stvarne ili ostaviti iz primjera. Najvažnija stvar u parametrima je zadnji redak koji određuje rok valjanosti certifikata u danima. Primjer koristi vrijednost 10 godina (365*10+2 prijestupne godine). Ovu će vrijednost trebati prilagoditi prije izdavanja korisničkih certifikata.
Zatim konfiguriramo autonomno tijelo za izdavanje certifikata.
Postavljanje uključuje izvoz varijabli, inicijaliziranje CA, izdavanje CA korijenskog ključa i certifikata, Diffie-Hellman ključa, TLS ključa te poslužiteljskog ključa i certifikata. CA ključ mora biti pažljivo zaštićen i tajan! Svi parametri upita mogu se ostaviti kao zadani.
Time je završen glavni dio postavljanja kriptografskog mehanizma.
Postavljanje OpenVPN-a
Idite na direktorij OpenVPN, kreirajte direktorije usluga i dodajte vezu na 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/
Napravite glavnu OpenVPN konfiguracijsku datoteku:
$ sudo vim server.conf
sljedeće sadržaje
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
Neke napomene o parametrima:
ako je prilikom izdavanja potvrde navedeno drugo ime, navesti ga;
navedite skup adresa koje odgovaraju vašim zadacima*;
može postojati jedna ili više ruta i DNS poslužitelja;
Zadnja 2 retka potrebna su za implementaciju autentifikacije u AD**.
*Raspon adresa odabranih u primjeru omogućit će do 127 klijenata da se povežu istovremeno, jer odabrana je mreža /23, a OpenVPN stvara podmrežu za svakog klijenta koristeći masku /30.
Ako je posebno potrebno, port i protokol se mogu promijeniti, međutim, treba imati na umu da će promjena broja porta porta podrazumijevati konfiguraciju SELinuxa, a korištenje tcp protokola će povećati troškove, jer Kontrola isporuke TCP paketa već se izvodi na razini paketa enkapsuliranih u tunelu.
**Ako provjera autentičnosti u AD-u nije potrebna, komentirajte ih, preskočite sljedeći odjeljak i u predlošku uklonite redak auth-user-pass.
AD autentifikacija
Kako bismo podržali drugi faktor, koristit ćemo potvrdu računa u AD-u.
Potreban nam je račun u domeni s pravima običnog korisnika i grupe, članstvo u kojoj će odrediti mogućnost povezivanja.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Izdavanje i opoziv certifikata
Jer Osim samih certifikata, potrebni su vam ključevi i druge postavke; vrlo je zgodno sve to zamotati u jednu datoteku profila. Ta se datoteka zatim prenosi korisniku, a profil se uvozi na OpenVPN klijent. Da bismo to učinili, izradit ćemo predložak postavki i skriptu koja generira profil.
Prije izdavanja korisničkih certifikata ne zaboravite postaviti potrebno razdoblje valjanosti za certifikate u datoteci s parametrima. Ne biste trebali trajati predugo; preporučujem da se ograničite na najviše 180 dana.
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>
Bilješke:
žice STAVI SVOJ... promijeniti sadržaj njihov potvrde;
u udaljenoj direktivi navedite naziv/adresu vašeg pristupnika;
direktiva auth-user-pass koristi se za dodatnu vanjsku provjeru autentičnosti.
U početnom imeniku (ili na drugom prikladnom mjestu) kreiramo skriptu za traženje certifikata i kreiranje 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 ~
Učinite datoteku izvršnom:
chmod a+x ~/make.profile.sh
I možemo izdati naš prvi certifikat.
~/make.profile.sh my-first-user
Pregledajte
U slučaju kompromitacije certifikata (gubitak, krađa), potrebno je opozvati ovaj certifikat:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Pregledajte izdane i opozvane certifikate
Za pregled izdanih i opozvanih certifikata jednostavno pogledajte indeksnu datoteku:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Objašnjenje:
prvi redak je certifikat poslužitelja;
prvi lik
V (Validan) - valjan;
R (Revoked) - opozvano.
Konfiguracija mreže
Posljednji koraci su konfiguracija prijenosne mreže - usmjeravanje i vatrozid.
U poslovnom okruženju vjerojatno će postojati podmreža i moramo usmjerivačima reći kako da šalju pakete namijenjene našim VPN klijentima. Na naredbenom retku izvršavamo naredbu na način (ovisno o opremi koja se koristi):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
i spremite konfiguraciju.
Dodatno, na sučelju graničnog usmjerivača gdje se poslužuje vanjska adresa gw.abc.ru, potrebno je omogućiti prolaz udp/1194 paketa.
U slučaju da organizacija ima stroga sigurnosna pravila, vatrozid također mora biti konfiguriran na našem VPN poslužitelju. Po mom mišljenju, najveću fleksibilnost pruža postavljanje iptables FORWARD lanaca, iako je njihovo postavljanje manje zgodno. Još malo o njihovom postavljanju. Da biste to učinili, najprikladnije je koristiti "izravna pravila" - izravna pravila, pohranjena u datoteci /etc/firewalld/direct.xml. Trenutna konfiguracija pravila može se pronaći na sljedeći način:
$ sudo firewall-cmd --direct --get-all-rule
Prije promjene datoteke napravite sigurnosnu kopiju:
Ovo su u biti redovita pravila za iptables, inače pakirana nakon pojave firewallda.
Odredišno sučelje sa zadanim postavkama je tun0, a vanjsko sučelje za tunel može biti drugačije, na primjer, ens192, ovisno o korištenoj platformi.
Posljednji red je za bilježenje odbačenih paketa. Da bi prijavljivanje radilo, trebate promijeniti razinu otklanjanja pogrešaka u konfiguraciji vatrozida:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Primjena postavki uobičajena je naredba vatrozida za ponovno čitanje postavki:
$ sudo firewall-cmd --reload
Ispuštene pakete možete vidjeti ovako:
grep forward_fw /var/log/messages
što dalje
Ovo dovršava postavljanje!
Ostaje samo instalirati klijentski softver na strani klijenta, uvesti profil i spojiti se. Za Windows operativne sustave, distribucijski komplet se nalazi na stranica za programere.
Konačno, povezujemo naš novi server sa sustavima za praćenje i arhiviranje, i ne zaboravite redovito instalirati ažuriranja.