SMB organisatsiooni kaugtöö korraldamine OpenVPN-is
Probleemi avaldus
Artiklis kirjeldatakse avatud lähtekoodiga toodete töötajate kaugjuurdepääsu korraldamist ja seda saab kasutada nii täiesti autonoomse süsteemi ehitamiseks kui ka laienemiseks, kui olemasolevas kommertssüsteemis napib litsentse või selle jõudlus on ebapiisav.
Artikli eesmärk on juurutada terviklik süsteem organisatsioonile kaugjuurdepääsu pakkumiseks, mis pole midagi enamat kui "OpenVPN-i installimine 10 minutiga".
Selle tulemusena saame süsteemi, milles kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevõtte Active Directoryt. See. saame süsteemi, millel on kaks kontrolltegurit - mis mul on (sertifikaat) ja mida ma tean (parool).
Märk, et kasutajal on lubatud ühendust luua, on tema kuulumine gruppi myVPNUsr. Sertifikaadi väljastamist kasutatakse võrguühenduseta.
Lahenduse juurutamise maksumuseks on vaid väikesed riistvararessursid ja 1 tund süsteemiadministraatori tööd.
Kasutame CetntOS 3-s OpenVPN-i ja Easy-RSA versiooniga 7 virtuaalset masinat, millele on eraldatud 100 vCPU-d ja 4 GiB RAM-i 4 ühenduse kohta.
Näites on meie organisatsiooni võrk 172.16.0.0/16, milles VPN-server aadressiga 172.16.19.123 asub segmendis 172.16.19.0/24, DNS-serverid 172.16.16.16 ja 172.16.17.17, alamvõrk 172.16.20.0. .23/XNUMX on eraldatud VPN-i klientidele .
Väljastpoolt ühendamiseks kasutatakse ühendust pordi 1194/udp kaudu ning meie serveri DNS-is on loodud A-kirje gw.abc.ru.
SELinuxi keelamine ei ole rangelt soovitatav! OpenVPN töötab ilma turvapoliitikat keelamata.
Kasutame CentOS 7.8.2003 distributsiooni. Peame installima OS-i minimaalses konfiguratsioonis. Seda on mugav teha kasutades stardipauk, varem installitud OS-i kujutise kloonimine ja muud vahendid.
Samuti peame tagama, et meie masinas toimuks aja sünkroonimine.
Rakendustarkvara installimiseks vajate peamise redaktorina pakette openvpn, openvpn-auth-ldap, easy-rsa ja vim (vajate EPEL-i hoidlat).
Siin on kirjeldatud tingimusliku organisatsiooni ABC LLC parameetreid, saate need korrigeerida tegelikeks või jätta need näitest välja. Kõige olulisem parameetrites on viimane rida, mis määrab sertifikaadi kehtivusaja päevades. Näites kasutatakse väärtust 10 aastat (365*10+2 liigaastat). Seda väärtust tuleb enne kasutajasertifikaatide väljastamist kohandada.
Järgmisena konfigureerime autonoomse sertifitseerimisasutuse.
Seadistamine hõlmab muutujate eksportimist, CA lähtestamist, CA juurvõtme ja sertifikaadi, Diffie-Hellmani võtme, TLS-võtme ning serveri võtme ja sertifikaadi väljastamist. CA võtit tuleb hoolikalt kaitsta ja hoida salajas! Kõik päringu parameetrid saab jätta vaikeväärtusteks.
See lõpetab krüptomehhanismi seadistamise põhiosa.
OpenVPN-i konfigureerimine
Minge OpenVPN-i kataloogi, looge teenusekataloogid ja lisage easy-rsa link:
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/
Looge peamine OpenVPN-i konfiguratsioonifail:
$ sudo vim server.conf
järgmine sisu
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
Mõned märkused parameetrite kohta:
kui tunnistuse väljastamisel oli märgitud muu nimi, siis märkida see;
määrake oma ülesannetele sobiv aadresside kogum*;
marsruute ja DNS-servereid võib olla üks või mitu;
Viimased 2 rida on vajalikud autentimise rakendamiseks AD**-s.
*Näites valitud aadresside vahemik võimaldab üheaegselt ühenduse luua kuni 127 kliendil, sest valitakse võrk /23 ja OpenVPN loob iga kliendi jaoks alamvõrgu, kasutades maski /30.
Eriti vajadusel saab porti ja protokolli muuta, kuid tuleb meeles pidada, et pordi pordi numbri muutmine eeldab SELinuxi seadistamist ja tcp-protokolli kasutamine suurendab ülekulu, kuna TCP-pakettide edastamise juhtimine toimub juba tunnelisse kapseldatud pakettide tasemel.
**Kui AD-s autentimist pole vaja, kommenteerige neid, jätke järgmine jaotis vahele ja mallis eemalda auth-user-pass rida.
AD autentimine
Teise teguri toetamiseks kasutame AD-s konto kinnitamist.
Vajame domeenis tavakasutaja õigustega kontot ja gruppi, mille liikmelisus määrab ühenduse loomise võimaluse.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikaadi väljastamine ja tühistamine
Sest Lisaks sertifikaatidele on teil vaja võtmeid ja muid seadeid, väga mugav on see kõik ühte profiilifaili pakkida. See fail edastatakse seejärel kasutajale ja profiil imporditakse OpenVPN-i klienti. Selleks loome seadete malli ja skripti, mis genereerib profiili.
Peate profiilile lisama juursertifikaadi (ca.crt) ja TLS-võtme (ta.key) failide sisu.
Enne kasutajasertifikaatide väljastamist ärge unustage määrata sertifikaatidele nõutavat kehtivusaega parameetrite failis. Te ei tohiks seda liiga pikaks teha; soovitan piirduda maksimaalselt 180 päevaga.
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>
Märkused:
read PANE OMA... muuta sisuks nende sertifikaadid;
kaugkäskkirjas määrake oma lüüsi nimi/aadress;
Täiendavaks väliseks autentimiseks kasutatakse käskkirja auth-user-pass.
Kodukataloogis (või muus mugavas kohas) koostame skripti sertifikaadi taotlemiseks ja profiili loomiseks:
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 ~
Faili käivitatavaks muutmine:
chmod a+x ~/make.profile.sh
Ja me saame väljastada oma esimese tunnistuse.
~/make.profile.sh my-first-user
Vaadata
Sertifikaadi ohustamise korral (kaotsiminek, vargus) on vaja see sertifikaat kehtetuks tunnistada:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Vaadake väljaantud ja kehtetuks tunnistatud sertifikaate
Väljastatud ja kehtetuks tunnistatud sertifikaatide vaatamiseks vaadake lihtsalt registrifaili:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Selgitus:
esimene rida on serveri sertifikaat;
esimene tegelane
V (Kehtiv) - kehtiv;
R (Tühistatud) – tagasi kutsutud.
Võrgu konfiguratsioon
Viimased sammud on edastusvõrgu konfigureerimine – marsruutimine ja tulemüürid.
Ettevõttekeskkonnas on tõenäoliselt alamvõrk ja me peame ruuteri(te)le ütlema, kuidas saata meie VPN-i klientidele mõeldud pakette. Käsureal täidame käsu järgmiselt (olenevalt kasutatavast seadmest):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
ja salvestage konfiguratsioon.
Lisaks on piirimarsruuteri liideses, kus serveeritakse välisaadressi gw.abc.ru, vaja lubada udp/1194 pakettide läbimist.
Kui organisatsioonil on ranged turvareeglid, tuleb meie VPN-serveris konfigureerida ka tulemüür. Minu arvates pakub suurimat paindlikkust iptablesi FORWARDi kettide seadistamine, kuigi nende seadistamine pole nii mugav. Veidi lähemalt nende seadistamisest. Selleks on kõige mugavam kasutada "otsereegleid" - otsereegleid, mis on salvestatud faili /etc/firewalld/direct.xml. Reeglite praegune konfiguratsioon on järgmine:
Need on sisuliselt tavalised iptablesi reeglid, muidu pakitud pärast tulemüüri tulekut.
Vaikesätetega sihtliides on tun0 ja tunneli väline liides võib olenevalt kasutatavast platvormist olla erinev, näiteks ens192.
Viimane rida on langenud pakettide logimiseks. Logimise toimimiseks peate tulemüüri konfiguratsioonis muutma silumimistaset:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Seadete rakendamine on tavaline tulemüüri käsk sätete uuesti lugemiseks:
$ sudo firewall-cmd --reload
Kukkunud pakette saate vaadata järgmiselt:
grep forward_fw /var/log/messages
mis edasi
See lõpetab seadistamise!
Jääb vaid installida kliendi poolele klienditarkvara, importida profiil ja ühendada. Windowsi operatsioonisüsteemide puhul asub jaotuskomplekt aadressil arendaja sait.
Lõpuks ühendame oma uue serveri seire- ja arhiveerimissüsteemidega ning ärge unustage regulaarselt värskendusi installida.