GNU/Linux >> Znalost Linux >  >> Linux

20 základních věcí, které byste měli vědět, pokud jste na webovém serveru Nginx

Nginx Web Server je jedním ze dvou nejpoužívanějších webových serverů na světě. Od svého vzniku před 15 lety si upevnil pozici dokonalé webové serverové aplikace. Nginx je známý svým vynikajícím výkonem, který je zhruba 2,5krát rychlejší než Apache. Nejlépe se hodí pro webové stránky, které se zabývají velkým množstvím statických aktiv, ale lze je použít i pro webové stránky pro všeobecné účely. Už dávno přerostlo své zamýšlené použití a nyní se používá pro řadu úkolů, jako je reverzní proxy, ukládání do mezipaměti, vyvažování zátěže, streamování médií a další.

Fakta o webovém serveru Nginx

Nginx se vyslovuje jako Engine X a má různé případy použití na moderní webové scéně. Lze jej použít k napájení široké škály webových služeb, jako jsou mikroslužby, cloud computing a brány API, vedle své standardní role webového serveru. V diskusi budeme pokračovat za předpokladu, že webový server Nginx běží na Linuxu nebo podobných systémech UNIX.

1. Základy Nginxu

Než začnete s jakýmkoli technickým tématem, je nutné, abyste získali základy. Takže zde uvádíme některé základní věci týkající se Nginx. Existuje několik variant této aplikace, včetně placených a bezplatných variant. Server Nginx s otevřeným zdrojovým kódem je však nejpoužívanější vývojáři jednoduše proto, že nabízí téměř všechny funkce, na které si vzpomenete, a není dodáván s cenovkou.

Po instalaci můžete spustit sudo službu Nginx start pro spuštění serveru. Konfigurační soubory serveru jsou uloženy buď v /usr/local/nginx/conf/ nebo /etc/nginx/ adresáře. Webové dokumenty jsou uloženy buď v /usr/local/nginx/html/ nebo /var/www/html adresáře. Běžící server můžete zastavit zadáním příkazu sudo nginx -s zastavit.

2. Zapnutí SELinuxu

SELinux (Security-Enhanced Linux) je přesvědčivá funkce linuxového jádra, která poskytuje větší kontrolu nad zabezpečením systému prostřednictvím bezpečnostních zásad řízení přístupu. Je běžnou praxí povolit SELinux v systémech, které mají v úmyslu provozovat vyhrazené webové servery. Musíte použít getsebool -a příkaz pro toto.

$ sudo getebool -a | méně$ sudo getebool -a | grep off$ sudo getebool -a | grep na

Výše uvedené příkazy vám poskytnou informace o tom, jaká logická nastavení jsou zapnuta a vypnuta. Pro maximální zabezpečení byste měli zakázat všechny entity, které váš systém nevyžaduje. Tato nastavení jsou souhrnně známá jako SELinux booleans. Nastavením vhodných hodnot pro tyto proměnné bude váš systém mnohem bezpečnější, aby se zabránilo standardním webovým útokům.

3. Odebrání nežádoucích modulů Nginx

--

Navzdory lehké povaze výchozího serveru Nginx je vždy dobré odstranit všechny nežádoucí moduly, které váš server nepotřebuje. Tím se výrazně sníží nároky na paměť a váš server bude rychlejší než obvykle. Navíc to omezuje mnoho možností vašeho serveru, takže i když uživatel se zlými úmysly získá přístup k vašemu serveru, bude trvat hodně času a dovedností, než získat úplnou kontrolu nad samotným systémem.

Níže uvedené příkazy ukazují, jak deaktivovat SSI a modul automatického indexování, který je standardně nainstalován s vaším binárním souborem Nginx.

sudo ./configure --without-http_autoindex_module --without-http_ssi_modulesudo make install

Následující příkaz můžete použít k zobrazení modulů, které lze vypnout při kompilaci vašeho serveru Nginx.

sudo ./configure --help | méně

4. Minimalizace síťových privilegií

Minimalizace síťových oprávnění vašeho webového serveru také pomáhá zvýšit bezpečnost. Pro tuto úlohu můžete využít možnosti montáže. V podstatě to znamená, že můžete obsluhovat všechny své webové stránky prostřednictvím samostatných oddílů. Chcete-li to provést, budete muset vytvořit další oddíly a připojit je k /nginx umístění. Ujistěte se, že je připojujete s oprávněními noexec, nodev a nosetuid.

Můžete to udělat úpravou souboru /etc/fstab . Upravte to pomocí svého oblíbeného editoru a na konec souboru přidejte následující.

LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2

Pokud váš systém běží na jiném souborovém systému, nahraďte ext3 názvem tohoto souborového systému. K tomu budete potřebovat oprávnění sudo.

5. Hardening Network Settings pro Nginx

Zabezpečení svého systému můžete dále posílit konfigurací některých nastavení jádra a sítě. Upravte soubor /etc/sysctl. conf a přidejte následující řádky pro posílení systému vašeho serveru.

# prevent smurf attacknet.ipv4.icmp_echo_ignore_broadcasts =1# přestat být routernet.ipv4.ip_forward =0net.ipv4.conf.all.send_redirects =0net.ipv4.conf.default.send_redirects =0# zabránit změně směrovací tabulky sítě .ipv4.conf.all.accept_redirects =0net.ipv4.conf.default.accept_redirects =0net.ipv4.conf.all.secure_redirects =0net.ipv4.conf.default.secure_redirects =0

Existuje nepřeberné množství dostupných možností, které můžete použít k zabezpečení svého systému. Budou se hodit v případě, že někdo naruší zabezpečení vašeho serveru.

6. Změna záhlaví verze Nginx

Změna záhlaví verze vašeho výchozího serveru Nginx je skvělý způsob, jak zabránit rádoby hackerům v proniknutí do vašeho systému. Mnoho aplikací může být napájeno fuzzy daty pro získání záhlaví verze serverového softwaru. Uživatelé se zlými úmysly to často dělají, aby zjistili přesné informace o serveru, aby pro ně mohli zacílit a vyhledat konkrétní zranitelnosti.

Najděte níže uvedené řádky ze souboru src/http/ngx_http_header_filter_module.c .

static char ngx_http_server_string[] ="Server:nginx" CRLF;static char ngx_http_server_full_string[] ="Server:" NGINX_VER CRLF;

Nahraďte je následujícími řádky.

static char ngx_http_server_string[] ="Server:Ninja Web Server" CRLF;static char ngx_http_server_full_string[] ="Server:Ninja Web Server" CRLF;

To potenciálním útočníkům ukazuje nepravdivé informace o verzi serveru.

7. Prevence přetečení vyrovnávací paměti

K přetečení vyrovnávací paměti dochází, když fragmenty kódu zapisují data za její hranice. Je to klasický problém softwarového inženýrství, který využívají zkušení hackeři. Pokud jsou úspěšně navrženy, mohou útoky s přetečením vyrovnávací paměti umožnit nechtěným stranám vstoupit a převzít kontrolu nad vaším systémem. Těmto útokům můžete do značné míry zabránit omezením velikosti vyrovnávací paměti pro všechny klienty. Přidejte následující do nginx.conf soubor.

# limit velikosti bufferuclient_body_buffer_size 1K;client_header_buffer_size 1k;client_max_body_size 1k;large_client_header_buffers 2 1k;# set timeoutsclient_body_timeout 10;client_header_timeout 10;keepalive_time 10;keepalive_time 10;keepalive_time 

Tyto možnosti v podstatě mění výchozí hodnotu těchto parametrů a snižují plochu útoku. Můžete si s nimi hrát, abyste zjistili, co vyhovuje vašemu webovému serveru Nginx.

8. Ovládání simultánních připojení

Bez ohledu na to, zda používáte výchozí server Nginx nebo něco jiného, ​​je vždy dobré omezit počet současných připojení. Může být užitečný v mnoha situacích, jako je prevence útoků Denial of Service a lepší vyrovnávání zátěže. Modul NginxHttpLimitZone umožňuje administrátorům omezit současná připojení pro konkrétní relace nebo IP adresy.

limit_zone slimits $binary_remote_addr 5m;limit_conn slimits 5;

Přidejte výše uvedené řádky do souboru nginx.conf soubor. Omezuje počet povolených současných připojení na 5 na IP. Tuto hodnotu můžete snadno nahradit, aby vyhovovala vašim požadavkům.

9. Filtrování přístupu k doméně

Jedním z nejběžnějších typů problémů, kterým čelí moderní webové servery Nginx, jsou botnety. Často náhodně skenují servery a snaží se najít všechny přidružené domény. Můžete je snadno odmítnout přidáním následujících řádků do nginx.conf soubor.

# encompass klientské požadavky na zadané doménysif ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$) {return 444;}

Přidání těchto řádků do tohoto souboru umožňuje klientům požadavky pouze na uvedené domény. Můžete zadat více domén pomocí nebo “|” operátor.

10. Omezení dostupných metod

Existuje několik HTTP metody používané pro načítání webových stránek na základě požadavků uživatelů. Některé z nich jsou GET , PŘIDAT , PUT a SMAZAT . Existuje však řada dalších metod. Vždy je dobré tyto metody pro uživatele omezit. To pomůže snížit nežádoucí narušení dat a přidá další vrstvu zabezpečení. Přidejte následující řádky do konfigurace Nginx.

# povolit pouze GET &&HEAD &&POSTif ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}

Uživatelé nyní nemohou provést požadavek na odstranění nebo vyhledávání na vašem serveru. Pouze GET , HEAD a PŘIDAT metody jsou jim k dispozici. Více informací o metodách HTTP naleznete zde.

11. Omezení uživatelských agentů

User agenti jsou počítačové programy, které uživatelům umožňují interakci se službou. Webové prohlížeče Ubuntu jsou primárními webovými uživatelskými agenty v mém systému.

Někdy možná budete chtít zamezit konkrétním uživatelským agentům v přístupu k vašemu serveru, jako jsou ty bezhlavé prohlížeče, které se neustále snaží seškrábat data z vašeho webu. To se také hodí při blokování botnetů, protože často používají stejného uživatelského agenta.

# block download agentsif ($http_user_agent ~* LWP::Simple|BBBike|wget) {return 403;}

Přidáním těchto do vaší konfigurace Nginx zablokujete známé agenty stahování, jako jsou wget a BBBike. Níže uvedené řádky zablokují některé známé roboty zvané msnbot a scrapbot .

#block robotsif ($http_user_agent ~* msnbot|scrapbot) {return 403;}

Můžete zablokovat libovolné uživatelské agenty, které chcete. Buďte však opatrní, jinak můžete zablokovat legitimní provoz na váš webový server Nginx.

12. Blokování doporučujícího spamu

Doporučující spamy jsou běžným problémem, kterému dnes čelí mnoho webových serverů. Je to technika používaná pro inzerci konkrétních webových stránek ve vyhledávači, aby na své stránky získaly větší návštěvnost. Je zvláště nebezpečný pro vysoce vytížené webové servery, protože může způsobit vážné poškození hodnocení webu. Naštěstí můžete většinu těchto spamů zablokovat přidáním pouze několika řádků do konfigurace Nginx.

#deny some referersif ( $http_referer ~* (babes|prodej|dívka|šperky|láska|nudit|organické|poker|porno|sex|teen) ){# návrat 404;vrácení 403;}

Přidejte výše uvedené řádky do souboru nginx.conf soubor pro blokování některých nejběžnějších doporučujících spamů. Podle potřeby můžete do těchto řádků přidat další slova.

13. Zabránění rychlému propojení obrázků

Hotlinking obrázků se stal běžnou praxí mnoha webových administrátorů. V této praxi správci často používají personalizované obrázky z vašeho webového serveru, aby uspokojili požadavky svých klientů. To může být vážně škodlivé, pokud se o to nestaráte, protože váš webový server může být odpovědný za doručování obrazových dat požadovaných uživateli jiného webového serveru. Tomu můžete snadno zabránit a ušetřit svou drahocennou šířku pásma, jak je znázorněno níže.

# zastavení přímého odkazování nebo rychlého odkazování obrázkůlocation /images/ {valid_referers none blocked www.example.com example.com;if ($invalid_referer) {return 403; }}

Přidáním těchto řádků do konfiguračního souboru Nginx zablokujete požadavky na obrázky ze zmíněného webového serveru. Tímto způsobem bude váš výchozí server Nginx doručovat obrázky pouze autentickým požadavkům klientů. Kromě toho můžete chtít použít mapu Nginx k blokování propojování obrázků pro velké množství domén.

14. Omezení přístupu k adresářu

Často můžete najít spoustu webových stránek, které neomezují jejich adresáře. Jsou výjimečně zranitelné vůči uživatelům se zlými úmysly, protože jim umožňují procházet webem, jak chtějí, a často vedou k další eskalaci oprávnění webu. Níže uvedený úryvek vám ukáže, jak zablokovat konkrétní uživatele, povolit konkrétní rozsahy IP adres a zakázat všechny ostatní do adresáře /docs/ .

location /docs/ {# block one userdeny 192.168.1.1;# povolit kohokoli v 192.168.1.0/24allow 192.168.1.0/24;# drop restdeny all;}

Přidejte je do své konfigurace Nginx a nahraďte /docs/ s adresáři, které obsahují citlivé informace. Své adresáře můžete také chránit hesly, jak je uvedeno níže. Nejprve vytvořte soubor s hesly a přidejte USER

$ sudo mkdir /usr/local/nginx/conf/.htpasswd/$ sudo htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd USER

Nyní přidejte tyto řádky do nginx.conf soubor.

# password rotect /personal-images/ a /delta/ umístění adresářů ~ /(personal-images/.*|delta/.*) {auth_basic "Restricted";auth_basic_user_file /usr/local/nginx/conf/.htpasswd/ passwd;}

15. Konfigurace SSL pro webový server Nginx

SSL (Secure Sockets Layer) se stal de facto bezpečnostním standardem moderních webových serverů. Jakýkoli web, který tuto technologii neimplementuje, je pro mnoho bezpečnostních profesionálů považován za nebezpečný. Naštěstí je snadné nakonfigurovat a udržovat zabezpečení SSL pro servery Nginx.

Existuje mnoho způsobů, jak nastavit SSL pro web. Správci mohou vytvářet certifikáty SSL s vlastním podpisem, používat oblíbené certifikační autority nebo nastavovat reverzní proxy SSL. Pokud jste v administraci webových serverů relativně nováčci, doporučujeme vám využít oblíbenou certifikaci Let’s Encrypt. Je to bezplatná a snadno použitelná certifikační autorita, která poskytuje bezpečné certifikáty SSL/TLS. Ukážeme vám, jak to udělat v samostatném průvodci.

16. Zvýšení zabezpečení PHP

PHP je jedním z nejpoužívanějších jazyků na straně serveru a obsluhuje značné množství webových stránek na internetu. Je však poměrně starý a náchylný k několika bezpečnostním chybám. Pokud tedy na svém serveru Nginx používáte PHP, měli byste být vždy opatrní a implementovat konkrétní bezpečnostní standardy. Například přidáním níže uvedených řádků do /etc/php.ini soubor významně zvýší zabezpečení.

# odmítnout klíčové funkcedisable_functions =phpinfo, systém, pošta, exec# max. doba provádění skriptů, v sekundáchmax_execution_time =30# maximální limit paměti pro skripty, v MBmemory_limit =4M# max. povolená velikost POST datapost_max_size =4M# omezit informace PHPexpose_php =Vypnuto # log errorslog_errors =On# enable SQL safe modesql.safe_mode =On

Do tohoto souboru můžete přidat mnohem více pokynů pro zvýšení zabezpečení, aby byl váš server odolný proti poškození.

17. Vylepšení zabezpečení výchozího serveru Nginx

Uživatelé Linuxu mohou snadno zvýšit celkovou bezpečnost serverů Nginx pomocí ruční konfigurace. Jak již bylo zmíněno dříve, pro optimální ochranu byste měli zapnout SELinux v každém počítači, na kterém běží Nginx. Nastavení správných oprávnění na /nginx je také nesmírně důležité. Chcete-li zjistit, jaká oprávnění mají uživatelé k vašim dokumentům Nginx, spusťte níže uvedený příkaz.

$ sudo find /nginx -user nginx$ sudo find /usr/local/nginx/html -user nginx

Zajistěte, aby k nim měl přístup pro zápis pouze root nebo vlastník těchto dokumentů. Může to být záchrana v případě budoucích vloupání, protože útočníci budou vyžadovat více času a odborných znalostí, aby získali další oprávnění ke stroji. Pomocí níže uvedeného příkazu odstraňte všechny nežádoucí archivy vytvořené vi nebo jinými textovými editory Linux.

$ sudo find /nginx -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*' $ sudo find /usr/local/nginx/html/ -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '* .old*'

18. Auditování protokolů Nginx

Kontrola souborů protokolu vašeho serveru Nginx vám poskytne cenné informace, jako je zájem uživatelů, nechtěné pokusy o ověření a tak dále. Schopnost náležitě monitorovat protokoly serveru je z tohoto důvodu pro webmastery užitečným přínosem.

Soubory protokolu vašeho serveru naleznete v /usr/local/nginx/logs adresář. Níže uvedené příkazy nám ukazují, jak je získat pro citlivé informace.

$ sudo grep "/login.php??" /usr/local/nginx/logs/access_log$ sudo grep "...etc/passwd" /usr/local/nginx/logs/access_log$ sudo egrep -i "denied|error|warn" /usr/local/nginx/ logs/error_log

Můžete si také nainstalovat nebo sestavit specifické auditovací aplikace, které budou kontrolovat protokoly Nginx v reálném čase a budou vás informovat o tom, co se děje na vašem serveru.

19. Spuštění Nginx v kontejnerech

Většina profesionálů radí uživatelům, aby spouštěli svůj server Nginx z vyhrazeného kontejneru. Kontejnery jsou izolovaná prostředí na serverových strojích, která byla vytvořena tak, aby udržovala procesy od sebe oddělené. Svůj server Nginx můžete snadno nainstalovat a spustit v kontejnerech, jako jsou LXD, Docker, vězení FreeBSD, XEN a další virtuální emulátory Linuxu. Ty jsou mezi webmastery souhrnně známé jako chroot vězení.

Vyhrazený kontejner pro váš server bude obsahovat všechny prostředky potřebné ke spuštění serveru a zpracování požadavků klientů. Výhodou, kterou získáte, je izolace tohoto serveru od zbytku vašeho počítače. Takže i když někdo získá neoprávněný přístup k vašemu serveru přes nějaké mezery, nebude schopen ovládat jádro vašeho systému.

20. Několik užitečných návrhí

Můžete snadno nakonfigurovat různé aspekty vašeho webového serveru Nginx úpravou centralizovaného konfiguračního souboru. Je tu spousta věcí, které je třeba udělat. Použijte například následující, abyste se vyhnuli clickjackingu.

add_header X-Frame-Options SAMEORIGIN;

Další řádek zakáže sledování typů obsahu některými prohlížeči.

add_header X-Content-Type-Options nosniff;

Chcete-li povolit filtry skriptování mezi weby (XSS), můžete použít

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

Existuje mnoho takových užitečných funkcí, které můžete najít v dokumentaci Nginx. Před aplikací se však ujistěte, že rozumíte tomu, co dělají. Jinak může dojít k výpadku vašeho webu kvůli nesprávné konfiguraci.

Konec myšlenek

Existuje příliš mnoho důvodů pro popularitu webových serverů Nginx. Stal se nejlepším serverovým softwarem díky své bohaté sadě funkcí a zdánlivě neomezenému počtu konfiguračních schopností. Často vidíme mnoho správců, kteří pouze instalují a používají výchozí server Nginx. Chybí jim mnoho funkcí a flexibility, které Nginx tímto způsobem nabízí. Proto si naši redaktoři dovolili před vámi nastínit tyto osvědčené postupy. Snad se nám podařilo naplnit váš zájem a pomoci vám naučit se něco nového.


Linux
  1. 30 věcí, které jste nevěděli o linuxovém jádře

  2. Nainstalujte Nginx na Windows

  3. Nginx Whitelist určité IP adresy

  1. Apache vs Nginx:Který webový server byste si měli vybrat

  2. Jak nainstalovat webový server Nginx na Linux

  3. Server Ubuntu Co potřebujete vědět

  1. Jak nainstalovat webový server Nginx na Ubuntu 18.04

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

  3. NGINX vs Apache – Výběr nejlepšího webového serveru v roce 2022