Nginx Web Server är en av de två mest använda webbservrarna i världen. Det befäste sin position som den perfekta webbserverapplikationen sedan starten för 15 år sedan. Nginx är känt för sin överlägsna prestanda, som är ungefär 2,5 gånger snabbare än Apache. Den är bäst lämpad för webbplatser som hanterar en stor mängd statiska tillgångar men kan också användas för allmänna webbplatser. Det har vuxit ur sin avsedda användning för länge sedan och används nu för en uppsjö av uppgifter som omvänd proxy, cachelagring, lastbalansering, mediaströmning och mer.
Fakta om Nginx Web Server
Nginx uttalas som och har olika användningsfall i den moderna webbscenen. Den kan användas för att driva ett brett utbud av webbtjänster som mikrotjänster, molnberäkning och API-gateways vid sidan av dess standardroll som webbserver. Vi kommer att fortsätta vår diskussion förutsatt att Nginx-webbservern körs på Linux eller liknande UNIX-system.
1. Grunderna i Nginx
Det är nödvändigt att du får grunderna rätt innan du går vidare med något tekniskt ämne. Så här presenterar vi några grundläggande saker om Nginx. Det finns flera varianter av denna applikation, inklusive betalda och gratis varianter. Nginx-servern med öppen källkod är dock den mest använda av utvecklare helt enkelt för att den erbjuder nästan alla funktioner du kan tänka dig och inte kommer med en prislapp.
När du har installerat den kan du köra sudo-tjänsten Nginx för att börja starta upp din server. Serverkonfigurationsfilerna lagras i antingen /usr/local/nginx/conf/ eller /etc/nginx/ kataloger. Webbdokumenten lagras i antingen /usr/local/nginx/html/ eller /var/www/html kataloger. Du kan stoppa en körande server genom att utfärda kommandot sudo nginx -s stopp.
2. Slå på SELinux
SELinux (säkerhetsförbättrad Linux) är en övertygande funktion i Linux-kärnan, som ger större kontroll över systemsäkerheten via säkerhetspolicyer för åtkomstkontroll. Det är en vanlig praxis att aktivera SELinux i system som har för avsikt att köra dedikerade webbservrar. Du måste använda getsebool -a kommando för detta.
$ sudo getsebool -a | less $ sudo getsebool -a | grep off $ sudo getsebool -a | grep on
Ovanstående kommandon ger dig information om vilka booleska inställningar som slås på och av. För maximal säkerhet bör du inaktivera alla enheter som inte krävs av ditt system. Dessa inställningar kallas gemensamt för SELinux booleans. Att ställa in lämpliga värden för dessa variabler kommer att göra ditt system mycket säkrare för att förhindra vanliga webbattacker.
3. Ta bort oönskade Nginx-moduler
Trots den lätta karaktären hos Nginx-standardservern är det alltid en bra idé att ta bort alla oönskade moduler som din server inte behöver. Detta kommer avsevärt att minimera minnesavtrycket och göra din server snabbare än vanligt. Dessutom begränsar det kapaciteten hos din server, så även om en illvillig användare får tillgång till din server kommer det att ta mycket tid och skicklighet att få total kontroll över själva systemet.
Kommandon nedan visar hur du inaktiverar SSI och autoindexmodulen som är installerad som standard med din Nginx-binär.
—
sudo ./configure --without-http_autoindex_module --without-http_ssi_module sudo make sudo make install
Du kan använda följande kommando för att se de moduler som kan stängas av när du kompilerar din Nginx-server.
sudo ./configure --help | less
4. Minimera nätverksprivilegier
Att minimera nätverksprivilegiet för din webbserver hjälper också till att öka säkerheten. Du kan utnyttja monteringsalternativen för det här jobbet. I huvudsak betyder detta att du kan betjäna alla dina webbsidor i separata partitioner. För att göra detta måste du skapa ytterligare partitioner och montera dem på /nginx plats. Se till att montera dem med noexec-, nodev- och nosetuid-behörigheter.
Du kan göra detta genom att redigera filen /etc/fstab. Redigera detta med din favoritredigerare och lägg till följande i slutet av filen.
LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2
Om ditt system körs på ett annat filsystem, ersätt ext3 med namnet på det filsystemet. Du kommer att kräva sudo-privilegier för att göra detta.
5. Härda nätverksinställningar för Nginx
Du kan stärka säkerheten för ditt system ytterligare genom att konfigurera vissa kärn- och nätverksinställningar. Redigera /etc/sysctl.conf-filen och lägg till följande rader för att hårdna din servers system.
# prevent smurf attacks net.ipv4.icmp_echo_ignore_broadcasts = 1 # stopping being a router net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 # prevent alteration of routing tables net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.default.secure_redirects = 0
Det finns en uppsjö av tillgängliga alternativ som du kan använda för att säkra ditt system. De kommer väl till pass om någon bryter mot din servers säkerhet.
Att ändra versionshuvudet för din Nginx-standardserver är ett bra sätt att förhindra wannabe-hackers från att ta sig in i ditt system. Många applikationer kan matas med suddiga data för att få versionshuvudet för serverprogramvaran. Skadliga användare gör ofta detta för att ta reda på exakt serverinformation så att de kan rikta in sig på och gräva specifika sårbarheter för dem.
Hitta nedanstående rader från filen 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;
Ersätt dem med följande rader.
static char ngx_http_server_string[] = "Server: Ninja Web Server" CRLF; static char ngx_http_server_full_string[] = "Server: Ninja Web Server" CRLF;
Detta visar falsk information om serverversionen för potentiella angripare.
7. Förhindra buffertspill
Buffertspill uppstår när kodavsnitt skriver data utanför dess gräns. Det är ett klassiskt programvarutekniskt problem som utnyttjas av erfarna hackare. Om attackerna lyckas, kan buffertspill tillåta oönskade parter att komma in och ta kontroll över ditt system. Du kan förhindra dessa attacker i stor utsträckning genom att begränsa buffertstorlekarna för alla klienter. Lägg till följande till din nginx.conf fil.
# limit buffer sizes client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k; # set timeouts client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;
Dessa alternativ ändrar i huvudsak standardvärdet för dessa parametrar och minskar attackytan. Du kan spela med dem för att ta reda på vad som passar din Nginx-webbserver.
8. Styra samtidiga anslutningar
Oavsett om du kör Nginx standardserver eller något annat, är det alltid en bra praxis att begränsa antalet samtidiga anslutningar. Det kan vara användbart i många situationer, som att förhindra Denial of Service-attacker och bättre lastbalansering. De NginxHttpLimitZone modulen tillåter administratörer att begränsa de samtidiga anslutningarna för specifika sessioner eller IP-adresser.
limit_zone slimits $binary_remote_addr 5m; limit_conn slimits 5;
Lägg till raderna ovan i din nginx.conf fil. Den begränsar antalet tillåtna samtidiga anslutningar till 5 per IP. Du kan enkelt byta ut detta värde för att passa dina krav.
9. Filtrera domänåtkomst
En av de vanligaste typerna av problem som moderna Nginx-webbservrar möter är botnät. De skannar ofta servrar slumpmässigt och försöker hitta alla associerade domäner. Du kan enkelt neka dem genom att lägga till följande rader i din nginx.conf fil.
# encompass client requests to specified domains if ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$ ) { return 444; }
Om du lägger till dessa rader i den här filen tillåter klientförfrågningar endast för de nämnda domänerna. Du kan ange flera domäner genom att använda eller “|” operatör.
10. Begränsning av tillgängliga metoder
Det finns flera HTTP metoder som används för att hämta webbsidor baserat på användarförfrågningar. Några av dem är det FÅ, POSTA, SÄTTAoch RADERA. Det finns dock ett gäng ytterligare metoder. Det är alltid en bra idé att begränsa dessa metoder för en användare. Detta kommer att hjälpa till att minska oönskade dataintrång och lägger till ett extra lager av säkerhet. Lägg till följande rader till din Nginx-konfiguration.
# allow only GET && HEAD && POST if ($request_method !~ ^(GET|HEAD|POST)$ ) { return 444; }
Nu kan användare inte utföra en raderings- eller sökbegäran på din server. Endast den FÅ, HUVUDoch POSTA metoder är tillgängliga för dem. Du kan hitta mer information om HTTP-metoder här.
11. Begränsa användaragenter
Användaragenter är datorprogram som tillåter användare att interagera med en tjänst. Ubuntus webbläsare är de primära webbanvändaragenterna i mitt system.
Ibland kanske du vill begränsa specifika användaragenter från att komma åt din server, som de huvudlösa webbläsare som ständigt letar efter att skrapa data från din webbplats. Detta är också praktiskt när du blockerar botnät eftersom de ofta använder samma användaragent.
# block download agents if ($http_user_agent ~* LWP::Simple|BBBike|wget) { return 403; }
Att lägga till dessa i din Nginx-konfiguration kommer att blockera kända nedladdningsagenter som wget och BBBike. Raderna nedan kommer att blockera några kända robotar som kallas och .
#block robots if ($http_user_agent ~* msnbot|scrapbot) { return 403; }
Du kan blockera vilka användaragenter du vill. Var dock försiktig, annars kan du blockera legitim trafik till din Nginx-webbserver.
12. Blockera hänvisningsskräppost
Hänvisningsskräppost är ett vanligt problem som många webbservrar möter idag. Det är en teknik som används för att marknadsföra specifika webbplatser till sökmotorn så att de får mer trafik till sin webbplats. Det är särskilt farligt för högbelastade webbservrar eftersom det kan orsaka allvarlig skada på en webbplats ranking. Tack och lov kan du blockera de flesta av dessa skräppost genom att bara lägga till några få rader i din Nginx-konfiguration.
#deny certain referers if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) ) { # return 404; return 403; }
Lägg till raderna ovan till din nginx.conf fil för att blockera några av de vanligaste hänvisningsskräpposterna. Du kan lägga till fler ord på dessa rader efter behov.
13. Förhindra bild hotlinking
Hotlinking av bilder har blivit en vanlig praxis för många webbadministratörer. I denna praxis använder administratörer ofta personliga bilder från din webbserver för att betjäna sina klientförfrågningar. Detta kan vara allvarligt skadligt om det inte tas om hand, eftersom din webbserver kan vara ansvarig för att leverera bildtillgångar som efterfrågas av användare av en annan webbserver. Du kan enkelt förhindra detta och spara din dyrbara bandbredd, som visas nedan.
# stop deep linking or image hotlinking location /images/ { valid_referers none blocked www.example.com example.com; if ($invalid_referer) { return 403; } }
Om du lägger till dessa rader i din Nginx-konfigurationsfil kommer bildbegäran från den nämnda webbservern att blockeras. På så sätt kommer din Nginx-standardserver endast att leverera bilder till autentiska klientförfrågningar. Dessutom kanske du vill använda Nginx-kartan för att blockera bild hotlinking för ett stort antal domäner.
14. Begränsa katalogåtkomst
Du kan ofta hitta massor av webbsidor som inte begränsar deras kataloger. De är exceptionellt sårbara för illvilliga användare eftersom de tillåter dem att gå igenom webbplatsen som de vill, vilket ofta leder till ytterligare eskalering av webbplatsprivilegier. Nedanstående utdrag visar dig hur du blockerar specifika användare, tillåter särskilda IP-intervall och nekar alla andra till katalogen /docs/.
location /docs/ { # block one user deny 192.168.1.1; # allow anyone in 192.168.1.0/24 allow 192.168.1.0/24; # drop rest deny all; }
Lägg till dessa i din Nginx-konfiguration och ersätt /docs/ med kataloger som innehåller känslig information. Du kan också skydda dina kataloger med lösenord, som visas nedan. Skapa först en lösenordsfil och lägg till en ANVÄNDARE
$ sudo mkdir /usr/local/nginx/conf/.htpasswd/ $ sudo htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd USER
Lägg nu till dessa rader till nginx.conf fil.
# password rotect /personal-images/ and /delta/ directories location ~ /(personal-images/.*|delta/.*) { auth_basic "Restricted"; auth_basic_user_file /usr/local/nginx/conf/.htpasswd/passwd; }
15. Konfigurera SSL för Nginx Web Server
SSL (Secure Sockets Layer) har blivit de-facto säkerhetsstandarden för moderna webbservrar. Varje webbplats som inte implementerar denna teknik anses vara osäkra av många säkerhetspersonal. Tack och lov är det enkelt att konfigurera och underhålla SSL-säkerhet för Nginx-servrar.
Det finns många sätt att ställa in SSL för en webbplats. Administratörer kan skapa självsignerade SSL-certifikat, använda populära certifikatutfärdare eller ställa in SSL omvända proxyservrar. Om du är relativt ny på webbserveradministration rekommenderar vi att du använder den populära Let’s Encrypt-certifieringen. Det är en gratis och lättanvänd certifieringsmyndighet som tillhandahåller säkra SSL/TLS-certifikat. Vi visar dig hur du gör detta i en separat guide.
16. Öka PHP-säkerheten
PHP är ett av de mest använda språken på serversidan och betjänar ett stort antal webbsidor på internet. Den är dock ganska gammal och utsatt för flera säkerhetsbrister. Så om du använder PHP på din Nginx-server bör du alltid vara försiktig och implementera specifika säkerhetsstandarder. Till exempel lägga till raderna nedan i din /etc/php.ini fil kommer att förbättra säkerheten med en betydande faktor.
# reject crucial functions disable_functions = phpinfo, system, mail, exec # max execution time for scripts, in seconds max_execution_time = 30 # max memory limit for scripts, in MB memory_limit = 4M # max allowable POST data post_max_size = 4M # restrict PHP information expose_php = Off # log errors log_errors = On # enable SQL safe mode sql.safe_mode = On
Det finns många fler säkerhetshöjande instruktioner du kan lägga till i den här filen för att göra din server skadebeständig.
17. Förbättra Nginx Default Servers säkerhet
Linux-användare kan enkelt förbättra den övergripande säkerheten för Nginx-servrar genom att använda manuell konfiguration. Som nämnts tidigare bör du slå på SELinux i vilken maskin som helst som kör Nginx för optimalt skydd. Ställer in rätt behörigheter på /nginx är också oerhört viktigt. För att ta reda på vilka behörigheter användare har på dina Nginx-dokument, kör kommandot nedan.
$ sudo find /nginx -user nginx $ sudo find /usr/local/nginx/html -user nginx
Se till att endast roten eller ägaren till dessa dokument har skrivbehörighet till dem. Det kan vara en livräddare vid framtida inbrott eftersom angripare kommer att kräva mer tid och expertis för att få ytterligare privilegier till maskinen. Använd kommandot nedan för att ta bort alla oönskade arkiv som skapats av vi eller andra Linux-textredigerare.
$ 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. Granska Nginx-loggar
Genom att kontrollera loggfilerna på din Nginx-server får du värdefull information som användarnas intressen, oönskade autentiseringsförsök och så vidare. Möjligheten att övervaka serverloggar på lämpligt sätt är en användbar tillgång för webbansvariga av denna anledning.
Du kan hitta loggfilerna för din server i /usr/local/nginx/logs katalog. Kommandon nedan visar oss hur man hanterar dem för känslig information.
$ 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
Du kan också installera eller bygga specifika revisionsapplikationer som kontrollerar Nginx-loggar i realtid och håller dig informerad om vad som händer på din server.
19. Köra Nginx i behållare
De flesta proffs rekommenderar användare att köra sin Nginx-server inifrån en dedikerad behållare. Behållare är isolerade miljöer på serverdatorerna som är byggda för att hålla processer åtskilda från varandra. Du kan enkelt installera och köra din Nginx-server i behållare som LXD, Docker, FreeBSD-fängelser, XEN och andra virtuella Linux-emulatorer. Dessa är gemensamt kända som chroot jails bland webbansvariga.
En dedikerad behållare för din server kommer att innehålla alla resurser som krävs för att köra servern och hantera klientförfrågningar. Fördelen du får är isoleringen av denna server från resten av din maskin. Så även om någon får obehörig åtkomst till din server genom några kryphål, kommer de inte att kunna kontrollera din systemkärna.
20. Några användbara förslag
Du kan enkelt konfigurera de olika aspekterna av din Nginx-webbserver genom att ändra den centraliserade konfigurationsfilen. Det finns massor av saker att göra. Använd till exempel följande för att undvika clickjacking.
add_header X-Frame-Options SAMEORIGIN;
Nästa rad kommer att inaktivera sniffning av innehållstyper i vissa webbläsare.
add_header X-Content-Type-Options nosniff;
För att aktivera cross-site scripting-filter (XSS) kan du använda
add_header X-XSS-Protection "1; mode=block";
Du kan hitta många användbara funktioner i Nginx dokumentation. Se dock till att du förstår vad de gör innan du tillämpar något. Annars kan din webbplats drabbas av driftstopp på grund av felkonfiguration.
Avslutande tankar
Det finns för många anledningar till populariteten för Nginx webbservrar. Det har blivit den bästa servermjukvaran på grund av dess rika funktionsuppsättning och ett till synes obegränsat antal konfigurationsmöjligheter. Vi ser ofta många administratörer som bara installerar och använder Nginx standardserver. De saknar många funktioner och flexibilitet som Nginx erbjuder på detta sätt. Det är därför våra redaktörer har tagit sig friheten att beskriva dessa bästa praxis inför dig. Förhoppningsvis har vi kunnat uppfylla ditt intresse och hjälpa dig att lära dig något nytt.