Knjiga „Linux v akciji“

Knjiga „Linux v akciji“ Zdravo, Habržiteli! U knjizi David Clinton opisuje 12 stvarnih projekata, uključujući automatizaciju sistema za pravljenje rezervnih kopija i oporavak, podešavanje lične datotečne cloud usluge u stilu Dropbox-a i stvaranje sopstvenog MediaWiki servera. Kroz zanimljive primere ćete istražiti virtualizaciju, oporavak od katastrofa, obezbeđenje, pravljenje rezervnih kopija, implementaciju DevOps-a i otklanjanje problema u sistemu. Svako poglavlje završava pregledom praktičnih preporuka, rečnikom novih termina i vežbama.

Izvod "10.1. Kreiranje OpenVPN tunela"

U ovoj knjizi već sam puno govorio o šifrovanju. SSH i SCP mogu zaštititi podatke koji se šalju preko udaljenih veza (poglavlje 3), šifrovanje datoteka omogućava zaštitu podataka pritom skladištenja na serveru (poglavlje 8), a TLS/SSL sertifikati mogu zaštititi podatke prilikom prenosa između sajtova i pretraživača klijenata (poglavlje 9). Ali ponekad vaši podaci zahtevaju zaštitu na širem spektru veza. Na primer, možda neki članovi vašeg tima moraju raditi na putu, povezujući se na mrežu putem Wi-Fi-ja preko javnih pristupnih tačaka. Definitivno ne treba smatrati da su sve takve pristupne tačke sigurne, ali vašim ljudima zaista treba način za povezivanje s resursima kompanije — i u tom slučaju će pomoći VPN.

Na pravi način projektovan VPN tunel pruža direktnu vezu između udaljenih klijenata i servera na način koji skriva podatke prilikom njihovog prenosa kroz nesigurnu mrežu. I šta sada? Već ste videli mnogo alata koji to mogu učiniti pomoću šifrovanja. Prava vrednost VPN-a leži u tome što, otvaranjem tunela, možete povezati udaljene mreže, kao da su sve zajedno lokalne. Na neki način koristite zaobilaženje.

Koristeći takvu proširenu mrežu, administratori mogu obavljati svoj posao na svojim serverima sa bilo kog mesta. Ali, što je još važnije, kompanija sa resursima raspodeljenim po nekoliko filijala može učiniti da svi oni budu vidljivi i dostupni svim grupama koje ih trebaju, gde god se nalazile (slika 10.1).

Sami tunneli ne garantira varnost. Vendar lahko en od standardov šifriranja vključimo v omrežno strukturo, kar znatno povečuje raven varnosti. Tunneli, ustvarjeni z uporabo paketa OpenVPN z odprtokodnim izvorom, uporabljajo isto šifriranje TLS/SSL, o katerem ste že prebrali. OpenVPN ni edina razpoložljiva možnost za tuneliranje, je pa ena najbolj znanih. Menijo, da je nekoliko hitrejši in varnejši od alternativnega tuneliranja protokola ravni 2, ki uporablja šifriranje IPsec.

Želite, da se vaša ekipa varno komunicira med seboj, medtem ko je na poti ali dela v različnih stavbah? Zato morate ustvariti strežnik OpenVPN, da omogočite skupno rabo aplikacij in dostop do lokalnega omrežja strežnika. Za to potrebujete le dve virtualni napravi ali dva kontejnerja: enega za vlogo strežnika/gostitelja in drugega za odjemalca. Ustvarjanje VPN ni enostaven postopek, zato verjetno velja porabiti nekaj minut, da si predstavljate celotno sliko.

Knjiga „Linux v akciji“

10.1.1. Konfiguracija strežnika OpenVPN

Preden začnete, vam dam koristni nasvet. Če nameravate vse narediti sami (kar vam močno priporočam), boste najverjetneje ugotovili, da delate z več terminalskimi okni odprtimi na namizju, od katerih je vsako povezano s svojo napravo. Obstaja tveganje, da boste nekje vmes vnesli ukaz v napačno okno. Da bi to preprečili, lahko uporabite ukaz hostname, da spremenite ime naprave, prikazano v ukazni vrstici, v nekaj, kar vam bo jasno povedalo, kje ste. Ko to storite, se boste morali odjaviti s strežnika in prijaviti znova, da bodo nove nastavitve stopile v veljavo. Tako to izgleda:

Knjiga „Linux v akciji“
Z upoštevanjem tega pristopa in dodelitvijo ustreznih imen vsaki izmed naprav, s katerimi delate, boste enostavno sledili, kje se nahajate.

Po uporabi hostname se lahko srečate z nadležnimi sporočili Unable to Resolve Host OpenVPN-Server pri izvedbi naslednjih ukazov. Posodobitev datoteke /etc/hosts z ustreznim novim imenom gostitelja bi morala rešiti težavo.

Priprava vašega strežnika za OpenVPN

Za namestitev OpenVPN na vašem strežniku sta potrebna dva paketa: openvpn in easy-rsa (za upravljanje s procesom generiranja ključa za šifriranje). Uporabniki CentOS morajo po potrebi najprej namestiti repozitorij epel-release, kot ste to storili v poglavju 2. Da bi lahko preverili dostop do strežniške aplikacije, lahko namestite tudi spletni strežnik Apache (apache2 za Ubuntu in httpd na CentOS).

Medtem ko nastavljate strežnik, priporočam, da aktivirate požarni zid, ki blokira vse vrata, razen 22 (SSH) in 1194 (privzeto vrata OpenVPN). Ta primer ponazarja, kako bo deloval ufw v Ubuntu, vendar sem prepričan, da se še vedno spomnite programa firewalld CentOS iz poglavja 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Da omogočite 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 preusmerjanje oddaljenih strank po potrebi po povezavi. Da nova nastavitev začne delovati, zaženite sysctl -p:

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

Zdaj je strežniško okolje popolnoma nastavljeno, vendar je treba narediti še nekaj korakov, preden boste pripravljeni: naslednji koraki so potrebni (podrobno jih bomo obravnavali naprej).

  1. Na strežniku ustvarite niz ključev za šifriranje infrastrukture odprtih ključev (PKI) s pomočjo skript, ki jih prinaša paket easy-rsa. V bistvu strežnik OpenVPN deluje tudi kot lastni center za certifikacijo (CA).
  2. Pripravite ustrezne ključe za stranko
  3. Konfigurirajte datoteko server.conf za strežnik
  4. Nastavite vaš OpenVPN odjemalec
  5. Preverite svoj VPN

Generiranje ključev za šifriranje

Da si ne bi oteževali življenja, lahko nastavite svoj ključni sistem na istem računalniku, kjer deluje strežnik OpenVPN. Vendar pa se v priporočilih za varnost običajno priporoča uporaba ločenega CA strežnika za produkcijska okolja. Proces generiranja in porazdelitve virov ključev za šifriranje za uporabo v OpenVPN je ponazoren na sl. 10.2.

Knjiga „Linux v akciji“
Ko ste namestili OpenVPN, je bil samodejno ustvarjen imenik /etc/openvpn/, vendar še ni nič v njem. Paketi openvpn in easy-rsa prinašajo primere predlog datotek, ki jih lahko uporabite kot osnovo za svojo konfiguracijo. Da zaženete postopek certificiranja, kopirajte imenik predloge easy-rsa iz /usr/share/ v /etc/openvpn in preklopite v imenik easy-rsa/:

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

Katalog easy-rsa bo zdaj vseboval precej skript. V tabeli 10.1 so navedena orodja, ki jih boste uporabljali za ustvarjanje ključev.

Knjiga „Linux v akciji“

Naštete operacije zahtevajo root pravice, zato se morate preko sudo su preoblikovati v root.

Prva datoteka, s katero boste delali, se imenuje vars in vsebuje okoljske spremenljivke, ki jih easy-rsa uporablja pri generiranju ključev. Potrebno jo je urediti, da uporabite svoje vrednosti namesto privzetih, ki so že prisotne. Tukaj je, kako bo moja datoteka izgledala (izpis 10.1).

Izpis 10.1. Glavni deli 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="info@bootstrap-it.com"
export KEY_OU="IT"

Zagon datoteke vars bo omogočil prenos njenih vrednosti v okolje lupine, od koder bodo vključene v vsebino vaših novih ključev. Zakaj ukaz sudo sam po sebi ne deluje? Zato, ker v prvem koraku urejamo skript z imenom vars, nato pa ga uporabimo. Uporaba pomeni tudi, da datoteka vars prenese svoje vrednosti v okolje lupine, od koder bodo vključene v vsebino vaših novih ključev.

Obvezno znova zaženite datoteko z novo lupino, da zaključite nedokončan postopek. Ko bo to opravljeno, vas bo skript pozval, da zaženete drugi skript, clean-all, za odstranitev vsebine v imeniku /etc/openvpn/easy-rsa/keys/:

Knjiga „Linux v akciji“
Seveda bo naslednji korak zagon skripta clean-all, za tem pa build-ca, ki uporablja skript pkitool za ustvarjanje korenskega certifikata. Prosili vas bodo, da potrdite nastavitve identifikacije, ki jih zagotavlja vars:

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

Naslednji je skript build-key-server. Ker uporablja isti skript pkitool skupaj z novim korenskim certifikatom, boste videli enaka vprašanja za potrditev ustvarjanja para ključev. Ključem bodo dodeljena imena na podlagi vaših prenesenih argumentov, ki bodo, razen če ne zaženete več VPN-jev na tem računalniku, običajno server, 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, generirane z algoritmom Diffie-Hellman (z uporabo build-dh), za usklajevanje avtentikacije za nove povezave. Datoteka, ustvarjena tukaj, ne sme biti skrivna, vendar mora biti generirana z uporabo skripte build-dh za trenutno aktivne RSA ključe. Če boste v prihodnosti ustvarili nove RSA ključe, boste morali tudi posodobiti datoteko na podlagi algoritma Diffie-Hellman:

# ./build-dh

Vaši ključi na strežniku bodo zdaj shranjeni v imeniku /etc/openvpn/easy-rsa/keys/, vendar OpenVPN tega ne ve. Privzeto bo OpenVPN 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 šifrirnih ključev za odjemalce

Kot ste že videli, TLS šifriranje uporablja pare povezanih ključev: eden je nameščen na strežniku, drugi pa na oddaljenem odjemalcu. To pomeni, da boste potrebovali ključ odjemalca. Naš stari prijatelj pkitool je prav tisto, kar potrebujete za to. V tem primeru, ko zaženete program v imeniku /etc/openvpn/easy-rsa/, ji posredujete argument client za generacijo datotek z imenom client.crt in client.key:

# ./pkitool client

Dve datoteki odjemalca skupaj z izvorno datoteko ca.crt, ki je še vedno v imeniku keys/, morata biti zdaj varno preneseni vašemu odjemalcu. Zaradi njihovih lastnosti in pravic dostopa to morda ne bo tako preprosto. Najenostavnejši pristop je, da ročno kopirate vsebino izvorne datoteke (in nič drugega razen te vsebine) v terminal, ki deluje na namizju vašega računalnika (označite besedilo, kliknite nanj z desno miškino tipko in izberite možnost Kopiraj). Nato to prilepite v novo datoteko z istim imenom, kot jo ustvarite v drugem terminalu, povezanem z vašim odjemalcem.

Toda kdorkoli lahko izreže in prilepi. Namesto tega razmišljajte kot skrbnik, saj ne boste vedno imeli dostopa do GUI, kjer je možna operacija izrezi/prilepi. Datoteke kopirajte v domači imenik vašega uporabnika (da ima oddaljena operacija scp dostop do njih), nato pa s pomočjo chown spremenite lastništvo datotek z root na običajnega uporabnika brez pravic root, da boste lahko izvedli oddaljeno dejanje scp. Prepričajte se, da so vse vaše datoteke trenutno nameščene in dostopne. Na odjemalca jih boste prenesli nekoliko 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 polnim nizom ključev šifriranja, ki so pripravljeni za delovanje, morate strežniku sporočiti, kako želite ustvariti VPN. To se stori s pomočjo datoteke server.conf.

Zmanjšujemo število pritiskov na tipke

Preveč morate tipkati? Razširitev z oklepaji pomaga zmanjšati teh šest ukazov na dva. Prepričan sem, da lahko obvladate ti dve primeri in razumete, kaj se dogaja. Še pomembneje je, da boste razumeli, kako uporabiti te principe pri operacijah, ki vključujejo desettisoče 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

Od kje lahko veste, kako naj izgleda datoteka server.conf? Ne pozabite na predlogo mape easy-rsa, ki ste jo kopirali iz /usr/share/? Med namestitvijo OpenVPN je ostal stisnjen datoteka s predlogo konfiguracije, ki jo lahko kopirate v /etc/openvpn/. Opravil bom na dejstvu, da je predloga arhivirana, in vam predstavil koristen pripomoček: zcat.

Že veste o izvodu besedilne vsebine datoteke na zaslon s pomočjo ukaza cat, toda kaj, če je datoteka stisnjena s gzip? Vedno lahko razpakirate datoteko, in takrat jo bo cat z veseljem izpisal, a to je eden ali dva koraka več, kot je potrebno. Namesto tega, kot ste verjetno uganili, lahko vnesete ukaz zcat za naložitev razpakiranega besedila v pomnilnik v enem koraku. V naslednjem primeru namesto da bi izpisali besedilo na zaslon, ga preusmerite 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 obsežno in koristno dokumentacijo, priloženo datoteki, ter si oglejmo, kako lahko izgleda, ko končate urejanje. Upoštevajte, da podpičje (;) označuje OpenVPN, naj ne bere in ne izvede naslednje vrstice (seznam 10.2).

Knjiga „Linux v akciji“
Poglejmo nekatere od teh nastavitev.

  • Privzeto OpenVPN deluje prek vrat 1194. To lahko spremenite, na primer, da še bolj skrijete svoje aktivnosti ali se izognete konfliktom z drugimi aktivnimi tuneli. Ker 1194 zahteva minimalno usklajevanje s strankami, je najbolje storiti tako.
  • OpenVPN za prenos podatkov uporablja bodisi protokol nadzora prenosa (TCP) bodisi protokol uporabniških podatkovnih gramov (UDP). TCP je lahko nekoliko počasnejši, vendar je bolj zanesljiv in z večjo verjetnostjo razumljiv aplikacijam, ki delujejo na obeh koncih tunela.
  • Lahko izberete dev tun, kadar želite ustvariti preprostejši in bolj učinkovit IP-tunel, ki prenaša vsebino podatkov in nič več. Če pa boste potrebovali povezavo več omrežnih vmesnikov (in omrežij, ki jih predstavljajo), boste morali izbrati dev tap. Če ne razumete, kaj točno to pomeni, uporabite argument tun.
  • Naslednje štiri vrstice prenašajo OpenVPN imena treh datotek za overjanje na strežniku in datoteko parametrov dh2048, ki ste jo ustvarili prej.
  • Vrstica server nastavi obseg in masko podomrežja, ki se bosta uporabila za dodelitev IP-naslovov strankam ob prijavi.
  • Neobvezni parameter push „route 10.0.3.0 255.255.255.0“ omogoča oddaljenim strankam dostop do zasebnih podomrežij za strežnikom. Za to nalogo je potrebna tudi mrežna nastavitev na samem strežniku, da zasebno podomrežje pozna OpenVPN podomrežje (10.8.0.0).
  • Vrstica port-share localhost 80 omogoča preusmerjanje prometa strank, ki prihaja skozi vrata 1194, na lokalni spletni strežnik, ki posluša na vratu 80. (Bodoče bo koristno, če nameravate uporabiti spletni strežnik za testiranje vaše VPN.) To deluje le, če je izbran protokol tcp.
  • Vrste user nobody in group nogroup morajo biti aktivne — za to je treba odstraniti piko in vejico (;). Prisilno delovanje oddaljenih strank pod nobody in nogroup zagotavlja, da so seje na strežniku brez privilegij.
  • log določa, da se bodo trenutni zapisi v dnevniku prepisovali starejšim zapisom ob vsakem zagonu OpenVPN, medtem ko log-append dodaja nove zapise obstoječemu dnevniku. Sam dnevnik openvpn.log se zapisuje v imenik /etc/openvpn/.

Poleg tega se v datoteko konfiguracije pogosto doda vrednost client-to-client, da lahko več strank vidi druga drugo poleg strežnika OpenVPN. Če ste zadovoljni s svojo konfiguracijo, lahko zaženete strežnik OpenVPN:

# systemctl start openvpn

Zaradi spreminjajoče se narave odnosov med OpenVPN in systemd je včasih za zagon storitve potreben takšen sintaktični vzorec: systemctl start openvpn@server.

Zagon ip addr za prikaz seznama omrežnih vmesnikov vašega strežnika bi zdaj moral izpisati povezavo na nov vmesnik z imenom tun0. OpenVPN ga bo ustvaril za obravnavo prihajajočih 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 vse začne delovati. Naslednja postaja je klient računalnik.

10.1.2. Konfiguracija klienta OpenVPN

Tradicionalno so tuneli zgrajeni z vsaj dvema izhodoma (sicer bi jih imenovali jame). Pravilno konfiguriran OpenVPN na strežniku usmerja promet v tunel in iz njega z ene strani. Vendar potrebujete tudi programsko opremo, ki deluje na strani klienta, torej na drugem koncu tunela.

V tem razdelku se bom osredotočil na ročno konfiguracijo računalnika z Linuxom za delovanje kot klient OpenVPN. Vendar to ni edini način, na katerega je ta možnost na voljo. OpenVPN podpira klientske aplikacije, ki jih lahko namestite in uporabljate na namiznih računalnikih in prenosnikih z Windows ali macOS, pa tudi na pametnih telefonih in tablicah, ki temeljijo na Androidu in iOS-u. Podrobnosti najdete na openvpn.net.

Paket OpenVPN bo treba namestiti na klient računalnik, kot je bil nameščen na strežniku, čeprav tukaj ni potrebe po easy-rsa, ker so ključi, ki jih uporabljate, že na voljo. Morate kopirati datoteko predloge client.conf v imenik /etc/openvpn/, ki je bil ravno ustvarjen. Tokrat datoteka ne bo arhivirana, zato se običajna ukaz cp odlično obnese pri tej nalogi:

# 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 kar zgovorna: ustrezati morajo vrednostim na strežniku. Kot je razvidno iz naslednjega primera datoteke, je edinstven parameter remote 192.168.1.23 1194, ki klientu navaja IP naslov strežnika. Ponovno se prepričajte, da je to naslov vašega strežnika. Prav tako morate omogočiti klient računalniku, da preveri pristnost certifikata strežnika, da preprečite morebitni napad 'moški v sredini'. Eden od načinov, kako to storiti, je dodati vrstico remote-cert-tls server (seznam 10.3).

Knjiga „Linux v akciji“
Zdaj lahko preidete v imenik /etc/openvpn/ in izvlečete certifikacijske ključe s strežnika. Zamenjajte IP naslov strežnika ali ime domene v primeru s svojimi vrednostmi:

Knjiga „Linux v akciji“
Nič posebnog se verovatno neće desiti dok ne pokrenete OpenVPN na klijentu. S obzirom na to da morate proći nekoliko argumenata, to ćete učiniti iz komandne linije. Argument —tls-client obaveštava OpenVPN da ćete delovati kao klijent i povezati se putem TLS enkripcije, dok —config ukazuje na vaš konfiguracioni fajl:

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

Pažljivo pročitajte izlaz komande kako biste se uverili da ste pravilno povezani. Ako nešto pođe po zlu iz prve, to može biti zbog neslaganja podešavanja između konfiguracionih fajlova servera i klijenta ili problema sa mrežnom vezom/pojavi vatrozida. Evo nekoliko saveta za otklanjanje grešaka.

  • Pažljivo pročitajte izlaz operacije OpenVPN na klijentu. Često sadrži dragocene savete o tome šta konkretno ne može biti izvršeno i zašto.
  • Proverite poruke o greškama u fajlovima openvpn.log i openvpn-status.log u direktorijumu /etc/openvpn/ na serveru.
  • Proverite poruke povezane sa OpenVPN-om i relevantne vremenske poruke u sistemskim logovima na serveru i klijentu. (journalctl -ce će prikazati najnovije zapise.)
  • Uverite se da imate aktivnu mrežnu vezu između servera i klijenta (više informacija — u poglavlju 14).

O avtorju

David Clinton — sistemski administrator, predavač i pisac. Administrirao je, pisao o tome i kreirao nastavne materijale za mnoge važne tehničke discipline, uključujući Linux sisteme, cloud computing (posebno AWS) i tehnologije kontejnera kao što je Docker. Napisao je knjigu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mnogi njegovi nastavni video kursevi dostupni su na sajtu Pluralsight.com, a linkovi na njegove druge knjige (o administraciji Linux-a i virtualizaciji servera) dostupni su na adresi bootstrap-it.com.

» Podrobneje si lahko ogledate knjigo na spletni strani založnika
» Taula de continguts
» Odrezek

Za Habr uporabnike popust 25% s kodo — Linux
Ob plačilu papirne različice knjige se na e-mail pošlje elektronska knjiga.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster