ProHoster > Blog > Bestjoer > Organisaasje fan wurk op ôfstân fan in SMB-organisaasje op OpenVPN
Organisaasje fan wurk op ôfstân fan in SMB-organisaasje op OpenVPN
Probleemintwurding
It artikel beskriuwt de organisaasje fan tagong op ôfstân foar meiwurkers op iepen boarne produkten en kin sawol brûkt wurde om in folslein autonoom systeem te bouwen, en sil nuttich wêze foar útwreiding as d'r in tekoart is oan lisinsjes yn it besteande kommersjele systeem of syn prestaasjes is net genôch.
It doel fan it artikel is om in folslein systeem te ymplementearjen foar it jaan fan tagong op ôfstân oan in organisaasje, wat net folle mear is dan "ynstallearje fan OpenVPN yn 10 minuten."
As gefolch krije wy in systeem wêryn sertifikaten en (opsjoneel) de Corporate Active Directory sille wurde brûkt om brûkers te autentisearjen. Dat. wy sille in systeem krije mei twa ferifikaasjefaktoaren - wat ik haw (sertifikaat) en wat ik wit (wachtwurd).
In teken dat in brûker tastien is om te ferbinen is har lidmaatskip yn 'e myVPNUsr-groep. De sertifikaatautoriteit sil offline wurde brûkt.
De kosten foar it útfieren fan de oplossing binne mar lytse hardware-boarnen en 1 oere wurk fan de systeembehearder.
Wy sille in firtuele masine brûke mei OpenVPN en Easy-RSA ferzje 3 op CetntOS 7, dy't 100 vCPU's en 4 GiB RAM per 4 ferbiningen wurdt tawiisd.
Yn it foarbyld is it netwurk fan ús organisaasje 172.16.0.0/16, wêryn de VPN-tsjinner mei it adres 172.16.19.123 leit yn it segmint 172.16.19.0/24, DNS-tsjinners 172.16.16.16 en 172.16.17.17. .172.16.20.0/23 wurdt tawiisd foar VPN-kliïnten.
Om fan bûten te ferbinen, wurdt in ferbining fia poarte 1194/udp brûkt, en in A-record gw.abc.ru is makke yn 'e DNS foar ús tsjinner.
It is strikt net oan te rieden om SELinux út te skeakeljen! OpenVPN wurket sûnder befeiligingsbelied út te skeakeljen.
Wy brûke de CentOS 7.8.2003-distribúsje. Wy moatte it OS yn in minimale konfiguraasje ynstallearje. It is handich om dit te brûken kick start, it klonearjen fan in earder ynstallearre OS-ôfbylding en oare middels.
Nei ynstallaasje, it tawizen fan in adres oan 'e netwurkynterface (neffens de betingsten fan taak 172.16.19.123), aktualisearje wy it OS:
$ sudo yum update -y && reboot
Wy moatte ek soargje dat tiidsyngronisaasje wurdt útfierd op ús masine.
Om applikaasjesoftware te ynstallearjen, hawwe jo de pakketten openvpn, openvpn-auth-ldap, easy-rsa en vim nedich as de haadbewurker (jo sille it EPEL-repository nedich hawwe).
De parameters foar de betingstorganisaasje ABC LLC wurde hjir beskreaun; jo kinne se korrigearje nei de echte of ferlitte se út it foarbyld. It wichtichste ding yn 'e parameters is de lêste rigel, dy't de jildigensperioade fan it sertifikaat yn dagen bepaalt. It foarbyld brûkt de wearde 10 jier (365*10+2 skrikkeljierren). Dizze wearde sil oanpast wurde moatte foardat brûkerssertifikaten wurde útjûn.
Folgjende konfigurearje wy in autonome sertifikaasjeautoriteit.
Opset omfettet it eksportearjen fan fariabelen, inisjalisearjen fan de CA, it útjaan fan de CA-rootkaai en sertifikaat, Diffie-Hellman-kaai, TLS-kaai, en serverkaai en sertifikaat. De CA-kaai moat soarchfâldich beskerme wurde en geheim hâlden wurde! Alle query parameters kinne wurde oerlitten as standert.
Dit foltôget it haaddiel fan it ynstellen fan it kryptografyske meganisme.
OpenVPN ynstelle
Gean nei de OpenVPN-map, meitsje tsjinstmappen en foegje in keppeling ta nei 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/
Meitsje it haad OpenVPN-konfiguraasjetriem:
$ sudo vim server.conf
folgjende ynhâld
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
Guon notysjes oer de parameters:
as in oare namme oantsjutte is by it útjaan fan it sertifikaat, oanjaan dat;
spesifisearje de pool fan adressen foar jo taken *;
der kinne ien of mear rûtes en DNS-tsjinners wêze;
De lêste 2 rigels binne nedich om autentikaasje yn AD** út te fieren.
*It berik fan adressen selekteare yn it foarbyld lit maksimaal 127 kliïnten tagelyk ferbine, om't it / 23 netwurk wurdt selektearre, en OpenVPN makket in subnet foar eltse klant mei help fan de / 30 masker.
As it foaral nedich is, kinne de poarte en it protokol wizige wurde, it moat lykwols yn 't sin hâlden wurde dat it feroarjen fan it poartepoartenûmer it konfigurearjen fan SELinux meibringt, en it brûken fan it tcp-protokol sil de overhead ferheegje, om't TCP-pakketleveringskontrôle wurdt al útfierd op it nivo fan pakketten ynkapsele yn 'e tunnel.
** As autentikaasje yn AD net nedich is, kommintaar se dan út, sla de folgjende seksje oer, en yn it sjabloan fuortsmite de auth-user-pass line.
AD Autentikaasje
Om de twadde faktor te stypjen, sille wy akkountferifikaasje brûke yn AD.
Wy moatte in akkount yn it domein mei de rjochten fan in gewoane brûker en in groep, lidmaatskip wêryn sil bepale de mooglikheid om te ferbinen.
systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log
Sertifikaat útjefte en ynlûken
Omdat Neist de sertifikaten sels hawwe jo kaaien en oare ynstellingen nedich; it is heul handich om dit alles yn ien profylbestân te ferpakken. Dit bestân wurdt dan oerdroegen oan de brûker en it profyl wurdt ymportearre op de OpenVPN-kliïnt. Om dit te dwaan, meitsje wy in ynstellingssjabloan en in skript dat it profyl genereart.
Jo moatte de ynhâld fan it root-sertifikaat (ca.crt) en TLS-kaai (ta.key)-bestannen tafoegje oan it profyl.
Foardat jo brûkerssertifikaten útjaan ferjit net de fereaske jildigensperioade foar sertifikaten yn te stellen yn de parameter triem. Jo moatte it net te lang meitsje; ik advisearje josels te beheinen ta maksimaal 180 dagen.
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>
Notes:
linen DOCH DYN... feroarje nei ynhâld eigen sertifikaten;
spesifisearje yn 'e rjochtline op ôfstân de namme / adres fan jo gateway;
de rjochtline foar auth-user-pass wurdt brûkt foar ekstra eksterne autentikaasje.
Yn 'e thúsmap (of in oar handich plak) meitsje wy in skript foar it oanfreegjen fan in sertifikaat en it meitsjen fan in profyl:
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 ~
It bestân útfierber meitsje:
chmod a+x ~/make.profile.sh
En wy kinne ús earste sertifikaat útjaan.
~/make.profile.sh my-first-user
Tebekwurd
Yn gefal fan kompromis fan in sertifikaat (ferlies, stellerij), is it nedich om dit sertifikaat yn te lûken:
cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl
Besjoch útjûn en ynlutsen sertifikaten
Om útjûne en ynlutsen sertifikaten te besjen, besjoch gewoan it yndeksbestân:
cd /usr/share/easy-rsa/3/
cat pki/index.txt
Explanations:
de earste rigel is it tsjinner sertifikaat;
earste karakter
V (jildich) - jildich;
R (ynlutsen) - weromroppen.
Netwurk konfiguraasje
De lêste stappen binne om it oerdrachtnetwurk te konfigurearjen - routing en firewalls.
Yn in bedriuwsomjouwing is d'r wierskynlik subnetting en wy moatte de router(s) fertelle hoe't pakketten kinne ferstjoere foar ús VPN-kliïnten. Op 'e kommandorigel útfiere wy it kommando op' e manier (ôfhinklik fan 'e brûkte apparatuer):
# ip route 172.16.20.0 255.255.254.0 172.16.19.123
en bewarje de konfiguraasje.
Dêrneist, op de grins router ynterface dêr't it eksterne adres gw.abc.ru wurdt betsjinne, is it nedich om te tastean de passaazje fan udp/1194 pakketten.
As de organisaasje strikte feiligensregels hat, moat in firewall ek konfigureare wurde op ús VPN-tsjinner. Yn myn miening wurdt de grutste fleksibiliteit levere troch it opsetten fan iptables FORWARD keatlingen, hoewol it opsetten is minder handich. In bytsje mear oer it opsetten fan se. Om dit te dwaan is it meast handich om "direkte regels" te brûken - direkte regels, opslein yn in bestân /etc/firewalld/direct.xml. De hjoeddeistige konfiguraasje fan 'e regels kin as folget fûn wurde:
$ sudo firewall-cmd --direct --get-all-rule
Foardat jo in bestân wizigje, meitsje in reservekopy fan it:
Dit binne yn wêzen reguliere iptables-regels, oars ferpakt nei de komst fan firewalld.
De bestimming ynterface mei standert ynstellings is tun0, en de eksterne ynterface foar de tunnel kin wêze oars, Bygelyks, ens192, ôfhinklik fan it platfoarm brûkt.
De lêste rigel is foar it loggen fan sakke pakketten. Foar it loggen om te wurkjen, moatte jo it debugnivo feroarje yn 'e firewalld-konfiguraasje:
vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2
It tapassen fan ynstellings is it gewoane firewalld kommando om de ynstellings opnij te lêzen:
$ sudo firewall-cmd --reload
Jo kinne sakke pakketten sa sjen:
grep forward_fw /var/log/messages
Wat is hjirnei
Dit foltôget de opset!
Alles wat oerbliuwt is de kliïntsoftware oan 'e kliïntkant te ynstallearjen, it profyl ymportearje en ferbine. Foar Windows bestjoeringssystemen, de distribúsje kit leit op developer site.
Uteinlik ferbine wy ús nije server oan 'e monitoaring- en argyfsystemen, en ferjit net om regelmjittich updates te ynstallearjen.