Knjiga Linux na djelu

Knjiga Linux na djelu Pozdrav, stanovnici Khabra! David Clinton u knjizi opisuje 12 projekata iz stvarnog života, uključujući automatizaciju vašeg sustava za sigurnosno kopiranje i oporavak, postavljanje oblaka osobnih datoteka u stilu Dropboxa i stvaranje vlastitog MediaWiki poslužitelja. Kroz zanimljive studije slučaja istražit ćete virtualizaciju, oporavak od katastrofe, sigurnost, sigurnosno kopiranje, DevOps i rješavanje problema sa sustavom. Svako poglavlje završava pregledom najboljih praksi, rječnikom novih pojmova i vježbama.

Izvadak “10.1. Stvaranje OpenVPN tunela"

Već sam dosta govorio o enkripciji u ovoj knjizi. SSH i SCP mogu zaštititi podatke koji se prenose preko udaljenih veza (poglavlje 3), šifriranje datoteka može zaštititi podatke dok su pohranjeni na poslužitelju (poglavlje 8), a TLS/SSL certifikati mogu zaštititi podatke koji se prenose između web-mjesta i klijentskih preglednika (poglavlje 9) . Ali ponekad vaše podatke treba zaštititi u š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 točaka. Definitivno ne biste trebali pretpostaviti da su sve takve pristupne točke sigurne, ali vaši ljudi trebaju način povezivanja s resursima tvrtke—i tu VPN može pomoći.

Ispravno dizajnirani VPN tunel pruža izravnu vezu između udaljenih klijenata i poslužitelja na način koji skriva podatke dok putuju preko nesigurne mreže. Pa što? Već ste vidjeli mnoge alate koji to mogu učiniti s enkripcijom. 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 poslužiteljima s bilo kojeg mjesta. Ali što je još važnije, tvrtka s resursima raspoređenim na više lokacija može ih sve učiniti vidljivima i dostupnima svim skupinama koje ih trebaju, gdje god se nalazile (Slika 10.1).

Sam tunel ne jamči sigurnost. Ali jedan od standarda šifriranja može biti uključen u strukturu mreže, što značajno povećava razinu sigurnosti. Tuneli stvoreni pomoću 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 tunela sloja 2 koji koristi IPsec enkripciju.

Želite li da svi u vašem timu međusobno sigurno komuniciraju dok su na putu ili rade u različitim zgradama? Da biste to učinili, morate stvoriti OpenVPN poslužitelj kako biste omogućili dijeljenje aplikacija i pristup lokalnom mrežnom okruženju poslužitelja. Da bi ovo funkcioniralo, sve što trebate učiniti je pokrenuti dva virtualna računala ili dva spremnika: jedan koji djeluje kao poslužitelj/domaćin i jedan koji djeluje kao klijent. Izgradnja VPN-a nije jednostavan proces, stoga je vjerojatno vrijedno odvojiti nekoliko minuta kako biste stekli širu sliku.

Knjiga Linux na djelu

10.1.1. Konfiguracija OpenVPN poslužitelja

Prije nego počnete, dat ću vam nekoliko korisnih savjeta. Ako to namjeravate učiniti sami (a ja vam toplo preporučujem da to učinite), vjerojatno ćete se naći u situaciji da radite s više terminalskih prozora otvorenih na radnoj površini, od kojih je svaki povezan s različitim strojem. Postoji rizik da ćete u nekom trenutku unijeti pogrešnu naredbu u prozor. Da biste to izbjegli, možete upotrijebiti naredbu hostname da promijenite naziv stroja prikazan u naredbenom retku u nešto što vam jasno govori gdje se nalazite. Nakon što to učinite, morat ćete se odjaviti s poslužitelja i ponovno prijaviti kako bi nove postavke stupile na snagu. Ovako to izgleda:

Knjiga Linux na djelu
Slijedeći ovaj pristup i dajući odgovarajuća imena svakom od strojeva s kojima radite, lako možete pratiti gdje se nalazite.

Nakon korištenja naziva hosta, možete naići na neugodne poruke Unable to Resolve Host OpenVPN-Server prilikom izvršavanja sljedećih naredbi. Ažuriranje datoteke /etc/hosts s odgovarajućim novim nazivom glavnog računala trebalo bi riješiti problem.

Priprema vašeg poslužitelja za OpenVPN

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

Dok postavljate svoj poslužitelj, preporučujem da aktivirate vatrozid koji blokira sve priključke osim 22 (SSH) i 1194 (zadani priključak OpenVPN-a). Ovaj primjer ilustrira kako bi ufw radio na Ubuntuu, ali siguran sam da se još uvijek sjećate programa CentOS firewalld iz poglavlja 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Da biste omogućili interno usmjeravanje između mrežnih sučelja na poslužitelju, trebate ukloniti komentar iz jednog retka (net.ipv4.ip_forward = 1) u datoteci /etc/sysctl.conf. To će omogućiti preusmjeravanje udaljenih klijenata po potrebi nakon što se povežu. Da bi nova opcija radila, pokrenite sysctl -p:

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

Vaše poslužiteljsko okruženje sada je u potpunosti konfigurirano, ali postoji još jedna stvar koju morate učiniti prije nego što budete spremni: morat ćete izvršiti sljedeće korake (u nastavku ćemo ih detaljno obraditi).

  1. Stvorite skup ključeva za enkripciju infrastrukture javnih ključeva (PKI) na poslužitelju koristeći skripte koje ste dobili s paketom easy-rsa. U biti, OpenVPN poslužitelj također djeluje kao vlastiti autoritet za izdavanje certifikata (CA).
  2. Pripremite odgovarajuće ključeve za klijenta
  3. Konfigurirajte datoteku server.conf za poslužitelj
  4. Postavite svoj OpenVPN klijent
  5. Provjerite svoj VPN

Generiranje ključeva za šifriranje

Kako bi stvari bile jednostavne, možete postaviti svoju ključnu infrastrukturu na istom računalu na kojem se izvodi OpenVPN poslužitelj. Međutim, najbolja sigurnosna praksa obično predlaže korištenje zasebnog CA poslužitelja za proizvodne implementacije. Proces generiranja i distribucije resursa ključa za šifriranje za korištenje u OpenVPN-u ilustriran je na slici. 10.2.

Knjiga Linux na djelu
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 predložaka koje možete koristiti kao osnovu za svoju konfiguraciju. Za početak postupka certifikacije kopirajte direktorij easy-rsa predloška iz /usr/share/ u /etc/openvpn i promijenite ga u direktorij easy-rsa/:

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

Easy-rsa imenik sada će sadržavati dosta skripti. U tablici 10.1 navodi alate koje ćete koristiti za izradu ključeva.

Knjiga Linux na djelu

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

Prva datoteka s kojom ćete raditi zove se vars i sadrži varijable okruženja koje easy-rsa koristi pri generiranju ključeva. Morate urediti datoteku da biste koristili vlastite vrijednosti umjesto zadanih vrijednosti koje već postoje. Ovako će izgledati moja datoteka (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 proslijedit će njezine vrijednosti u okruženje ljuske, gdje će biti uključene u sadržaj vaših novih ključeva. Zašto naredba sudo ne radi sama? Zato što u prvom koraku uređujemo skriptu pod nazivom vars i zatim je primjenjujemo. Primjena i znači da datoteka vars prosljeđuje svoje vrijednosti u okruženje ljuske, gdje će biti uključene u sadržaj vaših novih ključeva.

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

Knjiga Linux na djelu
Naravno, sljedeći korak je pokretanje skripte za čišćenje svega, nakon koje slijedi build-ca, koja koristi skriptu pkitool za stvaranje korijenskog certifikata. Od vas će se tražiti da potvrdite postavke identiteta koje osigurava vars:

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

Slijedi skripta build-key-server. Budući da koristi istu pkitool skriptu zajedno s novim korijenskim certifikatom, vidjet ćete ista pitanja za potvrdu stvaranja para ključeva. Ključevi će biti imenovani na temelju argumenata koje proslijedite, a koji će, osim ako ne koristite više VPN-ova na ovom računalu, obično biti poslužitelj, 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 koje je generirao Diffie-Hellman algoritam (koristeći build-dh) za pregovaranje autentifikacije za nove veze. Datoteka stvorena 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 izradite nove RSA ključeve, također ćete morati ažurirati Diffie-Hellman datoteku:

# ./build-dh

Vaši ključevi na strani poslužitelja sada će završiti u direktoriju /etc/openvpn/easy-rsa/keys/, ali OpenVPN to ne zna. Prema zadanim postavkama, 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 ključeva šifriranja klijenta

Kao što ste već vidjeli, TLS enkripcija koristi parove odgovarajućih ključeva: jedan instaliran na poslužitelju i jedan instaliran na udaljenom klijentu. To znači da ćete trebati klijentske ključeve. Naš stari prijatelj pkitool je upravo ono što trebate za ovo. U ovom primjeru, kada pokrenemo program u /etc/openvpn/easy-rsa/ direktoriju, prosljeđujemo mu klijentski argument za generiranje datoteka pod nazivom client.crt i client.key:

# ./pkitool client

Dvije datoteke klijenta, zajedno s izvornom datotekom ca.crt koja je još uvijek u direktoriju keys/, sada bi se trebale sigurno prenijeti na vaš klijent. Zbog njihovog vlasništva i prava pristupa, to možda neće biti tako lako. Najjednostavniji pristup je ručno kopiranje sadržaja izvorne datoteke (i ništa osim tog sadržaja) u terminal koji radi na radnoj površini vašeg računala (odaberite tekst, desnom tipkom miša kliknite na njega i odaberite Kopiraj iz izbornika). Zatim zalijepite ovo u novu datoteku s istim nazivom koji ste stvorili u drugom terminalu spojenom na vaš klijent.

Ali svatko može rezati i lijepiti. Umjesto toga, razmišljajte kao administrator jer nećete uvijek imati pristup GUI-ju gdje su moguće operacije izreži/zalijepi. Kopirajte datoteke u početni direktorij vašeg korisnika (tako da im udaljena scp operacija može pristupiti), a zatim upotrijebite chown za promjenu vlasništva nad datotekama s root na običnog nekorijenskog korisnika tako da se može izvršiti udaljena scp radnja. Provjerite jesu li sve vaše datoteke trenutno instalirane i dostupne. Premjestit ćete ih klijentu 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

S punim skupom ključeva za enkripciju spremnih, morate reći poslužitelju kako želite stvoriti VPN. To se radi pomoću datoteke server.conf.

Smanjenje broja pritisaka tipki

Ima li previše tipkanja? Proširenje zagradama pomoći će smanjiti ovih šest naredbi na dvije. Siguran sam da možete proučiti ova dva primjera i shvatiti što se događa. Što je još važnije, moći ćete razumjeti kako primijeniti ova načela na operacije koje uključuju desetke 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 se predloška direktorija easy-rsa koji ste kopirali iz /usr/share/? Kada ste instalirali OpenVPN, ostala vam je komprimirana datoteka predloška konfiguracije koju možete kopirati u /etc/openvpn/. Nadovezat ću se na činjenicu da je predložak arhiviran i predstavit ću vam koristan alat: zcat.

Već znate o ispisu tekstualnog sadržaja datoteke na zaslon pomoću naredbe cat, ali što ako je datoteka komprimirana pomoću gzipa? Uvijek možete raspakirati datoteku i tada će je cat rado ispisati, ali to je jedan ili dva koraka više nego što je potrebno. Umjesto toga, kao što ste možda pogodili, možete izdati naredbu zcat za učitavanje raspakiranog teksta u memoriju u jednom koraku. U sljedećem primjeru, umjesto ispisa teksta 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 s datotekom i pogledajmo kako bi mogla izgledati kada završite s uređivanjem. Imajte na umu da točka-zarez (;) govori OpenVPN-u da ne čita ili ne izvršava sljedeći redak (Ispis 10.2).

Knjiga Linux na djelu
Prođimo kroz neke od ovih postavki.

  • Prema zadanim postavkama, OpenVPN radi na priključku 1194. To možete promijeniti, na primjer, kako biste dodatno sakrili svoje aktivnosti ili izbjegli sukobe s drugim aktivnim tunelima. Budući da 1194 zahtijeva minimalnu koordinaciju s klijentima, najbolje je to učiniti na ovaj način.
  • OpenVPN koristi ili Transmission Control Protocol (TCP) ili User Datagram Protocol (UDP) za prijenos podataka. TCP je možda malo sporiji, ali je pouzdaniji i vjerojatnije je da će ga razumjeti aplikacije koje rade na oba kraja tunela.
  • Možete navesti dev tun kada želite stvoriti jednostavniji, učinkovitiji IP tunel koji prenosi podatkovni sadržaj i ništa drugo. Ako, s druge strane, trebate povezati više mrežnih sučelja (i mreža koje predstavljaju), stvarajući Ethernet most, morat ćete odabrati dev tap. Ako ne razumijete što sve ovo znači, upotrijebite argument tun.
  • Sljedeća četiri retka daju OpenVPN nazive tri datoteke za provjeru autentičnosti na poslužitelju i datoteku opcija dh2048 koju ste prethodno stvorili.
  • Linija poslužitelja postavlja raspon i podmrežnu masku koja će se koristiti za dodjelu IP adresa klijentima nakon prijave.
  • Izborni push parametar "route 10.0.3.0 255.255.255.0" omogućuje udaljenim klijentima pristup privatnim podmrežama iza poslužitelja. Da bi ovo funkcioniralo također je potrebno postaviti mrežu na samom poslužitelju tako da privatna podmreža zna za OpenVPN podmrežu (10.8.0.0).
  • Port-share localhost 80 linija vam omogućuje preusmjeravanje klijentskog prometa koji dolazi na port 1194 na lokalni web poslužitelj koji sluša na portu 80. (Ovo će biti korisno ako ćete koristiti web poslužitelj za testiranje vašeg VPN-a.) Ovo funkcionira samo onda kada je odabran tcp protokol.
  • Redci korisnika nobody i group nogroup moraju biti omogućeni uklanjanjem točke-zareza (;). Prisiljavanje udaljenih klijenata da rade kao nobody i nogroup osigurava da su sesije na poslužitelju neprivilegirane.
  • log navodi da će trenutni unosi dnevnika prebrisati stare unose svaki put kada se pokrene OpenVPN, dok log-append dodaje nove unose u postojeću datoteku dnevnika. Sama datoteka openvpn.log zapisuje se u direktorij /etc/openvpn/.

Osim toga, vrijednost klijent-klijent također se često dodaje konfiguracijskoj datoteci tako da više klijenata može vidjeti jedni druge uz OpenVPN poslužitelj. Ako ste zadovoljni svojom konfiguracijom, možete pokrenuti OpenVPN poslužitelj:

# systemctl start openvpn

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

Pokretanje ip addr za popis mrežnih sučelja vašeg poslužitelja sada bi trebalo ispisati vezu na novo sučelje pod nazivom tun0. OpenVPN će ga stvoriti za posluživanje dolaznih klijenata:

$ 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 ponovno pokrenuti poslužitelj prije nego što sve počne raditi u potpunosti. Sljedeća postaja je klijentsko računalo.

10.1.2. Konfiguriranje OpenVPN klijenta

Tradicionalno se tuneli grade s najmanje dva izlaza (inače bismo ih nazvali špiljama). Ispravno konfiguriran OpenVPN na poslužitelju usmjerava promet ui iz tunela s jedne strane. Ali također ćete trebati neki softver koji radi na strani klijenta, to jest, na drugom kraju tunela.

U ovom odjeljku usredotočit ću se na ručno postavljanje neke vrste Linux računala da djeluje kao OpenVPN klijent. Ali to nije jedini način na koji je ova mogućnost dostupna. OpenVPN podržava klijentske aplikacije koje se mogu instalirati i koristiti na stolnim i prijenosnim računalima s operativnim sustavom Windows ili macOS, kao i na pametnim telefonima i tabletima s operativnim sustavom Android i iOS. Pogledajte openvpn.net za detalje.

OpenVPN paket morat će se instalirati na klijentsko računalo kao što je instaliran na poslužitelju, iako ovdje nema potrebe za easy-rsa jer ključevi koje koristite već postoje. Morate kopirati datoteku predloška client.conf u direktorij /etc/openvpn/ koji ste upravo stvorili. Ovaj put datoteka neće biti komprimirana, tako da će regularna cp naredba sasvim dobro obaviti posao:

# 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 jasne same po sebi: trebale bi odgovarati vrijednostima na poslužitelju. Kao što možete vidjeti iz sljedeće datoteke primjera, jedinstveni parametar je udaljeni 192.168.1.23 1194, koji klijentu govori IP adresu poslužitelja. Opet, provjerite je li ovo adresa vašeg poslužitelja. Također biste trebali prisiliti klijentsko računalo da provjeri autentičnost certifikata poslužitelja kako biste spriječili mogući napad čovjeka u sredini. Jedan od načina da to učinite je dodavanje linije remote-cert-tls server (Listing 10.3).

Knjiga Linux na djelu
Sada možete otići u direktorij /etc/openvpn/ i izvući certifikacijske ključeve s poslužitelja. Zamijenite IP adresu poslužitelja ili naziv domene u primjeru svojim vrijednostima:

Knjiga Linux na djelu
Vjerojatno se neće dogoditi ništa uzbudljivo dok ne pokrenete OpenVPN na klijentu. Budući da trebate proslijediti nekoliko argumenata, to ćete učiniti iz naredbenog retka. Argument --tls-client govori OpenVPN-u da ćete djelovati 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 naredbe 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 poslužitelja i klijenta ili problema s mrežnom vezom/vatrozidom. Evo nekoliko savjeta za rješavanje problema.

  • Pažljivo pročitajte izlaz operacije OpenVPN na klijentu. Često sadrži vrijedne savjete o tome što se točno ne može učiniti i zašto.
  • Provjerite poruke o pogrešci u datotekama openvpn.log i openvpn-status.log u direktoriju /etc/openvpn/ na poslužitelju.
  • Provjerite sistemske zapisnike na poslužitelju i klijentu za poruke vezane uz OpenVPN i vremenski ograničene poruke. (journalctl -ce će prikazati najnovije unose.)
  • Provjerite imate li aktivnu mrežnu vezu između poslužitelja i klijenta (više o tome u 14. poglavlju).

O autoru

David Clinton - sistem administrator, učitelj i pisac. Administrirao je, pisao i kreirao obrazovne materijale za mnoge važne tehničke discipline, uključujući Linux sustave, računalstvo u oblaku (osobito AWS) i kontejnerske tehnologije kao što je Docker. Napisao je knjigu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mnogi od njegovih video tečajeva mogu se pronaći na Pluralsight.com, a veze na njegove druge knjige (o Linux administraciji i virtualizaciji poslužitelja) dostupne su na bootstrap-it.com.

» Više detalja o knjizi možete pronaći na web stranica izdavača
» pregled sadržaja
» Izvod

Za Khabrozhiteley 25% popusta korištenjem kupona - Linux
Po uplati papirnate verzije knjige, elektronička knjiga bit će poslana e-mailom.

Izvor: www.habr.com

Dodajte komentar