Knjiga Linux u akciji

Knjiga Linux u akciji Zdravo, stanovnici Khabro! U knjizi, David Clinton opisuje 12 projekata iz stvarnog života, uključujući automatizaciju vašeg sigurnosnog kopiranja i sistema za oporavak, postavljanje oblaka ličnih datoteka u stilu Dropboxa i kreiranje vlastitog MediaWiki servera. Istražit ćete virtuelizaciju, oporavak od katastrofe, sigurnost, sigurnosno kopiranje, DevOps i rješavanje problema sa sistemom kroz zanimljive studije slučaja. Svako poglavlje završava pregledom najboljih praksi, pojmovnikom novih pojmova i vježbi.

Izvod „10.1. Kreiranje OpenVPN tunela"

Već sam dosta govorio o šifrovanju u ovoj knjizi. SSH i SCP mogu zaštititi podatke koji se prenose putem udaljenih veza (poglavlje 3), enkripcija datoteka može zaštititi podatke dok su pohranjeni na serveru (poglavlje 8), a TLS/SSL certifikati mogu zaštititi podatke koji se prenose između web lokacija i klijentskih pretraživača (poglavlje 9) . Ali ponekad vaši podaci moraju biti zaštićeni na širem rasponu veza. Na primjer, možda neki od članova vašeg tima rade na putu dok se povezuju na Wi-Fi putem javnih pristupnih tačaka. Definitivno ne biste trebali pretpostaviti da su sve takve pristupne točke sigurne, ali vašim ljudima je potreban način da se povežu s resursima kompanije—i tu VPN može pomoći.

Pravilno dizajniran VPN tunel pruža direktnu vezu između udaljenih klijenata i servera na način koji skriva podatke dok putuju preko nesigurne mreže. Pa šta? Već ste vidjeli mnoge alate koji to mogu učiniti pomoću enkripcije. Prava vrijednost VPN-a je da otvaranjem tunela možete povezati udaljene mreže kao da su sve lokalne. U određenom smislu, koristite premosnicu.

Koristeći ovu proširenu mrežu, administratori mogu obavljati svoj posao na svojim serverima s bilo kojeg mjesta. Ali što je još važnije, kompanija sa resursima raspoređenim na više lokacija može ih učiniti vidljivim i dostupnim svim grupama kojima su potrebni, gde god da se nalaze (slika 10.1).

Sam tunel ne garantuje sigurnost. Ali jedan od standarda enkripcije može biti uključen u strukturu mreže, što značajno povećava nivo sigurnosti. Tuneli kreirani korištenjem OpenVPN paketa otvorenog koda koriste istu TLS/SSL enkripciju o kojoj ste već čitali. OpenVPN nije jedina dostupna opcija tuneliranja, ali je jedna od najpoznatijih. Smatra se da je nešto brži i sigurniji od alternativnog protokola Layer 2 tunela koji koristi IPsec enkripciju.

Želite li da svi u vašem timu bezbedno komuniciraju jedni s drugima dok ste na putu ili rade u različitim zgradama? Da biste to učinili, morate kreirati OpenVPN server koji će omogućiti dijeljenje aplikacija i pristup okruženju lokalne mreže servera. Da bi ovo funkcionisalo, sve što treba da uradite je da pokrenete dve virtuelne mašine ili dva kontejnera: jedan da deluje kao server/host i jedan da deluje kao klijent. Izgradnja VPN-a nije jednostavan proces, pa je vjerojatno vrijedno odvojiti nekoliko minuta da biste dobili širu sliku na umu.

Knjiga Linux u akciji

10.1.1. Konfiguracija OpenVPN servera

Prije nego što počnete, dat ću vam nekoliko korisnih savjeta. Ako ćete to učiniti sami (a toplo vam preporučujem), vjerovatno ćete se naći da radite s više terminalskih prozora otvorenih na radnoj površini, od kojih je svaki povezan na drugu mašinu. Postoji rizik da ćete u nekom trenutku uneti pogrešnu komandu u prozor. Da biste to izbjegli, možete koristiti naredbu hostname da promijenite ime stroja prikazano na komandnoj liniji u nešto što vam jasno govori gdje se nalazite. Kada to učinite, morat ćete se odjaviti sa servera i ponovo se prijaviti da bi nove postavke stupile na snagu. Ovako to izgleda:

Knjiga Linux u akciji
Slijedeći ovaj pristup i dajući odgovarajuća imena svakoj od mašina s kojima radite, možete lako pratiti gdje se nalazite.

Nakon korištenja imena hosta, možete naići na dosadne poruke Nemoguće riješiti OpenVPN-Server kod izvršavanja sljedećih naredbi. Ažuriranje datoteke /etc/hosts odgovarajućim novim imenom hosta trebalo bi riješiti problem.

Priprema vašeg servera za OpenVPN

Da biste instalirali OpenVPN na vaš server, potrebna su vam dva paketa: openvpn i easy-rsa (za upravljanje procesom generisanja ključeva za šifrovanje). Korisnici CentOS-a bi trebali prvo instalirati epel-release spremište ako je potrebno, kao što ste učinili u poglavlju 2. Da biste mogli testirati pristup serverskoj aplikaciji, također možete instalirati Apache web server (apache2 na Ubuntu i httpd na CentOS-u).

Dok postavljate svoj server, preporučujem da aktivirate zaštitni zid koji blokira sve portove osim 22 (SSH) i 1194 (podrazumevani port OpenVPN-a). Ovaj primjer ilustruje kako bi ufw radio na Ubuntuu, ali siguran sam da se još uvijek sjećate CentOS firewalld programa iz poglavlja 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Da biste omogućili interno rutiranje između mrežnih interfejsa na serveru, morate dekomentirati jedan red (net.ipv4.ip_forward = 1) u /etc/sysctl.conf datoteci. Ovo će omogućiti da se udaljeni klijenti preusmjere po potrebi kada se povežu. Da bi nova opcija radila, pokrenite sysctl -p:

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

Vaše serversko okruženje je sada u potpunosti konfigurisano, ali još jedna stvar koju treba da uradite pre nego što budete spremni: moraćete da dovršite sledeće korake (u nastavku ćemo ih detaljno obraditi).

  1. Kreirajte skup ključeva za enkripciju infrastrukture javnog ključa (PKI) na serveru koristeći skripte koje se nalaze u paketu easy-rsa. U suštini, OpenVPN server djeluje i kao vlastito ovlaštenje za certifikate (CA).
  2. Pripremite odgovarajuće ključeve za klijenta
  3. Konfigurirajte server.conf datoteku za server
  4. Postavite svog OpenVPN klijenta
  5. Provjerite svoj VPN

Generiranje ključeva za šifriranje

Kako bi stvari bile jednostavne, možete postaviti ključnu infrastrukturu na istoj mašini na kojoj radi OpenVPN server. Međutim, najbolje sigurnosne prakse obično predlažu korištenje zasebnog CA servera za proizvodne implementacije. Proces generiranja i distribucije resursa ključeva za šifriranje za korištenje u OpenVPN-u ilustrovan je na Sl. 10.2.

Knjiga Linux u akciji
Kada ste instalirali OpenVPN, direktorij /etc/openvpn/ je automatski kreiran, ali u njemu još nema ničega. Paketi openvpn i easy-rsa dolaze s primjerima datoteka šablona koje možete koristiti kao osnovu za svoju konfiguraciju. Da biste započeli proces certifikacije, kopirajte easy-rsa predložak direktorija iz /usr/share/ u /etc/openvpn i promijenite u easy-rsa/ direktorij:

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

Easy-rsa direktorij će sada sadržavati dosta skripti. U tabeli 10.1 navodi alate koje ćete koristiti za kreiranje ključeva.

Knjiga Linux u akciji

Gore navedene operacije zahtijevaju root privilegije, tako da morate postati root preko sudo su.

Prva datoteka s kojom ćete raditi zove se vars i sadrži varijable okruženja koje easy-rsa koristi prilikom generiranja ključeva. Morate urediti datoteku kako biste koristili vlastite vrijednosti umjesto zadanih vrijednosti koje su već tamo. Ovako će izgledati moj fajl (listing 10.1).

Listing 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"

Pokretanje datoteke vars će prenijeti njene vrijednosti u okruženje ljuske, gdje će biti uključene u sadržaj vaših novih ključeva. Zašto naredba sudo sama po sebi ne radi? Jer u prvom koraku uređujemo skriptu pod nazivom vars, a zatim je primjenjujemo. Primjena i znači da datoteka vars prosljeđuje svoje vrijednosti u okruženje ljuske, gdje će one biti uključene u sadržaj vaših novih ključeva.

Obavezno ponovo pokrenite datoteku koristeći novu ljusku kako biste dovršili nedovršeni proces. Kada se to učini, skripta će od vas zatražiti da pokrenete drugu skriptu, clean-all, kako biste uklonili bilo koji sadržaj u /etc/openvpn/easy-rsa/keys/ direktoriju:

Knjiga Linux u akciji
Naravno, sljedeći korak je pokretanje skripte clean-all, nakon čega slijedi build-ca, koja koristi pkitool skriptu za kreiranje root certifikata. Od vas će biti zatraženo da potvrdite postavke identiteta koje daje vars:

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

Zatim dolazi skripta build-key-server. Pošto koristi istu pkitool skriptu zajedno sa novim root sertifikatom, videćete ista pitanja za potvrdu kreiranja para ključeva. Ključevi će biti imenovani na osnovu argumenata koje proslijedite, a koji će, osim ako ne koristite više VPN-ova na ovoj mašini, obično biti server, kao u primjeru:

# ./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 koristi parametre generisane Diffie-Hellman algoritmom (koristeći build-dh) za pregovaranje o autentifikaciji za nove veze. Datoteka kreirana ovdje ne mora biti tajna, ali mora biti generirana pomoću build-dh skripte za RSA ključeve koji su trenutno aktivni. Ako u budućnosti kreirate nove RSA ključeve, također ćete morati ažurirati Diffie-Hellman datoteku:

# ./build-dh

Vaši ključevi na strani servera će sada završiti u direktoriju /etc/openvpn/easy-rsa/keys/, ali OpenVPN to ne zna. Podrazumevano, OpenVPN će tražiti ključeve u /etc/openvpn/, pa ih 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

Priprema klijentskih ključeva za šifriranje

Kao što ste već vidjeli, TLS enkripcija koristi parove podudarnih ključeva: jedan instaliran na serveru i jedan na udaljenom klijentu. To znači da će vam trebati klijentski ključevi. Naš stari prijatelj pkitool je upravo ono što vam treba za ovo. U ovom primjeru, kada pokrenemo program u direktoriju /etc/openvpn/easy-rsa/, prosljeđujemo mu argument klijenta za generiranje datoteka pod nazivom client.crt i client.key:

# ./pkitool client

Dvije klijentske datoteke, zajedno s originalnom ca.crt datotekom koja je još uvijek u keys/ direktoriju, sada treba sigurno prenijeti na vašeg klijenta. Zbog njihovog vlasništva i prava pristupa, ovo možda neće biti tako lako. Najjednostavniji pristup je da ručno kopirate sadržaj izvorne datoteke (i ništa osim tog sadržaja) u terminal koji radi na radnoj površini vašeg računara (odaberite tekst, kliknite desnim tasterom miša na njega i izaberite Kopiraj iz menija). Zatim zalijepite ovo u novu datoteku s istim imenom koju kreirate u drugom terminalu povezanom s vašim klijentom.

Ali svako može izrezati i zalijepiti. Umjesto toga, razmišljajte kao administrator jer nećete uvijek imati pristup GUI-ju gdje su operacije isecanja/lepljenja moguće. Kopirajte datoteke u kućni direktorij vašeg korisnika (tako da im udaljena scp operacija može pristupiti), a zatim koristite chown da promijenite vlasništvo nad datotekama s root na običnog korisnika koji nije root tako da se može izvršiti udaljena scp radnja. Provjerite jesu li svi vaši fajlovi trenutno instalirani i dostupni. Premjestit ćete ih na klijenta malo kasnije:

# 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

Uz kompletan set ključeva za šifriranje koji su spremni za rad, morate reći serveru kako želite da kreirate VPN. Ovo se radi pomoću datoteke server.conf.

Smanjenje broja pritisaka na tastere

Ima li previše kucanja? Proširenje sa zagradama će pomoći da se ovih šest komandi smanji na dvije. Siguran sam da možete proučiti ova dva primjera i razumjeti šta se događa. Što je još važnije, moći ćete razumjeti kako primijeniti ove principe na operacije koje uključuju desetine ili čak stotine elemenata:

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

Postavljanje server.conf datoteke

Kako možete znati kako bi datoteka server.conf trebala izgledati? Sjećate li se predloška direktorija easy-rsa koji ste kopirali iz /usr/share/? Kada ste instalirali OpenVPN, ostao vam je komprimirani konfiguracijski predložak koji možete kopirati u /etc/openvpn/. Nadogradiću se na činjenici da je predložak arhiviran i upoznaću vas sa korisnim alatom: zcat.

Već znate o štampanju tekstualnog sadržaja datoteke na ekranu pomoću naredbe cat, ali šta ako je datoteka komprimirana pomoću gzip-a? Uvijek možete raspakirati datoteku i tada će je cat rado izbaciti, ali to je jedan ili dva koraka više nego što je potrebno. Umjesto toga, kao što ste možda pretpostavili, možete izdati naredbu zcat za učitavanje raspakovanog teksta u memoriju u jednom koraku. U sljedećem primjeru, umjesto da ispisujete tekst na ekran, preusmjerit ćete ga na novu datoteku pod nazivom server.conf:

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

Ostavimo po strani opsežnu i korisnu dokumentaciju koja dolazi uz datoteku i vidimo kako bi ona mogla izgledati kada završite s uređivanjem. Imajte na umu da tačka-zarez (;) govori OpenVPN-u da ne čita ili ne izvršava sljedeći red (listing 10.2).

Knjiga Linux u akciji
Hajde da prođemo kroz neke od ovih postavki.

  • OpenVPN po defaultu radi na portu 1194. Ovo možete promijeniti, na primjer, da dodatno sakrijete svoje aktivnosti ili izbjegnete sukobe s drugim aktivnim tunelima. Budući da 1194 zahtijeva minimalnu koordinaciju sa klijentima, najbolje je to učiniti na ovaj način.
  • OpenVPN koristi ili protokol kontrole prijenosa (TCP) ili korisnički protokol za datagram (UDP) za prijenos podataka. TCP je možda malo sporiji, ali je pouzdaniji i vjerovatnije da će ga razumjeti aplikacije koje rade na oba kraja tunela.
  • Možete odrediti dev tun kada želite da kreirate jednostavniji, efikasniji IP tunel koji nosi sadržaj podataka i ništa drugo. Ako, s druge strane, trebate povezati više mrežnih sučelja (i mreža koje oni predstavljaju), stvarajući Ethernet most, morat ćete odabrati dev tap. Ako ne razumijete šta sve ovo znači, koristite argument tun.
  • Sljedeća četiri reda daju OpenVPN-u imena tri autentifikacijske datoteke na serveru i dh2048 datoteke opcija koju ste kreirali ranije.
  • Linija servera postavlja opseg i masku podmreže koja će se koristiti za dodjelu IP adresa klijentima nakon prijave.
  • Opcioni push parametar "route 10.0.3.0 255.255.255.0" omogućava udaljenim klijentima pristup privatnim podmrežama iza servera. Da bi ovo funkcioniralo, potrebno je i postavljanje mreže na samom serveru tako da privatna podmreža zna za OpenVPN podmrežu (10.8.0.0).
  • Port-share localhost 80 linija vam omogućava da preusmjerite klijentski promet koji dolazi na port 1194 na lokalni web server koji sluša na portu 80. (Ovo će biti korisno ako ćete koristiti web server za testiranje vašeg VPN-a.) Ovo radi samo onda kada je odabran tcp protokol.
  • Redovi korisnika niko i grupe nogrupa moraju biti omogućeni uklanjanjem tačaka i zareza (;). Prisiljavanje udaljenih klijenata da se pokreću kao niko i nogroup osigurava da sesije na serveru nisu privilegirane.
  • log specificira da će trenutni unosi dnevnika prepisati stare unose svaki put kada se OpenVPN pokrene, dok log-append dodaje nove unose u postojeću datoteku dnevnika. Sama datoteka openvpn.log je upisana u /etc/openvpn/ direktorij.

Osim toga, vrijednost klijent-klijent se također često dodaje u konfiguracijski fajl tako da više klijenata može vidjeti jedni druge pored OpenVPN servera. Ako ste zadovoljni svojom konfiguracijom, možete pokrenuti OpenVPN server:

# systemctl start openvpn

Zbog promjene prirode odnosa između OpenVPN-a i systemd-a, sljedeća sintaksa ponekad može biti potrebna za pokretanje usluge: systemctl start openvpn@server.

Pokretanje ip addr-a za popis mrežnih interfejsa vašeg servera sada bi trebalo da ispusti vezu do novog interfejsa koji se zove tun0. OpenVPN će ga kreirati da služi dolaznim klijentima:

$ 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

Možda ćete morati ponovo pokrenuti server prije nego što sve počne u potpunosti raditi. Sljedeća stanica je klijentski računar.

10.1.2. Konfiguriranje OpenVPN klijenta

Tradicionalno, tuneli se grade sa najmanje dva izlaza (inače bismo ih nazvali pećinama). Pravilno konfigurisan OpenVPN na serveru usmjerava promet u i iz tunela s jedne strane. Ali takođe će vam trebati neki softver koji radi na strani klijenta, odnosno na drugom kraju tunela.

U ovom odeljku ću se fokusirati na ručno podešavanje neke vrste Linux računara da deluje kao OpenVPN klijent. Ali ovo nije jedini način na koji je ova prilika dostupna. OpenVPN podržava klijentske aplikacije koje se mogu instalirati i koristiti na desktop i laptop računarima koji koriste Windows ili macOS, kao i na Android i iOS pametnim telefonima i tabletima. Za detalje pogledajte openvpn.net.

OpenVPN paket će morati biti instaliran na klijentskoj mašini kao što je instaliran na serveru, iako ovdje nema potrebe za easy-rsa jer ključevi koje koristite već postoje. Morate kopirati datoteku predloška client.conf u /etc/openvpn/ direktorij koji ste upravo kreirali. Ovaj put fajl neće biti komprimovan, tako da će obična komanda cp obaviti posao sasvim dobro:

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

Većina postavki u vašoj datoteci client.conf bit će prilično razumljiva: trebala bi odgovarati vrijednostima na serveru. Kao što možete vidjeti iz sljedećeg primjera datoteke, jedinstveni parametar je udaljeni 192.168.1.23 1194, koji klijentu govori IP adresu servera. Opet, provjerite je li ovo adresa vašeg servera. Također biste trebali prisiliti klijentski računar da provjeri autentičnost certifikata servera kako biste spriječili mogući napad čovjeka u sredini. Jedan od načina da to učinite je dodavanje linije servera remote-cert-tls (listing 10.3).

Knjiga Linux u akciji
Sada možete otići u /etc/openvpn/ direktorij i izdvojiti certifikacijske ključeve sa servera. Zamijenite IP adresu servera ili ime domene u primjeru svojim vrijednostima:

Knjiga Linux u akciji
Ništa uzbudljivo se vjerovatno neće dogoditi dok ne pokrenete OpenVPN na klijentu. Pošto morate proslediti nekoliko argumenata, to ćete učiniti iz komandne linije. --tls-client argument govori OpenVPN-u da ćete se ponašati kao klijent i povezati se putem TLS enkripcije, a --config ukazuje na vašu konfiguracijsku datoteku:

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

Pažljivo pročitajte izlaz komande kako biste bili sigurni da ste ispravno povezani. Ako nešto pođe po zlu prvi put, to može biti zbog neusklađenosti postavki između konfiguracijskih datoteka servera i klijenta ili problema s mrežnom vezom/zaštitnim zidom. Evo nekoliko savjeta za rješavanje problema.

  • Pažljivo pročitajte izlaz OpenVPN operacije na klijentu. Često sadrži vrijedne savjete o tome šta se tačno ne može učiniti i zašto.
  • Provjerite poruke o grešci u datotekama openvpn.log i openvpn-status.log u /etc/openvpn/ direktoriju na serveru.
  • Provjerite sistemske evidencije na serveru i klijentu za poruke koje se odnose na OpenVPN i vremenski ograničene. (journalctl -ce će prikazati najnovije unose.)
  • Uvjerite se da imate aktivnu mrežnu vezu između servera i klijenta (više o tome u poglavlju 14).

O autoru

David Clinton - sistem administrator, nastavnik i pisac. On je administrirao, pisao i kreirao obrazovne materijale za mnoge važne tehničke discipline, uključujući Linux sisteme, računarstvo u oblaku (posebno AWS) i tehnologije kontejnera kao što je Docker. Napisao je knjigu Learn Amazon Web Services in a Month of Runches (Manning, 2017). Mnogi od njegovih video kurseva za obuku mogu se naći na Pluralsight.com, a veze do njegovih drugih knjiga (o administraciji Linuxa i virtuelizaciji servera) dostupne su na bootstrap-it.com.

» Za više informacija o knjizi, posjetite web stranicu izdavača
» Sadržaj
» Odlomak

Za Khabrozhiteli 25% popusta na kupon - Linux
Po uplati papirne verzije knjige, e-knjiga se šalje na e-mail.

izvor: www.habr.com

Dodajte komentar