Kniha Linux v akci

Kniha Linux v akci Dobrý den, obyvatelé Khabra! David Clinton v knize popisuje 12 projektů ze skutečného života, včetně automatizace vašeho systému zálohování a obnovy, nastavení cloudu osobních souborů ve stylu Dropboxu a vytvoření vlastního serveru MediaWiki. Prostřednictvím zajímavých případových studií prozkoumáte virtualizaci, obnovu po havárii, zabezpečení, zálohování, DevOps a řešení problémů se systémem. Každá kapitola končí přehledem osvědčených postupů, slovníčkem nových termínů a cvičeními.

Úryvek „10.1. Vytvoření tunelu OpenVPN"

O šifrování jsem v této knize již mluvil hodně. SSH a SCP mohou chránit data přenášená přes vzdálená připojení (kapitola 3), šifrování souborů může chránit data, když jsou uložena na serveru (kapitola 8), a certifikáty TLS/SSL mohou chránit data přenášená mezi weby a klientskými prohlížeči (kapitola 9). . Někdy je ale potřeba vaše data chránit napříč širším spektrem připojení. Například možná někteří členové vašeho týmu pracují na cestách a připojují se k Wi-Fi prostřednictvím veřejných hotspotů. Rozhodně byste neměli předpokládat, že všechny takové přístupové body jsou bezpečné, ale vaši lidé potřebují způsob, jak se připojit k firemním zdrojům – a v tom může pomoci VPN.

Správně navržený tunel VPN poskytuje přímé spojení mezi vzdálenými klienty a serverem způsobem, který skrývá data při jejich cestování přes nezabezpečenou síť. No a co? Už jste viděli mnoho nástrojů, které to umí pomocí šifrování. Skutečná hodnota VPN spočívá v tom, že otevřením tunelu můžete připojit vzdálené sítě, jako by byly všechny místní. V jistém smyslu používáte bypass.

Pomocí této rozšířené sítě mohou správci provádět svou práci na svých serverech odkudkoli. Ale co je důležitější, společnost se zdroji rozmístěnými na více místech je může všechny zviditelnit a zpřístupnit všem skupinám, které je potřebují, ať jsou kdekoli (obrázek 10.1).

Tunel sám o sobě nezaručuje bezpečnost. Ale do struktury sítě lze zahrnout jeden ze standardů šifrování, což výrazně zvyšuje úroveň zabezpečení. Tunely vytvořené pomocí open source balíčku OpenVPN používají stejné šifrování TLS/SSL, o kterém jste již četli. OpenVPN není jedinou dostupnou možností tunelování, ale je jednou z nejznámějších. Je považován za o něco rychlejší a bezpečnější než alternativní tunelový protokol vrstvy 2, který používá šifrování IPsec.

Chcete, aby všichni ve vašem týmu bezpečně komunikovali na cestách nebo při práci v různých budovách? Chcete-li to provést, musíte vytvořit server OpenVPN, který umožní sdílení aplikací a přístup k prostředí místní sítě serveru. Aby to fungovalo, vše, co musíte udělat, je spustit dva virtuální stroje nebo dva kontejnery: jeden bude fungovat jako server/hostitel a druhý jako klient. Vytvoření VPN není jednoduchý proces, takže pravděpodobně stojí za to věnovat pár minut tomu, abyste si uvědomili celkový obraz.

Kniha Linux v akci

10.1.1. Konfigurace serveru OpenVPN

Než začnete, dám vám pár užitečných rad. Pokud to uděláte sami (a vřele vám to doporučuji), pravděpodobně zjistíte, že pracujete s několika terminálovými okny otevřenými na ploše, z nichž každé je připojeno k jinému počítači. Existuje riziko, že v určitém okamžiku zadáte do okna špatný příkaz. Abyste tomu zabránili, můžete použít příkaz hostname ke změně názvu počítače zobrazeného na příkazovém řádku na něco, co vám jasně říká, kde se nacházíte. Jakmile to uděláte, budete se muset odhlásit ze serveru a znovu se přihlásit, aby se nové nastavení projevilo. Takhle to vypadá:

Kniha Linux v akci
Dodržováním tohoto přístupu a přidělováním příslušných jmen každému ze strojů, se kterými pracujete, můžete snadno sledovat, kde se nacházíte.

Po použití názvu hostitele se při provádění následujících příkazů můžete setkat s nepříjemnými zprávami Unable to Resolve Host OpenVPN-Server. Problém by měla vyřešit aktualizace souboru /etc/hosts s příslušným novým názvem hostitele.

Příprava serveru na OpenVPN

K instalaci OpenVPN na váš server potřebujete dva balíčky: openvpn a easy-rsa (pro správu procesu generování šifrovacího klíče). Uživatelé CentOS by si měli v případě potřeby nejprve nainstalovat úložiště epel-release, jak jste to udělali v kapitole 2. Abyste mohli otestovat přístup k serverové aplikaci, můžete také nainstalovat webový server Apache (apache2 na Ubuntu a httpd na CentOS).

Při nastavování serveru doporučuji aktivovat firewall, který blokuje všechny porty kromě 22 (SSH) a 1194 (výchozí port OpenVPN). Tento příklad ukazuje, jak by ufw fungovalo na Ubuntu, ale jsem si jistý, že si stále pamatujete program CentOS firewalld z kapitoly 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Chcete-li povolit interní směrování mezi síťovými rozhraními na serveru, musíte odkomentovat jeden řádek (net.ipv4.ip_forward = 1) v souboru /etc/sysctl.conf. To umožní, aby byli vzdálení klienti po připojení přesměrováni podle potřeby. Aby nová možnost fungovala, spusťte sysctl -p:

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

Vaše serverové prostředí je nyní plně nakonfigurováno, ale než budete připraveni, zbývá udělat ještě jednu věc: budete muset dokončit následující kroky (podrobně se jim budeme věnovat dále).

  1. Vytvořte sadu šifrovacích klíčů infrastruktury veřejných klíčů (PKI) na serveru pomocí skriptů dodávaných s balíčkem easy-rsa. Server OpenVPN v podstatě také funguje jako vlastní certifikační autorita (CA).
  2. Připravte pro klienta vhodné klíče
  3. Nakonfigurujte soubor server.conf pro server
  4. Nastavte klienta OpenVPN
  5. Zkontrolujte svou VPN

Generování šifrovacích klíčů

Aby to bylo jednoduché, můžete svou klíčovou infrastrukturu nastavit na stejném počítači, kde běží server OpenVPN. Osvědčené postupy zabezpečení však obvykle doporučují použití samostatného serveru CA pro produkční nasazení. Proces generování a distribuce zdrojů šifrovacího klíče pro použití v OpenVPN je znázorněn na Obr. 10.2.

Kniha Linux v akci
Při instalaci OpenVPN se automaticky vytvořil adresář /etc/openvpn/, ale zatím v něm nic není. Balíčky openvpn a easy-rsa jsou dodávány s ukázkovými soubory šablon, které můžete použít jako základ pro svou konfiguraci. Chcete-li zahájit proces certifikace, zkopírujte adresář šablony easy-rsa z /usr/share/ do /etc/openvpn a přejděte do adresáře easy-rsa/:

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

Adresář easy-rsa bude nyní obsahovat několik skriptů. V tabulce 10.1 uvádí seznam nástrojů, které použijete k vytvoření klíčů.

Kniha Linux v akci

Výše uvedené operace vyžadují oprávnění root, takže se musíte stát root pomocí sudo su.

První soubor, se kterým budete pracovat, se nazývá vars a obsahuje proměnné prostředí, které easy-rsa používá při generování klíčů. Musíte upravit soubor tak, aby používal své vlastní hodnoty namísto výchozích hodnot, které již existují. Takto bude vypadat můj soubor (výpis 10.1).

Výpis 10.1. Hlavní fragmenty souboru /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"

Spuštění souboru vars předá jeho hodnoty do prostředí shellu, kde budou zahrnuty do obsahu vašich nových klíčů. Proč samotný příkaz sudo nefunguje? Protože v prvním kroku upravíme skript s názvem vars a poté jej aplikujeme. Použití a znamená, že soubor vars předá své hodnoty prostředí shellu, kde budou zahrnuty do obsahu vašich nových klíčů.

Nezapomeňte znovu spustit soubor pomocí nového shellu, abyste dokončili nedokončený proces. Když to uděláte, skript vás vyzve ke spuštění dalšího skriptu, clean-all, k odstranění veškerého obsahu v adresáři /etc/openvpn/easy-rsa/keys/:

Kniha Linux v akci
Dalším krokem je samozřejmě spuštění skriptu clean-all a následně build-ca, který používá skript pkitool k vytvoření kořenového certifikátu. Budete požádáni o potvrzení nastavení identity poskytované vars:

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

Následuje skript build-key-server. Protože používá stejný skript pkitool spolu s novým kořenovým certifikátem, uvidíte stejné otázky pro potvrzení vytvoření páru klíčů. Klíče budou pojmenovány na základě argumentů, které předáte, což, pokud na tomto počítači nepoužíváte více sítí VPN, bude obvykle server, jako v příkladu:

# ./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žívá parametry generované algoritmem Diffie-Hellman (pomocí build-dh) k vyjednávání autentizace pro nová připojení. Zde vytvořený soubor nemusí být tajný, ale musí být vygenerován pomocí skriptu build-dh pro klíče RSA, které jsou aktuálně aktivní. Pokud v budoucnu vytvoříte nové klíče RSA, budete také muset aktualizovat soubor Diffie-Hellman:

# ./build-dh

Vaše klíče na straně serveru nyní skončí v adresáři /etc/openvpn/easy-rsa/keys/, ale OpenVPN to neví. Ve výchozím nastavení bude OpenVPN hledat klíče v /etc/openvpn/, takže je zkopí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

Příprava klientských šifrovacích klíčů

Jak jste již viděli, šifrování TLS používá páry odpovídajících klíčů: jeden nainstalovaný na serveru a jeden nainstalovaný na vzdáleném klientovi. To znamená, že budete potřebovat klientské klíče. Náš starý známý pkitool je přesně to, co k tomu potřebujete. V tomto příkladu, když spustíme program v adresáři /etc/openvpn/easy-rsa/, předáme mu argument klienta, aby se vygenerovaly soubory nazvané client.crt a client.key:

# ./pkitool client

Dva klientské soubory spolu s původním souborem ca.crt, který je stále v adresáři keys/, by nyní měly být bezpečně přeneseny do vašeho klienta. Vzhledem k jejich vlastnictví a přístupovým právům to nemusí být tak jednoduché. Nejjednodušší přístup je ručně zkopírovat obsah zdrojového souboru (a nic jiného než tento obsah) do terminálu spuštěného na ploše vašeho PC (vyberte text, klikněte na něj pravým tlačítkem a z nabídky vyberte Kopírovat). Poté jej vložte do nového souboru se stejným názvem, který vytvoříte v druhém terminálu připojeném k vašemu klientovi.

Ale vystřihnout a vložit může každý. Místo toho přemýšlejte jako správce, protože ne vždy budete mít přístup do GUI, kde jsou možné operace vyjmutí/vložení. Zkopírujte soubory do domovského adresáře vašeho uživatele (aby k nim mohla přistupovat vzdálená operace scp) a poté pomocí příkazu chown změňte vlastnictví souborů z root na běžného uživatele bez tohoto oprávnění, aby bylo možné provést vzdálenou akci scp. Ujistěte se, že všechny vaše soubory jsou aktuálně nainstalovány a přístupné. O něco později je přesunete 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 kompletní sadou šifrovacích klíčů připravenou k použití musíte serveru sdělit, jak chcete vytvořit VPN. To se provádí pomocí souboru server.conf.

Snížení počtu úhozů

Je tam příliš mnoho psaní? Rozšíření pomocí závorek pomůže zredukovat těchto šest příkazů na dva. Jsem si jistý, že si tyto dva příklady dokážete prostudovat a pochopíte, co se děje. Ještě důležitější je, že budete schopni porozumět tomu, jak aplikovat tyto principy na operace zahrnující desítky nebo dokonce stovky prvků:

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

Nastavení souboru server.conf

Jak můžete vědět, jak by měl vypadat soubor server.conf? Pamatujete si šablonu adresáře easy-rsa, kterou jste zkopírovali z /usr/share/? Když jste nainstalovali OpenVPN, zůstal vám komprimovaný soubor konfigurační šablony, který můžete zkopírovat do /etc/openvpn/. Budu stavět na tom, že šablona je archivovaná a představím vám užitečný nástroj: zcat.

O tisku textového obsahu souboru na obrazovku pomocí příkazu cat již víte, ale co když je soubor komprimován pomocí gzip? Soubor můžete vždy rozbalit a kočka jej šťastně vytiskne, ale to je o jeden nebo dva kroky více, než je nutné. Místo toho, jak jste možná uhodli, můžete zadat příkaz zcat k načtení rozbaleného textu do paměti v jednom kroku. V následujícím příkladu místo tisku textu na obrazovku jej přesměrujete do nového souboru s názvem server.conf:

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

Ponechme stranou rozsáhlou a užitečnou dokumentaci dodanou se souborem a podívejme se, jak by mohl vypadat po dokončení úprav. Všimněte si, že středník (;) říká OpenVPN, aby nečetla ani nespouštěla ​​další řádek (výpis 10.2).

Kniha Linux v akci
Pojďme si projít některá z těchto nastavení.

  • Ve výchozím nastavení běží OpenVPN na portu 1194. Toto můžete změnit, abyste například dále skryli své aktivity nebo se vyhnuli konfliktům s jinými aktivními tunely. Protože 1194 vyžaduje minimální koordinaci s klienty, je nejlepší to udělat tímto způsobem.
  • OpenVPN používá k přenosu dat buď Transmission Control Protocol (TCP) nebo User Datagram Protocol (UDP). TCP je možná trochu pomalejší, ale je spolehlivější a s větší pravděpodobností mu porozumí aplikace běžící na obou koncích tunelu.
  • Můžete zadat dev tun, když chcete vytvořit jednodušší a efektivnější IP tunel, který přenáší datový obsah a nic jiného. Pokud na druhou stranu potřebujete připojit více síťových rozhraní (a sítí, které představují) a vytvořit ethernetový most, budete muset zvolit dev tap. Pokud nerozumíte tomu, co to všechno znamená, použijte argument tun.
  • Následující čtyři řádky poskytují OpenVPN názvy tří ověřovacích souborů na serveru a souboru voleb dh2048, který jste vytvořili dříve.
  • Řádek serveru nastavuje rozsah a masku podsítě, které budou použity k přiřazení IP adres klientům po přihlášení.
  • Volitelný parametr push "route 10.0.3.0 255.255.255.0" umožňuje vzdáleným klientům přístup k privátním podsítím za serverem. Aby to fungovalo, také vyžaduje nastavení sítě na samotném serveru tak, aby soukromá podsíť věděla o podsíti OpenVPN (10.8.0.0).
  • Řádek port-share localhost 80 vám umožňuje přesměrovat klientský provoz přicházející na portu 1194 na místní webový server naslouchající na portu 80. (To bude užitečné, pokud se chystáte použít webový server k testování vaší VPN.) Toto funguje pouze poté, když je vybrán protokol tcp.
  • Řádky uživatel nikdo a skupina nogroup musí být povoleny odstraněním středníků (;). Vynucení spuštění vzdálených klientů jako nikdo a žádná skupina zajišťuje, že relace na serveru nebudou privilegované.
  • log určuje, že aktuální položky protokolu přepíší staré položky při každém spuštění OpenVPN, zatímco log-append připojí nové položky k existujícímu souboru protokolu. Samotný soubor openvpn.log je zapsán do adresáře /etc/openvpn/.

Kromě toho je do konfiguračního souboru často přidána hodnota klient-klient, aby se kromě serveru OpenVPN mohlo navzájem vidět více klientů. Pokud jste se svou konfigurací spokojeni, můžete spustit server OpenVPN:

# systemctl start openvpn

Kvůli měnící se povaze vztahu mezi OpenVPN a systemd může být někdy ke spuštění služby vyžadována následující syntaxe: systemctl start openvpn@server.

Spuštění ip addr pro seznam síťových rozhraní vašeho serveru by nyní mělo vypsat odkaz na nové rozhraní nazvané tun0. OpenVPN jej vytvoří, aby obsluhoval příchozí klienty:

$ 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žná budete muset restartovat server, než vše začne plně fungovat. Další zastávkou je klientský počítač.

10.1.2. Konfigurace klienta OpenVPN

Tradičně se staví tunely s minimálně dvěma východy (jinak bychom je nazvali jeskyněmi). Správně nakonfigurované OpenVPN na serveru směruje provoz do tunelu a ven z tunelu na jedné straně. Budete ale také potřebovat nějaký software běžící na straně klienta, tedy na druhém konci tunelu.

V této části se zaměřím na ruční nastavení nějakého typu počítače se systémem Linux, aby fungoval jako klient OpenVPN. Ale to není jediný způsob, jak se tato příležitost nabízí. OpenVPN podporuje klientské aplikace, které lze nainstalovat a používat na stolních počítačích a noteboocích se systémem Windows nebo macOS, stejně jako na chytrých telefonech a tabletech Android a iOS. Podrobnosti najdete na openvpn.net.

Balíček OpenVPN bude nutné nainstalovat na klientský počítač tak, jak byl nainstalován na server, i když zde není potřeba easy-rsa, protože klíče, které používáte, již existují. Musíte zkopírovat soubor šablony client.conf do adresáře /etc/openvpn/, který jste právě vytvořili. Tentokrát se soubor nezazipuje, takže běžný příkaz cp udělá práci v pohodě:

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

Většina nastavení v souboru client.conf bude docela samozřejmá: měla by odpovídat hodnotám na serveru. Jak můžete vidět z následujícího příkladu souboru, jedinečný parametr je vzdálený 192.168.1.23 1194, který klientovi sděluje IP adresu serveru. Znovu se ujistěte, že se jedná o adresu vašeho serveru. Měli byste také donutit klientský počítač k ověření pravosti certifikátu serveru, abyste zabránili možnému útoku typu man-in-the-middle. Jedním ze způsobů, jak toho dosáhnout, je přidat řádek remote-cert-tls server (výpis 10.3).

Kniha Linux v akci
Nyní můžete přejít do adresáře /etc/openvpn/ a extrahovat certifikační klíče ze serveru. Nahraďte IP adresu serveru nebo název domény v příkladu svými hodnotami:

Kniha Linux v akci
Nic vzrušujícího se pravděpodobně nestane, dokud na klientovi nespustíte OpenVPN. Protože musíte předat několik argumentů, uděláte to z příkazového řádku. Argument --tls-client říká OpenVPN, že budete vystupovat jako klient a připojovat se pomocí šifrování TLS a --config ukazuje na váš konfigurační soubor:

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

Pozorně si přečtěte výstup příkazu, abyste se ujistili, že jste správně připojeni. Pokud se něco pokazí poprvé, může to být způsobeno nesouladem v nastavení mezi konfiguračními soubory serveru a klienta nebo problémem se síťovým připojením/bránou firewall. Zde je několik tipů pro odstraňování problémů.

  • Pečlivě si přečtěte výstup operace OpenVPN na klientovi. Často obsahuje cenné rady, co přesně nelze udělat a proč.
  • Zkontrolujte chybové zprávy v souborech openvpn.log a openvpn-status.log v adresáři /etc/openvpn/ na serveru.
  • Zkontrolujte systémové protokoly na serveru a klientovi, zda neobsahují zprávy související s OpenVPN a časované zprávy. (journalctl -ce zobrazí nejnovější záznamy.)
  • Ujistěte se, že máte aktivní síťové připojení mezi serverem a klientem (více o tom v kapitole 14).

O autorovi

David Clinton - správce systému, učitel a spisovatel. Administroval, psal a vytvářel vzdělávací materiály pro mnoho důležitých technických oborů, včetně systémů Linux, cloud computingu (zejména AWS) a kontejnerových technologií, jako je Docker. Napsal knihu Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Mnoho z jeho kurzů videoškolení lze nalézt na Pluralsight.com a odkazy na jeho další knihy (o správě Linuxu a virtualizaci serverů) jsou k dispozici na bootstrap-it.com.

» Více podrobností o knize naleznete na webové stránky vydavatele
» obsah
» Výňatek

Pro Khabrozhiteley 25% slevu pomocí kupónu - Linux
Po zaplacení papírové verze knihy bude elektronická kniha zaslána e-mailem.

Zdroj: www.habr.com

Přidat komentář