GNU/Linux >> Znalost Linux >  >> Linux

Jak zpevnit a zabezpečit webový server NGINX v Linuxu

Nginx je pravděpodobně jedním z nejpoužívanějších bezplatných a opensource webových serverů používaných při hostování webů s vysokou návštěvností. Je dobře známý pro svou stabilitu, hvězdný výkon, nízkou spotřebu zdrojů a štíhlou konfiguraci. Některé z oblíbených webů poháněných Nginx zahrnují WordPress.com, GitHub, Netflix, Airbnb, Hulu, Eventbrite, Pinterest a SoundCloud, abychom zmínili alespoň některé.

Přestože jsou výkonné a stabilní, výchozí konfigurace nejsou bezpečné a jsou vyžadována další vylepšení k posílení webového serveru a poskytnutí tolik potřebného zabezpečení, aby se zabránilo útokům a narušení.

V tomto článku se dotýkáme některých kroků, které můžete podniknout, abyste zpevnili a zabezpečili svůj webový server Nginx a získali z něj maximum.

1) Implementujte certifikát SSL

Jedním z předběžných a zásadních kroků při posílení vašeho webového serveru Nginx je jeho zabezpečení pomocí certifikátu SSL. SSL certifikát je kryptografický digitální certifikát, který šifruje provoz mezi vaším webovým serverem a webovými prohlížeči návštěvníků vašeho webu. Také to nutí váš web používat zabezpečený protokol HTTPS a zahazovat HTTP, který odesílá provoz v prostém textu. Tímto způsobem je komunikace tam a zpět zabezpečena a chráněna před hackery, kteří by se mohli pokusit odposlouchávat a ukrást důvěrné informace, jako jsou uživatelská jména, hesla a informace o kreditních kartách.

Můžete využít certifikát Free Let’s Encrypt SSL, který se snadno instaluje a konfiguruje a má platnost 90 dní. Jakmile jej nainstalujete, můžete ověřit sílu šifrování SSL testováním své domény v SSL Labs . Výsledky jsou uvedeny níže.

Jak můžete vidět, doména, kterou používáme, získala známku B, kvůli slabé podpoře protokolu zvýrazněné žlutě. Ještě musíme provést několik úprav, abychom to dostali na stupeň A. Podívejme se, jak můžeme v dalším kroku zlepšit podporu protokolu.

2) Vypněte slabé protokoly SSL / TLS

Jak jste viděli z výsledků, implementace SSL nutně neznamená, že je váš web plně zabezpečen. Zastaralé verze, jako jsou TLS 1.0, TLS 1.1 a SSL 3, jsou považovány za slabé a představují zranitelnosti, které mohou hackeři zneužít a případně ohrozit váš webový server. Tyto protokoly jsou náchylné k zranitelnostem, jako je POODLE, BEAST a CRIME.

Ve skutečnosti nejpopulárnější a nejrozšířenější webové prohlížeče oznámily ukončení podpory TLS 1.0 a TLS 1.1 v uvedených termínech.

  • Název prohlížeče           Datum
  • Google Chrome           leden 2020
  • Mozilla Firefox             Březen 2020
  • Safari/Webkit               Březen 2020
  • Microsoft Edge             Červen 2020

S těmito informacemi by bylo rozumné dodržovat nejnovější bezpečnostní protokoly a v době psaní tohoto článku je nejnovější protokol  TLS 1.2 s TLS 1.3 očekávaným později v roce 2020.

Pro implementaci TLS 1.2 a  TLS 1.3 upravíme 2 soubory:

  • /etc/nginx/nginx.conf  –  Toto je hlavní konfigurační soubor nginx
  • /etc/nginx/sites-available/example.com (nebo /default)

Pokud používáte Let’s Encrypt SSL, nezapomeňte upravit následující soubory

  • /etc/nginx/nginx.conf
  •  /etc/letsencrypt/options-ssl-nginx.conf

Pomocí následujících kroků deaktivujete slabé protokoly SSL / TLS

Krok 1) Upravte soubor nginx.conf

Nejprve se ujistěte, že jste před provedením jakýchkoli změn vytvořili zálohu souboru /etc/nginx/nginx.conf. Poté soubor otevřete pomocí textového editoru dle vašeho výběru

$ sudo vi /etc/nginx/nginx.conf

Najděte následující řádek

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

Chcete-li slabé protokoly deaktivovat, jednoduše odstraňte protokoly  TLSv1 a TLSv1.1 a na konec přidejte TLSv1.2 a  TLSv1.3.

ssl_protocols TLSv1.2  TLSv1.3 ; # Dropping SSLv3, ref: POODLE

To by se mělo objevit následovně na řádku 36

Uložte a ukončete konfigurační soubor.

Krok 2) Upravte soubor bloku serveru Nginx

Zastaralé protokoly mohou stále sedět ve vašich příslušných konfiguračních souborech bloků serveru Nginx. Konfigurační soubory bloku jsou obsaženy v adresáři /etc/nginx/sites-available/.

Proto pokračujte a upravte konfigurační soubor bloku

$ sudo vi /etc/nginx/sites-available/example.com
OR
$ sudo vi /etc/nginx/sites-available/default

Stejně jako předtím přejděte a vyhledejte následující řádek

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Znovu odstraňte protokoly TLSv1 a TLSv1.1 a přidejte TLSv1.3 na konec.

POZNÁMKA: Pokud používáte Let’s Encrypt SSL, upravte soubor SSL:

$ sudo vi /etc/letsencrypt/options-ssl-nginx.conf

Aby změny přetrvaly, restartujte webový server Nginx

$ sudo systemctl restart nginx

Nyní přejděte k testu SSL Labs a otestujte svou doménu ještě jednou. Tentokrát byste měli získat hodnocení A, jak je uvedeno.

3)  Zabránit zveřejnění informací

Součástí posílení vašeho serveru je co největší omezení zveřejňování informací na vašem webovém serveru. Informace mohou unikat prostřednictvím HTTP hlaviček nebo hlášení chyb. Některé z těchto informací zahrnují verzi Nginx, kterou používáte, a opravdu byste to nechtěli prozradit hackerům.

Ve výchozím nastavení Nginx zobrazuje informace záhlaví HTTP, když spustíte příkaz:

$ curl -I http://localhost

Z výstupu na druhém řádku můžete vidět, že verze Nginx a operační systém, na kterém běží, byly zveřejněny

Server:nginx/1.14.0 (Ubuntu)

Verze se také zobrazí ve webovém prohlížeči, pokud se zobrazí chybová stránka, například stránka s chybou 404.

Abyste tomuto úniku informací zabránili, upravte nginx.conf soubor a v části http { odkomentujte následující řádek

server_tokens off;

Uložte změny a ukončete. Poté restartujte webový server, aby se změny projevily.

$ sudo systemctl restart nginx

Nyní znovu načtěte chybovou stránku a všimněte si rozdílu. Verze a operační systém, na kterém Nginx běží, byly vynechány.

Dalším způsobem, jak zkontrolovat, kolik informací uniká z vašeho webového serveru, je navštívit stránku s podpisem serveru a zkontrolujte svou doménu. Pokud je vše v pořádku, získáte následující výstup.

4)  Zbavte se nežádoucích metod HTTP

Další dobrou praxí je zakázat nežádoucí protokoly, které webový server nebude implementovat. Řádek níže umožní implementaci metod GET, POST a HEAD a vyloučí všechny ostatní metody včetně TRACE a DELETE. Přidejte následující řádek do souboru bloku serveru.

location / {
limit_except GET HEAD POST { deny all; }
}

5) Zakázat slabé šifrovací sady

Kromě implementace SSL si dejte za cíl deaktivovat slabé a nezabezpečené šifry včetně šifer RC4. Ty jsou standardně dodávány pouze za účelem zpětné kompatibility s předchozími verzemi Nginx a není dobrý důvod je mít, protože slouží jako potenciální zranitelnosti, které lze zneužít. Proto v souboru ssl.conf nahraďte šifry následující sadou šifer.

'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

6) Odeberte všechny nepotřebné moduly

Chcete-li dále minimalizovat rozsah hrozeb, je vhodné odebrat z výchozího nastavení serveru všechny nepotřebné moduly. Osvědčené postupy vyžadují, abyste si zachovali štíhlý profil a povolili pouze moduly, které se používají při poskytování obsahu z webového serveru. Buďte však opatrní, abyste neodinstalovali nebo neodstranili moduly, které můžete potřebovat. Doporučuje se provést testy v QA nebo testovacím prostředí, než se rozhodnete, které moduly by měly být zakázány a které jsou nezbytné pro váš webový server.

7) Zabránit lepšímu přetečení

Při správě paměti je vyrovnávací paměť úložištěm, které dočasně pojme data, když se začnou přenášet z jednoho paměťového místa do druhého.

Když objem dat překročí kapacitu vyrovnávací paměti, dojde k přetečení vyrovnávací paměti. Jinými slovy, k přetečení vyrovnávací paměti dochází, když program zapisuje více dat do bloku paměti, které může pojmout nebo zpracovat.

Útočník může tuto chybu zabezpečení zneužít k odeslání škodlivého kódu, který může ohrozit systém. Jako standardní postup se doporučuje provést na webovém serveru několik úprav, aby se tyto problémy zmírnily. Přidejte řádky kódu níže do souboru nginx.conf.

##buffer policy
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
##end buffer policy

8) Zabraňte útokům XSS

Útok XSS ( cross-site scripting ) je útok, při kterém hacker použije webovou aplikaci ke vložení škodlivého kódu nebo skriptu na straně prohlížeče do důvěryhodného webu. Když návštěvník webu navštíví web, skript se stáhne a může přistupovat k různým zdrojům prohlížeče, jako jsou soubory cookie a token relace.

Jedním z preventivních opatření proti takovému typu útoku je připojení řádku níže do souboru ssl.conf.

add_header X-XSS-Protection "1; mode=block";

9) Vyhněte se útokům typu Clickjacking

Abyste se vyhnuli útokům typu clickjacking, přidejte X-Frame-Options do záhlaví HTTP v souboru nginx.conf, jak je znázorněno

add_header X-Frame-Options "SAMEORIGIN";

Po dokončení uložte a restartujte webový server Nginx.

10) Zakázat automatické uživatelské agenty

Aby byl váš server v bezpečí před roboty a jinými automatickými skripty, které mohou být nasazeny útočníky k získávání informací z vašeho webu, je rozumné výslovně zakázat konkrétní uživatelské agenty, což může v konečném důsledku vést k útokům typu deny-of-service DOS. Připojte následující řádek do souboru nginx.conf.

if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}

11) Zabránit propojování obrázků

Hotlinking je postup, kdy uživatel propojí obrázek s vaším webem, místo aby obrázek přímo nahrál na svůj web. Když k tomu dojde, váš obrázek se objeví na jejich webu a druhou stranou je, že nakonec zaplatíte za extra šířku pásma.

Chcete-li tomu zabránit, vyhledejte v konfiguračním souboru Nginx direktivu umístění a připojte následující úryvek

# Stop deep linking or hot linking
location /images/ {
  valid_referers none blocked www.example.com example.com;
   if ($invalid_referer) {
     return   403;
   }
}

Můžete také určit přípony obrázků, jak je znázorněno:

valid_referers blocked www.example.com example.com;
if ($invalid_referer) {
    rewrite ^/images/uploads.*\.(gif|jpg|jpeg|png)$ http://www.example.com/banned.jpg last
}

12)  Udržujte Nginx aktualizovaný

Snadné, že? Udržování aktuálního webového serveru je jedním ze způsobů, jak můžete server zabezpečit. Aktualizací vašeho webového serveru se použijí požadované záplaty, které řeší již existující zranitelnosti, které mohou hackeři zneužít ke kompromitaci vašeho serveru.

To byl souhrn některých klíčových opatření, která můžete podniknout k posílení svého webového serveru Nginx a zabezpečení před běžnými technikami využívání. To bude znamenat dlouhou cestu při ochraně souborů vašich webových stránek a také návštěvníků na vašem webu.

Přečtěte si také :Jak nakonfigurovat NGINX jako TCP/UDP Load Balancer v Linuxu


Linux
  1. Co je webový server a jak webový server funguje?

  2. Jak nainstalovat webový server Nginx na Linux

  3. Jak opravit zranitelnost DROWN na webovém serveru Apache/NGINX a SMTP?

  1. Jak vytvořit TeamSpeak Server na Linuxu, Windows a macOS

  2. Jak nainstalovat a zabezpečit PostgreSQL Server na RockyLinux 8

  3. Jak nainstalovat RabbitMQ Server a Erlang na Linux

  1. Tipy a triky pro zabezpečení vašeho webového serveru Nginx

  2. Jak nainstalovat webový server Apache na Linux

  3. Jak hostovat webovou stránku na webovém serveru NGINX