CentOS-Italia.org - La Community degli Utenti Italiani di Linux CentOS Forum e Guide How To
Supporto Tecnico a Centos => Software => Topic aperto da: impression - 21 Agosto 2014, 13:56:59
-
Buongiorno a tutti,
inizio subito illustrandovi il mio problema, ho installato squid da repository (quindi compilazione ecc tutto ok) e ho settato il tutto per realizzare un proxy http e https ma la parte https non funziona. Ma andiamo con ordine ho seguito le seguenti guide di wiki.squid
http://wiki.squid-cache.org/EliezerCroitoru/Drafts/SSLBUMP (http://wiki.squid-cache.org/EliezerCroitoru/Drafts/SSLBUMP)
http://wiki.squid-cache.org/Features/SslBump (http://wiki.squid-cache.org/Features/SslBump)
http://wiki.squid-cache.org/Features/DynamicSslCert (http://wiki.squid-cache.org/Features/DynamicSslCert)
http://wiki.squid-cache.org/Features/BumpSslServerFirst (http://wiki.squid-cache.org/Features/BumpSslServerFirst)
ecco i passi nel dettaglio
-installato squid
-creato la cartella ssl_cert dentro /etc/squid/
-dentro la certella ssl_cert lanciato i seguenti comandi per i certificati
openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout myCA.pem -out myCA.pem
openssl x509 -in myCA.pem -outform DER -out myCA.der
-poi inizializato il db ssl
/usr/lib64/squid/ssl_crtd -c -s /var/squid/ssl_db
chown -R squid /var/squid/
- poi aggiunti al file squid.conf i seguenti parametri
http_port 3128 intercept
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl_cert/myCA.pem
sslcrtd_program /usr/lib64/squid/ssl_crtd -s /var/squid/ssl_db -M 16MB
sslcrtd_children 10
ssl_bump server-first all
#sslproxy_cert_error allow all
#sslproxy_flags DONT_VERIFY_PEER
-settato iptables per intercettare il traffico sia sulla porta 80 che 443
-avviato squid e tutto ok
-installato il certificato sul client
http va una meraviglia mentre https no
ecco il file cache.log
2014/08/19 13:55:01| Startup: Initializing Authentication Schemes ...
2014/08/19 13:55:01| Startup: Initialized Authentication Scheme 'basic'
2014/08/19 13:55:01| Startup: Initialized Authentication Scheme 'digest'
2014/08/19 13:55:01| Startup: Initialized Authentication Scheme 'negotiate'
2014/08/19 13:55:01| Startup: Initialized Authentication Scheme 'ntlm'
2014/08/19 13:55:01| Startup: Initialized Authentication.
2014/08/19 13:55:01| Processing Configuration File: /etc/squid/squid.conf (depth 0)
2014/08/19 13:55:01| Starting Authentication on port [::]:3128
2014/08/19 13:55:01| Disabling Authentication on port [::]:3128 (interception enabled)
2014/08/19 13:55:01| Starting Authentication on port [::]:3129
2014/08/19 13:55:01| Disabling Authentication on port [::]:3129 (interception enabled)
2014/08/19 13:55:01| Initializing https proxy context
2014/08/19 13:55:01| Initializing http_port [::]:3128
2014/08/19 13:55:01| Initializing https_port [::]:3129 SSL context
2014/08/19 13:55:01| Using certificate in /etc/squid/ssl_cert/myCA.pem
2014/08/19 13:55:01| Logfile: opening log daemon:/var/log/squid/access.log
2014/08/19 13:55:01| Logfile Daemon: opening log /var/log/squid/access.log
2014/08/19 13:55:01| Squid plugin modules loaded: 0
2014/08/19 13:55:01| Adaptation support is off.
2014/08/19 13:55:01| Store logging disabled
2014/08/19 13:55:01| DNS Socket created at [::], FD 12
2014/08/19 13:55:01| DNS Socket created at 0.0.0.0, FD 13
2014/08/19 13:55:01| Adding nameserver 10.11.12.11 from /etc/resolv.conf
2014/08/19 13:55:01| Adding nameserver 10.11.12.12 from /etc/resolv.conf
2014/08/19 13:55:01| helperOpenServers: Starting 5/5 'ssl_crtd' processes
2014/08/19 13:55:01| HTCP Disabled.
2014/08/19 13:55:01| Finished loading MIME types and icons.
2014/08/19 13:55:01| Accepting NAT intercepted SSL bumped HTTP Socket connections at local=[::]:3128 remote=[::] FD 46 flags=41
2014/08/19 13:55:01| Accepting HTTP Socket connections at local=[::]:3130 remote=[::] FD 47 flags=9
2014/08/19 13:55:01| Accepting NAT intercepted SSL bumped HTTPS Socket connections at local=[::]:3129 remote=[::] FD 48 flags=41
ecco uno stralcio di access log
1408618625.471 29808 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/ -
1408618655.470 29924 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/1 -
1408618687.470 29366 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/-
1408618719.470 29367 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/8 -
1408618757.471 29391 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/1-
1408618787.471 29927 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/1 -
1408618819.471 29355 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/ -
1408618851.471 29357 10.11.13.169 TCP_MISS_ABORTED/000 0 POST http://tools.google.com/service/update2? - HIER_DIRECT/ -
1408618851.594 86 10.11.13.169 TCP_MISS/200 1417 POST http://tools.google.com/service/update2? - HIER_DIRECT/ text/xml
1408620094.278 3600000 10.11.13.169 TCP_MISS_ABORTED/000 0 GET http://www.google.it/? - HIER_DIRECT/ -
e sul client a volte mi avvisa che il server non è sicuro, se io dico che è affidabile carica all'infinito, mentra a volte mi da questo errore
errore di lettura
il sistema ha ristposto: error(104) connection reset by peer
con una pagina di squid
cosa può essere? dove sbaglio?
Grazie mille a tutti per l'aiuto
-
indipendentemente dai problemi tecnici, hai ben chiaro cosa implichi intercettare il traffico https?
in che contesto deve girare questa cosa?
-
ovviamente so cosa vuol dire, l'ambito è un iptetico proxy transparent per una rete wifi guest aziendale, quindi niente spionaggio o furti :)
-
"rete wifi guest", quindi l'ipotetico visitatore in azienda (il rappresentante, il tecnico ecc) si aggancia alla rete e tu gli "sniffi"/logghi tutto il traffico https..
notevole :-)
quindi se l'ipotetico navigatore aprisse il suo account gmail, tu loggheresti tutto.. mhhh... interessante :-)
-
allora l'ipotetico visitatore che si connette attraverso la rete guest (rete a cui si può connettere dopo che gli sono state date delle credenziali temporanee da inserire tramite un captive portal) non ha una navigazione aperta a tutto, ma potrà navigare solo in certi siti internet (ad esempio non può andare su facebook, che guarda caso usa https) filtrata con squidguard. Per fare ciò con https bisogna come ben sai mettersi in mezzo al tunnel ssl quindi attuare effettivamente un man-in-the-midle per poter "controllare/vedere" che sito si stà visitanto e in caso bloccarlo, naturalmente il tutto il traffico è loggato come richiesto dalla legge, ed evitare problemi di ogni genere. Se ipoteticamente un visitatore accede al suo conto bancario online il sistema controllerà che il sito non risulti in blacklist e poi loggerà il tutto ovvio, ma se il visitatore va su un conto corrente con le credenziali "rubate" e dopo un pò viene la polizia postale a chiedere i log di navigazione in questo modo è possibile fornirli (e non è raro che accada).
(comunque l'ipotetico visitatore dovrebbe installare il certificato, quindi è consapevole di ciò che accada oltre a firmare per accettar le condizioni del servizio offerto)
Spero di essere stato chiaro e come già spiegato non ho intenzione di intercettare nulla.
ora idee per il problema tecnico?
ah se non si installa il certificato esce un banner rosso di allert https grande come una casa ;)
-
tra le altre cose è tutto scritto anche nei link che ho messo all'inizio del post ;)
-
qualche anima pia che possa aiutarmi??? io non so proprio cosa fare, non trovo info da nessuna parte...
-
Ciao,
ho messo su uno squid proprio in questi giorni.
Non devi assolutamente intercettare il traffico o usare dei certificati x509 per gestire traffico https.
In access.log trovi sia la navigazione http e https.
E' sufficiente modificare la direttiva
http_port 3128 intercept
in
http_port 3128 transparent
eliminando : https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl_cert/myCA.pem
Userai la porta 3128 per http e https e vedrai che funziona tutto.
Questo il mio "semplice" squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src "sostituisci con tua rete locale"
acl consentiti url_regex "/etc/squid/acl.txt"
acl SSL_ports port 443
acl ssl method connect
acl CONNECT method CONNECT
http_access allow consentiti
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
P.S.
Tienici aggiornati
Ciao
-
ciao e grazie per la tua risposta, però la direttiva transpatent è deprecata ormai da tempo, come si legge sul sito di squid, e di cui riporno la nota:
Note: The "transparent" option has been deprecated by "intercept" option since 2010.
inoltre usare le opzioni http_port e https_port serve a poter gestire in autonomia http e https, nel mio caso anche assegnargli porte diverse (rispettivamente 3128 e 3129) in modo da dargli opzioni diverse in base alla natura del traffico, nello specifico:
http_port 3128 intercept --> equivalente alla tua direttiva, ma io a questa porta invio solo traffico http e so che funziona a dovere
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=16MB cert=/etc/squid/ssl_cert/myCA.pem --> qui invio tutto il traffico https e con la direttiva ssl-bump che fa ciò:
" ssl-bump For each intercepted connection allowed by ssl_bump
ACLs, establish a secure connection with the client and with
the server, decrypt HTTPS messages as they pass through
Squid, and treat them as unencrypted HTTP messages,
becoming the man-in-the-middle."
e utilizza il certificato e la key passati per paramentro (è lo stesso certificato se non specificato diversamente) ovviamente per gli scopi già citati ;) .
nel tuo caso il traffico https passa senza problemi, ma se buoi bloccare facebook ad esempio non puoi.
se ho scritto stupidagini o imprecisioni correggetemi :) farete la mia felicità grazie
p.s. problema non risolto, sono nella situazione iniziale, grazie a tutti per l'aiuto ;)
-
Ciao,
quella che ti ho postato è una configurazione di un ambiente di produzione e malgrado il parametro deprecato direi che funziona bene.
Per quanto riguarda le ACL solitamente creo un file : /etc/squid/acl.txt in cui indico solo i siti che voglio sia raggiungibili.
In questo modo ogni entry dell'acl deve essere richiesta e motivata.
Probabilmente non è la configurazione che interessa al tuo scopo ma gli utenti applicativi di quel servizio navigano http e https solo delle acl fornite di cui trascrivo i log senza intercettare il traffico che potrebbe crearmi problemi di violazione della privacy.
Ciao
-
l'OP vuole intercettare, decrittare e loggare tutto il traffico https verso i siti che rende disponibili... un man-in-the-middle in piena regola, su rete wifi guest.. ad accesso controllato tramite captive-portal e credenziali, vero..
certo che se ammettete il sito della ASL locale o di una qualsiasi banca e sniffate il MIO (generally speaking) traffico.. io (generally speaking) mi inc@##o parecchio..
e no, la storia del "tanto devi accettare il certificato e quindi sai cosa sta succedendo" non regge..
IMVHO, sbagli candeggio..
-
Diciamo che la faccenda della privacy in Italia è molto seria, se pensi che c'è qualcuno che per violazione della privacy si stà facendo 13 anni di carcere ed altri che hanno commesso vere barbarie/atrocità hanno ricevuto una pena inferiore.
Fatti furbo e verifica bene anche con i legali dell'azienda quello che stai implementando.
Vedrai che ti faranno desistere.
Ciao
-
Grazie a tutti per l'aiuto, comunque dal lato legale non ho problemi, visto che l'azienda ha già un proxy server transtapent proprietario (un fortinet e un vecchio cisco) che filtra già http/https ma vogliono passare ad una soluzione open e meno costosa in termini di hw. continuo a fare prove, ma credo che il problema possa essere la generazione dei certificati, ringrazio ancora tutti coloro che mi stanno aiutando senza fare grosse polemiche ;D
-
Se vuoi una soluzione open esclusivamente per quello, prova a guardare pfsense.
-
Grazie potrebbe essere una valida alternativa... Devo solo verificare se è possibile effettuare un cluster di pfsense, oltre che fare un prova trasparente...
Se nel frattempo io continuo a provare con squid su centos :-[ :P
-
Ciao scusami ma ho proprio affrontato il tuo problema in questi giorni.
Se usi solo la direttiva http il traffico gestito è solo escusivamente http esempio
Io ho creato un proxy trasparent e facebook ad esempio non riuscivo ad bloccarlo perchè è in https, se passavo da trasparent ad impostare il proxy nel browser mi compariva la schermata di errore il browser non è riuscito a recuperare la pagina e non la schermata di squid che il sito è in blacklist.
Soluzione
Squid3 e https con ssl e certificato
L'unica cosa che devi fare è installare il certificato su tutti i client per quanto riguarda internet explorer e google chrome ci sono riuscito con una policy, mentre per firefox momentaneamente ho dovuto installarlo a mano, ma sto cercando una soluzione.
Cosi loggo e blocco correttamente http e https in modalita proxy trasparent.