Weboldal keresés

A végső útmutató az Nginx webszerver biztonságossá tételéhez, megerősítéséhez és teljesítményének javításához


ANginxről hallott csodálatos dolgok alapján talán úgy döntött, hogy kipróbálja. Lehet, hogy annyira tetszett Önnek, hogy fontolgatja az Apache-telepítések lecserélését Nginx-re, miután átnézte a témával kapcsolatos, ezen az oldalon közzétett cikkeinket.

Ha igen, akkor biztos vagyok benne, hogy tárt karokkal fogadja ezt az útmutatót, mivel 12 tippet fogunk ismertetni az Nginx szerverei biztonságának növelésére (az Nginx naprakészen tartásától egészen a TLS használatával és a HTTP HTTPS-re való átirányításával), és megjegyzi, hogy ezek közül néhány nagyon hasonló ahhoz, amit az Apache-val tennél.

Ne hagyd ki:

13 Apache webszerver biztonsági és keményítési tippek

25 Apache Htaccess trükk az Apache webszerver biztonságossá tételéhez

Nginx tesztelési környezet

Ebben az útmutatóban a következő környezetet fogjuk használni:

  1. Debian GNU/Linux 8.1 (jessie).
  2. IP-cím: 192.168.0.25 (tecmintlovesnginx.com) és 192.168.0.26 (nginxmeanspower.com), az IP-alapú virtuálisban leírtak szerint házigazdák szekció at

    1. "Hogyan állítsunk be név- és IP-alapú virtuális gépeket (szerverblokkokat) az Nginx segítségével"
  3. Nginx verzió: nginx/1.6.2.
  4. Az Ön kényelme érdekében itt van a végső konfigurációs fájl (Pastebin hivatkozás).

Ezt szem előtt tartva kezdjük.

1. TIPP: Tartsa naprakészen az Nginxet

A cikk írásakor a legújabb Nginx-verziók a CentOS-ben (az EPELben) és a Debian-tárolókban az 1.6.3 és az 1.6.2-5., ill.

Ne hagyja ki: Telepítse az Nginx legújabb stabil verzióját a tárolókból és a forrásból

Bár a tárolókból egyszerűbb szoftvert telepíteni, mint a programot forráskódból fordítani, ennek az utóbbi lehetőségnek két előnye van: 1) lehetővé teszi extra modulok beépítését az Nginxbe (például mod_security), és 2) mindig újabb verziót biztosít. mint a tárolók (a mai állapot szerint 1.9.9). A kiadási megjegyzések mindig elérhetők az Nginx webhelyén.

Ne hagyd ki:

Az Apache védelme a brute Force és a DDoS támadások ellen a Mod_Security és Mod_Evasive használatával

TIPP #2: Távolítsa el a szükségtelen modulokat az Nginxben

Ha kifejezetten eltávolítja a modulokat az Nginxből a forrásból történő telepítés során, tegye a következőket:

./configure --without-module1 --without-module2 --without-module3

Például:

./configure  --without-http_dav_module --withouthttp_spdy_module 

Amint azt valószínűleg sejti, egy korábbi Nginx-telepítés moduljainak forrásból való eltávolításához újra el kell végezni a fordítást.

Vigyázat: A konfigurációs direktívákat modulok biztosítják. Ügyeljen arra, hogy ne tiltson le egy olyan modult, amely olyan direktívát tartalmaz, amelyre szüksége lesz az úton! Mielőtt döntést hozna a modulok letiltásával kapcsolatban, ellenőrizze az nginx dokumentumokban az egyes modulokban elérhető direktívák listáját.

3. TIPP: Tiltsa le a server_tokens direktívát az Nginxben

A server_tokens direktíva arra utasítja az Nginxet, hogy jelenítse meg az aktuális verziót a hibaoldalakon. Ez nem kívánatos, mivel nem szeretné megosztani ezeket az információkat a világgal, hogy megakadályozza a webszerver elleni támadásokat, amelyeket az adott verzió ismert sebezhetőségei okoznak.

A server_tokens direktíva letiltásához kapcsolja ki az if-t egy szerverblokkon belül:

server {
    listen       192.168.0.25:80;
    server_tokens        off;
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    access_log  /var/www/logs/tecmintlovesnginx.access.log;
    error_log  /var/www/logs/tecmintlovesnginx.error.log error;
        root   /var/www/tecmintlovesnginx.com/public_html;
        index  index.html index.htm;
}

Indítsa újra az nginx-et, és ellenőrizze a változtatásokat:

4. TIPP: A HTTP felhasználói ügynökök letiltása az Nginxben

A HTTP-felhasználói ügynök egy olyan szoftver, amelyet a webszerverekkel szembeni tartalomegyeztetésre használnak. Ide tartoznak a rosszindulatú szoftverrobotok és feltérképező robotok is, amelyek a rendszererőforrások pazarlása révén hatással lehetnek a webszerver teljesítményére.

A nem kívánt felhasználói ügynökök listájának egyszerűbb karbantartása érdekében hozzon létre egy fájlt (például /etc/nginx/blockuseragents.rules) a következő tartalommal:

map $http_user_agent $blockedagent {
        default         0;
        ~*malicious     1;
        ~*bot           1;
        ~*backdoor      1;
        ~*crawler       1;
        ~*bandit        1;
}

Ezután tegye a következő sort a szerverblokk meghatározása elé:

include /etc/nginx/blockuseragents.rules;

És egy if utasítás, amely 403-as választ ad vissza, ha a felhasználói ügynök karakterlánc a fent meghatározott feketelistán szerepel:

Indítsa újra az nginx-et, és minden olyan felhasználói ügynök, amelynek karakterlánca megegyezik a fentiekkel, le lesz tiltva a webszerver elérésében. Cserélje ki a 192.168.0.25 kódot szervere IP-jére, és nyugodtan válasszon másik karakterláncot a wget --user-agent kapcsolójához:

wget http://192.168.0.25/index.html
wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html 

5. TIPP: Tiltsa le a nem kívánt HTTP-módszereket az Nginxben

Az igékként is ismert HTTP-metódusok jelzik az Nginx által kiszolgált erőforráson végrehajtandó kívánt műveletet. A gyakori webhelyek és alkalmazások esetében csak a GET, POST és HEAD funkciókat szabad engedélyezni, az összes többit pedig letiltani.

Ehhez helyezze a következő sorokat egy szerverblokkba. A 444 HTTP-válasz üres választ jelent, és az Nginxben gyakran használják a rosszindulatú programok megtévesztésére:

if ($request_method !~ ^(GET|HEAD|POST)$) {
   return 444;
}

A teszteléshez a curl használatával küldjön TÖRLÉS kérést, és hasonlítsa össze a kimenetet a szokásos GET küldésével:

curl -X DELETE http://192.168.0.25/index.html
curl -X POST http://192.168.0.25/index.html 

6. TIPP: Állítsa be a pufferméret-korlátozásokat az Nginxben

Az Nginx webszerver elleni puffertúlcsordulási támadások megelőzése érdekében állítsa be a következő direktívákat egy külön fájlban (például hozzon létre egy új fájlt /etc/nginx/conf.d/buffer.conf néven):

client_body_buffer_size  1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

A fenti utasítások biztosítják, hogy a webszervernek küldött kérések ne okozzanak puffertúlcsordulást a rendszerben. Még egyszer nézze meg a dokumentumokat, ha további részleteket szeretne megtudni arról, hogy mindegyikük mit csinál.

Ezután adjon hozzá egy include direktívát a konfigurációs fájlhoz:

include /etc/nginx/conf.d/*.conf;

7. TIPP: Korlátozza a kapcsolatok számát IP alapján az Nginxben

Az IP-kapcsolatok korlátozásához használja a limit_conn_zone (http-környezetben vagy legalább a szerverblokkon kívül) és a limit_conn (http-, szerverblokk- vagy helykontextusban) direktívákat.

Ne feledje azonban, hogy a rendszer nem számol minden kapcsolatot – hanem csak azokat, amelyeknél a kiszolgáló feldolgozott egy kérést, és a teljes kérésfejléc beolvasásra került.

Például állítsuk be a kapcsolatok maximális számát 1-ra (igen, ez túlzás, de ebben az esetben tökéletesen működik) egy addr nevű zónában (bármire beállíthatja kívánt név):

limit_conn_zone $binary_remote_addr zone=addr:5m;
limit_conn addr 1;

Egy egyszerű teszt az Apache Benchmark (Perform Nginx Load) segítségével, ahol összesen 10 kapcsolatot hoznak létre 2 egyidejű kéréssel, segíteni fog nekünk, hogy bemutassuk álláspontunkat:

ab -n 10 -c 2 http://192.168.0.25/index.html

További részletekért lásd a következő tippet.

8. TIPP: Állítsa be az Nginx monitornaplóit

Miután elvégezte az előző tippben leírt tesztet, ellenőrizze a szerverblokkhoz definiált hibanaplót:

Használhatja a grep parancsot a naplók szűrésére a 7. TIPPben meghatározott addr zónához intézett sikertelen kérések esetén:

grep addr /var/www/logs/tecmintlovesnginx.error.log --color=auto

Hasonlóképpen szűrheti a hozzáférési naplót az olyan érdekes információk alapján, mint például:

  1. Kliens IP
  2. Böngésző típusa
  3. HTTP kérés típusa
  4. Erőforrás kérve
  5. A kérésre válaszoló szerverblokk (hasznos, ha több virtuális gazdagép naplóz ugyanabba a fájlba).

És tegye meg a megfelelő lépéseket, ha bármilyen szokatlan vagy nem kívánt tevékenységet észlel.

9. TIPP: Akadályozza meg a kép hotlinkingjét az Nginxben

A képek gyorslinkje akkor fordul elő, amikor egy személy egy másik webhelyen megjelenít egy, az Önén tárolt képet. Ez növeli a sávszélesség-használatot (amiért fizet), miközben a másik személy boldogan jeleníti meg a képet, mintha az ő tulajdona lenne. Más szóval, ez dupla veszteség számodra.

Tegyük fel például, hogy van egy img nevű alkönyvtára a szerverblokkon belül, ahol az adott virtuális gazdagépen használt összes képet tárolja. Ha meg szeretné akadályozni, hogy más webhelyek használhassák az Ön képeit, be kell illesztenie a következő helyblokkot a virtuális gazdagép definíciójába:

location /img/ {
  valid_referers none blocked 192.168.0.25;
   if ($invalid_referer) {
     return   403;
   }
}

Ezután módosítsa az index.html fájlt minden virtuális gazdagépen az alábbiak szerint:

192.168.0.26 192.168.0.25
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Nginx means power</title>
</head>
<body>
<h1>Nginx means power!</h1>
<img src=”http://192.168.0.25/img/nginx.png” />
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset=”utf-8″>
<title>Tecmint loves Nginx</title>
</head>
<body>
<h1>Tecmint loves Nginx!</h1>
<img src=”img/nginx.png” />
</body>
</html>

Most böngésszen az egyes webhelyekre, és amint látja, a kép helyesen jelenik meg a 192.168.0.25 formátumban, de helyette egy 403 válasz érkezik a 192.168.0.26-ban.:

Vegye figyelembe, hogy ez a tipp attól függ, hogy a távoli böngésző küldi a Hivatkozó mezőt.

10. TIPP: Tiltsa le az SSL-t, és csak a TLS-t engedélyezze az Nginxben

Amikor csak lehetséges, tegyen meg mindent, hogy elkerülje az SSL használatát bármely verziójában, és használja helyette a TLS-t. A következő ssl_protocols-okat kiszolgáló- vagy http-kontextusban kell elhelyezni a virtuális gazdagép fájljában, vagy egy külön fájl egy include direktíva révén (egyesek az ssl.conf nevű fájlt használják , de ez teljesen rajtad múlik):

ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;

Például:

11. TIPP: Hozzon létre tanúsítványokat az Nginxben

Először generáljon egy kulcsot és egy tanúsítványt. Nyugodtan használjon más típusú titkosítást, ha szeretné:

openssl genrsa -aes256 -out tecmintlovesnginx.key 1024
openssl req -new -key tecmintlovesnginx.key -out tecmintlovesnginx.csr
cp tecmintlovesnginx.key tecmintlovesnginx.key.org
openssl rsa -in tecmintlovesnginx.key.org -out tecmintlovesnginx.key
openssl x509 -req -days 365 -in tecmintlovesnginx.csr -signkey tecmintlovesnginx.key -out tecmintlovesnginx.crt

Ezután adja hozzá a következő sorokat egy külön szerverblokkon belül a következő tippre (http --> https átirányítás), és helyezze át az SSL-hez kapcsolódó direktívákat is az új blokkba:

server {
    listen 192.168.0.25:443 ssl;
    server_tokens off;
    server_name  tecmintlovesnginx.com www.tecmintlovesnginx.com;
    root   /var/www/tecmintlovesnginx.com/public_html;
    ssl_certificate /etc/nginx/sites-enabled/certs/tecmintlovesnginx.crt;
    ssl_certificate_key /etc/nginx/sites-enabled/certs/tecmintlovesnginx.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
}

A következő tippben ellenőrizni fogjuk, hogy webhelyünk most hogyan használ önaláírt tanúsítványt és TLS-t.

12. TIPP: Irányítsa át a HTTP forgalmat HTTPS-re az Nginxben

Adja hozzá a következő sort az első szerverblokkhoz:

return 301 https://$server_name$request_uri;

A fenti direktíva 301 (véglegesen áthelyezve) választ ad vissza, amelyet az állandó URL-átirányításra használunk, amikor kérés érkezik a virtuális gazdagép 80-as portjára, és átirányítja a kérést arra a szerverblokkra. hozzáadva az előző tipphez.

Az alábbi kép az átirányítást mutatja, és megerősíti azt a tényt, hogy TLS 1.2 és AES-256 titkosítást használunk:

Összegzés

Ebben a cikkben megosztottunk néhány tippet az Nginx webszerver biztonságához. Szeretnénk hallani, mit gondol, és ha egyéb tippjei vannak, amelyeket meg szeretne osztani a közösség többi tagjával, nyugodtan ossza meg velünk az alábbi megjegyzés űrlap segítségével.