NGINX Web Server. Tommaso Sardelli. 8 Aprile 2015. Corsi GNU/Linux Avanzati 2015 Politecnico Open unix Lab. sardelli.tommaso[at]gmail.



Documenti analoghi
La sicurezza nel Web

Registro elettronico scuola ospedaliera rel. 7.0

GUIDA UTENTE PRIMA NOTA SEMPLICE

Il web server Apache Lezione n. 3. Introduzione

Comunicazioni sicure su Internet: https e SSL. Fisica dell Informazione

Il Web Server e il protocollo HTTP

Console di Amministrazione Centralizzata Guida Rapida

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Utilizzo di Certificati SSL e relative implicazioni

Con.Te Gestione Console Telematici

Guida alla registrazione on-line di un DataLogger

Creare connessioni cifrate con stunnel

GUIDA UTENTE MONEY TRANSFER MANAGER

Siti web centrati sui dati (Data-centric web applications)

Applicazioni web centrati sui dati (Data-centric web applications)

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer

Approfondimento di Marco Mulas

Internet e posta elettronica. A cura di Massimiliano Buschi

CONFIGURAZIONE XAMPP + SSL (HTTPS)

Reti di Telecomunicazione Lezione 7

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Informatica per la comunicazione" - lezione 13 -

2.1 Installazione e configurazione LMS [4]

Xampp. Valeriano Maysonnave - A.A. 2014/2015 -

Dal protocollo IP ai livelli superiori

Registratori di Cassa

NAS 224 Accesso remoto Configurazione manuale

Argomenti Percorso 7 Apache HTTP

Sicurezza nelle applicazioni multimediali: lezione 7, sicurezza dei protocolli. Sicurezza dei protocolli (https, pop3s, imaps, esmtp )

ImporterOne Manuale Export Plugin Prestashop

InitZero s.r.l. Via P. Calamandrei, Arezzo

FASE 1: Definizione del tema, degli obiettivi e del target con il cliente... (da cui dipendono le scelte successive!)

Corso basi di dati Installazione e gestione di PWS

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Cimini Simonelli - Testa

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

Application Server per sviluppare applicazioni Java Enterprise

UNIVERSITA DI CATANIA

Esercitazione 2 Certificati

Rapporto tecnico sulle tipologie di agenti software definiti e implementati nell ambito del progetto

Reti di Telecomunicazione Lezione 8

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Come funziona il WWW. Architettura client-server. Web: client-server. Il protocollo

Alberto Ferrante. Security Association caching of a dedicated IPSec crypto processor: dimensioning the cache and software interface

Introduzione. Installare EMAS Logo Generator

ICARO Terminal Server per Aprile

Sommario. Introduzione Architettura Client-Server. Server Web Browser Web. Architettura a Due Livelli Architettura a Tre Livelli

SVILUPPO DEL BLOG Autori: Ilari Michele, Cimini Oscar, Zaleski Dawid

Oreste Signore, Responsabile Ufficio Italiano W3C Area della Ricerca CNR - via Moruzzi, Pisa

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it

Studi di Settore. Nota Operativa 22/4/2013

Overview su Online Certificate Status Protocol (OCSP)

Manuale Utente MyFastPage

Dettaglio attività e pianificazione. snamretegas.it. San Donato Milanese Aprile 2014

Secure domande e risposte

Lifephone. Introduzione. Database. Sito

Manuale LiveBox APPLICAZIONE ANDROID.

Protocolli applicativi: FTP

Installazione LAMP. Installare un server lamp su Linux Ubuntu. Per installare un server LAMP in Ubuntu come prima cosa apriamo il terminale:

Introduzione alle applicazioni di rete

CONFIGURAZIONE WAMP SERVER + SSL (HTTPS)

Manuale LiveBox APPLICAZIONE IOS.

Dynamic DNS e Accesso Remoto

Guida all impostazione. Eureka Web

Titolare del trattamento dei dati innanzi descritto è tsnpalombara.it

Software di interfacciamento sistemi gestionali Manuale di installazione, configurazione ed utilizzo

Tecnologie per il Web. Il web: Architettura HTTP HTTP. SSL: Secure Socket Layer

Il protocollo BitTorrent

Configurazione posta su ios

Impostare il browser per navigare in sicurezza Opzioni di protezione

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

ImporterONE Export Plugin Magento

GateManager. 1 Indice. tecnico@gate-manager.it

Software Servizi Web UOGA

Creare un sito Multilingua con Joomla 1.6

E-Post Office Manuale utente

1) GESTIONE DELLE POSTAZIONI REMOTE

ARCHIVIA PLUS - DOCPORTAL

Linux nel calcolo distribuito

Product Shipping Cost Guida d'installazione ed Utilizzo

19. LA PROGRAMMAZIONE LATO SERVER

Architetture Web a tre livelli: CGI, SSI, ISAPI e codice mobile Architetture a 3 livelli (1)

La VPN con il FRITZ!Box Parte I. La VPN con il FRITZ!Box Parte I

NAS 323 Uso del NAS come server VPN

LEZIONE 3. Il pannello di amministrazione di Drupal, configurazione del sito

Obiettivo: realizzazione di reti sicure TIPI DI ATTACCO. Politica di sicurezza: a) scelte tecnologiche b) strategie organizzative

Manuale NetSupport v Liceo G. Cotta Marco Bolzon

Utilizzo del server LDAP locale per la sincronizzazione della base utenti e della GAL

Esempio di esecuzione di una pagina JSP: Il client chiede la pagina: sdfonline.unimc.it/info/modulo.jsp;

Programmazione in Rete

Apache - IDS e Firewall HTTP LBIT SOLUZIONI. Apache - IDS e Firewall HTTP 2013 INFORMATICHE

MANUALE DI INSTALLAZIONE E UTILIZZO MODULO DI PAGAMENTO BANCA SELLA PER MAGENTO

Firewall applicativo per la protezione di portali intranet/extranet

CONFIGURARE IL DISPOSITIVO DI TELEASSISTENZA

GUIDA UTENTE BILLIARDS COUNTER (Vers )

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB.

Protocolli e architetture per WIS

Transcript:

NGINX Web Server Tommaso Sardelli sardelli.tommaso[at]gmail.com Corsi GNU/Linux Avanzati 2015 Politecnico Open unix Lab 8 Aprile 2015

Di cosa parliamo oggi? Cos è un web server Come configurarlo Come renderlo sicuro 2 di 55

Di cosa parliamo oggi? 3 di 55

Indice Generale Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 4 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 5 di 55

Cos è un Web Server Un web server è quel componente che invia pagine web (solitamente in formato html) ai browser, nel momento in cui le richiedono. Tutto questo avviene tramite il protocollo di comunicazione HTTP. Se vogliamo creare un sito internet, oppure un blog con Wordpress o ancora, caricare i nostri file su owncloud, abbiamo bisogno di un web server. 6 di 55

Analisi di una richiesta HTTP Il protocollo HTTP è usato come principale sistema per la trasmissione d informazioni sul web: il client esegue una richiesta e il server restituisce la risposta. Method (GET, POST, PUT, DELETE, etc.) URI (generalmente è la risorsa richiesta) Headers Body 7 di 55

Come funziona CLIENT CLIENT WEB SERVER DNS SERVER 8 di 55

Demo Demo 9 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 10 di 55

Caratteristiche Principali Programma leggerissimo sia nel consumo di memoria che nell utilizzo della CPU. Performance elevate grazie a una mirata gestione dei processi/thread. Perfetto per il load balancing. Altamente configurabile anche a basso livello (numero di file aperti per ogni processo, utilizzo dei core della CPU,...). Modulare, offre infatti la possibilità di attivare o disattivare funzionalità in fase di compilazione. 11 di 55

Architettura di NGINX NGINX è suddiviso in due processi: Master process: viene lanciato da root ed è il processo principale. Ha il compito di leggere i file di configurazione e di aprire il socket che gli permetterà di comunicare con i worker processes. Worker processes: sono una serie di processi lanciati come utente non privilegiato (ad esempio www-data) che hanno il compito effettivo di servire le richieste HTTP. 12 di 55

Architettura di NGINX Nginx Master Process Request/ Response 1 Request/ Response 2 Request/ Response 3 Request/ Response n Worker Process 1 Worker Process 2 Worker Process 3 Worker Process n 13 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 14 di 55

Installazione su Debian A partire da Debian 7 Wheezy vengono forniti 4 diversi pacchetti di NGINX. nginx-light: contiene soltanto un minimo numero di core modules. nginx-full: contiente tutti i core modules (è quello che viene installato quando si installa il metapacchetto nginx). nginx-extras: contiente tutti i core modules più alcuni moduli extra. nginx-naxsi: contiene il modulo per naxsi Web Application Firewall. https://wiki.debian.org/nginx 15 di 55

Installazione da sorgenti Quando compilare NGINX da sorgenti: Si vogliono abilitare dei moduli che non sono presenti nella versione fornita dalla distribuzione in uso. Si vogliono disabilitare moduli che sappiamo non verrebbero usati. La versione precompilata fornita dalla distribuzione è troppo datata. 16 di 55

Info sulla versione installata Per visualizzare la versione installata: sudo nginx - v 17 di 55

Info sulla versione installata Per visualizzare la versione installata: sudo nginx - v Per avere la lista completa dei moduli abilitati: sudo nginx - V 17 di 55

Info sulla versione installata Per visualizzare la versione installata: sudo nginx - v Per avere la lista completa dei moduli abilitati: sudo nginx - V Per cercare un modulo in particolare tra quelli abilitati: sudo nginx - V 2 >&1 grep -- color nome_ modulo 17 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 18 di 55

nginx.conf Come abbiamo detto nell introduzione, la semplicità nella configurazione è stato da sempre uno degli obiettivi di NGINX. 19 di 55

nginx.conf Come abbiamo detto nell introduzione, la semplicità nella configurazione è stato da sempre uno degli obiettivi di NGINX. Interamente configurabile mediante un unico file (/etc/nginx/nginx.conf su Debian). È comunque possibile spezzare il file in tanti file diversi richiamabili con include. Al termine della configurazione diamo sudo nginx -t && sudo service nginx reload per controllare errori sintattici e attivare le modifiche. 19 di 55

Context Il file di configurazione di NGINX è diviso in context che sarebbero blocchi di direttive racchiusi tra parentesi graffe. Esistono 5 context e sono: main, events, http, server e location. Nel file di configurazione possiamo avere un solo blocco events e http ma molteplici blocchi server e location. I context sono ereditari, cioè ogni context eredita le impostazioni del context in cui viene inserito. I context location si trovano sempre all interno di context server che a loro volta risiedono nel context http. 20 di 55

Struttura di nginx.conf user www - data ; worker_processes 1; pid / run / nginx. pid ; events { worker_connections 128; } http { server { } } location { } 21 di 55

main e events user www-data: specifichiamo da quale utente saranno lanciati i worker processes (es. www-data). worker_processes: con questa direttiva decidiamo quanti worker processes avviare, solitamente si consiglia uno per core. pid /run/nginx.pid: diciamo a NGINX in quale file salvare il proprio PID. worker_connections 128: Impostiamo il numero di connessioni che può gestire ciascun worker process (dobbiamo trovare il valore ideale facendo dei test ad esempio con httperf). 22 di 55

Blocco http È il blocco di configurazione globale, le direttive inserite in questo blocco hanno effetto su tutti i siti serviti da NGINX. Generalmente le impostazioni di default non pregiudicano il funzionamento di NGINX ma è sempre bene modificarle in base alle nostre necessità. 23 di 55

Blocchi server È il blocco usato per configuare i virtual domains (VirtualHosts per chi è pratico di Apache). Avremo un blocco server per ogni sito (dominio o sottodominio) hostato sul server. Insieme al blocco location è quello che andremo a configurare manualmente ogni volta che vogliamo far girare qualcosa su NGINX. 24 di 55

VirtualHosts http { server { listen 80; server_name example. org www. example. org ;... } server { listen 80; server_name poul. org www. poul. org ;... } } server { listen 80; server_name aranzulla. it www. aranzulla. it;... } 25 di 55

Blocchi location In questi blocchi troviamo le direttive che operano su file e cartelle Queste direttive ci permettono di decidere come NGINX debba comportarsi quando viene richiesta una specifica risorsa È possibile utilizzare un percorso specifico per indicare una risorsa In questo caso useremo il prefisso = In alternativa possiamo eseguire il matching utilizzando le regex Prefisso "~" se vogliamo che il matching sia case sensitive Prefisso "~*" se vogliamo che il matching sia case insensitive Syntax : l o c a t i o n [ = ~ ~ ^~ ] u r i {... } 26 di 55

Alcuni esempi l o c a t i o n ~ / download { a u t o i n d e x on ; } 27 di 55

Alcuni esempi l o c a t i o n ~ / download { a u t o i n d e x on ; } Impedire l accesso a script eseguibili all interno delle cartelle con permessi di scrittura l o c a t i o n ~ /( images cache media l o g s tmp ) /.. ( php p l py ) $ { r e t u r n 4 0 3 ; e r r o r _ p a g e 403 /403 _ e r r o r. html ; } 27 di 55

Demo Demo 28 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 29 di 55

CGI CGI o Common Gateway Interface, è un meccanismo ideato per permettere di realizzare e far girare applicazioni lato server, in qualunque linguaggio (C, PHP, Python, Perl,...) Le richieste generalmente vengono servite in questo modo: Il web server riceve una richiesta per servire una certa pagina (relativa all applicazione). Lancia un processo tramite CGI per eseguire il programma e gli passa come parametri da linea di comando le varie variabili passate dalla GET/POST. Il programma esegue il codice e restituisce l output al web server che inoltra la risposta al client. 30 di 55

FastCGI - l evoluzione FastCGI è la diretta evoluzione di CGI, riprende alcune delle sue funzionalità migliorando però due aspetti importanti: Performance: I processi lanciati da FastCGI sono persistenti e vengono riutilizzati per servire diverse richieste. Viene creato un socket per scambiare le richieste tra web server e applicazione. Si occupa poi l applicazione di generare eventualmente altri processi. Scalabiltà: FastCGI infatti offre la possibilità di eseguire le applicazioni da remoto permettendo la distribuzione del carico di lavoro su server differenti. 31 di 55

Architettura di FastCGI FastCGI Wrapper Application 1 FastCGI Wrapper Application 2 Internet Nginx Socket FastCGI Wrapper Application 3 FastCGI Wrapper Application 4 32 di 55

php-fpm.conf L implementazione più famosa di fastcgi per PHP è PHP-FPM ed è quella utilizzeremo per NGINX. È presente nei repo di tutte le principali distribuzioni. 33 di 55

php-fpm.conf L implementazione più famosa di fastcgi per PHP è PHP-FPM ed è quella utilizzeremo per NGINX. È presente nei repo di tutte le principali distribuzioni. Su Debian lo troviamo nel pacchetto php5-fpm Possiamo configurarlo con il file /etc/php5/fpm/pool.d/www.conf All interno di questo file ci interessa trovare il percorso del socket con cui far comunicare NGINX e PHP-FPM listen = /var/run/php5-fpm.sock 33 di 55

Passiamo gli script PHP a FastCGI Per abilitare l esecuzione di codice PHP all interno di un sito è sufficiente creare un apposito blocco location all interno del context server interessato. l o c a t i o n ~ \. php$ { t r y _ f i l e s $ u r i =404; f a s t c g i _ p a s s u n i x : / v a r / run /php5 fpm. sock ; i n c l u d e f a s t c g i. c o n f ; f a s t c g i _ i n d e x i n d e x. php ; } 34 di 55

Analizziamo il blocco location ~ \.php$ : Cerca tutti i file con estensione.php try_files $uri =404 : Controlla che il file esista veramente per evitare l esecuziona arbitraria di codice, se così non fosse restituisce un errore 404. fastcgi_pass unix:/var/run/php5-fpm.sock : Indichiamo il full path del socket di PHP-FPM. include fastcgi.conf : Include il file contenente le impostazioni predefinite di FastCGI. 35 di 55

Demo Demo 36 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 37 di 55

It s a conspiracy! 38 di 55

Cos è HTTPS? HyperText Transfer Protocol over Secure Socket Layer. È il risultato dell applicazione di un protocollo di crittografia asimmetrica e simmetrica al protocollo di trasferimento di ipertesti HTTP. Viene utilizzato per garantire trasferimenti riservati di dati nel web, in modo da impedire intercettazioni dei contenuti che potrebbero essere effettuati tramite tecniche di attacco man in the middle. Password Dati sensibili Furti di identità 39 di 55

Come funziona? Aggiunge un livello di sicurezza all HTTP grazie al protocollo di crittografia noto come Transport Layer Security (TLS), o il suo predecessore Secure Sockets Layer (SSL) (da evitare). Crea quindi un canale di comunicazione criptato tra il client e il server attraverso uno scambio sicuro di chiavi di cifratura. una volta stabilito questo canale sicuro, al suo interno viene utilizzato il protocollo HTTP per la comunicazione tra le parti. Impiega come porta di default la 443 e non la porta 80 come per l HTTP non criptato. 40 di 55

Bello...Lo voglio! Possiamo facilmente creare dei cosiddetti self-signed certificates per proteggere il traffico da e verso i nostri siti. sudo mkdir -p / etc / nginx / ssl && cd / etc / nginx / ssl # Creiamo la chiave privata sudo openssl genrsa - out dominio. key 2048 sudo chmod 600 dominio. key # Creiamo la certificate signing request ( csr ) sudo openssl req - nodes - sha256 - new - key dominio. key \ -out dominio. csr # Creiamo il certificato sudo openssl x509 - req - days 365 - in dominio. csr \ - signkey dominio. key - out dominio. crt 41 di 55

Abilitiamolo in nginx.conf Reindirizziamo tutte le richieste HTTP sul protocollo HTTPS in questo modo: server { listen 80; server_name dominio. com ; return 301 https :// $server_name$request_uri ; } server { listen 443 ssl default_server ; server_name dominio. com ; } ssl_certificate / etc / nginx / ssl / dominio. crt ; ssl_certificate_key / etc / nginx / ssl / dominio. key ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 42 di 55

Un piccolo inconveniente 43 di 55

Due Soluzioni StartSSL 44 di 55

Due Soluzioni 45 di 55

Tre in realtà Arriving Mid-2015 46 di 55

Demo Demo 47 di 55

Outline Introduzione Cos è un Web Server Parliamo di NGINX Installazione e Configurazione Repository e Sorgenti La configurazione di NGINX FastCGI e PHP-FPM Sicurezza SSL/TLS e HTTPS HTTPS Hardening Link 48 di 55

SSL Test https://www.ssllabs.com/ssltest/index.html 49 di 55

HTTP Strict Transport Security (HSTS) È un header HTTP inviato dal server al client. Serve ad informare il client che l accesso al sito richiesto deve essere fatto su connessione HTTPS. Il parametro max-age indica per quanto tempo (in secondi) è valida questa regola. 50 di 55

Abilitiamolo in NGINX Abilitiamo l header HSTS così: server { listen 443 ssl ;...... } # Force HSTS add_header Strict - Transport - Security max - age =15768000; 51 di 55

Perfect Forward Secrecy (PFS) Impedisce di decifrare la comunicazione anche se la chiave privata del server venisse compromessa. La cifratura avviene per mezzo di una chiave che viene eliminata al termine della sessione. Per questo motivo la chiave viene detta effimera. 52 di 55

Abilitiamolo in NGINX Abilitiamo PFS così: server { listen 443 ssl ;...... } ssl_prefer_server_ciphers on; ssl_ciphers ECDHE -RSA - AES128 -GCM - SHA256 :... https://wiki.mozilla.org/security/server_side_tls https://mozilla.github.io/server-side-tls/ ssl-config-generator/ 53 di 55

Link Getting Started NGINX Primer NGINX Admin Guide NGINXTIPS HTTPS BetterCrypto Why You Should Always Use HTTPS Let s Encrypt StartSSL Free Certificates Hardening NGINX SSL/TSL Configuration Strong SSL Security on nginx 54 di 55

License Quest opera è rilasciata sotto la licenza Creative Commons Attribution-Share Alike 4.0 International License. Per visualizzare una copia di questa licenza, visitare http://creativecommons.org/licenses/by-sa/4.0/ o inviare una lettera a Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA https://www.poul.org/ 55 di 55