Ălesande seadmine
Artikkel kĂ€sitleb töötajate kaugjuurdepÀÀsu korraldamist avatud lĂ€htekoodiga toodete abil ja seda saab kasutada nii tĂ€ielikult iseseisva sĂŒsteemi loomiseks kui ka olemasoleva kommertsĂŒsteemi laiendamiseks, kui litsentsidest on puudu vĂ”i sĂŒsteemi jĂ”udlus on ebapiisav.
Artikli eesmĂ€rk on rakendada valmiskujul kaugjuurdepÀÀsu sĂŒsteem organisatsioonis, mis on veidi rohkem kui "OpenVPN-i seadistamine 10 minutiga".
LĂ”pptulemusena saame sĂŒsteemi, kus kasutajate autentimiseks kasutatakse sertifikaate ja (valikuliselt) ettevĂ”tte Active Directory katalooge. Seega saame kahefaktorilise autentimise sĂŒsteemi â mida omame (sertifikaat) ja mida teame (parool).
Tunnuseks, et kasutajal on lubatud ĂŒhendus, on tema kuuluvus myVPNUsr gruppi. Kasutatakse iseseisvat sertifitseerimiskeskust.
Lahenduse rakendamise hind on ainult vĂ€ikesed riistvaralised ressursid ja 1 tunni töö sĂŒsteemiadministraatorilt.
Kasutame virtuaalset masinat OpenVPN-i ja Easy-RSA 3. versiooniga CentOS 7-l, mille puhul on 100 ĂŒhenduse arvestuses antud 4 vCPU ja 4 GiB RAM-i.
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 172.16.16.16 ja 172.16.17.17 ning VPN-klientidele on eraldatud alamvÔrk 172.16.20.0/23.
VĂ€ljaspool ĂŒhendamiseks kasutatakse aadressi 1194/udp ning meie serveri jaoks on DNS-is loodud A-kiri gw.abc.ru.
Selgelt ei soovitata SELinuxi vĂ€lja lĂŒlitada! OpenVPN töötab turvapoliitika keeldu vĂ€lja lĂŒlitamata.
Sisukord
OperatsioonisĂŒsteemi ja rakendustarkvara installimine
Kasutame CentOS 7.8.2003 ja me vajame operatsioonisĂŒsteemi minimaalset seadistust. Soovitatav on teha seda kasutades , varasema installitud operatsioonisĂŒsteemi kloonimise ja teiste vahendite kaudu.
PĂ€rast installimist ja IP-aadressi mÀÀramist vĂ”rgu liidesele (ĂŒlesande tingimuste kohaselt 172.16.19.123), teeme operatsioonisĂŒsteemi vĂ€rskenduse:
$ sudo yum update -y && reboot
Samuti on vajalik veenduda, et meie masinas toimuks ajasĂŒnkroniseerimine.
Rakendustarkvara installimiseks on vajalikud paketid openvpn, openvpn-auth-ldap, easy-rsa ja vim kui peamine redaktor (vajalik on EPEL-repositoorium).
$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim
Virtuaalmasina jaoks on kasulik paigaldada kĂŒlalisagent:
$ sudo yum install open-vm-toolsVMware ESXi hostide vÔi oVirt jaoks
$ sudo yum install ovirt-guest-agent
KrĂŒptograafia seadistamine
Liigume easy-rsa kataloogi:
$ cd /usr/share/easy-rsa/3/Loodame muutuja faili:
$ sudo vim varsjÀrgneva sisu:
export KEY_COUNTRY="EE"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC OĂ"
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 mÀÀratletud parameetrid nÀiliseks organisatsiooniks Oà «ABC», neid saab muuta tÔeliseks vÔi jÀtta nÀidise jÀrgi. KÔige olulisem parametrites on viimane rida, mis mÀÀrab sertifikaadi kehtivuse pÀevades. NÀites on kasutatud vÀÀrtust 10 aastat (365*10+2 liigaasta). Seda vÀÀrtust tuleb kasutajate sertifikaatide vÀljastamisel kohandada.
JĂ€tkame iseseisva sertifitseerimiskeskuse seadistamist.
Seadistus hÔlmab muutujaid eksportimist, CA initsialiseerimist, juure vÔtme ja CA sertifikaadi vÀljastamist, Diffie-Hellmani vÔtme, TLS vÔtme ning serveri vÔtme ja sertifikaadi loomist. Sertifitseerimiskeskuse vÔti peab olema hoolikalt kaitstud ja salajas hoitud! KÔik parameetrid 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
Selle etapiga on krĂŒptograafilise mehhanismi peamine seadistamine lĂ”petatud.
OpenVPN-i seadistamine
Liigume OpenVPN katalooge, loome teeninduskatalooge ja lisame lingi 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/
Loodame OpenVPN peamise seadistuste faili:
$ sudo vim server.confjÀrgnev 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 sertifikaadi vĂ€ljastamisel oli mÀÀratud teine nimi â esitage see;
- aadressipool peab olema kohandatud vastavalt teie vajadustele*;
- marsruute ja DNS servereid vĂ”ib olla ĂŒks vĂ”i mitu;
- 2 viimast rida on vajalikud AD autentimise rakendamiseks.
*Valitud nĂ€idisvahemik vĂ”imaldab korraga ĂŒhenduda kuni 127 kliendiga, kuna on valitud /23 vĂ”rk ja OpenVPN loob iga kliendi kohta alavĂ”rgu /30 maskiga.
Eriti vajadusel saab porti ja protokolli muuta, kuid tuleb arvestada, et sadama numbri muutmine toob kaasa SELi teabe seadistamise, ja TCP protokolli kasutamine suurendab kulusid, kuna TCP-pakettide kohaletoimetamise kontroll tehakse juba tunneli pakettide tasemel.
**Kui AD autentimine ei ole vajalik, kommenteerige need vÀlja, jÀrgmise lahtri vÔib vahele jÀtta ja mallis eemaldage rida auth-user-pass..
Autentimine AD-s
Teise teguri toe jaoks kasutame konto kontrollimist AD-s.
Meile on vajalik domeeni konto tavakasutaja Ă”igustega ja grupp, mille kuuluvus mÀÀrab ĂŒhenduse vĂ”imaluse.
Loome seadistusfaili:
/etc/openvpn/ldap.confjÀrgnev sisu
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"
PÔhilised parameetrid:
- URL "ldap://ldap.abc.ru" â domeeni kontrolleri aadress;
- BindDN "CN=bindUsr,CN=Users,DC=abc,DC=ru" â kanoniline nimi LDAP-iga seondumiseks (kasutaja - bindUsr konteineris abc.ru/Users);
- Password b1ndP@SS â kasutaja parool seondumiseks;
- BaseDN "OU=allUsr,DC=abc,DC=ru" â tee, kust alustada kasutaja otsimist;
- BaseDN "OU=myGrp,DC=abc,DC=ru" â rĂŒhma konteiner, mis annab Ă”igusi (rĂŒhm myVPNUsr konteineris abc.ru/myGrp);
- SearchFilter "(cn=myVPNUsr)" â lubatud rĂŒhma nimi.
KĂ€ivitamine ja diagnoosimine
NĂŒĂŒd saame proovida meie serverit lubada ja kĂ€ivitada:
$ sudo systemctl enable openvpn@server.service
$ sudo systemctl start openvpn@server.service
KĂ€ivituse kontroll:
systemctl status openvpn@server.service
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikaatide vĂ€ljastamine ja tĂŒhistamine
Kuna lisaks sertifikaatidele on vajalikud vĂ”tmed ja muud seaded, on vĂ€ga mugav kĂ”ik see ĂŒhte profiilifaili kokku pakkida. See fail edastatakse seejĂ€rel kasutajale ja profiil imporditakse OpenVPN kliendil. Selleks loome seadete malli ja skripti, mis genereerib profiili.
Profiili tuleb lisada juuresertifikaadi (ca.crt) ja TLS vÔtme (ta.key) failide sisu.
Kasutaja sertifikaatide vĂ€ljastamisel Ă€rge unustage mÀÀrata sertifikaatide nĂ”utud kehtivusaega parameetrite failis. Ărge tehke seda liiga pikaajaliseks, soovitan piirduda maksimum 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 sisu oma sertifikaadid;
- remote direktiivis mÀÀrake oma vÀrava nimi/aadress;
- auth-user-pass direktiiv loodi tÀiendavaks vÀlishaavatavuseks.
Kodu kataloogis (vÔi mÔnes 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 faili tÀitmiseks:
chmod a+x ~/make.profile.shJa nĂŒĂŒd saame vĂ€ljastada oma esimese sertifikaadi.
~/make.profile.sh my-first-userTĂŒhistamine
Sertifikaadi kompromiteerimisel (kaotus, vargus) on tungiv vajadus 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, kui teha indeksifailist:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Selgitused:
- esimese real on serveri sertifikaat;
- esimene mÀrk
- V (Valid) â kehtiv;
- R (Revoked) â tĂŒhistatud.
VÔrgu seadistamine
Viimased sammud â vĂ”rguarhitektuuri - marsruutimise ja tulemĂŒĂŒride seadistamine.
KĂ€ivitage ĂŒhenduste lubamine kohalikus tulemĂŒĂŒris:
$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent
JĂ€rgmiseks 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 eksisteerib tÔenÀoliselt alamvÔrkude eristamine ning peame edastama ruuterile (-itele), kuidas suunata pakette, mis on suunatud meie VPNi klientidele. KÀivita kÀsureas jÀrgnev kÀsk (sÔltuvalt kasutatavast varustusest):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123ja salvestage konfiguratsioon.
Lisaks peab piiri ruuteri liideses, kus teenindatakse vÀlist aadressi gw.abc.ru, lubama UDP/1194 pakettide lÀbimist.
Kui organisatsioonis kehtivad ranged turvareeglid, tuleb meie VPN-serveris seadistada ka tulemĂŒĂŒr. Minu arvates pakuvad kĂ”ige suuremat paindlikkust iptablesi FORWARD ahelate seadistamine, kuigi nende seadistamine on vĂ€hem mugav. Veidi rohkem nende seadistamisest. KĂ”ige mugavam on kasutada âotseseid reegleidâ â direct rules, mis salvestatakse faili /etc/firewalld/direct.xml. Aktiivset reeglite konfiguratsiooni saab teada jĂ€rgmiselt:
$ 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
Tegelikult on need tavalised iptablesi reeglid, mis on muudetud pÀrast firewalldi ilmumist.
Sihtliidese seadistamine on vaikimisi tun0, vÀlise tunneli liides vÔib olla muu, nÀiteks ens192, sÔltuvalt kasutatavast platvormist.
Viimane rida on ette nÀhtud mahajÀetud pakettide logimiseks. Logimise toimimiseks tuleb firewalldi konfiguratsioonis muuta silumise taset:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
Seadistuste rakendamine â tavaline firewalldi kĂ€sk seadistuste uuesti lugemiseks:
$ sudo firewall-cmd --reloadMahajÀetud pakette saab vaadata jÀrgmiselt:
grep forward_fw /var/log/messages
Mis edasi
Sellega on seadistamine lÔpetatud!
Kliendipoolt tuleb nĂŒĂŒd installida klientprogramm, importida profiil ja ĂŒhenduda. Windowsi taustaga operatsioonisĂŒsteemide jaoks on jaotus saadaval .
LĂ”petuseks ĂŒhendada meie uus server jĂ€lgimis- ja arhiveerimissĂŒsteemidega ning mitte unustada regulaarselt uuendusi installida.
Stabiilset ĂŒhendust!
Allikas: habr.com
