Ricerca nel sito web

Configurazione del server proxy Squid con accesso limitato e impostazione dei client per l'utilizzo del proxy - Parte 5


Un Linux Foundation Certified Engineer è un professionista esperto che ha l'esperienza necessaria per installare, gestire e risolvere i problemi dei servizi di rete nei sistemi Linux ed è responsabile della progettazione, dell'implementazione e della manutenzione continua del sistema. architettura ampia.

Presentazione del programma di certificazione Linux Foundation.

Nella Parte 1 di questa serie, abbiamo mostrato come installare Squid, un server di caching proxy per client web. Fai riferimento a quel post (link indicato di seguito) prima di procedere se non hai ancora installato Squid sul tuo sistema.

  1. Parte 1: installazione dei servizi di rete e configurazione dell'avvio automatico all'avvio

In questo articolo ti mostreremo come configurare il server proxy Squid per garantire o limitare l'accesso a Internet e come configurare un client http, o browser web, per utilizzare quel server proxy.

Configurazione del mio ambiente di test

Servitore di calamari
Operating System :	Debian Wheezy 7.5
IP Address 	 :	192.168.0.15
Hostname	 :	dev2.gabrielcanepa.com.ar
Macchina cliente 1
Operating System :	Ubuntu 12.04
IP Address 	 :	192.168.0.104 
Hostname	 :	ubuntuOS.gabrielcanepa.com.ar
Macchina cliente 2
Operating System :	CentOS-7.0-1406
IP Address 	 :	192.168.0.17 
Hostname	 :	dev1.gabrielcanepa.com.ar

Ricordiamo che, in termini semplici, un server proxy web è un intermediario tra uno (o più) computer client e una determinata risorsa di rete, la più comune delle quali è l'accesso a Internet. In altre parole, il server proxy è connesso da un lato direttamente a Internet (o a un router connesso a Internet) e dall'altro a una rete di computer client che attraverso di esso accederanno al World Wide Web.

Forse ti starai chiedendo, perché dovrei voler aggiungere ancora un altro software alla mia infrastruttura di rete?

Ecco i 3 principali motivi:

1. Squid archivia i file delle richieste precedenti per accelerare i trasferimenti futuri. Ad esempio, supponiamo che client1 scarichi CentOS-7.0-1406-x86_64-DVD.iso da Internet. Quando client2 richiede l'accesso allo stesso file, Squid può trasferire il file dalla sua cache invece di scaricarlo nuovamente da Internet. Come puoi immaginare, puoi utilizzare questa funzionalità per accelerare i trasferimenti di dati in una rete di computer che richiedono aggiornamenti frequenti di qualche tipo.

2. Gli ACL (Elenchi di controllo degli accessi) ci consentono di limitare l'accesso ai siti Web e/o monitorare l'accesso per utente. Puoi limitare l'accesso in base al giorno della settimana, all'ora del giorno o al dominio, ad esempio.

3. Aggirare i filtri web è reso possibile attraverso l'uso di un proxy web a cui vengono effettuate le richieste e che restituisce il contenuto richiesto a un client, invece di chiedere al client di richiederlo direttamente su Internet.

Ad esempio, supponiamo che tu abbia effettuato l'accesso a client1 e desideri accedere a www.facebook.com tramite il router della tua azienda. Poiché il sito potrebbe essere bloccato dalle politiche della tua azienda, puoi invece connetterti a un server proxy web e fare in modo che richieda l'accesso a www.facebook.com. Il contenuto remoto ti viene quindi restituito nuovamente tramite il server proxy web, aggirando le politiche di blocco del router della tua azienda.

Configurazione di Squid: nozioni di base

Lo schema di controllo degli accessi del server proxy web Squid è costituito da due diversi componenti:

  1. Gli elementi ACL sono linee direttive che iniziano con la parola "acl" e rappresentano tipi di test eseguiti su qualsiasi transazione di richiesta.
  2. Le regole dell'elenco di accesso consistono in un'azione consenti o nega seguita da una serie di elementi ACL e vengono utilizzate per indicare quale azione o limitazione ha da applicare per una determinata richiesta. Vengono controllati in ordine e la ricerca nell'elenco termina non appena una delle regole trova una corrispondenza. Se una regola ha più elementi ACL, viene implementata come un'operazione booleana AND (tutti gli elementi ACL della regola devono corrispondere affinché la regola sia una corrispondenza).

Il file di configurazione principale di Squid è /etc/squid/squid.conf, che è lungo ~5000 righe poiché include sia le direttive di configurazione che la documentazione. Per questo motivo, creeremo un nuovo file squid.conf con solo le righe che includono le direttive di configurazione per nostra comodità, tralasciando le righe vuote o commentate. Per fare ciò, utilizzeremo i seguenti comandi.

mv /etc/squid/squid.conf /etc/squid/squid.conf.bkp

Poi,

grep -Eiv '(^#|^$)' /etc/squid/squid.conf.bkp

OR

grep -ve ^# -ve ^$ /etc/squid/squid.conf.bkp > /etc/squid/squid.conf

Ora apri il file squid.conf appena creato e cerca (o aggiungi) i seguenti elementi ACL e elenchi di accesso.

acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24

Le due righe sopra rappresentano un esempio base dell'utilizzo degli elementi ACL.

  1. La prima parola, acl, indica che questa è una riga direttiva dell'elemento ACL.
  2. La seconda parola, localhost o localnet, specifica un nome per la direttiva.
  3. La terza parola, src in questo caso, è un tipo di elemento ACL utilizzato per rappresentare rispettivamente un indirizzo IP o un intervallo di indirizzi del client. Puoi specificare un singolo host tramite IP (o nome host, se hai implementato una sorta di risoluzione DNS) o tramite indirizzo di rete.
  4. Il quarto parametro è un argomento di filtro che viene “alimentato” alla direttiva.

Le due righe sottostanti sono regole access list e rappresentano un'implementazione esplicita delle direttive ACL menzionate in precedenza. In poche parole indicano che l'accesso http dovrebbe essere concesso se la richiesta proviene dalla rete locale (localnet), o da localhost. Nello specifico, qual è la rete locale consentita o gli indirizzi host locali? La risposta è: quelli specificati nelle direttive localhost e localnet.

http_access allow localnet
http_access allow localhost

A questo punto puoi riavviare Squid per applicare eventuali modifiche in sospeso.

service squid restart 		[Upstart / sysvinit-based distributions]
systemctl restart squid.service 	[systemd-based distributions]

quindi configura un browser client nella rete locale (192.168.0.104 nel nostro caso) per accedere a Internet tramite il tuo proxy come segue.

In Firefox

1. Vai al menu Modifica e scegli l'opzione Preferenze.

2. Fai clic su Avanzate, quindi sulla scheda Rete e infine su Impostazioni...

3. Seleziona Configurazione proxy manuale e inserisci l'indirizzo IP del server proxy e la porta su cui è in ascolto per i collegamenti.

Nota Per impostazione predefinita, Squid è in ascolto sulla porta 3128, ma puoi ignorare questo comportamento modificando l'elenco di accesso regola che inizia con http_port (per impostazione predefinita si legge http_port 3128).

4. Fai clic su OK per applicare le modifiche e sei a posto.

Verificare che un client stia accedendo a Internet

Ora puoi verificare che il tuo client di rete locale acceda a Internet tramite il tuo proxy come segue.

1. Nel tuo client, apri un terminale e digita,

ip address show eth0 | grep -Ei '(inet.*eth0)'

Questo comando visualizzerà l'attuale indirizzo IP del tuo client (192.168.0.104 nell'immagine seguente).

2. Nel tuo client, utilizza un browser web per aprire qualsiasi sito web (linux-console.net in questo caso).

3. Nel server, esegui.

tail -f /var/log/squid/access.log

e avrai una visualizzazione in tempo reale delle richieste servite tramite Squid.

Limitazione dell'accesso da parte del client

Supponiamo ora di voler negare esplicitamente l'accesso a quel particolare indirizzo IP del client, pur mantenendo l'accesso per il resto della rete locale.

1. Definisci una nuova direttiva ACL come segue (l'ho chiamata ubuntuOS ma puoi chiamarla come preferisci).

acl ubuntuOS src 192.168.0.104

2. Aggiungi la direttiva ACL all'elenco accesso localnet che è già presente, ma facendola precedere da un segno esclamativo. Ciò significa: "Consenti l'accesso a Internet ai client che corrispondono alla direttiva ACL localnet tranne a quello che corrisponde alla direttiva ubuntuOS".

http_access allow localnet !ubuntuOS

3. Ora dobbiamo riavviare Squid per applicare le modifiche. Quindi se proviamo a navigare su qualsiasi sito scopriremo che l'accesso ora è negato.

Configurazione di Squid – Ottimizzazione

Limitare l'accesso per dominio e/o per ora del giorno/giorno della settimana

Per limitare l'accesso a Squid per dominio utilizzeremo la parola chiave dstdomain in una direttiva ACL, come segue.

acl forbidden dstdomain "/etc/squid/forbidden_domains"

Dove forbidden_domains è un file di testo semplice che contiene i domini a cui desideriamo negare l'accesso.

Infine, dobbiamo garantire l'accesso a Squid per le richieste che non soddisfano la direttiva di cui sopra.

http_access allow localnet !forbidden

O forse vorremo consentire l'accesso a tali siti solo durante una determinata ora del giorno (dalle 10:00 alle 11:00) solo il lunedì (M), mercoledì (mercoledì) e venerdì (venerdì).

acl someDays time MWF 10:00-11:00
http_access allow forbidden someDays
http_access deny forbidden

In caso contrario, l'accesso a tali domini verrà bloccato.

Limitazione dell'accesso tramite l'autenticazione dell'utente

Squid supporta diversi meccanismi di autenticazione (Basic, NTLM, Digest, SPNEGO e Oauth) e helper (database SQL, LDAP, NIS, NCSA, solo per citarne alcuni). In questo tutorial utilizzeremo l'autenticazione di base con NCSA.

Aggiungi le seguenti righe al tuo file /etc/squid/squid.conf.

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
auth_param basic credentialsttl 30 minutes
auth_param basic casesensitive on
auth_param basic realm Squid proxy-caching web server for Tecmint's LFCE series
acl ncsa proxy_auth REQUIRED
http_access allow ncsa

Nota: in CentOS 7, il plugin NCSA per Squid può essere trovato in /usr/lib64/squid/basic_nsca_auth, quindi cambia di conseguenza nella riga sopra.

Alcuni chiarimenti:

  1. Dobbiamo dire a Squid quale programma di supporto per l'autenticazione utilizzare con la direttiva auth_param specificando il nome del programma (molto probabilmente, /usr/lib/squid/ncsa_auth o /usr/lib64/squid/basic_nsca_auth), più eventuali opzioni della riga di comando (/etc/squid/passwd in questo caso) se necessario.
  2. Il file /etc/squid/passwd viene creato tramite htpasswd, uno strumento per gestire l'autenticazione di base tramite file. Ci consentirà di aggiungere un elenco di nomi utente (e le relative password) che potranno utilizzare Squid.
  3. credentialsttl 30 minuti richiederà l'inserimento del nome utente e della password ogni 30 minuti (puoi specificare questo intervallo di tempo anche con le ore).
  4. casesensitive indica che i nomi utente e le password fanno distinzione tra maiuscole e minuscole.
  5. realm rappresenta il testo della finestra di dialogo di autenticazione che verrà utilizzata per autenticarsi su Squid.
  6. Infine, l'accesso viene concesso solo quando l'autenticazione proxy (proxy_auth REQUIRED) ha esito positivo.

Eseguire il comando seguente per creare il file e aggiungere le credenziali per l'utente gacanepa (omettere il flag -c se il file esiste già).

htpasswd -c /etc/squid/passwd gacanepa

Aprire un browser Web nel computer client e provare a navigare in un determinato sito.

Se l'autenticazione ha esito positivo, viene concesso l'accesso alla risorsa richiesta. In caso contrario, l'accesso verrà negato.

Utilizzo della cache per velocizzare il trasferimento dei dati

Una delle caratteristiche distintive di Squid è la possibilità di memorizzare nella cache le risorse richieste dal web su disco per velocizzare le future richieste di tali oggetti da parte dello stesso client o di altri.

Aggiungi le seguenti direttive nel tuo file squid.conf.

cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 100 MB
refresh_pattern .*\.(mp4|iso) 2880

Alcuni chiarimenti sulle direttive di cui sopra.

  1. ufs è il formato di archiviazione di Squid.
  2. /var/cache/squid è una directory di livello superiore in cui verranno archiviati i file della cache. Questa directory deve esistere ed essere scrivibile da Squid (Squid NON creerà questa directory per te).
  3. 1000 è la quantità (in MB) da utilizzare in questa directory.
  4. 16 è il numero di sottodirectory di 1° livello, mentre 256 è il numero di sottodirectory di 2° livello all'interno di /var/spool/squid.
  5. La direttiva maximum_object_size specifica la dimensione massima degli oggetti consentiti nella cache.
  6. refresh_pattern dice a Squid come gestire tipi di file specifici (.mp4 e .iso in questo caso) e per quanto tempo deve memorizzare i file richiesti oggetti nella cache (2880 minuti=2 giorni).

Il primo e il secondo 2880 sono rispettivamente i limiti inferiore e superiore, per quanto tempo gli oggetti senza una scadenza esplicita saranno considerati recenti e quindi verranno serviti dalla cache, mentre 0% è la percentuale dell'età degli oggetti (tempo dall'ultima modifica) per cui ciascun oggetto senza scadenza esplicita verrà considerato recente.

Caso di studio: download di un file .mp4 da 2 client diversi e test della cache

Il primo client (IP 192.168.0.104) scarica un file .mp4 da 71 MB in 2 minuti e 52 secondi.

Il secondo client (IP 192.168.0.17) scarica lo stesso file in 1,4 secondi!

Questo perché il file è stato fornito dalla cache Squid (indicata da TCP_HIT/200) nel secondo caso, a differenza della prima istanza, quando è stato scaricato direttamente da Internet (rappresentato da TCP_MISS/200).

Le parole chiave HIT e MISS, insieme al codice di risposta 200 http, indicano che il file è stato servito correttamente entrambe le volte, ma la cache era HIT e Persi rispettivamente. Quando per qualche motivo una richiesta non può essere soddisfatta dalla cache, Squid tenta di servirla da Internet.

Conclusione

In questo articolo abbiamo discusso come impostare un proxy di caching web Squid. È possibile utilizzare il server proxy per filtrare i contenuti utilizzando un criterio scelto e anche per ridurre la latenza (poiché richieste in entrata identiche vengono servite dalla cache, che è più vicina al client rispetto al server Web che sta effettivamente servendo il contenuto, con conseguente maggiore velocità trasferimenti di dati) e anche il traffico di rete (riducendo la quantità di larghezza di banda utilizzata, che ti fa risparmiare denaro se stai pagando per il traffico).

Potresti fare riferimento al sito web di Squid per ulteriore documentazione (assicurati di controllare anche il wiki), ma non esitare a contattarci se hai domande o commenti. Saremo più che felici di sentire la tua opinione!