Artikkeli kuvaa työntekijöiden etäkäytön organisointia avoimen lähdekoodin tuotteissa ja sitä voidaan käyttää sekä täysin itsenäisen järjestelmän rakentamiseen, että siitä on hyötyä laajentamiseen, kun olemassa olevasta kaupallisesta järjestelmästä on pulaa lisensseistä tai sen suorituskyky on riittämätön.
Artikkelin tavoitteena on toteuttaa täydellinen järjestelmä organisaation etäkäytön tarjoamiseksi, mikä ei ole muuta kuin "OpenVPN:n asentaminen 10 minuutissa".
Tuloksena saamme järjestelmän, jossa varmenteita ja (valinnaisesti) yrityksen Active Directorya käytetään käyttäjien todentamiseen. Että. saamme järjestelmän, jossa on kaksi vahvistustekijää - mitä minulla on (sertifikaatti) ja mitä tiedän (salasana).
Merkki siitä, että käyttäjä saa yhteyden, on hänen jäsenyys myVPNUsr-ryhmään. Varmenneviranomaista käytetään offline-tilassa.
Ratkaisun käyttöönottokustannukset ovat vain pienet laitteistoresurssit ja 1 tunti järjestelmänvalvojan työtä.
Käytämme CetntOS 3:ssä virtuaalikonetta OpenVPN- ja Easy-RSA-versiolla 7, jolle on varattu 100 vCPU:ta ja 4 GiB RAM 4 yhteyttä kohti.
Esimerkissä organisaatiomme verkko on 172.16.0.0/16, jossa VPN-palvelin osoitteella 172.16.19.123 sijaitsee segmentissä 172.16.19.0/24, DNS-palvelimet 172.16.16.16 ja 172.16.17.17 sekä subnet 172.16.20.0. .23/XNUMX on varattu VPN-asiakkaille .
Yhteyden muodostamiseen ulkopuolelta käytetään yhteyttä portin 1194/udp kautta ja palvelimemme DNS:ään on luotu A-tietue gw.abc.ru.
SELinuxin poistamista käytöstä ei ehdottomasti suositella! OpenVPN toimii ilman suojauskäytäntöjen poistamista käytöstä.
Käyttöjärjestelmän ja sovellusohjelmistojen asennus
Käytämme CentOS 7.8.2003 -jakelua. Meidän on asennettava käyttöjärjestelmä minimaalisessa kokoonpanossa. Tämä on kätevää tehdä käyttämällä lähtölaukaus, kloonataan aiemmin asennettu käyttöjärjestelmäkuva ja muut keinot.
Asennuksen jälkeen, määrittämällä osoitteen verkkoliittymälle (tehtävän 172.16.19.123 mukaisesti), päivitämme käyttöjärjestelmän:
$ sudo yum update -y && reboot
Meidän on myös varmistettava, että aikasynkronointi suoritetaan koneellamme.
Sovellusohjelmiston asentamiseen tarvitset paketit openvpn, openvpn-auth-ldap, easy-rsa ja vim pääeditorina (tarvitset EPEL-arkiston).
Ehdollisen organisaation ABC LLC:n parametrit on kuvattu tässä, voit korjata ne oikeiksi tai jättää ne esimerkistä. Parametreissa tärkeintä on viimeinen rivi, joka määrittää varmenteen voimassaoloajan päivinä. Esimerkissä käytetään arvoa 10 vuotta (365*10+2 karkausvuotta). Tätä arvoa on säädettävä ennen kuin käyttäjävarmenteita myönnetään.
Seuraavaksi määritämme autonomisen varmenneviranomaisen.
Asennus sisältää muuttujien viennin, CA:n alustamisen, CA-juuriavaimen ja -sertifikaatin, Diffie-Hellman-avaimen, TLS-avaimen sekä palvelinavaimen ja varmenteen myöntämisen. CA-avain on suojattava huolellisesti ja pidettävä salassa! Kaikki kyselyparametrit voidaan jättää oletusarvoiksi.
Tämä päättää salausmekanismin määrittämisen pääosan.
OpenVPN-asennus
Siirry OpenVPN-hakemistoon, luo palveluhakemistoja ja lisää linkki easy-rsaan:
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/
Luo pääasiallinen OpenVPN-määritystiedosto:
$ sudo vim server.conf
seuraavaa sisältöä
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
Muutama huomautus parametreista:
jos varmennetta myönnettäessä on määritetty eri nimi, ilmoittakaa se;
määritä tehtäviisi sopiva osoitevalikoima*;
voi olla yksi tai useampia reittejä ja DNS-palvelimia;
Kaksi viimeistä riviä tarvitaan todennuksen toteuttamiseen AD**:ssa.
*Esimerkissä valittu osoitealue sallii jopa 127 asiakkaan yhteyden muodostamisen samanaikaisesti, koska /23-verkko valitaan, ja OpenVPN luo aliverkon kullekin asiakkaalle /30-maskin avulla.
Erityisen tarpeen vaatiessa porttia ja protokollaa voidaan muuttaa, mutta on syytä muistaa, että portin numeron muuttaminen edellyttää SELinuxin konfiguroimista ja tcp-protokollan käyttö lisää ylimääräisiä kustannuksia, koska TCP-pakettien toimituksen ohjaus suoritetaan jo tunneliin kapseloitujen pakettien tasolla.
**Jos todennusta AD:ssa ei tarvita, kommentoi ne, ohita seuraava osio ja malliin poista auth-user-pass -rivi.
AD-todennus
Toisen tekijän tukemiseksi käytämme AD:ssa tilin vahvistusta.
Tarvitsemme verkkotunnukseen tilin, jolla on tavallisen käyttäjän oikeudet ja ryhmä, jonka jäsenyys ratkaisee yhteyden muodostamisen.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Varmenteen myöntäminen ja peruuttaminen
Koska Varmenteiden lisäksi tarvitset avaimia ja muita asetuksia, on erittäin kätevää kääriä tämä kaikki yhteen profiilitiedostoon. Tämä tiedosto siirretään sitten käyttäjälle ja profiili tuodaan OpenVPN-asiakkaaseen. Tätä varten luomme asetusmallin ja komentosarjan, joka luo profiilin.
Sinun on lisättävä profiiliin juurivarmenne (ca.crt) ja TLS-avain (ta.key) -tiedostojen sisältö.
Ennen käyttäjävarmenteiden myöntämistä älä unohda asettaa varmenteille vaadittua voimassaoloaikaa parametritiedostossa. Sinun ei pitäisi tehdä siitä liian pitkää; suosittelen rajoittamaan itsesi enintään 180 päivään.
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>
Huomautuksia:
linjat LAITA SINUN... vaihtaa sisältöön oma todistukset;
määritä etäkäskyssä yhdyskäytäväsi nimi/osoite;
auth-user-pass -käskyä käytetään ylimääräiseen ulkoiseen todentamiseen.
Kotihakemistoon (tai muuhun sopivaan paikkaan) luomme skriptin varmenteen pyytämistä ja profiilin luomista varten:
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 ~
Tiedoston tekeminen suoritettavaksi:
chmod a+x ~/make.profile.sh
Ja voimme antaa ensimmäisen todistuksemme.
~/make.profile.sh my-first-user
Arvostelu
Varmenteen vaarantuessa (kato, varkaus), tämä varmenne on peruutettava:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Tarkastele myönnettyjä ja peruutettuja varmenteita
Voit tarkastella myönnettyjä ja peruutettuja varmenteita yksinkertaisesti katsomalla hakemistotiedostoa:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Selitys:
ensimmäinen rivi on palvelimen varmenne;
ensimmäinen hahmo
V (voimassa) - voimassa;
R (Peruttu) - peruttu.
Verkon asetukset
Viimeiset vaiheet ovat siirtoverkon konfigurointi - reititys ja palomuurit.
Yritysympäristössä on todennäköisesti aliverkkoa, ja meidän on kerrottava reitittimille, kuinka VPN-asiakkaillemme tarkoitetut paketit lähetetään. Suoritamme komennon komentorivillä tavalla (käytetystä laitteesta riippuen):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
ja tallenna asetukset.
Lisäksi rajareitittimen rajapinnassa, jossa ulkoista osoitetta gw.abc.ru palvellaan, on sallittava udp/1194-pakettien kulku.
Mikäli organisaatiolla on tiukat turvallisuussäännöt, palomuuri on määritettävä myös VPN-palvelimellemme. Mielestäni suurimman joustavuuden tarjoaa iptables FORWARD -ketjujen asettaminen, vaikka niiden asettaminen onkin vähemmän kätevää. Hieman lisää niiden asettamisesta. Tätä varten on kätevintä käyttää "suoria sääntöjä" - suoria sääntöjä, jotka on tallennettu tiedostoon /etc/firewalld/direct.xml. Sääntöjen nykyinen kokoonpano löytyy seuraavasti:
$ sudo firewall-cmd --direct --get-all-rule
Ennen kuin muutat tiedostoa, tee siitä varmuuskopio:
Jäljelle jää vain asentaa asiakasohjelmisto asiakaspuolelle, tuoda profiili ja muodostaa yhteys. Windows-käyttöjärjestelmissä jakelusarja sijaitsee osoitteessa kehittäjäsivusto.
Lopuksi yhdistämme uuden palvelimemme valvonta- ja arkistointijärjestelmiin ja muista asentaa päivityksiä säännöllisesti.