Kniha „Linux v akcii“

Kniha „Linux v akcii“ Ahojte, Habržitelia! V knihe David Clinton popisuje 12 skutočných projektov, vrátane automatizácie systému zálohovania a obnovy, nastavenia osobného súborového cloudu v štýle Dropbox a vytvorenia vlastného servera MediaWiki. Na zaujímavých príkladoch sa naučíte virtualizáciu, havarijné obnovenie, zabezpečenie, zálohovanie, implementáciu DevOps a diagnostiku systémov. Každá kapitola končí prehľadom praktických odporúčaní, glosárom nových pojmov a cvičeniami.

Úryvok „10.1. Vytvorenie tunelu OpenVPN“

V tejto knihe som sa už dosť venoval šifrovaniu. SSH a SCP môžu ochrániť dáta prenášané cez vzdialené pripojenia (kapitola 3), šifrovanie súborov umožňuje ochranu dát pri ukladaní na serveri (kapitola 8), a certifikáty TLS/SSL dokážu ochrániť dáta pri prenose medzi webovými stránkami a klientskými prehliadačmi (kapitola 9). No niekedy vaše dáta vyžadujú ochranu v širšom spektre pripojení. Napríklad niektorí členovia vášho tímu možno musia pracovať na cestách, pripájajúc sa k sieti cez Wi-Fi na verejných hotspotoch. Určite sa neoplatí predpokladať, že všetky takéto hotspoty sú bezpečné, ale vaši ľudia skutočne potrebujú spôsob, ako sa pripojiť k firemným zdrojom — a v tomto prípade pomôže VPN.

Správne navrhnutý VPN tunel zabezpečuje priame spojenie medzi vzdialenými klientmi a serverom tak, aby skryl dáta pri ich prenose cez nezabezpečenú sieť. A čo? Už ste videli mnoho nástrojov, ktoré dokážu urobiť to s pomocou šifrovania. Skutočná hodnota VPN spočíva v tom, že po otvorení tunela môžete pripojiť vzdialené siete, akoby boli všetky spolu v lokálnej sieti. V istom zmysle používate obchádzanie.

Použitím takejto rozšírenej siete môžu administrátori vykonávať svoju prácu na svojich serveroch z akéhokoľvek miesta. Ale čo je dôležitejšie, spoločnosť s prostriedkami roztrúsenými po niekoľkých filiálkach môže sprístupniť všetky tieto zdroje viditeľné a prístupné pre všetky skupiny, ktoré ich potrebujú, nech sa nachádzajú kdekoľvek (obr. 10.1).

Tunel sám o sebe nezaručuje bezpečnosť. Ale jeden z bežných štandardov šifrovania môže byť zahrnutý do architektúry siete, čo výrazne zvyšuje úroveň bezpečnosti. Tunely vytvorené s použitím balíka OpenVPN s otvoreným kódom využívajú to isté šifrovanie TLS/SSL, o ktorom ste už čítali. OpenVPN nie je jedinou dostupnou možnosťou tunelovania, ale jednou z najznámejších. Považuje sa za o niečo rýchlejší a bezpečnejší ako alternatívny tunelový protokol na úrovni 2, ktorý využíva šifrovanie IPsec.

Chcete, aby vaša tím bezpečne komunikoval navzájom, kým sú na cestách alebo pracujú v rôznych budovách? Na to je potrebné vytvoriť server OpenVPN, aby ste umožnili zdieľanie aplikácií a prístup k lokálnemu sieťovému prostrediu servera. Aby to fungovalo, stačí spustiť dve virtuálne stroje alebo dva kontajnery: jeden na vykonávanie úlohy servera/hosta a druhý ako klient. Vytvorenie VPN nie je jednoduchý proces, takže pravdepodobne stojí za to stráviť niekoľko minút predstavením si celkový obraz.

Kniha „Linux v akcii“

10.1.1. Konfigurácia servera OpenVPN

Predtým ako začnete, dám vám užitočnú radu. Ak sa chystáte urobiť všetko sami (a veľmi vám to odporúčam), pravdepodobne zistíte, že pracujete s niekoľkými oknami terminálu otvorenými na pracovnej ploche, pričom každý je pripojený k svojmu stroju. Existuje riziko, že v nejakom okamihu zadáte príkaz do nesprávneho okna. Aby ste tomu predišli, môžete použiť príkaz hostname, aby ste zmenili názov stroja zobrazený v príkazovom riadku na niečo, čo jasne naznačí, kde sa nachádzate. Keď to urobíte, budete sa musieť odhlásiť zo servera a prihlásiť sa znova, aby sa nové nastavenia začali uplatňovať. Takto to vyzerá:

Kniha „Linux v akcii“
Dodržiavaním tohto prístupu a priraďovaním príslušných názvov každému z počítačov, s ktorými pracujete, budete môcť ľahko sledovať, kde sa nachádzate.

Po použití hostname môžete naraziť na otravné správy Unable to Resolve Host OpenVPN-Server pri vykonávaní následných príkazov. Aktualizácia súboru /etc/hosts s príslušným novým názvom hostiteľa by mala problém vyriešiť.

Príprava vášho servera pre OpenVPN

Na inštaláciu OpenVPN na vašom serveri sú potrebné dva balíky: openvpn a easy-rsa (na správu procesu generovania šifrovacieho kľúča). Používatelia CentOS by mali najprv pokiaľ je to potrebné nainštalovať repozitár epel-release, ako ste to robili v kapitole 2. Aby ste mohli skontrolovať prístup k serverovej aplikácii, môžete si tiež nainštalovať webový server Apache (apache2 pre Ubuntu a httpd na CentOS).

Kým nastavujete server, odporúčam aktivovať bránu firewall, ktorá blokuje všetky porty okrem 22 (SSH) a 1194 (predvolený port OpenVPN). Tento príklad ukazuje, ako bude fungovať ufw v Ubuntu, ale som si istý, že si stále pamätáte program firewalld CentOS z kapitoly 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Aby ste povolili internú routáciu medzi sieťovými rozhraniami na serveri, musíte odkomentovať jeden riadok (net.ipv4.ip_forward = 1) v súbore /etc/sysctl.conf. To umožní presmerovať vzdialených klientov podľa potreby po ich pripojení. Aby nový parameter začal fungovať, spustite sysctl -p:

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

Teraz je serverové prostredie úplne nastavené, ale je potrebné ešte niečo urobiť, kým budete pripravení: budete musieť vykonať nasledujúce kroky (podrobne ich preskúmame neskôr).

  1. Vytvorte na serveri sadu kľúčov pre infraštruktúru verejného kľúča (PKI) pomocou skriptov dodávaných s balíkom easy-rsa. V podstate server OpenVPN funguje aj ako vlastný certifikačný orgán (CA).
  2. Pripravte zodpovedajúce kľúče pre klienta
  3. Konfigurujte súbor server.conf pre server
  4. Nastavte svojho klienta OpenVPN
  5. Skontrolujte svoj VPN

Generovanie šifrovacích kľúčov

Aby ste si to nezkomplkovali, môžete nastaviť svoju kľúčovú infraštruktúru na tej istej mašine, kde beží server OpenVPN. Avšak v odporúčaniach k bezpečnosti sa zvyčajne odporúča používať samostatný server CA pre nasadenia v produkčnom prostredí. Proces generovania a distribúcie zdrojov šifrovacieho kľúča na použitie v OpenVPN je znázornený na obr. 10.2.

Kniha „Linux v akcii“
Keď ste inštalovali OpenVPN, automaticky bol vytvorený adresár /etc/openvpn/, ale zatiaľ je prázdny. Balíky openvpn a easy-rsa prichádzajú s príkladmi šablón, ktoré môžete použiť ako základ pre svoju konfiguráciu. Ak chcete spustiť proces certifikácie, skopírujte adresár šablóny easy-rsa z /usr/share/ do /etc/openvpn a prejdite do adresára easy-rsa/:

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

Katalóg easy-rsa teraz bude obsahovať množstvo skriptov. V tabuľke 10.1 sú uvedené nástroje, ktoré budete používať na generovanie kľúčov.

Kniha „Linux v akcii“

Uvedené operácie vyžadujú oprávnenia root, preto sa musíte prostredníctvom sudo su stať rootom.

Prvý súbor, s ktorým budete pracovať, sa volá vars a obsahuje premenné prostredia, ktoré easy-rsa používa pri generovaní kľúčov. Je potrebné upraviť súbor, aby ste použili vlastné hodnoty namiesto predvolených hodnôt, ktoré už sú v súbore. Tu je, ako bude vyzerať môj súbor (výpis 10.1).

Výpis 10.1. Hlavné fragmenty súboru /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"

Spustenie súboru vars umožní preniesť jeho hodnoty do prostredia shellu, odkiaľ budú zahrnuté do obsahu vašich nových kľúčov. Prečo príkaz sudo sám o sebe nefunguje? Pretože v prvom kroku upravujeme skript s názvom vars a potom ho aplikujeme. Aplikácia znamená, že súbor vars prenáša svoje hodnoty do prostredia shellu, odkiaľ budú zahrnuté do obsahu vašich nových kľúčov.

Určite znova spustite súbor pomocou novej shell, aby ste dokončili nedokončený proces. Keď to bude hotové, skript vám navrhne spustiť iný skript clean-all na odstránenie akéhokoľvek obsahu v adresári /etc/openvpn/easy-rsa/keys/:

Kniha „Linux v akcii“
Samozrejme, ďalším krokom bude spustenie skriptu clean-all, po ktorom bude nasledovať build-ca, ktorý používa skript pkitool na vytvorenie koreňového certifikátu. Budete požiadaní o potvrdenie nastavení identifikácie poskytnutých súborom vars:

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

Ďalej nasleduje skript build-key-server. Keďže používa ten istý skript pkitool spolu s novým koreňovým certifikátom, uvidíte rovnaké otázky na potvrdenie vytvorenia kľúčového páru. Kľúčom budú priradené názvy na základe argumentov, ktoré poskytnete, ktoré, pokiaľ nespúšťate niekoľko VPN na tomto počítači, zvyčajne budú server, ako v príklade:

# ./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 využíva parametre generované pomocou algoritmu Diffie-Hellman (s použitím build-dh) na dohodu o autentifikácii nových pripojení. Vytvorený súbor by nemal byť tajný, ale mal by byť vygenerovaný pomocou skriptu build-dh pre aktuálne aktívne kľúče RSA. Ak v budúcnosti vytvoríte nové kľúče RSA, budete musieť aktualizovať súbor na základe algoritmu Diffie-Hellman:

# ./build-dh

Vaše kľúče na strane servera teraz skončia v adresári /etc/openvpn/easy-rsa/keys/, ale OpenVPN o tom nevie. Predvolene OpenVPN hľadá kľúče v /etc/openvpn/, takže ich skopírujte:

# 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

Príprava kľúčov šifrovania klienta

Ako ste už videli, v TLS šifrovaní sa používajú páry zodpovedajúcich kľúčov: jeden je nastavený na serveri a druhý na vzdialenom klientovi. To znamená, že budete potrebovať kľúče klienta. Náš starý priateľ pkitool je presne to, čo potrebujete. V tomto príklade, keď spustíme program v adresári /etc/openvpn/easy-rsa/, predávame mu argument client na vygenerovanie súborov s názvom client.crt a client.key:

# ./pkitool client

Dva klientské súbory spolu s pôvodným súborom ca.crt, ktorý stále nachádza v adresári keys/, by teraz mali byť bezpečne odovzdané vášmu klientovi. Vzhľadom na ich vlastníctvo a prístupové práva to môže byť dosť zložitý proces. Najjednoduchší prístup je ručne skopírovať obsah pôvodného súboru (a nič iné) do terminálu, ktorý beží na pracovnej ploche vášho počítača (vyberte text, kliknite naň pravým tlačidlom myši a v ponuke vyberte možnosť Skopírovať). Potom ho vložte do nového súboru so rovnakým názvom, ktorý vytvárate v druhom termináli pripojenom k vášmu klientovi.

Ale každý môže vystrihnúť a vložiť. Myslite však ako administrátor, pretože nemáte vždy prístup k GUI, kde je možné vykonať operácie vystrihnúť/vložiť. Skopírujte súbory do domovského adresára vášho používateľa (aby k nim mohla vzdialená operácia scp získať prístup) a potom pomocou chown zmeňte vlastníka súborov z root na bežného používateľa bez pravomocí root, aby bolo možné vykonať vzdialenú akciu scp. Uistite sa, že všetky vaše súbory sú v tomto momente nastavené a dostupné. Na klienta ich presuniete neskôr:

# 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 úplným súborom šifrovacích kľúčov pripravených na použitie musíte serveru povedať, ako chcete vytvoriť VPN. To sa robí pomocou súboru server.conf.

Zmenšujeme počet stlačení klávesov

Musíte písať príliš veľa? Rozšírenie s zátvorkami pomôže znížiť týchto šesť príkazov na dva. Som si istý, že sa naučíte tieto dva príklady a pochopíte, čo sa deje. Čo je ešte dôležitejšie, pochopíte, ako aplikovať tieto princípy na operácie, ktoré zahŕňajú desiatky alebo dokonca stovky prvkov:

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

Nastavenie súboru server.conf

Odkiaľ môžete vedieť, ako by mal vyzerať súbor server.conf? Pamätajte na šablónu adresára easy-rsa, ktorú ste skopírovali z /usr/share/? Pri inštalácii OpenVPN zostal komprimovaný súbor šablóny konfigurácie, ktorý môžete skopírovať do /etc/openvpn/. Budem vychádzať z predpokladu, že je šablóna zaarchivovaná, a zoznámim vás s užitočným nástrojom: zcat.

Už viete o výstupe textového obsahu súboru na obrazovku pomocou príkazu cat, ale čo ak je súbor komprimovaný pomocou gzip? Vždy môžete súbor rozbaliť, a potom ho cat rada vytlačí, ale to je o jeden alebo dva kroky viac, než je potrebné. Namiesto toho, ako ste už pravdepodobne uhádli, môžete zadať príkaz zcat na načítanie rozbaleného textu do pamäte jedným krokom. V nasledujúcom príklade namiesto toho, aby ste vypisovali text na obrazovku, ho preposielate do nového súboru s názvom server.conf:

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

Nechajme bokom rozsiahlu a užitočnú dokumentáciu priloženú k súboru a pozrime sa, ako môže vyzerať, keď dokončíte jeho úpravy. Všimnite si, že bodkočiarka (;) naznačuje OpenVPN, aby nečítal ani nevykonával nasledujúci riadok (vyrezávanie 10.2).

Kniha „Linux v akcii“
Prejdime niektoré z týchto nastavení.

  • Predvolene OpenVPN funguje prostredníctvom portu 1194. Môžete to zmeniť, napríklad aby ste ešte viac skryli svoje akcie alebo sa vyhli konfliktom s inými aktívnymi tunelmi. Keďže 1194 vyžaduje minimálnu koordináciu s klientmi, je najlepšie to tak urobiť.
  • OpenVPN na prenos dát používa buď protokol riadenia prenosu (TCP), alebo protokol užívateľských datagramov (UDP). TCP môže byť trochu pomalší, ale je spoľahlivejší a pravdepodobnejšie je zrozumiteľný aplikáciám, ktoré bežia na oboch koncoch tunela.
  • Môžete uviesť dev tun, keď chcete vytvoriť jednoduchší a efektívnejší IP tunel, ktorý prenáša dáta a nič iné. Na druhej strane, ak potrebujete pripojiť niekoľko sieťových rozhraní (a sietí, ktoré zastupujú), budete musieť vybrať dev tap. Ak vám nie je jasné, čo to všetko znamená, použite argument tun.
  • Nasledujúce štyri riadky odovzdávajú OpenVPN mená troch autentifikačných súborov na serveri a súbor parametrov dh2048, ktorý ste vytvorili predtým.
  • Riadok server nastavuje rozsah a masku podsiete, ktoré sa budú používať na prideľovanie IP adries klientom pri prihlásení.
  • Voliteľný parameter push „route 10.0.3.0 255.255.255.0“ umožňuje vzdialeným klientom pristupovať k súkromným podsietiam za serverom. Na splnenie tejto úlohy je potrebné aj nastavenie siete na samotnom serveri, aby súkromná podsieť poznala podsieť OpenVPN (10.8.0.0).
  • Riadok port-share localhost 80 umožňuje preposielanie klientského prenosu, ktorý prichádza cez port 1194, na lokálny webový server, ktorý počúva na porte 80. (Bude užitočné, ak plánujete zapojiť webový server na testovanie vašej VPN.) Toto funguje iba vtedy, keď je vybraný protokol tcp.
  • Riadky user nobody a group nogroup musia byť aktívne — na to je potrebné odstrániť bodkočiarky (;). Nútenie vzdialených klientov pracovať pod nobody a nogroup zaručuje, že relácie na serveri budú nepriviligované.
  • log uvádza, že aktuálne záznamy v logu prepisujú staré záznamy pri každom spustení OpenVPN, zatiaľ čo log-append pridáva nové záznamy do existujúceho súboru logu. Samotný súbor openvpn.log sa zapisuje do adresára /etc/openvpn/.

Okrem toho sa do konfiguračného súboru často pridáva hodnota client-to-client, aby si viacerí klienti mohli navzájom vidieť, okrem servera OpenVPN. Ak ste spokojní so svojou konfiguráciou, môžete spustiť server OpenVPN:

# systemctl start openvpn

Kvôli sa meniacemu charakteru vzťahov medzi OpenVPN a systemd môže byť na spustenie služby niekedy potrebná takáto syntax: systemctl start openvpn@server.

Spustenie ip addr na zobrazenie zoznamu sieťových rozhraní vášho servera teraz musí vrátiť odkaz na nové rozhraní s názvom tun0. OpenVPN ho vytvorí na obsluhu prichádzajúcich klientov:

$ 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žno bude potrebné reštartovať server, než všetko začne fungovať ako má. Nasledujúca zastávka je klientský počítač.

10.1.2. Konfigurácia klienta OpenVPN

Tunnely sa tradične budujú s aspoň dvoma výstupmi (inak by sme ich nazývali jaskyne). Správne nastavený OpenVPN na serveri smeruje prenos do tunela a z neho na jednej strane. Budete však potrebovať aj nejaký softvér, ktorý funguje na strane klienta, teda na druhom konci tunela.

V tejto časti sa zameriam na manuálnu konfiguráciu počítača s Linuxom akéhokoľvek typu na prácu ako klient OpenVPN. Nie je to však jediný spôsob, akým je táto možnosť dostupná. OpenVPN podporuje klientské aplikácie, ktoré sa dajú nainštalovať a používať na stolných počítačoch a prenosných počítačoch s Windows alebo macOS, ako aj na smartfónoch a tabletoch so systémom Android a iOS. Viac informácií nájdete na stránke openvpn.net.

Balík OpenVPN bude potrebné nainštalovať na klientskom počítači, tak ako bol nainštalovaný na serveri, hoci tu nie je potrebný easy-rsa, pretože používané kľúče už existujú. Musíte skopírovať súbor šablóny client.conf do adresára /etc/openvpn/, ktorý bol práve vytvorený. Tentokrát súbor nebude archívovaný, takže bežný príkaz cp zvládne túto úlohu skvele:

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

Väčšina nastavení vo vašom súbore client.conf bude dosť zrozumiteľná: mala by zodpovedať hodnotám na serveri. Ako vidíte v nasledujúcom príklade súboru, unikátnym parametrom je remote 192.168.1.23 1194, ktorý určujúc klientovi IP adresu servera. Znova sa uistite, že ide o adresu vášho servera. Musíte tiež zabezpečiť, aby počítač klienta overil platnosť certifikátu servera, aby sa predišlo možnému útoku typu „človek na stred“. Jedným zo spôsobov, ako to dosiahnuť, je pridať riadok remote-cert-tls server (zoznam 10.3).

Kniha „Linux v akcii“
Teraz môžete prejsť do adresára /etc/openvpn/ a vytiahnuť certifikačné kľúče zo servera. Nahrádzajte IP adresu servera alebo názov domény v príklade svojimi hodnotami:

Kniha „Linux v akcii“
Nič obzvlášť vzrušujúce sa pravdepodobne neudeje, kým nespustíte OpenVPN na klientovi. Pretože potrebujete odovzdať pár argumentov, urobíte to z príkazového riadku. Argument —tls-client hovorí OpenVPN, že sa budete správať ako klient a pripojiť sa cez šifrovanie TLS, a —config ukazuje na váš konfiguračný súbor:

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

Dôkladne si preštudujte výstup príkazu, aby ste sa uistili, že ste sa správne pripojili. Ak sa niečo pokazí na prvýkrát, môže to byť spôsobené nezhodou v nastaveniach medzi konfiguračnými súbormi servera a klienta alebo problémom s pripojením/ firewallom. Tu je niekoľko tipov, ako riešiť problémy.

  • Dôkladne si skontrolujte výstup operácie OpenVPN na klientovi. Často obsahuje cenné rady o tom, čo presne nemôže byť vykonané a prečo.
  • Skontrolujte správy o chybách v súboroch openvpn.log a openvpn-status.log v adresári /etc/openvpn/ na serveri.
  • Preverujte súvisiace správy s OpenVPN a relevantné časové záznamy v systémových logoch na serveri a klientovi. (journalctl -ce zobrazí najnovšie záznamy.)
  • Uistite sa, že máte aktívne sieťové pripojenie medzi serverom a klientom (viac informácií — v kapitole 14).

O autorovi

David Clinton — systémový administrátor, lektor a spisovateľ. Spravoval, písal o tom a vytváral učebné materiály pre mnohé dôležité technické disciplíny, vrátane systémov Linux, cloudového počítania (najmä AWS) a kontajnerových technológií, ako je Docker. Napísal knihu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mnoho z jeho výučbových videokurzov je dostupných na stránke Pluralsight.com, a odkazy na ďalšie jeho knihy (o správe Linuxu a virtualizácii serverov) sú dostupné na adrese bootstrap-it.com.

» Podrobnejšie informácie o knihe nájdete na webovej stránke vydavateľa
» Obsah
» Úryvok

Pre Habr čitateľov zľava 25% s kupónom — Linux
Po zaplatení tlačenej verzie knihy vám na e-mail bude zaslaná elektronická kniha.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster