Raamat Linux in Action

Raamat Linux in Action Tere, Khabro elanikud! David Clinton kirjeldab raamatus 12 reaalse elu projekti, sealhulgas teie varundus- ja taastesüsteemi automatiseerimist, Dropboxi stiilis isikliku failipilve seadistamist ja oma MediaWiki serveri loomist. Huvitavate juhtumiuuringute kaudu saate uurida virtualiseerimist, avariitaastet, turvalisust, varundust, DevOpsi ja süsteemi tõrkeotsingut. Iga peatükk lõpeb parimate tavade ülevaatega, uute terminite sõnastikuga ja harjutustega.

Väljavõte “10.1. OpenVPN tunneli loomine"

Olen selles raamatus krüptimisest juba palju rääkinud. SSH ja SCP saavad kaitsta kaugühenduste kaudu edastatavaid andmeid (peatükk 3), failide krüpteerimine võib kaitsta andmeid serveris salvestamise ajal (peatükk 8) ja TLS/SSL-sertifikaadid saavad kaitsta saitide ja kliendibrauserite vahel edastatavaid andmeid (peatükk 9). . Kuid mõnikord tuleb teie andmeid kaitsta laiemate ühenduste kaudu. Näiteks võib-olla töötavad mõned teie meeskonnaliikmed teel olles avalike levialade kaudu WiFi-ga ühenduse loomisel. Te ei tohiks kindlasti eeldada, et kõik sellised pääsupunktid on turvalised, kuid teie inimesed vajavad võimalust ettevõtte ressurssidega ühenduse loomiseks – ja siin võib VPN aidata.

Õigesti kavandatud VPN-tunnel loob otseühenduse kaugklientide ja serveri vahel viisil, mis varjab andmeid, kui need liiguvad üle ebaturvalise võrgu. Mis siis? Olete juba näinud palju tööriistu, mis saavad seda krüpteerimisega teha. VPN-i tegelik väärtus seisneb selles, et tunneli avamisega saate ühendada kaugvõrke nii, nagu oleksid need kõik kohalikud. Teatud mõttes kasutate möödaviik.

Seda laiendatud võrku kasutades saavad administraatorid oma serverites oma tööd teha kõikjalt. Kuid veelgi olulisem on see, et ettevõte, mille ressursse on jaotatud mitmesse asukohta, saab need kõik nähtavaks ja kättesaadavaks teha kõigile neid vajavatele rühmadele, olenemata nende asukohast (joonis 10.1).

Tunnel ise ei taga turvalisust. Kuid võrgustruktuuri saab lisada ühe krüpteerimisstandarditest, mis suurendab oluliselt turvalisuse taset. Avatud lähtekoodiga OpenVPN paketi abil loodud tunnelid kasutavad sama TLS/SSL-krüptimist, millest olete juba lugenud. OpenVPN ei ole ainus saadaolev tunnelitamisvõimalus, kuid see on üks tuntumaid. Seda peetakse veidi kiiremaks ja turvalisemaks kui alternatiivne Layer 2 tunneliprotokoll, mis kasutab IPsec-krüptimist.

Kas soovite, et kõik teie meeskonnaliikmed suhtleksid üksteisega turvaliselt teel olles või erinevates hoonetes töötades? Selleks tuleb luua OpenVPN-server, mis võimaldab rakenduste jagamist ja juurdepääsu serveri kohtvõrgukeskkonnale. Selle toimimiseks piisab, kui käivitada kaks virtuaalmasinat või kaks konteinerit: üks toimib serveri/hostina ja teine ​​kliendina. VPN-i loomine ei ole lihtne protsess, seega tasub ilmselt võtta paar minutit, et üldpilti silmas pidada.

Raamat Linux in Action

10.1.1. OpenVPN-i serveri konfiguratsioon

Enne alustamist annan teile kasulikke nõuandeid. Kui kavatsete seda ise teha (ja ma soovitan teil seda teha), leiate end tõenäoliselt töötamast mitme töölaual avatud terminali aknaga, millest igaüks on ühendatud erineva masinaga. On oht, et ühel hetkel sisestad aknasse vale käsu. Selle vältimiseks võite kasutada käsku hostname, et muuta käsureal kuvatav masina nimi selliseks, mis ütleb teile selgelt, kus te asute. Kui olete seda teinud, peate uute sätete jõustumiseks serverist välja logima ja uuesti sisse logima. See näeb välja selline:

Raamat Linux in Action
Seda lähenemisviisi järgides ja igale masinale, millega töötate, sobivad nimed, saate hõlpsalt oma asukohta jälgida.

Pärast hostinime kasutamist võite järgmiste käskude täitmisel kogeda tüütuid teateid Ei saa lahendada Host OpenVPN-Server. Faili /etc/hosts värskendamine sobiva uue hostinimega peaks probleemi lahendama.

Teie serveri ettevalmistamine OpenVPN-i jaoks

OpenVPN-i installimiseks oma serverisse vajate kahte paketti: openvpn ja easy-rsa (krüpteerimisvõtme genereerimise protsessi haldamiseks). CentOS-i kasutajad peaksid vajadusel esmalt installima epel-release hoidla, nagu tegite 2. peatükis. Serverirakendusele juurdepääsu testimiseks võite installida ka Apache veebiserveri (Ubuntu jaoks apache2 ja CentOS-is httpd).

Serveri seadistamise ajal soovitan aktiveerida tulemüüri, mis blokeerib kõik pordid, välja arvatud 22 (SSH) ja 1194 (OpenVPN-i vaikeport). See näide illustreerib, kuidas ufw Ubuntus töötaks, kuid olen kindel, et mäletate endiselt CentOS-i tulemüüri programmi 9. peatükist:

# ufw enable
# ufw allow 22
# ufw allow 1194

Serveri võrguliideste vahelise sisemise marsruutimise lubamiseks peate failis /etc/sysctl.conf ühe rea (net.ipv4.ip_forward = 1) kommentaaride tühistama. See võimaldab kaugkliente pärast ühenduse loomist vajaduse korral ümber suunata. Uue valiku toimimiseks käivitage sysctl -p:

# nano /etc/sysctl.conf
# sysctl -p

Teie serverikeskkond on nüüd täielikult konfigureeritud, kuid enne, kui olete valmis, peate tegema veel ühe asja: peate tegema järgmised toimingud (edaspidi käsitleme neid üksikasjalikult).

  1. Looge serveris avaliku võtme infrastruktuuri (PKI) krüpteerimisvõtmete komplekt, kasutades Easy-rsa paketiga kaasasolevaid skripte. Põhimõtteliselt toimib OpenVPN-server ka omaenda sertifitseerimisasutusena (CA).
  2. Valmistage kliendile ette sobivad võtmed
  3. Seadistage serveri jaoks fail server.conf
  4. Seadistage oma OpenVPN-i klient
  5. Kontrollige oma VPN-i

Krüpteerimisvõtmete genereerimine

Asjade lihtsaks muutmiseks saate oma võtmeinfrastruktuuri seadistada samas masinas, kus töötab OpenVPN-server. Kuid turvalisuse parimad tavad soovitavad tavaliselt tootmisjuurutamiseks kasutada eraldi CA-serverit. OpenVPN-is kasutamiseks mõeldud krüpteerimisvõtme ressursside genereerimise ja levitamise protsess on kujutatud joonisel fig. 10.2.

Raamat Linux in Action
OpenVPN-i installimisel loodi automaatselt /etc/openvpn/ kataloog, kuid selles pole veel midagi. Openvpn ja easy-rsa paketid on varustatud näidismallifailidega, mida saate oma konfiguratsiooni aluseks võtta. Sertifitseerimisprotsessi alustamiseks kopeerige easy-rsa mallikataloog kaustast /usr/share/ kataloogi /etc/openvpn ja muutke kataloogiks easy-rsa/:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Easy-rsa kataloog sisaldab nüüd üsna vähe skripte. Tabelis 10.1 loetleb tööriistad, mida võtmete loomiseks kasutate.

Raamat Linux in Action

Ülaltoodud toimingud nõuavad administraatoriõigusi, seega peate saama administraatoriks sudo su kaudu.

Esimest faili, millega töötate, nimetatakse varsiks ja see sisaldab keskkonnamuutujaid, mida easy-rsa võtmete genereerimisel kasutab. Peate faili redigeerima, et kasutada juba olemasolevate vaikeväärtuste asemel oma väärtusi. Minu fail näeb välja selline (loetelu 10.1).

Loetelu 10.1. Peamised fragmendid failist /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

Vars-faili käivitamine edastab selle väärtused kestakeskkonda, kus need lisatakse teie uute võtmete sisusse. Miks sudo käsk iseenesest ei tööta? Sest esimeses etapis redigeerime skripti nimega vars ja seejärel rakendame selle. Rakendamine tähendab, et vars-fail edastab oma väärtused kestakeskkonda, kus need lisatakse teie uute võtmete sisusse.

Lõpetamata protsessi lõpuleviimiseks käivitage fail kindlasti uue kesta abil uuesti. Kui see on tehtud, palub skript teil käivitada mõni muu skript, puhas kõik, et eemaldada kataloogist /etc/openvpn/easy-rsa/keys/ mis tahes sisu:

Raamat Linux in Action
Loomulikult on järgmine samm käivitada skript puhas-all, millele järgneb build-ca, mis kasutab juursertifikaadi loomiseks skripti pkitool. Teil palutakse kinnitada varsi pakutavad identiteediseaded:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Järgmisena tuleb build-key-server skript. Kuna see kasutab sama pkitool-skripti koos uue juursertifikaadiga, näete võtmepaari loomise kinnitamiseks samu küsimusi. Võtmetele antakse nimed teie edastatud argumentide põhjal, mis on tavaliselt server, nagu näites, kui te ei kasuta selles masinas mitut VPN-i:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

OpenVPN kasutab uute ühenduste autentimise läbirääkimisteks Diffie-Hellmani algoritmi genereeritud parameetreid (kasutades build-dh-d). Siin loodud fail ei pea olema salajane, vaid see tuleb genereerida hetkel aktiivsete RSA võtmete jaoks build-dh skripti abil. Kui loote tulevikus uusi RSA-võtmeid, peate värskendama ka Diffie-Hellmani faili:

# ./build-dh

Teie serveripoolsed võtmed jõuavad nüüd kataloogi /etc/openvpn/easy-rsa/keys/, kuid OpenVPN ei tea seda. Vaikimisi otsib OpenVPN võtmeid kaustast /etc/openvpn/, nii et kopeerige need:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Kliendi krüpteerimisvõtmete ettevalmistamine

Nagu olete juba näinud, kasutab TLS-krüptimine paari sobivaid võtmeid: üks on installitud serverisse ja teine ​​​​kaugkliendisse. See tähendab, et vajate kliendivõtmeid. Meie vana sõber pkitool on just see, mida selleks vaja on. Selles näites, kui käivitame programmi kataloogis /etc/openvpn/easy-rsa/, edastame sellele kliendiargumendi, et luua failid nimega client.crt ja client.key:

# ./pkitool client

Kaks kliendifaili koos algse ca.crt-failiga, mis on endiselt võtmed/ kataloogis, tuleks nüüd turvaliselt teie kliendile üle kanda. Nende omandi- ja juurdepääsuõiguste tõttu ei pruugi see nii lihtne olla. Lihtsaim viis on kopeerida käsitsi lähtefaili sisu (ja mitte midagi peale selle sisu) arvuti töölaual töötavasse terminali (valige tekst, paremklõpsake sellel ja valige menüüst Kopeeri). Seejärel kleepige see uude sama nimega faili, mille loote oma kliendiga ühendatud teises terminalis.

Kuid igaüks võib lõigata ja kleepida. Selle asemel mõelge nagu administraator, sest teil ei ole alati juurdepääsu GUI-le, kus on võimalik lõigata/kleepida. Kopeerige failid oma kasutaja kodukataloogi (et kaug-scp-operatsioon neile juurde pääseks) ja seejärel kasutage nuppu chown, et muuta failide omandiõigus juurkasutajaks tavaliseks mitte-juurkasutajaks, et saaks teostada kaug-scp-toimingut. Veenduge, et kõik teie failid on praegu installitud ja juurdepääsetavad. Teisaldate need veidi hiljem kliendile:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Kui täielik krüpteerimisvõtmete komplekt on kasutamiseks valmis, peate serverile ütlema, kuidas soovite VPN-i luua. Seda tehakse faili server.conf abil.

Klahvivajutuste arvu vähendamine

Kas trükkimist on liiga palju? Sulgudega laiendamine aitab vähendada neid kuut käsku kahele. Olen kindel, et saate neid kahte näidet uurida ja mõistate, mis toimub. Veelgi olulisem on see, et saate aru, kuidas rakendada neid põhimõtteid kümneid või isegi sadu elemente hõlmavate toimingute puhul.

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Faili server.conf seadistamine

Kuidas saate teada, milline peaks fail server.conf välja nägema? Kas mäletate easy-rsa kataloogimalli, mille kopeerisite /usr/share/? OpenVPN-i installimisel jäi teile alles tihendatud konfiguratsioonimalli fail, mille saate kopeerida kausta /etc/openvpn/. Toetun sellele, et mall on arhiveeritud, ja tutvustan teile kasulikku tööriista: zcat.

Teate juba faili tekstisisu ekraanile printimisest käsuga cat, kuid mis siis, kui fail tihendatakse gzipi abil? Saate faili alati lahti pakkida ja kass annab selle rõõmsalt välja, kuid see on üks või kaks sammu rohkem kui vaja. Selle asemel, nagu võis arvata, saate välja anda zcat-käsu, et laadida pakkimata tekst mällu ühe sammuga. Järgmises näites suunate teksti ekraanile printimise asemel selle uude faili nimega server.conf:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Jätame kõrvale failiga kaasas olev ulatuslik ja abistav dokumentatsioon ning vaatame, milline see võib välja näha, kui olete redigeerimise lõpetanud. Pange tähele, et semikoolon (;) käsib OpenVPN-il järgmist rida mitte lugeda ega käivitada (loetelu 10.2).

Raamat Linux in Action
Vaatame mõnda neist seadetest läbi.

  • Vaikimisi töötab OpenVPN pordil 1194. Saate seda muuta näiteks oma tegevuste täiendavaks peitmiseks või konfliktide vältimiseks teiste aktiivsete tunnelitega. Kuna 1194 nõuab minimaalset kooskõlastamist klientidega, on kõige parem seda teha nii.
  • OpenVPN kasutab andmete edastamiseks kas edastuse juhtimisprotokolli (TCP) või kasutaja datagrammi protokolli (UDP). TCP võib küll veidi aeglasem olla, kuid see on töökindlam ja tunneli mõlemas otsas töötavatele rakendustele tõenäolisemalt mõistetav.
  • Saate määrata dev tun, kui soovite luua lihtsama ja tõhusama IP-tunneli, mis kannab andmesisu ja mitte midagi muud. Kui aga peate ühendama mitu võrguliidest (ja võrku, mida need esindavad), luues Etherneti silla, peate valima dev tap. Kui te ei saa aru, mida see kõik tähendab, kasutage argumenti tun.
  • Järgmised neli rida annavad OpenVPN-ile kolme serveri autentimisfaili ja varem loodud suvandite faili dh2048 nimed.
  • Serveri rida määrab vahemiku ja alamvõrgu maski, mida kasutatakse klientidele sisselogimisel IP-aadresside määramiseks.
  • Valikuline tõukeparameeter "route 10.0.3.0 255.255.255.0" võimaldab kaugklientidel pääseda juurde serveri taga asuvatele privaatsetele alamvõrkudele. Selle toimimiseks on vaja ka võrgu seadistamist serveris endas, et privaatne alamvõrk teaks OpenVPN-i alamvõrgust (10.8.0.0).
  • Port-share localhost 80 liin võimaldab teil pordilt 1194 tuleva kliendi liiklust ümber suunata kohalikku veebiserverisse, mis kuulab porti 80. (See on kasulik, kui kavatsete oma VPN-i testimiseks kasutada veebiserverit.) See toimib ainult siis kui tcp-protokoll on valitud.
  • Kasutaja nobody ja group nogroup read peavad olema lubatud, eemaldades semikoolonid (;). Kaugklientide sundimine mittekeegi ja grupita töötama tagab, et serveri seansid on privilegeerimata.
  • logi määrab, et praegused logikirjed kirjutavad vanad kirjed üle iga kord, kui OpenVPN käivitatakse, samas kui logi lisamine lisab olemasolevasse logifaili uued kirjed. Fail openvpn.log ise kirjutatakse kataloogi /etc/openvpn/.

Lisaks lisatakse konfiguratsioonifailile sageli ka klientidevaheline väärtus, et mitu klienti näeksid üksteist lisaks OpenVPN-serverile. Kui olete oma konfiguratsiooniga rahul, saate OpenVPN-serveri käivitada:

# systemctl start openvpn

OpenVPN-i ja systemd-i vahelise seose muutuva olemuse tõttu võib teenuse käivitamiseks mõnikord vaja minna järgmist süntaksit: systemctl start openvpn@server.

IP addr käivitamine serveri võrguliideste loendi kuvamiseks peaks nüüd väljastama lingi uuele liidesele nimega tun0. OpenVPN loob selle sissetulevate klientide teenindamiseks:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Võimalik, et peate serveri taaskäivitama, enne kui kõik hakkab täielikult töötama. Järgmine peatus on klientarvuti.

10.1.2. OpenVPN-i kliendi konfigureerimine

Traditsiooniliselt ehitatakse tunnelid vähemalt kahe väljapääsuga (muidu nimetaksime neid koobasteks). Serveris olev õigesti konfigureeritud OpenVPN suunab liiklust tunnelisse ja tunnelist välja ühelt poolt. Kuid teil on vaja ka mõnda tarkvara, mis töötab kliendi poolel, st tunneli teises otsas.

Selles jaotises keskendun teatud tüüpi Linuxi arvuti käsitsi seadistamisele, et see toimiks OpenVPN-i kliendina. Kuid see pole ainus viis, kuidas see võimalus on saadaval. OpenVPN toetab klientrakendusi, mida saab installida ja kasutada Windowsi või macOS-iga töötavates laua- ja sülearvutites, samuti Androidi ja iOS-i nutitelefonides ja tahvelarvutites. Üksikasju vaadake aadressilt openvpn.net.

OpenVPN-i pakett tuleb klientmasinasse installida nii, nagu see serverisse installiti, kuigi siin pole easy-rsa-d vaja, kuna kasutatavad võtmed on juba olemas. Peate kopeerima mallifaili client.conf just loodud kataloogi /etc/openvpn/. Seekord faili ei pakita, nii et tavaline cp-käsk teeb selle töö hästi ära:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

Enamik seadeid failis client.conf on üsna iseenesestmõistetavad: need peaksid ühtima serveri väärtustega. Nagu näete järgmisest näitefailist, on unikaalne parameeter kaug-192.168.1.23 1194, mis ütleb kliendile serveri IP-aadressi. Jällegi veenduge, et see on teie serveri aadress. Samuti peaksite sundima klientarvutit kontrollima serveri sertifikaadi autentsust, et vältida võimalikku vahetu rünnakut. Üks võimalus seda teha on lisada rida remote-cert-tls server (loetelu 10.3).

Raamat Linux in Action
Nüüd saate minna kataloogi /etc/openvpn/ ja ekstraktida serverist sertifitseerimisvõtmed. Asendage näites toodud serveri IP-aadress või domeeninimi oma väärtustega:

Raamat Linux in Action
Tõenäoliselt ei juhtu midagi põnevat enne, kui käivitate kliendil OpenVPN-i. Kuna peate esitama paar argumenti, teete seda käsurealt. Argument --tls-client ütleb OpenVPN-ile, et tegutsete kliendina ja loote ühenduse TLS-krüptimise kaudu ning --config osutab teie konfiguratsioonifailile:

# openvpn --tls-client --config /etc/openvpn/client.conf

Lugege hoolikalt käsu väljundit, et veenduda, et olete õigesti ühendatud. Kui midagi läheb esimesel korral valesti, võib selle põhjuseks olla serveri ja kliendi konfiguratsioonifailide seadete mittevastavus või võrguühenduse/tulemüüri probleem. Siin on mõned veaotsingu näpunäited.

  • Lugege hoolikalt kliendi OpenVPN-i operatsiooni väljundit. Sageli sisaldab see väärtuslikke nõuandeid selle kohta, mida täpselt ei saa teha ja miks.
  • Kontrollige veateateid serveri kataloogis /etc/openvpn/ failides openvpn.log ja openvpn-status.log.
  • Kontrollige serveri ja kliendi süsteemilogidest OpenVPN-iga seotud ja ajastatud sõnumeid. (journalctl -ce kuvab uusimad kirjed.)
  • Veenduge, et serveri ja kliendi vahel oleks aktiivne võrguühendus (sellest leiate lähemalt peatükis 14).

Teave Autor

David Clinton - süsteemiadministraator, õpetaja ja kirjanik. Ta on haldanud, kirjutanud ja loonud õppematerjale paljude oluliste tehniliste erialade jaoks, sealhulgas Linuxi süsteemid, pilvandmetöötlus (eriti AWS) ja konteinertehnoloogiad, nagu Docker. Ta kirjutas raamatu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Paljud tema videokoolituskursused leiate saidilt Pluralsight.com ja lingid tema teistele raamatutele (Linux'i halduse ja serveri virtualiseerimise kohta) on saadaval aadressil bootstrap-it.com.

» Lisateavet raamatu kohta leiate aadressilt kirjastaja veebisait
» Sisukord
» Väljavõte

Khabrozhiteley jaoks 25% allahindlus kupongi abil - Linux
Raamatu paberversiooni eest tasumisel saadetakse e-postiga elektrooniline raamat.

Allikas: www.habr.com

Lisa kommentaar