Fliegenfaenger Hi
www.perl-online.com

Havp between Squid

Neulich hatte ich ja schon einen fruchtlosen Versuch unternommen, meinen Squid mit dem ClamAV zu leieren. Die dort vorgestellte Variante nervt leider den Anwender mit weiterer Klickerei. Auch die ganzen automatischen Updates funktionierten ja mit der ICAP-Lösung nicht mehr. - Firefox und Co. haben scheinbar keine Mouse zum klicken ;-)
Also habe ich jetzt mal noch einen zweiten Durchgang versucht, dieses mal mit HAVP.
Hier fand ich auch eine ganz gute Anleitung ‘Havp between Squid‘, die auch auf Anhieb funktioniert hat und auch super performant läuft:

~# apt-get install havp
….
~# lsof -i :8080
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
havp 24098 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24107 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24109 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24111 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24117 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24119 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24121 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24123 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
havp 24126 havp 4u IPv4 990545171 TCP *:webcache (LISTEN)
~# vi /etc/havp/havp.config

...
# You must remove this line for HAVP to start.
# This makes sure you have (hopefully) reviewed the configuration. :)
# Hint: You must enable some scanner! Find them in the end..
# REMOVETHISLINE deleteme
# PARENTPROXY localhost
# PARENTPORT 3128
PARENTPROXY localhost
PARENTPORT 3128


# Default:
# X_FORWARDED_FOR false
X_FORWARDED_FOR true
….
# ENABLESOPHIE false
# Default:
# SOPHIESOCKET /var/run/sophie


vi /etc/squid3/squid.conf

...
# Sandwich config for HAVP
icp_port 0
# scanning through HAVP
cache_peer localhost parent 8080 0 no-query no-digest no-netdb-exchange default

….
#Default:
# cache_mem 8 MB
# Memory usage values
cache_mem 64 MB

….
#Default:
# maximum_object_size 4096 KB
maximum_object_size 65536 KB
….
#Default:
# memory_pools on
memory_pools off
….
#Default:
# cache_dir ufs /var/spool/squid 100 16 256
# 4 GB store on disk
cache_dir aufs /var/spool/squid 4096 16 256

….
#Default:
#cache_store_log /var/log/squid/proxy01.store.log
# no store log
cache_store_log none

….
#Default:
# ftp_passive on
ftp_passive off
….
#Default:
# forwarded_for on
# no X-Forwarded-For header
forwarded_for off

….
#Default:
# buffered_logs off
# Speed up logging
buffered_logs on

….
#Default:
# strip_query_terms on
# no logfile entry stripping
strip_query_terms off

….
#Default:
# pipeline_prefetch off
# Speed, speed, speed
pipeline_prefetch on

#Default:
# half_closed_clients on
half_closed_clients off
#Default:
# shutdown_lifetime 30 seconds
shutdown_lifetime 1 second
….
#We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?
….
#Suggested default:
##refresh_pattern ^ftp: 1440 20% 10080
##refresh_pattern ^gopher: 1440 0% 1440
##refresh_pattern . 0 20% 4320
# And now: define caching parameters
refresh_pattern ^ftp: 20160 50% 43200
refresh_pattern -i \.(jpe?g|gif|png|ico)$ 43200 100% 43200
refresh_pattern -i \.(zip|rar|arj|cab|exe)$ 43200 100% 43200
refresh_pattern windowsupdate.com/.*\.(cab|exe)$ 43200 100% 43200
refresh_pattern download.microsoft.com/.*\.(cab|exe)$ 43200 100% 43200
refresh_pattern -i \.(cgi|asp|php|fcgi)$ 0 20% 60
refresh_pattern . 20160 50% 43200

….
acl HTTP proto HTTP
acl localhost src 127.0.0.0/8
# Do not scan the following domains
acl noscan urlpath_regex -i \.(jpe?g|gif|png|ico)$
# XXX acl noscan dstdomain proxy.domain.com
# We do not want traffic to these sites:
# XXX acl evil dstdomain www.veryevildomain.dom

….
# TAG: via on|off
# If set (default), Squid will include a Via header in requests and
# replies as required by RFC2616.
#
#Default:
# via on
## header_access Via deny all
# ‘header_access Via ..’ gibt es nicht mehr!!
via off
# Ergibt aber eine Warnung: WARNING: HTTP requires the use of Via
….
#We recommend you to use the following two lines.
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# Do not cache requests from localhost, SSL-encrypted or dynamic content.
acl localhost src 127.0.0.1/32
no_cache deny localhost
no_cache deny CONNECT
no_cache allow all

….
#Default:
# none
# Do not forward parent requests from localhost (loop-prevention) or
# to “noscan”-domains or SSL-encrypted requests to parent.
always_direct allow localhost
always_direct allow CONNECT
always_direct allow noscan
always_direct deny HTTP

….
#Default:
# none
never_direct deny localhost
never_direct deny CONNECT
never_direct deny noscan
never_direct allow HTTP

….

~# /etc/init.d/havp restart
Restarting havp: Starting HAVP Version: 0.86
havp.
~#
/etc/init.d/squid3 restart
Restarting Squid HTTP Proxy 3.0: squid3 Waiting……done.
2008/01/09 18:25:57| WARNING: HTTP requires the use of Via
.
~#

Der Test-Download eines Eicar-Test Virus brachte auch gleich eine saubere Fehlermeldung:

HAVP sagt 'Hallo!'


Anmerkung:
Den neuen Parameter ‘via off‘ zu nutzen, scheint aber auch keine schlechte Idee zu sein. Ohne ihn klappt zwar (scheinbar) auch alles, aber des /var/log/messages ist voller Zeilen wie dieser:
...
Jan 09 18:31:18 proxy squid[17279]: WARNING: Forwarding loop detected for: GET /squid-users@squid-cache.org/msg

Tags: , , , ,

Hinterlasse Deinen Kommentar (16) zu “Havp between Squid”

  1. robert Schrieb

    Hello! Found your blog on yahoo - thanks for the article but i still don\’t get it, Robert

  2. Uwe Schrieb

    Hallo Herr R.,
    Ich habe mal ihre eMail als Kommentar an den Artikel an gehangen, vielleicht habe andere ja auch das Problem


    > Ihren Artikel über die Lösung mit “havp between squid”
    > gelesen. Hierzu jedoch ein paar Fragen:
    >
    > 1. Welche Reihenfolge der Installation macht
    > Sinn? (Squid, havp, clamav)
    Die Installation kann man ja bequem in einem Rutsch machen. Das Starten sollte aber schon so erfolgen, dass der ClamAV vor dem HAVP und der dann wiederum zeitnah vor dem Squid da ist.

    > Wobei ich denke, dass havp den clamav mitbringt.
    Mitbringt ist falsch, aber es werden wohl Abhängigkeiten existieren, so dass der ClamAV automatisch mit installiert werden könnte.

    > 2. Sie haben in Ihrer Anleitung geschrieben
    > “apt-get install havp“. Jedoch gibt es in
    > meiner Repository nicht. Haben Sie die sources.list
    > angepasst, wenn ja, mit welchen Erweiterungen.
    Bei meinem Lenny wird es vernünftig aus dem ‘main’-Repository geholt:
    http://debian.uni-essen.de lenny/main havp 0.87-1.1 [163kB]
    Bei den Etch-Rechnern ist es noch aktuell, aber in der ‘/etc/apt/sources.list‘ steht folgendes:

    deb http://debian.uni-essen.de/debian etch main
    deb-src http://debian.uni-essen.de/debian etch main
    deb http://ftp2.de.debian.org/debian etch contrib
    deb http://ftp2.de.debian.org/debian etch main
    deb http://ftp2.de.debian.org/debian etch non-free

    deb http://security.debian.org/ etch/updates main

    > 3. Habe ich Ihre Konfiguration richtig verstanden, dass
    > der Squid die User-requests mit dem Port 8080 entgegen
    > nimmt und dem HAVP über Port 3128 weitergibt?
    Nein, das ist aber vielleicht nur falsch formuliert.
    Der Squid lauscht (in meiner Konfiguration) am Port 3128. In den Clients muss also bei den Proxyeinstellungen etwas von Port 3128 stehen. Am Port 8080 lauscht der HAVP:

    # lsof -n -i -P | grep LISTEN

    havp 1.. havp 4u IPv4 111… TCP *:8080 (LISTEN)

    squid3 7.. proxy 15u IPv4 106… TCP *:3128 (LISTEN)

    Die Ports sind aber (fast) beliebig verwendbar. In der Firma haben wir auch einen Squid der immer schon sowohl an Port 3128 als auch an Port 8080 lauschte, dort haben wir dann den HAVP an einen anderen Port (z.B 8180) gebunden.

    > Über eine Antwort wäre ich sehr dankbar, da ich
    > zwingend für unser Unternehmen einen Squid-Proxy
    > aufsetzten möchte/muss welche den Internet-traffic
    > auf Viren überprüft.
    Gern doch.

  3. tobias Schrieb

    hi

    how do you enable the virenscanner in the havp.config?
    i want to enable calmd, but it doesnt work

  4. Uwe Schrieb

    ich habe in der Datei ‘/etc/havp/havp.config‘ die libclamav aktiviert.

    ….
    #####
    ##### ClamAV Library Scanner (libclamav)
    #####

    ENABLECLAMLIB true
    ….

    Dadurch ist die lib dann im Speicher und sollte schneller sein, als das ansprechen eines Socket. Wenn Du den clamd aber unbedingt nutzen möchtest, müssen auf jedenfall die Leserechte auf den clamd-Socket passen (siehe Parameter ‘LocalSocket’ in der Datei ‘/etc/clamav/clamd.conf‘) und natürlich muss der havp auch wissen, wo der Socket liegt (’/etc/havp/havp.config‘):

    ….
    CLAMDSOCKET /var/run/clamav/clamd.ctl
    ….

  5. Uwe Schrieb

    Nur am Rande und als Nachtrag: Wir nutzen im HAVP zusätzlich auch noch den Sophos-Scanner.
    Dazu erst den Unix-Sophos wie gehabt installieren und dann den Sophie-Daemon hinterher. (siehe http://www.clanfield.info/sophie/ )

    apt-get install build-essential
    tar xjpf sophie-3.0xxx.tar.bz2
    cd sophie-3.0xxx/
    ./configure –prefix=/usr/local
    make
    cd /usr/local/lib/
    ln -s libsavi.so.3 libsavi.so
    vi /etc/sophie.cfg

    ….
    # Configuration file with SAVI options
    #
    # Change requires: RELOAD
    saviconfig: /etc/sophie.savi
    ….
    # Location of socket file
    #
    # Change requires: RESTART
    socketfile: /var/run/sophie
    ….

    Die Dateien die das make in ‘/usr/local/etc/‘ abgelegt hat, müssen natürlich verschoben werden. Alternativ kann man sicher auch mit dem configure-Schalter ‘–sysconfdir=DIR‘ spielen. Bei uns fehlte nach dem make noch der Startscript ‘/etc/init.d/sophie‘. Der liegt unter ‘./sophie-3.0xxx/contrib/sophie.init‘, von dort kann man ihn dann selber wegkopieren und dann auch die Start-Links erzeugen:
    (’update-rc.d sophie start 30 2 3 4 5 . stop 70 0 1 6 .‘).

    Danach sollte sophie starten.:
    /etc/init.d/sophie start

    Dann sophie in der Datei ‘/etc/havp/havp.config‘ aktivieren:

    ….
    #####
    ##### Sophos Scanner (Sophie)
    #####

    ENABLESOPHIE true

    # Path to sophie socket
    #
    # Default:
    # SOPHIESOCKET /var/run/sophie
    ….

  6. tobias Schrieb

    hi

    danke für deine Antwort. Ich möchte jetzt doch auch den clamav nutzen. Standardmäßig ist er ja in der havp.config enabled, aber bei mir kommt keine fehlermeldung wenn ich die Viren von Eicar aufrufe.
    Muss ich den Clamav über init.d noch starten? oder wo könnte hier der Fehler liegen?

  7. Uwe Schrieb

    Hi Tobias,
    wenn Du ‘clamd‘ nutzen möchtest, sollte er laufen. (’/etc/init.d/clamav-daemon start‘)
    Bei der Konfiguration die ich nutze, braucht der Daemon nicht gestartet sein. Da wird ja die Lib himself geladen.

    Der ‘freshclam‘ sollte natürlich immer laufen (’/etc/init.d/clamav-freshclam start‘)!
    Gruß Uwe

  8. tobias Schrieb

    hi Uwe,

    ich verzweifel bald.
    Ich habe Squid3 installiert. läuft auch super
    dann hab ich havp installiert und clamav. (beides über apt-get install …) Ich nutze Ubuntu.
    Jetzt hab ich die squid.config angepasst und den cache_peer gesetzt wie du oben schreibst.
    dann hab ich in der havp.config
    PARENTPROXY localhost
    PARENTPORT 3128

    der libclamav ist bei mir schon enabled:
    ENABLECLAMLIB true

    hab noch das gesetzt:
    CLAMDBDIR /var/lib/clamav

    ich hab squid/havp über init.d restartet. Dabei kommt keine Fehlermeldung.
    Aber wenn ich mit dem Firefox (in dem ich den port 3128, testweise auch den vom havp 8080 eingetragen habe) die Viren von EiCAR aufmache, meldet sich der HAVP nicht.

    Kurioserweise hat es gestern nacht funktioniert. Habe danach Dansguardian noch installiert und damit rumgespielt. Was aber keinen Erfolg brachte. Heute hab ich dansguardian deinstalliert und auch HAVP und CLamav nochmal neu installiert, aber es klappt einfach nicht mehr :(

  9. Uwe Schrieb

    Ist denn bei Ubuntu der HAVP geben die lib des Clamav verlinkt? In der debian-Stable ist das standardmäßig wohl nicht der Fall. (ich nutze testing)

    Gib doch mal ‘sudo ldd /usr/sbin/havp‘ ein. Kommt dann eine Zeile mit ‘ libclamav.so.3 => /usr/lib/libclamav.so.3‘ oder ähnlichem zum Vorschein. Wenn nicht musst Du den HAVP wohl doch gegen den Socket vom clamd binden.

  10. tobias Schrieb

    wenn ich das oben eingeben, dann kommen einige Zeilen Ausgabe:
    Ein Auszug davon:

    libclamav.so.2 -> /usr/lib/libclamav.so.2

    das komische ist, dass es gestern ja funktioniert hat.
    Auch wenn ich im firefox localhost 8080, also direkt den HAVP benutze funktioniert es nicht.

  11. tobias Schrieb

    hallo,

    ich habe das ganze nochmal auf einer anderen Maschine getestet. Ist aber die gleiche VMware

    Dort funktioniert es eiwandfrei. sehr seltsam. ich dachte erst dass der squid vll die daten gecached hat und daher der clamav nicht mehr scannen musste, aber ich hab es gerade auch ohne Squid nur mit dem havp versucht, es passiert einfach nix. oder merkt er sich files die er schon erlaubt hat?

    Noch eine Frage:
    Auf der Eicar seite sind auch ssl verschlüsselte Viren, die werden nicht erkannt.
    Habe in der Havp.config eingestellt dass encrypted archives auch geblockt werden sollen, dies hilft aber nicht.
    Was kann man dagegen machen?

  12. tobias Schrieb

    hi,

    oh man jetzt hab ich das Problem gefunden. der firefox hatte die dateien gecached :)

  13. Uwe Schrieb

    Komme gerade vom Fitness.
    Schön, wenn es jetzt bei Dir klappt. Dieses komische Caching von Firefox nervt mich regelmäßig. Gerade wenn man am Webdesign von Webseiten bastelt, weis man immer nicht, ob man jetzt einen Fehler gemacht hat oder nur mal wieder Firefox keinen Bock hat, die Seite neu zuholen.

  14. tobias Schrieb

    hallo,

    ja da hast du recht. Hast du eine Antwort wegen den verschlüsselten Viren?

    offTopic:
    Wie kann man aus Squid einen SSL Proxy machen. Also dass SSL verschlüsselte Seiten nicht durchgetunnelt werden?

    Kann Squid/Dansguardian/Privoxy aktive Inhalte wie Javascript/ActiveX/Java applets filtern? Welches wäre da am besten geeignet?

    grüsse

  15. Uwe Schrieb

    Zum 1. Punkt.
    Die Viren die mittels https getunnelt werden sind wirklich ein zunehmendes Problem. Bisher haben wir dafür noch nichts praktikables gefunden. Gehen muss es aber.
    Zumal der Begriff tunneln hier eher falsch ist, denn die https-Pakete bräuchten ja nur vorläufig zurückgehalten, entschlüsselt und geprüft werden. Die originalen noch verschlüsselten Pakete könnten dann weitergereicht werden, wenn die Prüfung nicht fehlschlägt.

    Zum 2. Punkt.
    Die Zeile ‘always_direct allow CONNECT‘ in der squid.conf sorgt dafür, dass unter anderem ‘normale’ https-Verbindungen nicht durch den HAVP geschleust werden.

    Oops ganz übersehen - zum 3. Punkt.: Javascript/ActiveX
    Ein paar Programme gibt es da wohl - Stichwort privoxy oder squid-filter.
    Aber tue Dir das besser nicht an. Besser ist dann doch das gute Firefox-Plugin NoScript zu nutzen. Dann delegierst Du die Arbeit zu den Usern, jeder kann sich seine Konfig selber einrichten und verhauen - und das auch noch auf komfortable Art.
    Du kannst es in einer zentralen Konfiguration zum einen doch niemanden recht machen und hast trotzdem sehr sehr viel Arbeit.
    Ach ja, virulenten Code erkennt HAVP auch! Ich kann allerdings nicht sagen wie sicher.

  16. tobias Schrieb

    diese encrypted Viren wären mir total wichtig zu detecten..
    naja kann man erstmal nichts machen

    zu dem always_direct allow CONNECT: ich meinte ob eine Möglichkeit besteht, dass der Squid oder havp die SSL Verbindung auftrennt um dann den Content im Klartext vorliegen hat und diesen zu scannen und zu filtern.

    ps: wegen den aktiven Inhalten hast du keinen Tipp?
    Habe das hier gefunden: http://sites.inka.de/bigred/devel/squid-filter.html
    aber so ganz überzeugend ist das auch nicht.

Eigenen Kommentar abgeben