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.