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