HAVP + SQUID jako parentní proxy

Podíváme se na to, jak nakonfigurovat proxy server Squid s proxy serverem HAVP. Smile Návod je psaný pro Linux Slackware, ale dá se samozřejmě aplikovat i na jiné distribuce.

Možná vaše první otázka bude znít, proč kombinovat Squid s jiným proxy serverem ? To je z důvodu, že havp umí “content scanning”, takže nám vlastně bude pro Squid sloužit jako “redirector.”:http://wiki.squid-cache.org/SquidFaq/SquidRedirectors Tím havp použijeme na:

  • skenování html obsahu proti virům
  • blacklistování a whitelistování stránek/slov/souborů

Nejdříve zkompilujeme squid ze zdrojových kódů. Stačí klasická magická trojkombinace. Nejsou potřeba žádné speciální kompilační nastavení. Po úspěšné instalaci vytvoříme správně příslušný config. Mohl by vypadat nějak takto:

squid.conf:
# port
http_port 3128
icp_port 0

# skenovani pres HAVP
cache_peer localhost parent 8080 0 no-query no-digest no-netdb-exchange default

# nastaveni vyuziti pameti
cache_mem 64 MB
maximum_object_size 65536 KB
memory_pools off

# nastaveni cache (vase cesta v systemu se muze lisit), dulezite je po nainstalovani
# squida, vytvorit strukturu cache pomoci: squid -z
cache_dir ufs /var/cache/proxy/cache 1024 16 256

# logy
access_log /var/cache/proxy/logs/access.log squid
cache_store_log none

# Pasivni FTP rezim
ftp_passive on

# no X-Forwarded-For header
forwarded_for off

# Speed up logging
buffered_logs on

# no logfile entry stripping
strip_query_terms off

# Speed, speed, speed
pipeline_prefetch on
half_closed_clients off
shutdown_lifetime 1 second

# don’t query neighbour at all
hierarchy_stoplist cgi-bin ?

# 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

#
# Nastaveni ACLs
#
acl manager proto cache_object
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/32

# lokalni sit - zmente dle vaseho nastaveni
acl localnet src 192.168.1.0/24

acl SSL_ports port 443 563 10000 20000
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 563 # news
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl Safe_ports port 8010 # jabber
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
acl QUERY urlpath_regex cgi-bin \?
acl HTTP proto HTTP

# Tohle neskenuj
acl noscan urlpath_regex -i \.(jpe?g|gif|png|ico)$
acl play dstdomain .play.cz

#
# Nastaveni pristupu ACLs
#
http_access deny manager
http_access allow localhost
http_access deny !localnet
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# For sandwich configuration we have to disable the “Via” header or we
# get a “forwarding loop”.
header_access Via deny all

# Do not cache requests from localhost, SSL-encrypted or dynamic content.
no_cache deny QUERY
no_cache deny localhost
no_cache deny CONNECT
no_cache allow all

# 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 allow play
always_direct deny HTTP

never_direct deny localhost
never_direct deny CONNECT
never_direct deny noscan
never_direct allow HTTP

Nyní máme připravený squid, ale ještě než ho pustíme pomocí příkazu: squid (divné, že Wink), musíme si připravit a zkompilovat havp. Jelikož je havp linkováno proti “clamavu”:http://www.clamav.net/, musíme nejdříve clamav stáhnout a zkompilovat. Poté stáhneme, zkompilujeme , nainstalujeme “havp”:http://www.server-side.de/ a editujeme config. Instalace havp je dobře popsaná v install. Je hlavně potřeba vytvořit mandatory locking partition nebo image a přimountovat. Druhou variantu považuji za lepší a bezpečnejší. ( v případě, že by zlobily zamčené soubory a tak )

Vytvoření image místo remoutování filesystému jako -o remount mand:

dd if=/dev/zero of=/home/havp/havp.fs bs=1MB count=1000
mkfs.ext3 /home/havp/havp.fs
mount /home/havp/havp.fs /var/tmp/havp -o loop,mand

V tomto případě bude velikost speciální “partišny” pro havp 1G. NESMÍTE zapomenout, že velikost stahovaného souboru nesmí být větší než právě vyčleněná partition (image) pro HAVP. Doporučuji spíše 10G image.

Zeditujete si potřebně havp.config pro Váš systém. Pro nás jsou důležité tyto hodnoty:

havp.config:
#Specify a parent proxy (e.g. Squid) HAVP should use.
#
PARENTPROXY localhost
PARENTPORT 3128


# IP address that HAVP listens on.
# Let it be undefined to bind all addresses.
#
BIND_ADDRESS 127.0.0.1

#####
##### ClamAV Library Scanner (libclamav)
#####

ENABLECLAMLIB true

# HAVP uses libclamav hardcoded pattern directory, which usually is
# /usr/lib/clamav. You only need to set CLAMDBDIR, if you are
# using non-default DatabaseDirectory setting in clamd.conf.
#
CLAMDBDIR /cesta/kde/mate/avtivirovou/databazi/clamavu

Tak a to je vše.

Po nastartování havp, squid a clamav můžete nastavit proxy na Vašem prohlížeči a vyzkoušet nějakou zavirovanou stránku nebo třeba “Eicar test vir soubory”:http://www.eicar.org/anti_virus_test_file.htm . Pokud je vše správně nastavené (hlavně cesty v havp.config) , vyhodí Vám havp hlášku, že přístup k této stránce je zamítnut, protože je zavirovaná.

Pár poznámek:

  • 1. Protože se jedná o parentní proxy, tak havp kontroluje jen to, co jde z netu k Vám. Máte-li keš už zavirovanou, havp to neřeší
  • 2. Havp neumí a nekontroluje SSL spojení - tam je možný potencionál zavirovaní.

Jelikož je clamav velmi výkonný a schopný antivir, leckdy má i rychlejší databázi (update) než třeba NOD32?. Proto jsem nikdy neměl problém, a nikdy se ke mně nic nedostalo ani s používáním IE na “specifických” stránkách. Havp se dá použít i s jinými antiviry: NOD32?, AVG, Kaspersky atd.

2009 Linux

Stránka naposled modifikovaná March 26, 2009, at 04:41 PM