Ülesande seadmine
Artikkel kirjeldab töötajate kaugjuurdepääsu korraldamist avatud lähtekoodiga toodete kaudu ning seda saab kasutada nii täieliku iseseisva süsteemi ülesehitamiseks kui ka laiendamiseks, kui olemasolevas kaubanduslikus süsteemis tekib litsentside puudus või selle jõudlus osutub ebapiisavaks.
Artikli eesmärk on rakendada lõpuleviidud kaugjuurdepääsu süsteem organisatsioonile, mis ulatub kaugemale kui "OpenVPN-i seadistamine 10 minutiga".
Tulemuseks on süsteem, kus kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevõtte Active Directory katalooge. Seega saame süsteemi, kus on kaks kontrollifaktorit — see, mida mul on (sertifikaat) ja see, mida ma tean (parool).
Kasutajale ühendamise lubamise tunnuseks on tema kuuluvus rühma myVPNUsr. Sertifitseerimiskeskus toimib iseseisvalt.
Lahenduse rakendamise hind — ainult väikesed riistvaranõuded ja 1 tunni töö infosüsteemide administratori poolt.
Kasutame virtuaalset masinat OpenVPN-i ja Easy-RSA 3. versiooniga CentOS 7, millel on 100 ühenduse jaoks välja antud 4 vCPU ja 4 GiB RAM.
Käesolevas näites on meie organisatsiooni võrk 172.16.0.0/16, kus VPN-serveri aadress 172.16.19.123 asub segmendis 172.16.19.0/24. DNS-serverid on 172.16.16.16 ja 172.16.17.17 ning VPN-klientidele on eraldatud alamvõrk 172.16.20.0/23.
Väljapoole ühendamiseks kasutatakse porti 1194/udp. Meie serveri jaoks on DNS-is loodud A-kirje gw.abc.ru.
SELinuxi väljalülitamine on kategooriliselt ebatõenäoline! OpenVPN töötab ilma turvapoliitikate väljalülitamiseta.
Sisu
Operatsioonisüsteemi ja rakendustarkvara installimine
Kasutame distributsiooni CentOS 7.8.2003. Me vajame operatsioonisüsteemi minimaalset konfigureerimist. Mugav on seda teha kasutades , eelnevalt installitud OS-pildi kloonimise ja teiste vahendite abil.
Pärast installimist ja IP-aadressi määramist võrgu liidesele (ülesande tingimuste järgi 172.16.19.123) teeme operatsioonisüsteemi värskenduse:
$ sudo yum update -y && reboot
Samuti on oluline veenduda, et meie masinal toimub aja sünkroniseerimine.
Rakenduste installimiseks on vajalikud paketid openvpn, openvpn-auth-ldap, easy-rsa ja vim, milleks on peamine redigeerija (vajalik on EPEL-repo).
$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim
Virtuaalmasina jaoks on kasulik paigaldada külaliste agent:
$ sudo yum install open-vm-toolsVMware ESXi hostide või oVirt jaoks
$ sudo yum install ovirt-guest-agent
Krüptograafia seadistamine
Liigume katalooge easy-rsa:
$ cd /usr/share/easy-rsa/3/Loome muutujate faili:
$ sudo vim varsjärgnevate sisu:
export KEY_COUNTRY="EE"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="admin@abc.ee"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ee"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652
Siin on kirjeldatud tingimusliku organisatsiooni OÜ "ABC" parameetreid, mida saab kohandada reaalsuse kohaselt või jätta näidisena. Parameetrites on kõige olulisem viimane rida, mis määrab sertifikaadi kehtivuse päevades. Näidises on kasutatud väärtust 10 aastat (365 * 10 + 2 üleaastat). Seda väärtust tuleb kohandada enne kasutajate sertifikaatide väljastamist.
Seejärel seadistame iseseisva sertifitseerimiskeskuse.
Seade sisaldab muutujate eksportimist, CA initsialiseerimist, juurik võtme ja CA sertifikaadi väljastamist, Diffie-Hellmani võtit, TLS võtit, samuti serveri võtit ja sertifikaati. Sertifikaadi keskuse võtit tuleb hoida hoolikalt ja saladuses! Kõiki parameetreid päringutes saab jätta vaikimisi.
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
Sellel on peamine osa krüptograafilise mehhanismi seadistamisest lõpetatud.
OpenVPN-i seadistamine
Liigume OpenVPN katalooge, loome teenuskaustad ja lisame viite easy-rsa-le:
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/
Loome OpenVPN põhikonfiguratsioonifaili:
$ sudo vim server.confjärgmise sisuga
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 sertifikaadi väljastamisel on kasutatud teistsugust nime — märkige see;
- aadresside vahemikku seadke vastavalt oma vajadustele*;
- marsruute ja DNS-servereid võib olla üks või mitu;
- 2 viimast rida on vajalikud AD-s autentimise rakendamiseks**.
*Valitud näites suurusjärk võimaldab üheaegselt ühendada kuni 127 klienti, kuna valitud on võrk /23, ja OpenVPN loob iga kliendi jaoks alavõrgu maskiga /30.
Er特殊 vajadusega võivad pordi ja protokolli muuta, kuid tuleb silmas pidada, et pordi numbri muutmine toob kaasa SELinux'i seadistamise ning tcp-protokolli kasutamine suurendab kulusid, kuna tcp-pakettide kohaletoimetamise kontroll toimub juba tunnelis kapseldatud pakettide tasemel.
**Kui AD autentimist ei vajata, kommenteerige need välja, järgmise osa — jätke vahele ning mallis kustutage rida auth-user-pass.
Autentimine AD-s
Teise teguri toetamiseks kasutame AD konto kontrolle.
Meil on vajalik domeenis konto, millel on tavalise kasutaja õigused ja grupp, mille liikmelisus määrab ühenduse loomise võimaluse.
Loome konfiguratsioonifaili:
/etc/openvpn/ldap.confjärgmise sisuga
URL "ldap://ldap.abc.ru"
BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru"
Password b1ndP@SS
Timeout 15
TLSEnable no
FollowReferrals yes
BaseDN "OU=allUsr,DC=abc,DC=ru"
SearchFilter "(sAMAccountName=%u)"
RequireGroup true
BaseDN "OU=myGrp,DC=abc,DC=ru"
SearchFilter "(cn=myVPNUsr)"
MemberAttribute "member"
Peamised parameetrid:
- URL «ldap://ldap.abc.ru» — domeeni kontrollija aadress;
- BindDN «CN=bindUsr,CN=Users,DC=abc,DC=ee» — LDAP-i sidumise kanoniline nimi (kasutaja — bindUsr kaustas abc.ee/Users);
- Parool b1ndP@SS — sidumise kasutaja parool;
- BaseDN «OU=allUsr,DC=abc,DC=ee» — tee, kust alustada kasutaja otsingut;
- BaseDN «OU=myGrp,DC=abc,DC=ee» — lubava grupi konteiner (rühm myVPNUsr konteineris abc.ee/myGrp);
- SearchFilter "(cn=myVPNUsr)" — lubava grupi nimi.
Käivitamine ja diagnoosimine
Nüüd saame proovida meie serveri активировать и запустить:
$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service
Käivitamise kontroll:
systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikaadi väljastamine ja tühistamine
Kuna lisaks sertifikaatidele on vajalikud ka võti ja kõik muud seadistused, on väga mugav kõik see ühte profiilifaili kokku panna. See fail antakse pärast kasutajale edasi ja profiil imporditakse OpenVPN kliendis. Selle jaoks loome seadistuste mall ja skripti, mis genereerib profiili.
Profiili tuleb lisada juursertifikaadi (ca.crt) ja TLS võtme (ta.key) sisu.
Enne kasutajate sertifikaatide väljastamist ärge unustage seada nõutud sertifikaatide kestvust seadistusfailis. Ei tohiks teha seda liiga pikaks, soovitan piirata maksimaalselt 180 päevaga.
vim /usr/share/easy-rsa/3/vars...
export EASYRSA_CERT_EXPIRE=180
vim /usr/share/easy-rsa/3/client/template.ovpnclient
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
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
key-direction 1
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
Märkused:
- read PUT YOUR… asendame sisuga oma sertifikaate;
- remote direktiivis märkige oma värava nimi/aadress;
- auth-user-pass direktiiv on kasutusel täiendava välist autentimise jaoks.
Kodu kataloogis (või muus mugavas kohas) loome 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 ~
Teeme fail täidetavaks:
chmod a+x ~/make.profile.shJa meil on võimalik välja anda meie esimene sertifikaat.
~/make.profile.sh my-first-userKeeldumine
Sertifikaadi (kaotsimine, vargus) kompromiteerimise korral on vaja see sertifikaat tühistada:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Väljastatud ja tühistatud sertifikaatide vaatamine
Väljastatud ja tühistatud sertifikaatide vaatamiseks piisab indeksifaili vaatamisest:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Selgitused:
- esimeses reas on serveri sertifikaat;
- esimene märk
- V (Kehtiv) — kehtiv;
- R (Revoked) — tühistatud.
Võrgu seadistamine
Viimased sammud — edastusvõrgu seadistamine — marsruutimine ja tulemüürid.
Ühenduste lubamine kohalikus tulemüüris:
$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent
Edasi, lubame IP liikluse marsruutimise:
$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf
Ettevõtte keskkonnas on kindlasti alamvõrkude jaotamine ning peame teavitama marsruuterit (-eid), kuidas edastada pakette, mis on suunatud meie VPN klientidele. Käskude rida sisestame käsu järgmiselt (sõltub kasutatavast varustusest):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123ja salvestame seadistuse.
Lisaks sellele peab piiritletud marsruuteri liideses, kus teenindatakse välist aadressi gw.abc.ru, lubama udp/1194 pakettide edastamise.
Kui organisatsioonis on rangelt järgitud turvareegleid, peab meie VPN serveris olema samuti seadistatud tulemüür. Minu arvates annab kõige rohkem paindlikkust iptables'i FORWARD ahelate seadistamine, kuigi nende seadistamine on vähem mugav. Veidi rohkem nende seadistamisest. Selleks on kõige lihtsam kasutada "otse reegleid" — direct rules, mis on salvestatud faili. /etc/firewalld/direct.xml. Aktiivse reegli konfiguratsiooni saab teada järgmistel viisidel:
$ sudo firewall-cmd --direct --get-all-ruleEnne faili muutmist tehke sellest varukoopia:
cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bakFaili ligikaudne sisu on järgmine:
-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT
-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '
Selgitused
Sisuliselt on need tavalised iptables reeglid, mis on pärast firewalldi kasutuselevõttu korraldatud.
Vaikeseadetest on sihtliides tun0, välisseade tunnelile võib olla erinev, nt ens192, sõltuvalt kasutatavast platvormist.
Viimane rida on ette nähtud kõrvaldatud pakkide logimiseks. Logimise hõlbustamiseks tuleb firewalld konfiguratsioonis muuta tõrkeotsingu taset:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Seadete rakendamine — tavaline käsk firewalld'i seadete uuesti lugemiseks:
$ sudo firewall-cmd --reloadKõrvaldatud pakkide vaatamine toimub nii:
grep forward_fw /var/log/messages
Mis edasi
Sellel seadistamine lõppes!
Kliendi poolel tuleb paigaldada klientrakendus, importida profiil ja luua ühendus. Windowsi operatsioonisüsteemide jaoks on pakett saadaval .
Lõpuks ühendame meie uue serveri monitooringu ja arhiveerimissüsteemidega ning ei tohi unustada regulaarselt värskendusi installida.
Stabiilset ühendust!
Allikas: habr.com
