Ivan Zini

Blog tecnico di un sistemista bolognese. [senza condivisione la conoscenza è inutile.]

Realizzare un http reverse proxy con password tramite NGINX

Oltre all’utilizzo sfrenato dell’ottimo reverse proxy Pound come da precedente mio post, ho avuto la necessità di utilizzare sempre un http reverse proxy ma che gestisca anche l’autenticazione http ovvero che richieda un utente e una password per accedere al back-end finale.
Una veloce ricerca in rete mi ha mandato su decine di siti che parlano di NGINX (si pronuncia e si legge “engine x”) un open source http server con possibilità di operare come reverse proxy e IMAP/POP3/SMTP proxy server.
Nginx è stato scritto Igor Sysoev per Rambler.ru, il secondo sito più visitato in Russia.
Questo web server sta avendo negli ultimi anni una notevole diffusione per la sua leggerezza, semplicità di utilizzo e  sopratutto per l’alto traffico che può sopportare nonostante il basso impiego di risorse.
Sembra, secondo alcune statistiche,  sia al 4 posto nella classifica dei web server più utilizzati nell’intero web mondiale.
Dal wiki ufficiale si legge che è utilizzato da siti di altissima visibilità e  utilizzo come WordPress, Hulu, Github, Ohloh, SourceForge (vi dice niente?) e TorrentReactor.
Ecco l’elenco delle specifiche:

Basic HTTP features:

  • Handling of static files, index files, and autoindexing; open file descriptor cache;
  • Accelerated reverse proxying without caching, simple load balancing and fault tolerance;
  • Accelerated support without caching of remote FastCGI servers, simple load balancing and fault tolerance;
  • Modular architecture. Filters include gzipping, byte ranges, chunked responses, and SSI. Multiple SSI inclusions within a single page can be processed in parallel if they are handled by FastCGI or proxied servers.
  • SSL and TLS SNI support.

Mail proxy server features:

  • User redirection to IMAP/POP3 backend using an external HTTP authentication server;
  • User authentication using an external HTTP authentication server and connection redirection to internal SMTP backend;
  • Authentication methods:
    • POP3: USER/PASS, APOP, AUTH LOGIN PLAIN CRAM-MD5;
    • IMAP: LOGIN, AUTH LOGIN PLAIN CRAM-MD5;
    • SMTP: AUTH LOGIN PLAIN CRAM-MD5;
    • SSL support;
    • STARTTLS and STLS support.

Tested OS and platforms:

  • FreeBSD 3.x, 4.x, 5.x, 6.x i386; FreeBSD 5.x, 6.x amd64;
  • Linux 2.2, 2.4, 2.6 i386; Linux 2.6 amd64;
  • Solaris 9 i386, sun4u; Solaris 10 i386;
  • MacOS X (10.4) ppc;

Architecture and scalability:

  • one master process and several workers processes. The workers run as unprivileged user;
  • kqueue (FreeBSD 4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 7 11/99+), event ports (Solaris 10), select, and poll support;
  • various kqueue features support including, EV_CLEAR, EV_DISABLE (to disable event temporalily), NOTE_LOWAT, EV_EOF, number of available data, error codes;
  • sendfile (FreeBSD 3.1+), sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+), and sendfilev (Solaris 8 7/01+) support;
  • accept-filter (FreeBSD 4.1+) and TCP_DEFER_ACCEPT (Linux 2.4+) support;
  • 10,000 inactive HTTP keep-alive connections take about 2.5M memory;
  • data copy operations are kept to a minimum.

Other HTTP features:

  • name- and IP-based virtual servers;
  • keep-alive and pipelined connections support;
  • flexible configuration;
  • reconfiguration and online upgrade without interruption of the client processing;
  • access log formats, bufferred writing, and quick log rotation;
  • 4xx-5xx error codes redirection;
  • rewrite module;
  • access control based on client IP address and HTTP Basic authentication;
  • PUT, DELETE, MKCOL, COPY and MOVE methods;
  • FLV streaming;
  • speed limitation;
  • limitation of simultaneous connections from one address.

Experimental features:

  • embedded perl.

Installiamo NGNIX su una macchina Ubuntu e configuriamo o il tutto per ottenere un http reverse proxy con http auth.
Step 1 – Installazione
Nginx è presente direttamente nei repository di ubuntu , per installarlo:

apt-get update && apt-get install nginx

Per avviarlo basta richiamare lo script di avvio:

/etc/init.d/nginx restart

Ora il web server è già in funzione…semplice no?!!
il modulo che gestisce l’autenticazione http è già installato di default e si chiama NginxHttpAuthBasicModule.
Il file di configurazione da modificare si trova in

/etc/nginx/nginx.conf

Nginx per creare le password utilizza il modulo il comando apache “htpasswd” che però è possibile scaricare e installare senza apache.
se utilizzate infatti il comando seguente noterete che verranno proposti diverse applicazioni in ambito web che contengono  il comando “htpasswd”

apt-get install htpasswd

Personalmente ho installato il mini-httpd che contiene il nostro comando:

apt-get install mini-httpd

Step 2  – Configurazione

Prendiamo come esempio di backend l’ip 192.168.1.200 alla porta 8080 e editiamo il file di configurazione

vim /etc/nginx/nginx.conf

otteniamo :

user www-data;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

events {
worker_connections  1024;
# multi_accept on;
}

http {
include       /etc/nginx/mime.types;

access_log  /var/log/nginx/access.log;
server {
listen 80;                                                                           —->porta di ascolto
server_name localhost;                                              -—>nome server
location /{
auth_basic      “Restricted“;                                         —-> richiede l’http auth
auth_basic_user_file /etc/nginx/htpasswd;     —-> percorso file contenete password
proxy_pass http://192.168.1.200:8080;           —-> backend
}

possiamo ora creare le password per l’accesso all’http con il comando:

htpasswd  /etc/nginx/htpasswd “nome utente”

successivamente verrà chiesta la password da assegnare all’utente creato che verrà crittografata e inserita nel file htpasswd in /etc/nginx.

Ora se tutto è andato bene provando a collegarsi all’indirizzo web del server nginx si verrà “proxati” verso l’ip del backend con una maschera di richiesta di user name e password.

IZ

About these ads

2 risposte a “Realizzare un http reverse proxy con password tramite NGINX

  1. Pingback:Soluzione free/Open Source al provvedimento del garante privacy sugli Amministratori di sistema « Ivan Zini

  2. Pingback:User authentication tramite Nginx per Splunk free edition « Ivan Zini

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 148 follower

%d blogger cliccano Mi Piace per questo: