Knjiga "Linux v akciji"

Knjiga "Linux v akciji" Pozdravljeni, prebivalci Khabra! David Clinton v knjigi opisuje 12 projektov iz resničnega življenja, vključno z avtomatizacijo vašega sistema za varnostno kopiranje in obnovitev, nastavitvijo oblaka osebnih datotek v slogu Dropbox in ustvarjanjem lastnega strežnika MediaWiki. Z zanimivimi študijami primerov boste raziskovali virtualizacijo, obnovitev po katastrofi, varnost, varnostno kopiranje, DevOps in odpravljanje sistemskih težav. Vsako poglavje se konča s pregledom najboljših praks, glosarjem novih izrazov in vajami.

Odlomek “10.1. Ustvarjanje tunela OpenVPN"

V tej knjigi sem že veliko govoril o šifriranju. SSH in SCP lahko zaščitita podatke, prenesene prek oddaljenih povezav (poglavje 3), šifriranje datotek lahko zaščiti podatke, medtem ko so shranjeni na strežniku (poglavje 8), potrdila TLS/SSL pa lahko zaščitijo podatke, prenesene med spletnimi mesti in brskalniki odjemalcev (poglavje 9). . Toda včasih je treba vaše podatke zaščititi v širšem naboru povezav. Na primer, morda nekateri člani vaše ekipe delajo na poti, medtem ko se povezujejo z Wi-Fi prek javnih dostopnih točk. Vsekakor ne bi smeli domnevati, da so vse takšne dostopne točke varne, vendar vaši ljudje potrebujejo način za povezavo z viri podjetja – in tu vam lahko pomaga VPN.

Pravilno zasnovan tunel VPN zagotavlja neposredno povezavo med oddaljenimi odjemalci in strežnikom na način, ki skrije podatke, ko potujejo po nevarnem omrežju. Pa kaj? Videli ste že veliko orodij, ki lahko to storijo s šifriranjem. Prava vrednost VPN je, da lahko z odpiranjem tunela povežete oddaljena omrežja, kot da bi bila vsa lokalna. V nekem smislu uporabljate obvod.

Z uporabo tega razširjenega omrežja lahko skrbniki opravljajo svoje delo na svojih strežnikih od koder koli. Še pomembneje pa je, da lahko podjetje z viri, razpršenimi na več lokacijah, vse naredi vidne in dostopne vsem skupinam, ki jih potrebujejo, kjer koli že so (slika 10.1).

Predor sam po sebi ne zagotavlja varnosti. Toda v strukturo omrežja je mogoče vključiti enega od standardov šifriranja, kar bistveno poveča stopnjo varnosti. Tuneli, ustvarjeni z odprtokodnim paketom OpenVPN, uporabljajo isto šifriranje TLS/SSL, o katerem ste že brali. OpenVPN ni edina razpoložljiva možnost tuneliranja, je pa ena najbolj znanih. Šteje se, da je nekoliko hitrejši in varnejši od alternativnega tunelskega protokola plasti 2, ki uporablja šifriranje IPsec.

Ali želite, da vsi v vaši ekipi varno komunicirajo drug z drugim, ko ste na poti ali delate v različnih stavbah? Če želite to narediti, morate ustvariti strežnik OpenVPN, da omogočite skupno rabo aplikacij in dostop do lokalnega omrežnega okolja strežnika. Da bo to delovalo, morate le zagnati dva virtualna stroja ali dva vsebnika: enega, ki deluje kot strežnik/gostitelj, in enega, ki deluje kot odjemalec. Izgradnja VPN-ja ni preprost postopek, zato si je verjetno vredno vzeti nekaj minut, da dobite celotno sliko.

Knjiga "Linux v akciji"

10.1.1. Konfiguracija strežnika OpenVPN

Preden začnete, vam bom dal nekaj koristnih nasvetov. Če boste to storili sami (in to vam toplo priporočam), boste verjetno delali z več terminalskimi okni, odprtimi na namizju, od katerih je vsako povezano z drugim računalnikom. Obstaja nevarnost, da boste na neki točki v okno vnesli napačen ukaz. Da bi se temu izognili, lahko z ukazom hostname spremenite ime stroja, prikazano v ukazni vrstici, v nekaj, kar vam jasno pove, kje ste. Ko to storite, se boste morali odjaviti iz strežnika in znova prijaviti, da bodo nove nastavitve začele veljati. Takole izgleda:

Knjiga "Linux v akciji"
Če sledite temu pristopu in vsakemu stroju, s katerim delate, dodelite ustrezna imena, lahko enostavno spremljate, kje ste.

Po uporabi imena gostitelja lahko pri izvajanju nadaljnjih ukazov naletite na moteča sporočila strežnika OpenVPN strežnika ni mogoče razrešiti. Težavo bi moralo rešiti posodabljanje datoteke /etc/hosts z ustreznim novim imenom gostitelja.

Priprava vašega strežnika za OpenVPN

Za namestitev OpenVPN na vaš strežnik potrebujete dva paketa: openvpn in easy-rsa (za upravljanje procesa generiranja šifrirnega ključa). Uporabniki CentOS naj po potrebi najprej namestijo repozitorij epel-release, kot ste storili v 2. poglavju. Da bi lahko preizkusili dostop do strežniške aplikacije, lahko namestite tudi spletni strežnik Apache (apache2 na Ubuntu in httpd na CentOS).

Med nastavljanjem strežnika priporočam, da aktivirate požarni zid, ki blokira vsa vrata razen 22 (SSH) in 1194 (privzeta vrata OpenVPN). Ta primer ponazarja, kako bi ufw deloval na Ubuntuju, vendar sem prepričan, da se še spomnite programa CentOS firewalld iz 9. poglavja:

# ufw enable
# ufw allow 22
# ufw allow 1194

Če želite omogočiti notranje usmerjanje med omrežnimi vmesniki na strežniku, morate odkomentirati eno vrstico (net.ipv4.ip_forward = 1) v datoteki /etc/sysctl.conf. To bo omogočilo preusmeritev oddaljenih odjemalcev po potrebi, ko bodo povezani. Če želite, da nova možnost deluje, zaženite sysctl -p:

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

Vaše strežniško okolje je zdaj popolnoma konfigurirano, vendar morate narediti še eno stvar, preden boste pripravljeni: dokončati boste morali naslednje korake (naslednje jih bomo podrobneje opisali).

  1. Ustvarite nabor šifrirnih ključev infrastrukture javnih ključev (PKI) na strežniku s pomočjo skriptov, ki so priloženi paketu easy-rsa. V bistvu strežnik OpenVPN deluje tudi kot lasten overitelj potrdil (CA).
  2. Pripravite ustrezne ključe za stranko
  3. Konfigurirajte datoteko server.conf za strežnik
  4. Nastavite odjemalca OpenVPN
  5. Preverite svoj VPN

Generiranje šifrirnih ključev

Če želite stvari poenostaviti, lahko svojo ključno infrastrukturo nastavite na isti napravi, kjer se izvaja strežnik OpenVPN. Vendar najboljše varnostne prakse običajno predlagajo uporabo ločenega strežnika CA za produkcijske uvedbe. Postopek generiranja in distribucije virov šifrirnih ključev za uporabo v OpenVPN je prikazan na sliki. 10.2.

Knjiga "Linux v akciji"
Ko ste namestili OpenVPN, je bil samodejno ustvarjen imenik /etc/openvpn/, vendar v njem še ni ničesar. Paketi openvpn in easy-rsa imajo vzorčne datoteke s predlogami, ki jih lahko uporabite kot osnovo za svojo konfiguracijo. Če želite začeti postopek certificiranja, kopirajte imenik predloge easy-rsa iz /usr/share/ v /etc/openvpn in ga spremenite v imenik easy-rsa/:

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

Imenik easy-rsa bo zdaj vseboval kar nekaj skript. V tabeli 10.1 navaja orodja, ki jih boste uporabili za ustvarjanje ključev.

Knjiga "Linux v akciji"

Zgornje operacije zahtevajo root privilegije, zato morate postati root prek sudo su.

Prva datoteka, s katero boste delali, se imenuje vars in vsebuje spremenljivke okolja, ki jih easy-rsa uporablja pri generiranju ključev. Datoteko morate urediti tako, da boste namesto privzetih vrednosti, ki že obstajajo, uporabili svoje vrednosti. Takole bo videti moja datoteka (izpis 10.1).

Seznam 10.1. Glavni fragmenti datoteke /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"

Če zaženete datoteko vars, boste njene vrednosti posredovali okolju lupine, kjer bodo vključene v vsebino vaših novih ključev. Zakaj ukaz sudo sam po sebi ne deluje? Ker v prvem koraku uredimo skript z imenom vars in ga nato uporabimo. Uporaba in pomeni, da datoteka vars posreduje svoje vrednosti okolju lupine, kjer bodo vključene v vsebino vaših novih ključev.

Ne pozabite znova zagnati datoteke z novo lupino, da dokončate nedokončani postopek. Ko je to končano, vas bo skript pozval, da zaženete drug skript, clean-all, da odstranite vso vsebino v imeniku /etc/openvpn/easy-rsa/keys/:

Knjiga "Linux v akciji"
Seveda je naslednji korak zagon skripta clean-all, ki mu sledi build-ca, ki uporablja skript pkitool za ustvarjanje korenskega potrdila. Pozvani boste, da potrdite nastavitve identitete, ki jih zagotavlja vars:

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

Sledi skript build-key-server. Ker uporablja isti skript pkitool skupaj z novim korenskim potrdilom, boste videli ista vprašanja za potrditev ustvarjanja para ključev. Ključi bodo poimenovani na podlagi argumentov, ki jih posredujete, ki bodo, razen če na tem računalniku izvajate več VPN-jev, običajno strežnik, kot v primeru:

# ./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 uporablja parametre, ki jih generira algoritem Diffie-Hellman (z uporabo build-dh), za pogajanja o avtentikaciji za nove povezave. Ni nujno, da je tukaj ustvarjena datoteka skrivna, vendar mora biti ustvarjena s skriptom build-dh za ključe RSA, ki so trenutno aktivni. Če boste v prihodnosti ustvarili nove ključe RSA, boste morali posodobiti tudi datoteko Diffie-Hellman:

# ./build-dh

Vaši ključi na strani strežnika bodo zdaj končali v imeniku /etc/openvpn/easy-rsa/keys/, vendar OpenVPN tega ne ve. OpenVPN bo privzeto iskal ključe v /etc/openvpn/, zato jih kopirajte:

# 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

Priprava odjemalskih šifrirnih ključev

Kot ste že videli, šifriranje TLS uporablja pare ujemajočih se ključev: enega, nameščenega na strežniku, in enega, nameščenega na oddaljenem odjemalcu. To pomeni, da boste potrebovali ključe odjemalca. Naš stari prijatelj pkitool je točno tisto, kar potrebujete za to. V tem primeru, ko zaženemo program v imeniku /etc/openvpn/easy-rsa/, mu posredujemo argument odjemalca za ustvarjanje datotek, imenovanih client.crt in client.key:

# ./pkitool client

Dve odjemalski datoteki skupaj z izvirno datoteko ca.crt, ki je še vedno v imeniku keys/, bi morali biti zdaj varno preneseni v vaš odjemalec. Zaradi njihovega lastništva in pravic dostopa to morda ne bo tako enostavno. Najenostavnejši pristop je, da ročno kopirate vsebino izvorne datoteke (in nič drugega kot to vsebino) v terminal, ki se izvaja na namizju vašega osebnega računalnika (izberite besedilo, z desno tipko miške kliknite nanj in v meniju izberite Kopiraj). Nato to prilepite v novo datoteko z istim imenom, ki ga ustvarite v drugem terminalu, povezanem z vašim odjemalcem.

Vsak pa lahko izreže in prilepi. Namesto tega razmišljajte kot skrbnik, ker ne boste vedno imeli dostopa do grafičnega vmesnika, kjer so možne operacije izreži/prilepi. Kopirajte datoteke v domači imenik vašega uporabnika (tako da lahko oddaljena operacija scp dostopa do njih) in nato uporabite chown, da spremenite lastništvo datotek z root na običajnega nekorenskega uporabnika, tako da se lahko izvede oddaljeno dejanje scp. Prepričajte se, da so vse vaše datoteke trenutno nameščene in dostopne. K odjemalcu jih boste premaknili malo kasneje:

# 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

S celotnim kompletom šifrirnih ključev, pripravljenih za uporabo, morate strežniku povedati, kako želite ustvariti VPN. To se naredi z uporabo datoteke server.conf.

Zmanjšanje števila pritiskov na tipke

Je preveč tipkanja? Razširitev z oklepaji bo pomagala zmanjšati teh šest ukazov na dva. Prepričan sem, da lahko preučite ta dva primera in razumete, kaj se dogaja. Še pomembneje pa je, da boste lahko razumeli, kako ta načela uporabiti pri operacijah, ki vključujejo desetine ali celo stotine elementov:

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

Nastavitev datoteke server.conf

Kako lahko veste, kakšna mora biti datoteka server.conf? Se spomnite predloge imenika easy-rsa, ki ste jo kopirali iz /usr/share/? Ko ste namestili OpenVPN, vam je ostala stisnjena konfiguracijska predloga, ki jo lahko kopirate v /etc/openvpn/. Gradil bom na dejstvu, da je predloga arhivirana, in vam predstavil uporabno orodje: zcat.

Že poznate tiskanje besedilne vsebine datoteke na zaslon z ukazom cat, toda kaj, če je datoteka stisnjena z gzip? Datoteko lahko vedno odpakirate in mačka jo bo z veseljem izdala, vendar je to en ali dva koraka več, kot je potrebno. Namesto tega, kot ste morda uganili, lahko izdate ukaz zcat, da naložite nepakirano besedilo v pomnilnik v enem koraku. V naslednjem primeru boste besedilo namesto tiskanja na zaslon preusmerili v novo datoteko z imenom server.conf:

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

Pustimo ob stran obsežno in uporabno dokumentacijo, ki je priložena datoteki, in poglejmo, kako bi lahko izgledala, ko končate z urejanjem. Upoštevajte, da podpičje (;) pove OpenVPN, naj ne prebere ali izvede naslednje vrstice (izpis 10.2).

Knjiga "Linux v akciji"
Oglejmo si nekaj teh nastavitev.

  • OpenVPN privzeto deluje na vratih 1194. To lahko spremenite, na primer, da dodatno skrijete svoje dejavnosti ali se izognete sporom z drugimi aktivnimi tuneli. Ker 1194 zahteva minimalno usklajevanje s strankami, je najbolje, da to storite na ta način.
  • OpenVPN za prenos podatkov uporablja protokol za nadzor prenosa (TCP) ali protokol za uporabniški datagram (UDP). TCP je morda nekoliko počasnejši, vendar je zanesljivejši in bolj verjetno ga bodo razumele aplikacije, ki se izvajajo na obeh koncih tunela.
  • Dev tun lahko določite, če želite ustvariti enostavnejši, učinkovitejši tunel IP, ki prenaša podatkovno vsebino in nič drugega. Če pa morate po drugi strani povezati več omrežnih vmesnikov (in omrežij, ki jih predstavljajo), tako da ustvarite ethernetni most, boste morali izbrati dev tap. Če ne razumete, kaj vse to pomeni, uporabite argument tun.
  • Naslednje štiri vrstice dajejo OpenVPN imena treh datotek za preverjanje pristnosti na strežniku in datoteko možnosti dh2048, ki ste jo ustvarili prej.
  • Strežniška vrstica nastavi obseg in masko podomrežja, ki bosta uporabljena za dodeljevanje naslovov IP odjemalcem ob prijavi.
  • Izbirni potisni parameter "route 10.0.3.0 255.255.255.0" omogoča oddaljenim odjemalcem dostop do zasebnih podomrežij za strežnikom. Da bi to delovalo, je potrebna tudi nastavitev omrežja na samem strežniku, tako da zasebno podomrežje ve za podomrežje OpenVPN (10.8.0.0).
  • Vrstica port-share localhost 80 vam omogoča preusmeritev odjemalskega prometa, ki prihaja na vrata 1194, na lokalni spletni strežnik, ki posluša na vratih 80. (To bo uporabno, če boste spletni strežnik uporabili za preizkušanje svojega VPN-ja.) To deluje samo takrat, ko je izbran protokol tcp.
  • Vrstici uporabnika nobody in skupine nogroup morata biti omogočeni z odstranitvijo podpičja (;). Prisilitev oddaljenih odjemalcev, da se izvajajo kot nobody in nogroup, zagotavlja, da so seje na strežniku neprivilegirane.
  • log določa, da bodo trenutni vnosi v dnevnik prepisali stare vnose ob vsakem zagonu OpenVPN, medtem ko log-append doda nove vnose v obstoječo datoteko dnevnika. Sama datoteka openvpn.log je zapisana v imenik /etc/openvpn/.

Poleg tega je konfiguracijski datoteki pogosto dodana tudi vrednost odjemalca do odjemalca, tako da lahko več odjemalcev vidi drug drugega poleg strežnika OpenVPN. Če ste zadovoljni s svojo konfiguracijo, lahko zaženete strežnik OpenVPN:

# systemctl start openvpn

Zaradi spreminjajoče se narave razmerja med OpenVPN in systemd bo za zagon storitve včasih potrebna naslednja sintaksa: systemctl start openvpn@server.

Zagon ip addr za seznam omrežnih vmesnikov vašega strežnika bi moral zdaj izpisati povezavo do novega vmesnika, imenovanega tun0. OpenVPN ga bo ustvaril za oskrbo dohodnih strank:

$ 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

Morda boste morali znova zagnati strežnik, preden začne vse v celoti delovati. Naslednja postaja je odjemalski računalnik.

10.1.2. Konfiguriranje odjemalca OpenVPN

Tradicionalno se rovi gradijo z vsaj dvema izhodoma (sicer bi jim rekli jame). Pravilno konfiguriran OpenVPN na strežniku usmerja promet v tunel in iz njega na eni strani. Potrebovali pa boste tudi nekaj programske opreme, ki se izvaja na strani odjemalca, to je na drugem koncu tunela.

V tem razdelku se bom osredotočil na ročno nastavitev neke vrste računalnika Linux, ki bo deloval kot odjemalec OpenVPN. Vendar to ni edini način, na katerega je ta priložnost na voljo. OpenVPN podpira odjemalske aplikacije, ki jih je mogoče namestiti in uporabljati na namiznih in prenosnih računalnikih z operacijskim sistemom Windows ali macOS, pa tudi na pametnih telefonih in tablicah Android in iOS. Za podrobnosti glejte openvpn.net.

Paket OpenVPN bo treba namestiti na odjemalski računalnik, kot je bil nameščen na strežniku, čeprav tukaj ni potrebe po easy-rsa, saj ključi, ki jih uporabljate, že obstajajo. Datoteko predloge client.conf morate kopirati v imenik /etc/openvpn/, ki ste ga pravkar ustvarili. Tokrat datoteka ne bo stisnjena, zato bo običajni ukaz cp dobro opravil delo:

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

Večina nastavitev v vaši datoteki client.conf bo precej samoumevnih: ujemati se morajo z vrednostmi na strežniku. Kot lahko vidite v naslednji vzorčni datoteki, je enolični parameter oddaljeni 192.168.1.23 1194, ki odjemalcu pove naslov IP strežnika. Še enkrat se prepričajte, da je to naslov vašega strežnika. Prav tako morate prisiliti odjemalski računalnik, da preveri pristnost strežniškega potrdila, da preprečite možen napad človeka v sredini. Eden od načinov za to je, da dodate vrstico remote-cert-tls server (izpis 10.3).

Knjiga "Linux v akciji"
Zdaj lahko greste v imenik /etc/openvpn/ in ekstrahirate certifikacijske ključe iz strežnika. Zamenjajte naslov IP strežnika ali ime domene v primeru s svojimi vrednostmi:

Knjiga "Linux v akciji"
Dokler na odjemalcu ne zaženete OpenVPN, se verjetno ne bo zgodilo nič vznemirljivega. Ker morate posredovati nekaj argumentov, boste to storili v ukazni vrstici. Argument --tls-client pove OpenVPN, da boste delovali kot odjemalec in se povezali prek šifriranja TLS, --config pa kaže na vašo konfiguracijsko datoteko:

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

Pozorno preberite izpis ukaza, da se prepričate, da ste pravilno povezani. Če gre kaj narobe prvič, je to lahko posledica neujemanja nastavitev med konfiguracijskimi datotekami strežnika in odjemalca ali težave z omrežno povezavo/požarnim zidom. Tukaj je nekaj nasvetov za odpravljanje težav.

  • Previdno preberite izhod operacije OpenVPN na odjemalcu. Pogosto vsebuje dragocene nasvete o tem, česa točno ni mogoče storiti in zakaj.
  • Preverite sporočila o napakah v datotekah openvpn.log in openvpn-status.log v imeniku /etc/openvpn/ na strežniku.
  • Preverite sistemske dnevnike na strežniku in odjemalcu za sporočila, povezana z OpenVPN in časovno omejena sporočila. (journalctl -ce bo prikazal najnovejše vnose.)
  • Prepričajte se, da imate aktivno omrežno povezavo med strežnikom in odjemalcem (več o tem v 14. poglavju).

O avtorju

David Clinton - sistemski skrbnik, učitelj in pisec. Administriral je, pisal in ustvaril izobraževalna gradiva za številne pomembne tehnične discipline, vključno s sistemi Linux, računalništvom v oblaku (zlasti AWS) in vsebniškimi tehnologijami, kot je Docker. Napisal je knjigo Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Številne njegove video tečaje usposabljanja lahko najdete na Pluralsight.com, povezave do njegovih drugih knjig (o administraciji Linuxa in virtualizaciji strežnikov) pa so na voljo na bootstrap-it.com.

» Več o knjigi najdete na spletno stran založbe
» Kazalo
» Izvleček

Za Khabrozhiteley 25% popust z uporabo kupona - Linux
Ob plačilu papirne različice knjige vam po elektronski pošti pošljemo elektronsko knjigo.

Vir: www.habr.com

Dodaj komentar