Organisasie van afgeleë werk van 'n SMB-organisasie op OpenVPN
Probleemstelling
Die artikel beskryf die organisasie van afstandtoegang vir werknemers op oopbronprodukte en kan beide gebruik word om 'n heeltemal outonome stelsel te bou, en sal nuttig wees vir uitbreiding wanneer daar 'n tekort aan lisensies in die bestaande kommersiële stelsel is of die werkverrigting daarvan onvoldoende is.
Die doel van die artikel is om 'n volledige stelsel te implementeer vir die verskaffing van afstandtoegang aan 'n organisasie, wat bietjie meer is as om OpenVPN binne 10 minute te installeer.
Gevolglik sal ons 'n stelsel kry waarin sertifikate en (opsioneel) die korporatiewe Active Directory gebruik sal word om gebruikers te staaf. Daardie. ons sal 'n stelsel kry met twee verifikasiefaktore - wat ek het (sertifikaat) en wat ek weet (wagwoord).
'n Teken dat 'n gebruiker toegelaat word om te koppel, is hul lidmaatskap in die myVPNUsr-groep. Die sertifikaatowerheid sal vanlyn gebruik word.
Die koste van die implementering van die oplossing is slegs klein hardewarehulpbronne en 1 uur se werk van die stelseladministrateur.
Ons sal 'n virtuele masjien met OpenVPN en Easy-RSA weergawe 3 op CetntOS 7 gebruik, wat 100 vCPU's en 4 GiB RAM per 4 verbindings toegeken word.
In die voorbeeld is ons organisasie se netwerk 172.16.0.0/16, waarin die VPN-bediener met die adres 172.16.19.123 geleë is in die segment 172.16.19.0/24, DNS-bedieners 172.16.16.16 en 172.16.17.17, sub .172.16.20.0/23 word vir VPN-kliënte toegeken.
Om van buite af te koppel, word 'n verbinding via poort 1194/udp gebruik, en 'n A-rekord gw.abc.ru is in die DNS vir ons bediener geskep.
Dit word streng nie aanbeveel om SELinux uit te skakel nie! OpenVPN werk sonder om sekuriteitsbeleide te deaktiveer.
Installasie van bedryfstelsel en toepassingsagteware
Ons gebruik die CentOS 7.8.2003 verspreiding. Ons moet die bedryfstelsel in 'n minimale konfigurasie installeer. Dit is gerieflik om dit te doen met behulp van skop begin, kloning van 'n voorheen geïnstalleerde OS-beeld en ander maniere.
Na die installasie, toewysing van 'n adres aan die netwerkkoppelvlak (volgens die bepalings van taak 172.16.19.123), werk ons die bedryfstelsel op:
$ sudo yum update -y && reboot
Ons moet ook seker maak dat tydsinchronisasie op ons masjien uitgevoer word.
Om toepassingsagteware te installeer, benodig u die openvpn-, openvpn-auth-ldap-, easy-rsa- en vim-pakkette as hoofredigeerder (jy sal die EPEL-bewaarplek nodig hê).
Die parameters vir die voorwaardelike organisasie ABC LLC word hier beskryf; u kan dit regstel na die regte of dit uit die voorbeeld laat. Die belangrikste ding in die parameters is die laaste reël, wat die geldigheidstydperk van die sertifikaat in dae bepaal. Die voorbeeld gebruik die waarde 10 jaar (365*10+2 skrikkeljare). Hierdie waarde sal aangepas moet word voordat gebruikerssertifikate uitgereik word.
Vervolgens stel ons 'n outonome sertifiseringsowerheid op.
Opstelling sluit die uitvoer van veranderlikes, die inisiasie van die CA, die uitreiking van die CA-wortelsleutel en sertifikaat, Diffie-Hellman-sleutel, TLS-sleutel en bedienersleutel en sertifikaat in. Die CA-sleutel moet versigtig beskerm en geheim gehou word! Alle navraagparameters kan as verstek gelaat word.
Dit voltooi die hoofgedeelte van die opstel van die kriptografiese meganisme.
Stel OpenVPN op
Gaan na die OpenVPN-gids, skep diensgidse en voeg 'n skakel by 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/
Skep die hoof OpenVPN-konfigurasielêer:
$ sudo vim server.conf
volgende inhoud
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
Enkele notas oor die parameters:
indien 'n ander naam by die uitreiking van die sertifikaat gespesifiseer is, dui dit aan;
spesifiseer die poel adresse om by jou take te pas*;
daar kan een of meer roetes en DNS-bedieners wees;
Die laaste 2 reëls is nodig om verifikasie in AD** te implementeer.
*Die reeks adresse wat in die voorbeeld gekies is, sal tot 127 kliënte gelyktydig toelaat om te koppel, omdat die /23-netwerk word gekies, en OpenVPN skep 'n subnet vir elke kliënt wat die /30-masker gebruik.
Indien dit veral nodig is, kan die poort en protokol verander word, maar dit moet in gedagte gehou word dat die verandering van die poortpoortnommer die konfigurasie van SELinux sal behels, en die gebruik van die tcp-protokol sal bokoste verhoog, want TCP-pakkieafleweringsbeheer word reeds uitgevoer op die vlak van pakkies wat in die tonnel ingekapsuleer is.
** As stawing in AD nie nodig is nie, lewer kommentaar daarop, slaan die volgende afdeling oor en in die sjabloon verwyder die gesag-gebruiker-paslyn.
AD-verifikasie
Om die tweede faktor te ondersteun, sal ons rekeningverifikasie in AD gebruik.
Ons benodig 'n rekening in die domein met die regte van 'n gewone gebruiker en 'n groep, lidmaatskap waarin die vermoë om te koppel sal bepaal.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikaat uitreiking en herroeping
Omdat Benewens die sertifikate self, benodig u sleutels en ander instellings; dit is baie gerieflik om dit alles in een profiellêer toe te draai. Hierdie lêer word dan na die gebruiker oorgedra en die profiel word op die OpenVPN-kliënt ingevoer. Om dit te doen, sal ons 'n instellings sjabloon en 'n skrif skep wat die profiel genereer.
Jy moet die inhoud van die wortelsertifikaat (ca.crt) en TLS sleutel (ta.key) lêers by die profiel voeg.
Voordat u gebruikerssertifikate uitreik moenie vergeet om die vereiste geldigheidstydperk vir sertifikate in te stel nie in die parameterlêer. Jy moet dit nie te lank maak nie; Ek beveel aan om jouself tot 'n maksimum van 180 dae te beperk.
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>
Notas:
lyne SIT JOU... verander na inhoud eie sertifikate;
spesifiseer die naam/adres van jou poort in die afstandaanwysing;
die outoriteit-gebruikerspas-aanwysing word gebruik vir bykomende eksterne verifikasie.
In die tuisgids (of ander gerieflike plek) skep ons 'n skrif om 'n sertifikaat aan te vra en 'n profiel te skep:
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 ~
Maak die lêer uitvoerbaar:
chmod a+x ~/make.profile.sh
En ons kan ons eerste sertifikaat uitreik.
~/make.profile.sh my-first-user
Onthou
In die geval van kompromie van 'n sertifikaat (verlies, diefstal), is dit nodig om hierdie sertifikaat te herroep:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Bekyk uitgereikte en herroepe sertifikate
Om uitgereikte en herroepe sertifikate te sien, bekyk eenvoudig die indekslêer:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Verduidelikings:
die eerste reël is die bedienersertifikaat;
eerste karakter
V (Geldig) - geldig;
R (Herroep) - herroep.
Netwerkkonfigurasie
Die laaste stappe is om die transmissienetwerk op te stel - roetering en firewalls.
In 'n korporatiewe omgewing sal daar waarskynlik subnetwerk wees en ons moet die router(s) vertel hoe om pakkies te stuur wat vir ons VPN-kliënte bestem is. Op die opdragreël voer ons die opdrag uit op die manier (afhangende van die toerusting wat gebruik word):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
en stoor die konfigurasie.
Daarbenewens, op die grensroeteerderkoppelvlak waar die eksterne adres gw.abc.ru bedien word, is dit nodig om die deurgang van udp/1194-pakkies toe te laat.
As die organisasie streng sekuriteitsreëls het, moet 'n firewall ook op ons VPN-bediener opgestel word. Na my mening word die grootste buigsaamheid verskaf deur iptables FORWARD-kettings op te stel, hoewel dit minder gerieflik is om dit op te stel. 'N bietjie meer oor die opstel van hulle. Om dit te doen, is dit die gerieflikste om "direkte reëls" te gebruik - direkte reëls, gestoor in 'n lêer /etc/firewalld/direct.xml. Die huidige opstelling van die reëls kan soos volg gevind word:
$ sudo firewall-cmd --direct --get-all-rule
Voordat jy 'n lêer verander, maak 'n rugsteunkopie daarvan:
In wese is dit gereelde iptables-reëls, anders verpak na die koms van firewalld.
Die bestemmingskoppelvlak met verstekinstellings is tun0, en die eksterne koppelvlak vir die tonnel kan verskil, byvoorbeeld ens192, afhangende van die platform wat gebruik word.
Die laaste reël is vir die aanteken van pakkies wat gedaal is. Om aan te meld om te werk, moet jy die ontfoutingsvlak in die firewalld-konfigurasie verander:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Die toepassing van instellings is die gewone firewalld-opdrag om die instellings weer te lees:
$ sudo firewall-cmd --reload
Jy kan pakkies wat gelaat is soos volg sien:
grep forward_fw /var/log/messages
Wat is volgende?
Dit voltooi die opstelling!
Al wat oorbly, is om die kliëntsagteware aan die kliëntkant te installeer, die profiel in te voer en aan te sluit. Vir Windows-bedryfstelsels is die verspreidingskit geleë op ontwikkelaar webwerf.
Laastens koppel ons ons nuwe bediener aan die monitering- en argiveringstelsels, en moenie vergeet om gereeld opdaterings te installeer nie.