Kniha "Linux v akcii"

Kniha "Linux v akcii" Dobrý deň, obyvatelia Khabra! David Clinton v knihe popisuje 12 projektov zo skutočného života vrátane automatizácie vášho systému zálohovania a obnovy, nastavenia cloudu osobných súborov v štýle Dropbox a vytvorenia vlastného servera MediaWiki. Prostredníctvom zaujímavých prípadových štúdií preskúmate virtualizáciu, obnovu po havárii, bezpečnosť, zálohovanie, DevOps a riešenie problémov so systémom. Každá kapitola končí prehľadom osvedčených postupov, slovníkom nových pojmov a cvičeniami.

Úryvok „10.1. Vytvorenie tunela OpenVPN"

V tejto knihe som už veľa hovoril o šifrovaní. SSH a SCP môžu chrániť údaje prenášané cez vzdialené pripojenia (kapitola 3), šifrovanie súborov môže chrániť údaje, keď sú uložené na serveri (kapitola 8), a certifikáty TLS/SSL môžu chrániť údaje prenášané medzi lokalitami a klientskymi prehliadačmi (kapitola 9). . Niekedy je však potrebné chrániť vaše údaje v rámci širšieho rozsahu pripojení. Napríklad, možno niektorí členovia vášho tímu pracujú na cestách a pripájajú sa k sieti Wi-Fi prostredníctvom verejných hotspotov. Rozhodne by ste nemali predpokladať, že všetky takéto prístupové body sú bezpečné, ale vaši ľudia potrebujú spôsob, ako sa pripojiť k podnikovým zdrojom – a práve tu môže pomôcť VPN.

Správne navrhnutý tunel VPN poskytuje priame spojenie medzi vzdialenými klientmi a serverom spôsobom, ktorý skryje údaje, keď cestujú cez nezabezpečenú sieť. No a čo? Už ste videli veľa nástrojov, ktoré to dokážu pomocou šifrovania. Skutočnou hodnotou VPN je, že otvorením tunela môžete pripojiť vzdialené siete, ako keby boli všetky lokálne. V istom zmysle používate bypass.

Pomocou tejto rozšírenej siete môžu správcovia vykonávať svoju prácu na svojich serveroch odkiaľkoľvek. Čo je však dôležitejšie, spoločnosť so zdrojmi rozloženými na viacerých miestach ich môže všetky zviditeľniť a sprístupniť všetkým skupinám, ktoré ich potrebujú, nech sú kdekoľvek (obrázok 10.1).

Samotný tunel nezaručuje bezpečnosť. Ale jeden zo štandardov šifrovania môže byť zahrnutý do štruktúry siete, čo výrazne zvyšuje úroveň bezpečnosti. Tunely vytvorené pomocou balíka OpenVPN s otvoreným zdrojom používajú rovnaké šifrovanie TLS/SSL, o ktorom ste už čítali. OpenVPN nie je jedinou dostupnou možnosťou tunelovania, ale je jednou z najznámejších. Považuje sa za o niečo rýchlejší a bezpečnejší ako alternatívny tunelový protokol vrstvy 2, ktorý používa šifrovanie IPsec.

Chcete, aby všetci vo vašom tíme bezpečne komunikovali na cestách alebo pri práci v rôznych budovách? Ak to chcete urobiť, musíte vytvoriť server OpenVPN, ktorý umožní zdieľanie aplikácií a prístup k prostrediu lokálnej siete servera. Aby to fungovalo, všetko, čo musíte urobiť, je spustiť dva virtuálne stroje alebo dva kontajnery: jeden, ktorý bude pôsobiť ako server/hostiteľ, a druhý ako klient. Vytvorenie siete VPN nie je jednoduchý proces, takže sa pravdepodobne oplatí venovať niekoľko minút tomu, aby ste si uvedomili celkový obraz.

Kniha "Linux v akcii"

10.1.1. Konfigurácia servera OpenVPN

Skôr ako začnete, dám vám niekoľko užitočných rád. Ak sa to chystáte urobiť sami (a veľmi vám to odporúčam), pravdepodobne zistíte, že pracujete s viacerými oknami terminálu otvorenými na vašej pracovnej ploche, pričom každé je pripojené k inému počítaču. Existuje riziko, že v určitom okamihu zadáte do okna nesprávny príkaz. Aby ste tomu zabránili, môžete použiť príkaz hostname na zmenu názvu počítača zobrazeného v príkazovom riadku na niečo, čo vám jasne povie, kde sa nachádzate. Keď to urobíte, budete sa musieť odhlásiť zo servera a znova sa prihlásiť, aby sa nové nastavenia prejavili. Takto to vyzerá:

Kniha "Linux v akcii"
Dodržiavaním tohto prístupu a priraďovaním vhodných názvov každému stroju, s ktorým pracujete, môžete ľahko sledovať, kde sa nachádzate.

Po použití názvu hostiteľa sa pri vykonávaní nasledujúcich príkazov môžete stretnúť s nepríjemnými správami Unable to Resolve Host OpenVPN-Server. 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 servera na OpenVPN

Ak chcete nainštalovať OpenVPN na svoj server, potrebujete dva balíčky: openvpn a easy-rsa (na správu procesu generovania šifrovacieho kľúča). Používatelia CentOS by si v prípade potreby mali najskôr nainštalovať úložisko epel-release, ako ste to urobili v kapitole 2. Aby ste mohli otestovať prístup k serverovej aplikácii, môžete si nainštalovať aj webový server Apache (apache2 na Ubuntu a httpd na CentOS).

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

# ufw enable
# ufw allow 22
# ufw allow 1194

Ak chcete povoliť interné smerovanie 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í vzdialeným klientom presmerovať ich podľa potreby po ich pripojení. Aby nová možnosť fungovala, spustite sysctl -p:

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

Vaše serverové prostredie je teraz plne nakonfigurované, ale ešte musíte urobiť jednu vec, kým budete pripravení: budete musieť vykonať nasledujúce kroky (podrobne sa im budeme venovať ďalej).

  1. Vytvorte sadu šifrovacích kľúčov infraštruktúry verejných kľúčov (PKI) na serveri pomocou skriptov dodaných s balíkom easy-rsa. Server OpenVPN v podstate funguje aj ako jeho vlastná certifikačná autorita (CA).
  2. Pripravte pre klienta vhodné kľúče
  3. Nakonfigurujte súbor server.conf pre server
  4. Nastavte si klienta OpenVPN
  5. Skontrolujte svoju sieť VPN

Generovanie šifrovacích kľúčov

Aby ste veci zjednodušili, môžete svoju kľúčovú infraštruktúru nastaviť na rovnakom počítači, na ktorom beží server OpenVPN. Najlepšie bezpečnostné postupy však zvyčajne odporúčajú použitie samostatného servera CA pre produkčné nasadenia. 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"
Pri inštalácii OpenVPN sa automaticky vytvoril adresár /etc/openvpn/, ale zatiaľ v ňom nič nie je. Balíky openvpn a easy-rsa sa dodávajú so vzorovými súbormi š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

Adresár easy-rsa bude teraz obsahovať pomerne veľa skriptov. V tabuľke 10.1 obsahuje zoznam nástrojov, ktoré použijete na vytváranie kľúčov.

Kniha "Linux v akcii"

Vyššie uvedené operácie vyžadujú oprávnenia root, takže sa musíte stať root pomocou sudo su.

Prvý súbor, s ktorým budete pracovať, sa nazýva vars a obsahuje premenné prostredia, ktoré easy-rsa používa pri generovaní kľúčov. Súbor musíte upraviť, aby ste namiesto predvolených hodnôt, ktoré už existujú, používali svoje vlastné hodnoty. Takto 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="[email protected]"
export KEY_OU="IT"

Spustenie súboru vars odovzdá jeho hodnoty do prostredia shell, kde budú zahrnuté do obsahu vašich nových kľúčov. Prečo samotný príkaz sudo nefunguje? Pretože v prvom kroku upravíme skript s názvom vars a potom ho aplikujeme. Použitie a znamená, že súbor vars odovzdá svoje hodnoty do prostredia shell, kde budú zahrnuté do obsahu vašich nových kľúčov.

Nezabudnite znova spustiť súbor pomocou nového shellu, aby ste dokončili nedokončený proces. Keď to urobíte, skript vás vyzve na spustenie ďalšieho skriptu, clean-all, na odstránenie akéhokoľvek obsahu v adresári /etc/openvpn/easy-rsa/keys/:

Kniha "Linux v akcii"
Prirodzene, ďalším krokom je spustenie skriptu clean-all, po ktorom nasleduje build-ca, ktorý používa skript pkitool na vytvorenie koreňového certifikátu. Budete požiadaní o potvrdenie nastavení identity, ktoré poskytuje vars:

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

Ďalej prichádza skript build-key-server. Keďže používa rovnaký skript pkitool spolu s novým koreňovým certifikátom, uvidíte rovnaké otázky na potvrdenie vytvorenia páru kľúčov. Kľúče budú pomenované na základe argumentov, ktoré odošlete, ktoré, pokiaľ na tomto počítači nepoužívate viacero sietí VPN, budú zvyčajne serverové, 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 používa parametre generované algoritmom Diffie-Hellman (pomocou build-dh) na vyjednanie autentifikácie pre nové pripojenia. Tu vytvorený súbor nemusí byť tajný, ale musí byť vygenerovaný pomocou skriptu build-dh pre kľúče RSA, ktoré sú momentálne aktívne. Ak v budúcnosti vytvoríte nové kľúče RSA, budete musieť aktualizovať aj súbor Diffie-Hellman:

# ./build-dh

Kľúče na strane servera teraz skončia v adresári /etc/openvpn/easy-rsa/keys/, ale OpenVPN to nevie. V predvolenom nastavení bude OpenVPN hľadať 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 šifrovacích kľúčov klienta

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

# ./pkitool client

Dva súbory klienta spolu s pôvodným súborom ca.crt, ktorý je stále v adresári kľúčov/, by sa teraz mali bezpečne preniesť do vášho klienta. Vzhľadom na ich vlastnícke a prístupové práva to nemusí byť také jednoduché. Najjednoduchším prístupom je manuálne skopírovať obsah zdrojového súboru (a nič iné ako tento obsah) do terminálu spusteného na pracovnej ploche vášho počítača (vyberte text, kliknite naň pravým tlačidlom myši a z ponuky vyberte možnosť Kopírovať). Potom to vložte do nového súboru s rovnakým názvom, ktorý vytvoríte v druhom termináli pripojenom k ​​vášmu klientovi.

Ale vystrihnúť a nalepiť môže každý. Namiesto toho premýšľajte ako správca, pretože nie vždy budete mať prístup ku GUI, kde sú možné operácie vystrihnutia/vloženia. Skopírujte súbory do domovského adresára vášho užívateľa (aby k nim mala prístup vzdialená operácia scp) a potom použite chown na zmenu vlastníctva súborov z root na bežného užívateľa iného ako root, aby bolo možné vykonať vzdialenú akciu scp. Uistite sa, že všetky vaše súbory sú aktuálne nainštalované a dostupné. O niečo neskôr ich presuniete klientovi:

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

Zníženie počtu stlačení klávesov

Je tam príliš veľa písania? Rozšírenie pomocou zátvoriek pomôže zredukovať týchto šesť príkazov na dva. Som si istý, že si dokážete preštudovať tieto dva príklady a pochopíte, čo sa deje. Ešte dôležitejšie je, že budete schopní pochopiť, ako aplikovať tieto princípy na operácie zahŕňajúce 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

Ako môžete vedieť, ako by mal vyzerať súbor server.conf? Pamätáte si šablónu adresára easy-rsa, ktorú ste skopírovali z /usr/share/? Keď ste nainštalovali OpenVPN, zostal vám komprimovaný súbor konfiguračnej šablóny, ktorý môžete skopírovať do /etc/openvpn/. Budem stavať na tom, že šablóna je archivovaná a predstavím vám užitočný nástroj: zcat.

Už viete o tlači textového obsahu súboru na obrazovku pomocou príkazu cat, ale čo ak je súbor komprimovaný pomocou gzip? Súbor môžete vždy rozbaliť a mačka ho šťastne vytlačí, ale to je o jeden alebo dva kroky viac, ako je potrebné. Namiesto toho, ako ste možno uhádli, môžete zadať príkaz zcat na načítanie rozbaleného textu do pamäte v jednom kroku. V nasledujúcom príklade namiesto tlače textu na obrazovku ho presmerujete 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

Odložme rozsiahlu a užitočnú dokumentáciu, ktorá sa dodáva so súborom, a pozrime sa, ako by mohol vyzerať po dokončení úprav. Všimnite si, že bodkočiarka (;) hovorí OpenVPN, aby nečítala ani nespúšťala ďalší riadok (Výpis 10.2).

Kniha "Linux v akcii"
Poďme si prejsť niektoré z týchto nastavení.

  • OpenVPN štandardne beží na porte 1194. Môžete to zmeniť, aby ste napríklad ďalej skryli svoje aktivity 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 urobiť týmto spôsobom.
  • OpenVPN používa na prenos údajov buď Transmission Control Protocol (TCP) alebo User Datagram Protocol (UDP). TCP môže byť trochu pomalšie, ale je spoľahlivejšie a s väčšou pravdepodobnosťou ho pochopia aplikácie bežiace na oboch koncoch tunela.
  • Môžete zadať dev tun, keď chcete vytvoriť jednoduchší a efektívnejší IP tunel, ktorý prenáša dátový obsah a nič iné. Ak na druhej strane potrebujete pripojiť viacero sieťových rozhraní (a sietí, ktoré reprezentujú) a vytvoriť tak ethernetový most, budete musieť zvoliť dev tap. Ak nerozumiete, čo to všetko znamená, použite argument tun.
  • Nasledujúce štyri riadky poskytujú OpenVPN názvy troch autentifikačných súborov na serveri a súboru možností dh2048, ktorý ste vytvorili skôr.
  • Riadok servera nastavuje rozsah a masku podsiete, ktoré budú použité na pridelenie IP adries klientom po prihlásení.
  • Voliteľný parameter push "route 10.0.3.0 255.255.255.0" umožňuje vzdialeným klientom prístup k súkromným podsieťam za serverom. Aby to fungovalo, vyžaduje sa aj nastavenie siete na samotnom serveri, aby súkromná podsieť vedela o podsieti OpenVPN (10.8.0.0).
  • Linka port-share localhost 80 vám umožňuje presmerovať klientsky prenos prichádzajúci na port 1194 na lokálny webový server počúvajúci na porte 80. (Toto bude užitočné, ak sa chystáte použiť webový server na testovanie vašej VPN.) Toto funguje iba potom, keď je vybratý protokol tcp.
  • Riadky používateľa nikto a skupina nogroup musia byť povolené odstránením bodkočiarok (;). Vynútenie spustenia vzdialených klientov ako nikto a žiadna skupina zaisťuje, že relácie na serveri nebudú privilegované.
  • log určuje, že aktuálne položky denníka prepíšu staré položky pri každom spustení OpenVPN, zatiaľ čo log-append pripojí nové položky k existujúcemu súboru denníka. Samotný súbor openvpn.log sa zapíše do adresára /etc/openvpn/.

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

# systemctl start openvpn

Vzhľadom na meniaci sa charakter vzťahu medzi OpenVPN a systemd môže byť niekedy na spustenie služby potrebná nasledujúca syntax: systemctl start openvpn@server.

Spustenie ip addr na zoznam sieťových rozhraní vášho servera by teraz malo vydať odkaz na nové rozhranie 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 budete musieť reštartovať server, kým všetko začne fungovať naplno. Ďalšou zastávkou je klientsky počítač.

10.1.2. Konfigurácia klienta OpenVPN

Tradične sa stavajú tunely s minimálne dvoma východmi (inak by sme ich nazvali jaskyne). Správne nakonfigurované OpenVPN na serveri smeruje prevádzku do tunela a von z tunela na jednej strane. Budete však potrebovať aj nejaký softvér bežiaci na strane klienta, teda na druhom konci tunela.

V tejto časti sa zameriam na manuálne nastavenie nejakého typu počítača so systémom Linux, aby fungoval ako klient OpenVPN. Toto však nie je jediný spôsob, ako sa táto príležitosť ponúka. OpenVPN podporuje klientske aplikácie, ktoré je možné nainštalovať a používať na stolných počítačoch a notebookoch so systémom Windows alebo macOS, ako aj na smartfónoch a tabletoch so systémom Android a iOS. Podrobnosti nájdete na stránke openvpn.net.

Balík OpenVPN bude musieť byť nainštalovaný na klientskom počítači tak, ako bol nainštalovaný na serveri, aj keď tu nie je potrebné jednoduché rsa, pretože kľúče, ktoré používate, už existujú. Musíte skopírovať súbor šablóny client.conf do adresára /etc/openvpn/, ktorý ste práve vytvorili. Tentoraz nebude súbor zazipovaný, takže bežný príkaz cp vykoná túto úlohu v pohode:

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

Väčšina nastavení v súbore client.conf bude celkom samozrejmá: mali by zodpovedať hodnotám na serveri. Ako môžete vidieť z nasledujúceho vzorového súboru, jedinečný parameter je vzdialený 192.168.1.23 1194, ktorý klientovi oznamuje IP adresu servera. Opäť sa uistite, že toto je adresa vášho servera. Mali by ste tiež prinútiť klientsky počítač, aby overil pravosť certifikátu servera, aby ste zabránili možnému útoku typu man-in-the-middle. Jedným zo spôsobov, ako to urobiť, je pridať riadok server remote-cert-tls (výpis 10.3).

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

Kniha "Linux v akcii"
Nič vzrušujúce sa pravdepodobne nestane, kým na klientovi nespustíte OpenVPN. Keďže musíte zadať niekoľko argumentov, urobíte to z príkazového riadku. Argument --tls-client hovorí OpenVPN, že budete vystupovať ako klient a pripojíte sa pomocou šifrovania TLS a --config ukazuje na váš konfiguračný súbor:

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

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

  • Pozorne si prečítajte výstup operácie OpenVPN na klientovi. Často obsahuje cenné rady, čo presne sa nedá a prečo.
  • Skontrolujte chybové správy v súboroch openvpn.log a openvpn-status.log v adresári /etc/openvpn/ na serveri.
  • Skontrolujte systémové protokoly na serveri a klientovi, či neobsahujú správy súvisiace s OpenVPN a načasované správy. (journalctl -ce zobrazí najnovšie záznamy.)
  • Uistite sa, že máte aktívne sieťové pripojenie medzi serverom a klientom (viac o tom v kapitole 14).

O autorovi

David Clinton - správca systému, učiteľ a spisovateľ. Administroval, písal a vytvoril vzdelávacie materiály pre mnohé dôležité technické disciplíny vrátane Linuxových systémov, cloud computingu (najmä AWS) a kontajnerových technológií, ako je Docker. Napísal knihu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mnohé z jeho videotréningových kurzov možno nájsť na Pluralsight.com a odkazy na jeho ďalšie knihy (o správe Linuxu a virtualizácii serverov) sú dostupné na bootstrap-it.com.

» Viac podrobností o knihe nájdete na webová stránka vydavateľa
» obsah
» Úryvok

Pre Khabrozhitely zľavu 25 % pomocou kupónu - Linux
Po zaplatení papierovej verzie knihy bude elektronická kniha zaslaná e-mailom.

Zdroj: hab.com

Pridať komentár