GNU/Linux >> Linux Esercitazione >  >> Linux

20 cose essenziali da sapere se sei su Nginx Web Server

Nginx Web Server è uno dei due server Web più utilizzati al mondo. Ha consolidato la sua posizione di perfetta applicazione per server web sin dal suo inizio 15 anni fa. Nginx è noto per le sue prestazioni superiori, che sono circa 2,5 volte più veloci di Apache. È più adatto a siti Web che gestiscono grandi quantità di risorse statiche, ma può essere utilizzato anche per siti Web generici. Ha superato l'uso previsto molto tempo fa e ora viene utilizzato per una miriade di attività come il proxy inverso, la memorizzazione nella cache, il bilanciamento del carico, lo streaming multimediale e altro ancora.

Fatti sul server Web Nginx

Nginx è pronunciato come Engine X e ha diversi casi d'uso nella scena web moderna. Può essere utilizzato per alimentare un'ampia gamma di servizi Web come microservizi, cloud computing e gateway API insieme al suo ruolo standard di server Web. Continueremo la nostra discussione supponendo che il server web Nginx sia in esecuzione su Linux o sistemi UNIX simili.

1. Le basi di Nginx

È necessario che tu acquisisca le basi prima di andare avanti con qualsiasi argomento tecnico. Quindi, qui presentiamo alcune cose fondamentali riguardanti Nginx. Esistono diverse versioni di questa applicazione, comprese le varianti a pagamento e gratuite. Il server Nginx open source è, tuttavia, il più utilizzato dagli sviluppatori semplicemente perché offre quasi tutte le funzionalità che potresti pensare e non ha un prezzo.

Una volta installato, puoi eseguire il servizio sudo Nginx start per avviare il tuo server. I file di configurazione del server sono archiviati in /usr/local/nginx/conf/ o /etc/nginx/ directory. I documenti web sono archiviati in /usr/local/nginx/html/ o /var/www/html directory. Puoi fermare un server in esecuzione eseguendo il comando sudo nginx -s fermati.

2. Attivazione di SELinux

SELinux (Security-Enhanced Linux) è una caratteristica interessante del kernel Linux, che fornisce un maggiore controllo sulla sicurezza del sistema tramite le politiche di sicurezza del controllo degli accessi. È pratica comune abilitare SELinux in sistemi che intendono eseguire server web dedicati. Devi utilizzare getsebool -a comando per questo.

$ sudo getsebool -a | less
$ sudo getsebool -a | grep off
$ sudo getsebool -a | grep on

I comandi precedenti forniranno informazioni su quali impostazioni booleane sono attivate e disattivate. Dovresti disabilitare tutte le entità che non sono richieste dal tuo sistema per la massima sicurezza. Queste impostazioni sono conosciute collettivamente come booleane di SELinux. L'impostazione di valori appropriati per queste variabili renderà il tuo sistema molto più sicuro per prevenire attacchi Web standard.

3. Rimozione dei moduli Nginx indesiderati

- -

Nonostante la natura leggera del server predefinito Nginx, è sempre una buona idea rimuovere tutti i moduli indesiderati non necessari al tuo server. Ciò ridurrà notevolmente l'ingombro di memoria e renderà il tuo server più veloce del solito. Inoltre, limita molte funzionalità del tuo server, quindi anche se un utente malintenzionato ottiene l'accesso al tuo server, ci vorrà molto tempo e abilità per ottenere il controllo totale del sistema stesso.

I comandi seguenti mostrano come disabilitare SSI e il modulo di indice automatico che è installato per impostazione predefinita con il tuo binario Nginx.

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

Puoi utilizzare il comando seguente per visualizzare i moduli che possono essere disattivati ​​durante la compilazione del server Nginx.

sudo ./configure --help | less

4. Ridurre al minimo i privilegi di rete

Ridurre al minimo il privilegio di rete del tuo server web aiuta anche ad aumentare la sicurezza. Puoi sfruttare le opzioni di montaggio per questo lavoro. Essenzialmente questo significa che puoi servire tutte le tue pagine web attraverso partizioni separate. Per fare ciò, dovrai creare partizioni aggiuntive e montarle su /nginx Posizione. Assicurati di montarli con i permessi noexec, nodev e nosetuid.

Puoi farlo modificando il file /etc/fstab . Modificalo con il tuo editor preferito e aggiungi quanto segue alla fine del file.

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

Se il tuo sistema è in esecuzione su un filesystem diverso, sostituisci ext3 con il nome di quel filesystem. Avrai bisogno dei privilegi sudo per farlo.

5. Rafforzamento delle impostazioni di rete per Nginx

Puoi rafforzare ulteriormente la sicurezza del tuo sistema configurando alcune impostazioni del kernel e di rete. Modifica il /etc/sysctl. conf e aggiungi le seguenti righe per rafforzare il sistema del tuo server.

# 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

Ci sono una miriade di opzioni disponibili che puoi utilizzare per proteggere il tuo sistema. Ti torneranno utili nel caso in cui qualcuno violi la sicurezza del tuo server.

6. Modifica dell'intestazione della versione di Nginx

La modifica dell'intestazione della versione del tuo server predefinito Nginx è un ottimo modo per impedire a aspiranti hacker di entrare nel tuo sistema. Molte applicazioni possono ricevere dati sfocati per ottenere l'intestazione della versione del software del server. Gli utenti malintenzionati spesso lo fanno per scoprire informazioni esatte sul server in modo da poter prendere di mira e scavare vulnerabilità specifiche per loro.

Trova le righe sottostanti dal file 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;

Sostituiscili con le seguenti righe.

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

Questo mostra false informazioni sulla versione del server a potenziali aggressori.

7. Prevenire gli overflow del buffer

Gli overflow del buffer si verificano quando i frammenti di codice scrivono i dati oltre il limite. È un classico problema di ingegneria del software che viene sfruttato da hacker esperti. Se ideati correttamente, gli attacchi di buffer overflow possono consentire a parti indesiderate di entrare e prendere il controllo del sistema. Puoi prevenire questi attacchi in larga misura limitando le dimensioni del buffer per tutti i client. Aggiungi quanto segue al tuo nginx.conf file.

# 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;

Queste opzioni sostanzialmente cambiano il valore predefinito di questi parametri e diminuiscono la superficie di attacco. Puoi giocare con loro per scoprire cosa si adatta al tuo server Web Nginx.

8. Controllo delle connessioni simultanee

Non importa se stai eseguendo il server predefinito Nginx o qualcos'altro, è sempre una buona pratica limitare il numero di connessioni simultanee. Può essere utile in molte situazioni, come prevenire gli attacchi Denial of Service e migliorare il bilanciamento del carico. Il modulo NginxHttpLimitZone consente agli amministratori di limitare le connessioni simultanee per sessioni o indirizzi IP specifici.

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

Aggiungi le righe precedenti nel tuo nginx.conf file. Limita il numero di connessioni simultanee consentite a 5 per IP. Puoi facilmente sostituire questo valore in base alle tue esigenze.

9. Filtraggio dell'accesso al dominio

Uno dei tipi più comuni di problemi affrontati dai moderni server Web Nginx sono le botnet. Spesso scansionano i server in modo casuale e cercano di trovare tutti i domini associati. Puoi negarli facilmente aggiungendo le seguenti righe al tuo nginx.conf file.

# encompass client requests to specified domains

if ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$ ) {
return 444;
}

L'aggiunta di queste righe a questo file consente richieste del client solo per i domini menzionati. Puoi specificare più domini utilizzando o “|” operatore.

10. Limitare i metodi disponibili

Esistono diversi HTTP metodi utilizzati per recuperare le pagine Web in base alle richieste degli utenti. Alcuni di loro sono GET , POST , METTI e ELIMINA . Tuttavia, ci sono un sacco di metodi aggiuntivi. È sempre una buona idea limitare questi metodi per un utente. Ciò contribuirà a ridurre le violazioni dei dati indesiderate e aggiungerà un ulteriore livello di sicurezza. Aggiungi le seguenti righe alla tua configurazione di Nginx.

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

Ora, gli utenti non possono eseguire una richiesta di eliminazione o ricerca sul tuo server. Solo il OTTIENI , TESTA e POST metodi sono a loro disposizione. Puoi trovare maggiori informazioni sui metodi HTTP qui.

11. Limitazione degli agenti utente

I programmi utente sono programmi per computer che consentono agli utenti di interagire con un servizio. I browser Web Ubuntu sono gli user agent Web principali nel mio sistema.

A volte, potresti voler impedire agli agenti di utenti specifici di accedere al tuo server come quei browser senza testa che cercano continuamente di raccogliere dati dal tuo sito web. Questo è utile anche quando si bloccano le botnet poiché spesso utilizzano lo stesso user agent.

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

L'aggiunta di questi alla configurazione di Nginx bloccherà gli agenti di download noti come wget e BBBike. Le righe seguenti bloccheranno alcuni robot conosciuti chiamati msnbot e bot di rottami .

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

Puoi bloccare tutti i programmi utente che desideri. Tuttavia, sii prudente, altrimenti potresti bloccare il traffico legittimo verso il tuo server web Nginx.

12. Blocco dello spam da referral

Gli spam di riferimento sono un problema comune affrontato da molti server Web oggi. È una tecnica utilizzata per pubblicizzare siti Web specifici sul motore di ricerca in modo che ottengano più traffico sul loro sito. È particolarmente pericoloso per i server Web ad alto carico poiché può causare gravi danni al posizionamento di un sito. Per fortuna, puoi bloccare la maggior parte di questi spam aggiungendo solo poche righe alla tua configurazione di Nginx.

#deny certain referers
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
# return 404;
return 403;
}

Aggiungi le righe precedenti al tuo nginx.conf file per bloccare alcuni degli spam di riferimento più comuni. Puoi aggiungere più parole a queste righe come richiesto.

13. Prevenire il collegamento a caldo delle immagini

L'hotlinking delle immagini è diventata una pratica comune per molti amministratori web. In questa pratica, gli amministratori utilizzano spesso immagini personalizzate dal tuo server web per soddisfare le richieste dei loro clienti. Questo può essere gravemente dannoso se non curato in quanto il tuo server web potrebbe essere responsabile della fornitura di risorse di immagini richieste dagli utenti di un altro server web. Puoi facilmente prevenirlo e risparmiare la tua preziosa larghezza di banda, come mostrato di seguito.

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

L'aggiunta di queste righe al file di configurazione di Nginx bloccherà le richieste di immagini dal server Web menzionato. In questo modo, il tuo server predefinito Nginx consegnerà immagini solo alle richieste dei client autentici. Inoltre, potresti voler utilizzare la mappa Nginx per bloccare l'hotlinking delle immagini per un gran numero di domini.

14. Limitazione dell'accesso alla directory

Spesso puoi trovare tonnellate di pagine Web che non limitano le loro directory. Sono eccezionalmente vulnerabili agli utenti malintenzionati poiché consentono loro di attraversare il sito come desiderano e spesso portano a un'ulteriore escalation dei privilegi del sito. Il frammento di codice seguente ti mostrerà come bloccare utenti specifici, consentire determinati intervalli di IP e negare tutti gli altri alla directory /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;
}

Aggiungili alla configurazione di Nginx e sostituisci /docs/ con directory che contengono informazioni sensibili. Puoi anche proteggere le tue directory con password, come mostrato di seguito. Innanzitutto, crea un file di password e aggiungi un UTENTE

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

Ora aggiungi queste righe a nginx.conf file.

# 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. Configurazione di SSL per il server Web Nginx

SSL (Secure Sockets Layer) è diventato lo standard di sicurezza di fatto dei moderni server web. Qualsiasi sito che non implementa questa tecnologia è considerato non sicuro per molti professionisti della sicurezza. Per fortuna, è semplice configurare e mantenere la sicurezza SSL per i server Nginx.

Esistono molti modi per impostare SSL per un sito Web. Gli amministratori possono creare certificati SSL autofirmati, utilizzare le autorità di certificazione più diffuse o impostare proxy inversi SSL. Se sei relativamente nuovo nell'amministrazione del server web, ti consigliamo di utilizzare la famosa certificazione Let's Encrypt. È un'autorità di certificazione gratuita e facile da usare, che fornisce certificati SSL/TLS sicuri. Ti mostreremo come farlo in una guida separata.

16. Aumentare la sicurezza PHP

PHP è uno dei linguaggi lato server più utilizzati e serve una notevole quantità di pagine Web su Internet. Tuttavia, è piuttosto vecchio e soggetto a diverse vulnerabilità di sicurezza. Quindi, se stai usando PHP sul tuo server Nginx, dovresti sempre essere cauto e implementare standard di sicurezza specifici. Ad esempio, aggiungendo le righe seguenti al tuo /etc/php.ini file migliorerà la sicurezza di un fattore significativo.

# 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

Ci sono molte più istruzioni per migliorare la sicurezza che puoi aggiungere in questo file per rendere il tuo server resistente ai danni.

17. Miglioramento della sicurezza del server predefinito Nginx

Gli utenti Linux possono facilmente migliorare la sicurezza generale dei server Nginx tramite alcune configurazioni manuali. Come accennato in precedenza, dovresti attivare SELinux in qualsiasi macchina che esegue Nginx per una protezione ottimale. Impostazione delle autorizzazioni corrette su /nginx è anche estremamente importante. Per scoprire quali autorizzazioni hanno gli utenti sui tuoi documenti Nginx, esegui il comando seguente.

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

Assicurati che solo il root o il proprietario di questi documenti abbia accesso in scrittura ad essi. Può essere un vero toccasana in caso di future intrusioni poiché gli aggressori richiederanno più tempo e competenze per ottenere ulteriori privilegi sulla macchina. Usa il comando seguente per rimuovere tutti gli archivi indesiderati creati da vi o altri editor di testo 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. Controllo dei registri Nginx

Il controllo dei file di registro del tuo server Nginx ti fornirà informazioni preziose come l'interesse degli utenti, i tentativi di autenticazione indesiderati e così via. Per questo motivo, la capacità di monitorare i log del server in modo appropriato è una risorsa utile per i webmaster.

Puoi trovare i file di registro del tuo server in /usr/local/nginx/logs directory. I comandi seguenti ci mostrano come grepparli per informazioni sensibili.

$ 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

Puoi anche installare o creare applicazioni di controllo specifiche che controlleranno i log di Nginx in tempo reale e ti terranno informato su cosa sta succedendo nel tuo server.

19. Esecuzione di Nginx nei container

La maggior parte dei professionisti consiglia agli utenti di eseguire il proprio server Nginx dall'interno di un contenitore dedicato. I container sono ambienti isolati sulle macchine server costruiti per mantenere i processi separati l'uno dall'altro. Puoi facilmente installare ed eseguire il tuo server Nginx in contenitori come LXD, Docker, jail di FreeBSD, XEN e altri emulatori virtuali Linux. Questi sono noti collettivamente come chroot jail tra i webmaster.

Un contenitore dedicato per il tuo server conterrà tutte le risorse necessarie per eseguire il server e gestire le richieste dei client. Il vantaggio che ottieni è l'isolamento di questo server dal resto della tua macchina. Quindi, anche se qualcuno ottiene l'accesso non autorizzato al tuo server attraverso alcune scappatoie, non sarà in grado di controllare il core del tuo sistema.

20. Alcuni suggerimenti utili

Puoi configurare facilmente i diversi aspetti del tuo server web Nginx modificando il file di configurazione centralizzato. Ci sono molte cose da fare. Ad esempio, usa quanto segue per evitare il clickjacking.

add_header X-Frame-Options SAMEORIGIN;

La riga successiva disabiliterà lo sniffing dei tipi di contenuto da parte di alcuni browser.

add_header X-Content-Type-Options nosniff;

Per abilitare i filtri XSS (cross-site scripting), puoi utilizzare

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

Ci sono numerose funzioni utili che puoi trovare dalla documentazione di Nginx. Tuttavia, assicurati di capire cosa fanno prima di applicare qualsiasi cosa. Altrimenti il ​​tuo sito potrebbe subire tempi di inattività a causa di una configurazione errata.

Pensieri finali

Ci sono troppe ragioni per la popolarità dei server web Nginx. È diventato il miglior software per server grazie al suo ricco set di funzionalità e un numero apparentemente illimitato di capacità di configurazione. Spesso vediamo molti amministratori che si limitano a installare e utilizzare il server predefinito Nginx. Mancano molte funzionalità e flessibilità offerte da Nginx in questo modo. Ecco perché i nostri redattori si sono presi la libertà di delineare queste migliori pratiche prima di te. Speriamo di essere stati in grado di soddisfare il tuo interesse e di averti aiutato a imparare qualcosa di nuovo.


Linux
  1. 30 cose che non sapevi del kernel Linux

  2. Apache vs Nginx:quale server Web dovresti scegliere

  3. Installa Nginx su Windows

  4. Nginx inserisce nella whitelist alcuni IP

  5. Server Ubuntu Cosa devi sapere

Le 10 principali funzionalità SSH che DEVI conoscere per essere più produttivo

Come installare Nginx Web Server su Ubuntu 20.04

25 Devi conoscere i comandi di Nginx per sviluppatori e amministratori

Tutto quello che devi sapere su Linux Ubuntu Server

Tutto ciò che devi sapere su Linux OpenSSH Server

Apache vs Nginx:quale server Web è il migliore per te?