Wilt u met IP packet filter van OS/2 TCP/IP v4.1+ (eCS, WSeB) de internettoegang op uw netwerk delen, dan is het installeren van een proxy server de gemakkelijkste weg. Netwerkadresvertaling op IP nivo, zoals de InJoy Firewall for OS/2 biedt, wordt onvoldoende ondersteund. Maar een proxy kan netwerkadresvertaling op applicatieniveau verzorgen. De niet met het internet verbonden TCP/IP clients op het LAN kunnen de proxy op zijn lokale RFC1918 netwerkadres benaderen. Via het toegangsbeheer (access control lists) van de proxy bepaalt u wie wat mag. U bent hierbij gebonden aan de protocollen die de proxy ondersteund.
Hieronder bespreek ik de HTTP v1.1 proxy Squid. Vrijwel alle browsers en veel FTP programma's ondersteunen een HTTP proxy, maar protocollen als Quake, nieuws, RealAudio en Video Conferenties verlopen normaliter niet via Squid. Wel kennen veel muziek en audio internetspelers de mogelijkheid om een HTTP proxy in te stellen.
Een goed alternatief voor Squid op geheugenbeperkte OS/2 systemen is de multithreaded open source firewall Oops. Deze is voor Suns Solaris geoptimaliseerd. Maar het door internetarchitekt Bill Joy ontworpen Unix systeem Solaris werkt evenals OS/2 stevig met draden. Voor ieder verbinding maakt Oops een aparte draad aan. Hierdoor werkt Oops ook supersnel onder OS/2.
Als uw brandmuur meerdere protocollen moet ondersteunen dan moet u ook eens aan Delegate van de Japanner Yutaka Sato kijken (http://www.delegate.org/delegate/) :
"DeleGate is a multi-purpose application level gateway, or a proxy server which runs on multiple platforms (Unix, Windows and OS/2). DeleGate mediates communication of various protocols (HTTP, FTP, NNTP, POP, Telnet, etc.), applying cache and conversion for mediated data, controlling access from clients and routing toward servers. It translates protocols between clients and servers, merging several servers into a single server view with aliasing and filtering. Born as a tiny proxy for Gopher in March 1994, it has steadily grown into a general purpose proxy server. Besides proxy, DeleGate can be used as a simple origin server for some protocols (HTTP, FTP and NNTP)."
Op http://www.t3.rim.or.jp/~zodiac/delegate/ stond een OS/2 versie. Een alternatief is een recente socks deamon van Hobbes Vraag er anders maar naar op comp.os.os2.networking.server want vrijwel altijd heeft OS/2 er een oplossing voor.
In het geval van een proxy-based firewall beschermt een IP packet filter (IPFW.SYS) de met het internet verbonden proxy. De HTTP proxy bedient de niet zelf met het internet verbonden bladerprogramma's op het LAN. De IP routing van de OS/2 PC naar het LAN zet u dus uit. Zolang u op de met het internet verbonden PC geen gekke dingen uithaalt (publieke servers draait) is dit voor het LAN een bijzonder veilige constructie. Tegenover het nadeel dat u op het LAN nu niet meer alles kunt doen (alleen maar surfen en FTP-en), staat het voordeel dat het LAN nu goed tegen indringers van buiten beschermd is. De kans dat iemand vanaf het internet een kritisch lek in een van uw internet clients kan benutten is nihil. Evenals de kans dat een per abuis geinstalleerde server of virus het internet bereiken kan. Dat laatste kan alleen als hij gebruik maakt van het HTTP protocol,. maar dat is onder een proxy wat anders dan zomaar gebruik maken van poort 80. Een proxy stelt eisen, terwijl een virus vooral opportunistisch is.
Stel u belt onder OS/2 in met Injoy of de IBM dialer. De OS/2 PC heeft drie netwerkadressen (interfaces). De verbinding met het internet verloopt via het Point-to-Point protocol (ppp0). De verbinding met zijn eigen TCP/IP applicaties verloopt via de loopback interface (lo). En ten slotte staat hij via zijn ethernetwerkkaart in verbinding met het LAN. Via iedere interface kunnen servers en clients verbindingen maken.
De OS/2 PC is duidelijk in de gevarenzone. Iedere server die u op de OS/2 PC draait, is via een actieve dial-up verbinding te benaderen. Vandaar dat u hier niet zomaar servers die IP verbindingen van buiten kunnen accepteren kunt draaien. Het klassieke NetBIOS is op zich veilig - het heeft immers niets met het internet te doen - maar zelfs Squid die via zijn toegangscontrolelijst (ACL) verbindingen van buiten categorisch weigert, is op zijn minst op een poortscanner te zien. Squid en zeker NetBIOS via TCP/IP bronnen moet u dus via een IP filter beschermen. Die moet de HTTP, FTP en sHTTP client verzoeken van Squid doorgang verlenen, maar de externe toegang tot alle OS/2 poorten (inclusief die van Squid) verbieden. En voor de zekerheid moet u maar niet teveel informatie op deze met het internet verbonden PC laten staan. OS/2 staat immers in de gedemilitariseerde zone.
Internet |
Modem |
OS/2 als proxy server |
LAN (via hub) |
---|---|---|---|
Default route 194.159.73.222 |
modem |
194.159.73.121 (ppp0) |
|
------------IP filter ----------- |
Geen default route opgeven ! |
||
127.0.0.1 (lo) proxy server op poort 8080 192.168.1.5 (lan0) Hier geen routing (ipgate off) |
LAN-server 192.168.1.2 Werkstation 192.168.1.3 Werkstation 192.168.1.4 etc |
Maar als op de OS/2 PC de routing uit staat (ipgate off), kan niemand uw LAN server en de werkstations via het internet protocol benaderen. Mocht u op het LAN een Trojaans Paard of email virus tegenkomen, dan kan die het internet niet bereiken. De routing staat immers uit. Er is wel een netwerkverbinding met de OS/2 PC, maar geen doorgaande route naar het internet. De OS/2 PC is met "ipgate off" voor het LAN een doodlopende weg. Bovendien zal op het LAN de toegang tot de DNS server van uw internet provider ontbreken.
Maar hoe moet u dan internetten? Wel, dat verzorgt de proxy voor u. Stel dat u vanaf een werkstation met Netscape www.xs4all.nl/~vissesh/multiboot wilt bereiken. Zonder proxy zegt Netscape "host not found". Maar als u de proxyserver 192.168.1.5 op poort 8080 in Netscape / Edit / Preferences / Advanced als proxy server opgeeft zal Netscape de gegevens bij de lokale proxy server opvragen.
De proxy staat op de OS/2 PC en kan via zijn publieke netwerkadres 194.159.73.121 iedere www-server (0.0.0.0.0:80) op het internet bereiken. Ook 194.159.245.16:80. Daar vraagt de proxy de gegevens voor u op. Vervolgens levert de proxy die gegevens via zijn lokale adres 192.168.1.1:8080 aan de Netscape client op 192.168.1.3:65029. Dat laatste behelst een netwerkadresvertaling: het publieke adres 194.159.245.16:80 wordt door de proxy naar een lokaal IP adres 192.168.1.5:8080 vertaald.
Ook een packet filter kan netwerkadresvertaling verzorgen, maar bij een proxy komt er geen routing (doorgaand verkeer) aan te te pas. En daarom is het inherent veiliger. Een cracker die via een gehackte Windows PC als 192.168.1.5:8080 de verkeerde informatie naar uw 192.168.0.0 netwerk zendt (IP spoofing) maakt op 192.168.1.3 geen schijn van kans. Die pakketten komen met "ipgate off" nooit door. Ook al is de firewall PC door een Denial of Service Attack lamgeslagen. De deur naar het LAN zit op slot. Vandaar dat u ook niemand in de gelegenheid mag stellen om op de OS/2 PC de routing (het doorgaande verkeer) aan te zetten. Draai op een met het internet verbonden OS/2 PC dus geen scripts die die veilige configuratie kunnen deactiveren...
Een HTTP proxy maakt dus de verbindingen namens uw HTTP programma's. Overigens betekent dat niet dat u dan anoniem surfen kunt. De proxy staat immers op uw netwerk. En dan is iemand@ibm.com een stuk anoniemer dan iemand@sjoerd-visser.demon.nl. Wilt u uw netwerk verbergen, dan moet u (of uw proxy) een proxy op het internet gebruiken. Helaas zijn de voor uw privacy geoptimaliseerde proxies op het internet erg langzaam en geeft de proxy van uw provider bijna altijd teveel informatie door. Zoveel dat hun gebruikers meestal niet eens merken dat ze via een proxy werken. Wel kunt u uw eigen proxy (en zeker Privoxy) vertellen, zo weinig mogelijk informatie over te dragen. Het voordeel van een lokale proxy is dan weer dat u de internettoegang centraal beheren kunt. Ook voor uw zoontje..
Ik koos voor de HTTP v1.1 proxy Squid. Op Hobbes staat een stabiele versie 4.3 voor OS/2. Deze loopt als background server (class 4) onder OS/2 Warp 3.0 en hoger met TCP/IP, HPFS of JFS en gebruikt EMX 0.9d fix1.
Squid is een professionele open source caching proxy server (http://www.squid-cache.org). In feite is Squid dè standaard op dit gebied. Squid wordt door internet providers en bedrijven gebruikt om hun netwerk te ontlasten. Door de hiermee verbonden opties lijkt Squid wat lastig te configureren, maar in de praktijk valt het wel mee. Vrijwel alle waarden in het configuratiebestand squid.conf kunt u op de default waarde (met het commentaarteken # geremd) laten. Alleen de voor de thuisgebruiker meest relevante instellingen worden hier besproken.
Squid is ontworpen voor permanente (inter)netwerkverbindingen. De opgevraagde cache-gegevens (bestanden en DNS queries) worden gevalideerd: wat verouderd is wordt vervangen. Die controle kan op een snelle ADSL of kabel verbinding tot enige vertraging lijden. Maar bij minder snelle netwerkverbindingen levert het gebruik van een cache bijna altijd snelheidswinst op. De Squid cache kan tientallen megabytes tot vele gigabytes groot zijn. Die ruimte kan over meerdere computers verdeeld worden. Hierbij draaien de Squid servers min of meer parallel ("siblings"). Een andere optie is om Squid (als "child") achter een filtering proxy als de Internet Junkbuster of Privoxy ("parent") te zetten, al dan niet op dezelfde PC. De volgorde is dan: Bladerprogramma - Squid - Junkbuster - Internet. Hiermee houdt u de cache vrij van junk.
De voor de 32 bits OS/2 TCP/IP stack geoptimaliseerde squid25s3.zip viel me qua snelheid tegen. Het herhaald ophalen van tientallen webpagina's met Firefox's "Open in tabs" leverde een snellere beeldopbouw op met Firefox zonder ingebouwde cache, dan met Firefox en Squid. En dat verbaasde me. Bovendien leek de 32 bits Squid langzamer dan de 16 bits EMX versies. Later bedacht ik me dat tijdens de overgang van 16 naar 32 bits KPN de ADSL downloadsnelheid sterk had verhoogd. Met een downloadsnelheid van 500 kbs voor grotere bestanden vervalt het relatieve voordeel van een online cache. Zolang de door de provider geboden bandbreedte onvolledig benut wordt, zijn de responstijden en bandbreedte van de internetverbindingen en webservers de flessehals. En als Squid daar ook weer eens tussenkomt, dan ontstaat ook hier vertraging. De redenen zijn als volgt:
Een online cache zal eerst nagaan of een opgevraagd bestand in de cache aanwezig is. Omdat Squid de cache index in het geheugen houdt, gaat dat relatief snel. Maar voor een bestand dat niet in de cache aanwezig is, werkt het direct ophalen van het bestand van de server altijd sneller. De tussenkomst van de cache geeft dan vertraging.
Als het bestand wel in de Squid cache aanwezig is, vergelijkt Squid de datum van het bestand in de cache met de datum die de server opgeeft. Als de webserver niet snel op Squids verzoek om informatie reageert, ontstaat er toch weer een door het netwerk of server bepaalde vertraging. Ook al staat de meest recente versie in de cache.
De winst die u dan boekt is bandbreedte. Maar de snelheidswinst is pas merkbaar als het om grotere bestanden gaat. De gemiddelde downloadsnelheid van kleine bestanden is immers lager dan die van grotere. De downloadsnelheid begint door allerlei vertragingen bij 0 kbs en bereikt pas na enkele seconden zijn maximum.
Nodeloze vertragingen ontstaan als de webinhoud dynamisch aangemaakt wordt. Dynamische webpagina's (php, asp) zijn altijd actueel en zullen dus altijd door Squid worden opgehaald. Om die reden is de snelheidswinst alleen met wat grotere afbeeldingen in het dynamische HTML te behalen. Doordat die bestanden nu niet van de server opgehaald worden, bespaart u bandbreedte en mogelijk snelheid als Squid op een snelle schijf staat.
Maar bij sites die vele kleine afbeeldingen bevatten, kost het opvragen van de bestandsinformatie door Squid veel tijd. Met een snelle internetverbinding kost dat aarzelen (moet ik het ophalen of niet) mogelijk meer tijd dan het direct opvragen van de bevraagde bestanden.
Squid is vrij machteloos bij webpagina's die onzichtbare afbeeldingen aan tellers koppelen. Omdat de tellers buiten de cache willen blijven (anders tikken ze maar eens), geven ze voor de aanmaakdatum van de afbeeldingen de actuele tijd of geen tijd op. Squid zal ze dus steeds weer moeten ophalen, maar zal ze - als hij ze als dynamisch HTML herkent - niet cachen. Dan kan de volgende keer de vergelijking van de dat achterwege blijven.
Maar toch heeft Squid wel zin: al was het alleen maar omdat je je LAN alleen via een proxy veiligheid kunt bieden. En omdat een caching proxy minder bandbreedte vraagt. Dat voordel ziet u niet als
Vanwege de caching eigenschappen leek me Squid ook voor niet-netwerkgebruikers met een dial-up verbinding interessant. De Netscape cache is niet zo stabiel en kan vertragend werken. De Squid cache - die bovendien aan het filter van Internet Junkbuster gekoppeld kan worden - heeft het voordeel dat hij niet alleen voor Mozilla of Netscape, maar ook voor Opera werkt. Squid 2.4 bleek echter nauwelijks offline te gebruiken, omdat de cache de resultaten van de DNS queries niet bewaart. In dat geval kunt u beter Java proxies als Smartcache (http://scache.sourceforge.net), Java HTTP Proxy Server (JProxy) of een WWW mirroring tool als Sslurp! overwegen (The Sslurp! Homepage). Of porteer WWWofle naar OS/2.
Om niet dubbel te cachen maakt u bij een caching proxy server als Squid liver geen gebruik meer van de caching faciliteiten van uw browser. Op het thuisnetwerk zet u zowel de geheugencache als de vaste schijf cache van Netscape / Bewerken / Voorkeuren / Geavanceerd / Cache op 0. Vergeet niet "Document in cache vergelijken met document op het netwerk" op "Nooit" te zetten. En wis de schijfcache. Maar als u zoals ik op het werk met slechts één browser en met een door velen gedeelde WAN proxy op afstand te doen hebt, dan laat u de cache van de browser gewoon aan.
Netscape
stelt u onder /Bewerken /Voorkeuren /Geavanceerd /Proxy's in op LAN
poort van de computer die de proxy draait (hier 192.168.1.5:8080). De
FOREIGN HOST van netstat -s wordt dan een lokaal IP adres (487).
487 STREAM 62434 8080 192.168.1.5 ESTABLISH 488 STREAM http..80 62435 195.206.70.73 ESTABLISH
De proxy clients op het LAN hoeven zelf niet over een met het internet verbonden namenserveerder (DNS) te beschikken. Dit regelt de proxy. Een host bestand voor de te bereiken LAN/WAN adressen voldoet. De verbinding met het internet verloopt geheel via de proxy server. Deze regelt ook de netwerkadresvertaling En als het goed is luistert hij slechts aan de LAN zijde naar HTTP verzoeken: http_port 192.168.1.5:8080. Maar standaard is dit niet het geval (veiligheidsrisico!).
195.206.70.73:80 |
ip_adres:62435 |
Proxy |
192.168.1.5:8080 |
192.168.1.5: 62434 |
webserver |
Proxy als client |
Netwerkadresvertaling |
Proxy als server |
proxy client |
De IP routing op de server staat uit. Er is voor de door Squid ondersteunde protocollen (HTTP(S), Gopher, FTP) ook geen met het internet verbonden default route voor de Squids LAN/WAN IP adres verbonden netwerkstations nodig. Squid luistert immers naar de verzoeken van uw LAN of WAN. Een default router mag wel, maar als u er op uw netwerk zonder kunt is het wel zo veilig. Want dan zullen Trojaanse paarden en wormen hun heren en slachtoffers op het internet niet vanzelfsprekend kunnen bereiken.
Voor
Opera geldt het zelfde (Bestand / Voorkeuren / Geschiedenis/opslag /
Tijdelijke schijfopslag: 0 kb met Controleer op wijzigingen: Nooit).
NB. Bij gebruik van een proxy zou ik altijd een packet filter firewall (Injoy) op de met het internet verbonden PC installeren. De proxy is anders op het internet te zien, en ook al zijn de permissies zo ingesteld dat alleen uw lokale netwerk toegang heeft tot de server, u weet nooit zeker of de server of de TCP/IP stack niet te hacken is. Zo bleek Smartcache recent via een telnet verbinding tot staan (denial of service) te brengen zijn. Omdat het probleem niet op te lossen was staakte Radim Kolar de ontwikkeling van zijn Java proxy.
Ik gebruikte aanvankelijk de emx versie van Squid versie 2.4. Deze zijn later vervangen door VACP versie 2.5 varianten.
U vindt ze op Hobbes en op twee Russische sites: RU/2: Squid 2 for OS/2 Maintenance Page en Squid2 - Evgeny Kotsuba.
Nog recentere versies vindt u op Unix Ports for OS/2 & eCS.
Installeer Squid op een vaste schijf die lange namen ondersteund (HPFS, JFS). JFS heeft mijn vookeur.
De recentste versie is squid25s5.zip. De Russen gebruiken gezipte rar bestanden. U moet eerst het zipbestand uitpakken met unzip. Daarna in een map \squid een OS/2 versie van unrar toepassen. En in de map \etc\errors ook weer een unrar toepassen voor errors.rar. Kopieer daarna \squid\etc\errors\errors.rar\Dutch naar \squid\etc\errors. Als u rar.exe in het pad hebt staan, gaat alles heel prettig met File Commander/2.
Maak nog mappen aan voor de cache (\squid\cache) en de log bestanden (\squid\logs). In het configuratiebestanden kunt u ook andere locaties opgeven.
In de map \squid\etc staan twee voorbeeld configuratiebestanden: mime.conf.default en squid.conf.default. Kopieer ze naar resp. mime.conf en squid.conf in \squid\etc. Het bestand squid\etc\mime.conf hoeft u niet te bewerken, maar squid\etc\squid.conf wel.
Gebruikt u een ander configuratiebestand, dan kunt u dat met de f optie aangeven.
start "Squid/2" Squid2.exe -f c:\squid\etc\squid-privoxy.conf
Pas vervolgens het configuratiebestand /squid/etc/squid.conf aan (niet in %etc% plaatsen). Zorg bij wijzigingen altijd voor een backup.
Vrijwel alle instellingen kunnen op de default (#) waarden blijven staan, maar enige hoofdzaken zult u zelf willen regelen.
Ik heb ervoor gekozen Squid op poort 8080 te zetten. De standaardwaarde is 3128.
#Default: # http_port 3128 http_port 192.168.1.5:8080
Ik laat de oude en standaardwaarden geremd (#) staan zodat ik kan zien wat ik gewijzigd heb. In dit geval luistert Squid alleen naar de LAN interface van mijn netwerkkaart. Ik heb er twee, waarbij de tweede kaart soms direct (via de DMZ van de router) met het internet verbonden is. Wilt u echt voor veiligheid gaan, dan zet u Squid op een niet voor proxies typische hoge poort (1010, 8080 en 3128 zijn bekend)
Hier wordt Squid expliciet verboden om contact met andere Squid caches op te nemen. Squid draait hier in zijn eentje achter een firewall, maar op andere plaatsen worden meerdere Squid proxies parallel geschakeld (naburige caches).
# TAG: icp_port # The port number where Squid sends and receives ICP queries to # and from neighbor caches. Default is 3130. To disable use # "0". May be overridden with -u on the command line.
#Default:
# icp_port 3130 icp_port 0
Deze opties zijn bedoeld om meerdere versies van Squid met elkaar samen te laten werken. Voor voorbeelden van "peer" of "sibling" caches zie Bas Heijermans bespreking van Squid in: OS/2 is Boring Part 5 . Deze proxies moet u wel kunnen vertrouwen.
Door Squid achter de Privoxy bannerweerder te zetten voorkom ik dat Squid "junk" opslaat.
# TAG: cache_peer # To specify other caches in a hierarchy, use the format: # cache_peer hostname type http_port icp_port # Gebruik Privoxy op 8000 als bron (parent cache) cache_peer 127.0.0.1 parent 8118 0 no-query
De volgorde is dan:
internetserver <=> NAT van router <=> (192.168.1.5:> 49151) privoxy (127.0.0.1:8000) <=> squid (192.168.1.5:8080)<=> browser, FTP clients op 192.168.1.?:>49151
Privoxy draait hier op dezelfde computer (127.0.0.1) als parent op poort 8000 en zonder ICP poort (0). Het ondervragen van een non caching proxy naar de beschikbaarheid van bestanden heeft immers geen zin (vandaar de no-query). Mocht Privoxy uitvallen dan zal Squid de gegevens rechtstreeks opvragen.
Over de combinatie Squid met Privoxy vindt u meer in Squid met andere proxies laten samenwerken verderop.
Een groot deel van de door de browsers opgevraagde informatie bewaart Squid op de vaste schijf. Maar niet alles: grote bestanden worden niet opgeslagen. Ze nemen op een kleien cache (de default is 100 MB) zoveel schijfruimte in beslag, dat daardoor de cache hit ratio enorm zou afnemen. Om die reden slaat Squid liever veel kleine objecten (bestanden) op. De scheidslijn (maximum_object_size) ligt standaard bij bij 4 MB.
maximum_object_size 4096 KB
Net als uw browser, houdt Squid ook bestanden vast in het werkgeheugen. Deze objecten zullen snel beschikbaar zijn.
#Default: # cache_mem 8 MB cache_mem 16 MB
Dit snelle cachegeheugen bedoeld voor honderden (soms duizenden) kleine objecten. Bestanden groter dan 8 kb worden direct naar de schijf weggeschreven.
maximum_object_size_in_memory 8 KB
Op die manier kan een 8 MB geheugencache meer dan duizend objecten bevatten. Het totale geheugengebruik van het programma Squid is - afhankelijk van grootte van de cache - al gauw 2-3 keer zoveel. Dit komt doordat ook de vaste schijf cache index in het geheugen gehouden wordt. Bedenk dat als de cache index geswapt wordt de efficientie van de cache enorm afneemt.
Voor een klein thuisnetwerk voldoen deze waarden, maar voor een 4 GB server op een bedrijfsnetwerk met duizenden Squid gebruikers is een 1 GB cachegeheugen een beter idee. In dat geval zou ik ook een flinke cache op de browser inschakelen. Maar voor de thuisgebruiker betekent dat weer dubbel werk.
Daarnaast zal Squid van de systeemcache gebruik maken. Er wordt dus regelmatig dubbel gecacht: Eenmaal door Squids kleine objecten cache en eenmaal door de HPFS of beter JFS vaste schijf cache die met blokken of clusters werkt. Thuisgebruikers raadt ik aan om de Squid cache klein (8 MB) en de JFS cache groot te maken. Maar iemand die een 2 MB HPFS cache gebruikt zou de Squid cache wel ruimer kunnen nemen. Zeker als Squid onderdeel van een dedicated firewall is. Want dan kunt u met Squid de kleine HPFS cache compenseren.
In het schema hieronder staat de werking van Squid weergeven.
Internettoegang |
Squid proxy |
Internet client |
---|---|---|
Server |
Squid cache |
Browser en browser cache |
Werking: Squid zal bij ieder verzoek aan de webserver zijn eigen bestanden met die van de de webserver vergelijken. Hiervoor is een always on internettoegang noodzakelijk. De HTTP of FTP server, zijn proxy en/of de proxy van de provider geven de door de browser opgevraagde bestandsgegevens aan Squid door. Als het opgevraagde bestand zich niet in de Squid cache bevindt en / of vernieuwd is, zal Squid het bestand bij de server opvragen. Anders haalt Squid het uit zijn cache. |
Werking: De actuele cachetabel en een 8 MB "cache_mem" van recent geraadpleegde kleine objecten bevinden zich in het werkgeheugen . De grootte van de cachetabel (tevens de DNS proxy) is afhankelijk van de het aantal gecachte bestanden (de cache grootte en de gemiddelde bestandsgrootte). Grotere objecten dan de "maximum_object_size_in_memory" van 8 KB gaan meteen naar Squids vaste schijf cache. Dat geldt ook voor niet recente kleine objecten die niet in het 8 MB cache_mem passen (memory_swap). Bestanden groter dan de "maximum_object_size" (default 4 MB) worden niet opgeslagen. Verouderde bestanden worden afhankelijk van het cache algoritme periodiek verwijderd. |
Mozilla gebruikt cache van 50 MB. Afhankelijk van uw instelling in Edit / Options / Advanced / Cache zal Mozilla de opgave van de webserver (of de proxy) met zijn eigen cache vergelijken. Compare the page in the cache with the page on the network? Everytime I view the page: bij ieder verzoek. Once per session: nadat u Mozilla opnieuw opgestart hebt (per Mozilla sessie). When the page is out of date: als de HTML van de server aangeeft dat het bestand verouderd is. Never: nooit. De aanmaakdatum en de opgeven expiratiedatum van een bestand zijn te achterhalen met Rechtsklikken in het browservenster / View Page Info. Daarnaast heeft mozilla een geheugencache. Deze zal met voldoende geheugen zelden vertragend werken. |
Bij dynamisch aangemaakt HTML zal de Squid cache dus altijd achterlopen. Ook al is de site inhoudelijk niet veranderd, de aanmaakdatum is tot aan de seconden aangepast. De Squid cache werkt hier vertragend, omdat hij alleen de afbeeldingen effectief (met een hit) cachen kan. Maar het heeft geen zin de HTML te cachen. |
Via reguliere expressies kunt u bepaalde bestanden buiten de cache houden (no_cache deny groep). Dit geldt standaard voor dynamisch HTML met een ? of cgi-bin in de URL. Maar hoe meer dynamisch HTML u uit de cache kunt houden, des te beter. Squid vraagt het dan meteen bij de server op. |
Voor de browser maakt het niet uit of de HTML dynamisch op de server is aangemaakt. De opgegeven aanmaakdatum is natuurlijk wel weer belangrijk voor de browsercache.. |
Systeemfactoren : Snel always on breedband verkeer of langzaam (modem) verkeer. Als een server traag reageert, is ook Squid vertraagd. |
Systeemfactoren: hoeveelheid werkgeheugen (voorkom swapping) en de effectiviteit van de schijf (DMA, hardwarecache), de lazy write software schijfcache en zijn bestandssysteem. |
Systeemfactoren: werkgeheugen, videokaart en processorsnelheid zijn de belangrijkste factoren. |
Conclusie: Squid heeft alleen zin op een snelle always on internetverbindingen waar extra bandbreedte en veiligheid een rol spelen. |
Conclusie: Op systemen met weinig werkgeheugen (<128 MB) of een trage internetverbinding is een caching Java proxy (ondanks de Java overhead) of WWWoffle veel effectiever. |
Conclusie: bij gebruik van Squid kunt u de cache van de browser uitzetten of minimaliseren. |
Het grootste deel van de cache zit natuurlijk op de vaste schijf. De default is 100 MB. In het onderstaande geval zit een cache van 1024 MB in de map \squid\cache. U moet deze map zelf aanmaken! De submappen maakt Squid zelf aan met de optie -z.
#Default: # cache_dir ufs cache 100 16 256 cache_dir ufs /squid/cache 800 16 256
De waarden 16 en 256 slaan op de onderverdeling van de cache in 16 mappen met ieder 256 (level 2) submappen. Het verdelen van veel kleine bestanden over een directorystructuur verhoogd de leessnelheid.
Van Henrik Nordstrom komt deze formule:
cache_dir aufs /var/spool/squid C L1 L2 L1 = ((C*1000)/256/256/13)*2 L2 = 256
Een oudere README.OS2 adviseerde de Level 2 waarde als (Mbytes/200+1) te berekenen om zeer veel lege mappen te voorkomen.
Start na het instellen van de variabele cahe_dir Squid eenmalig met optie -z ("creating swap directories"). Als Squid goed geconfigureerd is moet dat in een paar seconden gebeurd zijn.
zolder:/home/sjoerd # squid -z 2006/02/14 23:47:19| Squid is already running! Process ID 5236 zolder:/home/sjoerd # kill 5236 zolder:/home/sjoerd # squid -z 2006/02/14 23:47:36| Creating Swap Directories zolder:/home/sjoerd # /etc/rc.d/squid restart Shutting down WWW-proxy squid done Starting WWW-proxy squid done
De cache directory kunt u op een aparte partitie zetten. Dan houdt u de bestanden dichter bij elkaar en voorkomt u fragmentatie van andere mappen . Maar zorg er wel voor dat u op die partitie minimaal 10 % (beter meer) vrije ruimte overhoudt: Niet alleen is op een bijna volle HPFS of JFS schijf veel rekenkracht nodig om fragmentatie tegen te gaan, maar daarnaast kan Squid de opgeven waarde overschrijden. Pas na een herstart zal Squid een te grote cache stapsgewijs verkleinen:
222|Beginning Validation Procedure 223 2004/04/04 23:29:07|WARNING: Disk space over limit: 901408 KB > 819200 KB 224| Completed Validation Procedure 225| Validated 51623 Entries 226| store_swap_size = 1093472k 227 2004/04/04 23:29:10|storeLateRelease: released 0 objects 228 2004/04/04 23:29:38|WARNING: Disk space over limit: 1059200 KB > 819200 KB 229 2004/04/04 23:30:10|WARNING: Disk space over limit: 1032000 KB > 819200 KB 230 2004/04/04 23:30:44|WARNING: Disk space over limit: 1017788 KB > 819200 KB 231 2004/04/04 23:31:16|WARNING: Disk space over limit: 980064 KB > 819200 KB 232 2004/04/04 23:31:48|WARNING: Disk space over limit: 952932 KB > 819200 KB
In dit geval was de grootte van de cache door WWW mirroring software met fors overschreden.
Standaard maakt Squid logbestanden aan. Als u het surfgedrag op uw netwerk in de gaten wilt houden kunt u niet zonder. Er bestaan ook tools waarmee u Squids logbestanden kunt analyseren. Maar de logbstanden beslaan al gauw vele tientallen megabytes. En dan duurt die analyse lang. Als u er niets mee doet, kunt het loggen beter uitzetten. Of op zijn minst de logbestanden periodiek zippen.
Geopende logbestanden kunt u bekijken met het Unix utility tail. Een programmaobject van de volgende tail batch staat in squid\logs.
call mode co132,50 c:\emx\bin\tail --follow --lines=50 %1
Door het logbestand naar tail te verslepen kan ik de laatste 50 acties zien. Het is een mooi voorbeeld van object georiënteerd werken.
# TAG: cache_access_log # Logs the client request activity. Contains an entry for # every HTTP and ICP queries received. To disable, enter "none". #Default: # cache_access_log logs/access.log cache_access_log none
Een voorbeeld van de access.log is:
1082864567.420 6350 192.168.1.5 TCP_MISS/200 2877 GET http://www.google.nl/ - DIRECT/66.102.11.99 text/html 1082864576.470 6300 192.168.1.5 TCP_HIT/200 6550 GET http://hobbes.nmsu.edu/ - NONE/- text/html 1082864585.240 6000 192.168.1.5 TCP_MISS/302 766 GET http://www-3.ibm.com/software/os/warp/library/redindex.html - DIRECT/207.25.251.251 text/html 1082864593.370 8120 192.168.1.5 TCP_MISS/200 16885 GET http://www-306.ibm.com/software/os/warp/library/redindex.html - DIRECT/207.25.251.249 text/html 1082864599.140 5520 192.168.1.5 TCP_HIT/200 2231 GET http://www.ibm.com/data/js/v11/ibmcss.js - NONE/- application/x-javascript 1082864599.480 20 192.168.1.5 TCP_HIT/200 9890 GET http://www.ibm.com/data/css/v11/r1.css - NONE/- text/css 1082864599.560 20 192.168.1.5 TCP_HIT/200 2361 GET http://www.ibm.com/i/v11/m/en/gr760.gif - NONE/- image/gif 1082864599.610 50 192.168.1.5 TCP_HIT/200 441 GET http://www.ibm.com/i/c.gif - NONE/- image/gif 1082864599.620 60 192.168.1.5 TCP_HIT/200 1113 GET http://www.ibm.com/i/v11/m/en/mast_logo.gif - NONE/- image/gif 1082864599.620 60 192.168.1.5 TCP_HIT/200 646 GET http://www.ibm.com/i/v11/m/en/search.gif - NONE/- image/gif 1082864599.640 20 192.168.1.5 TCP_HIT/200 441 GET http://www.ibm.com/i/v11/m/en/lines.gif - NONE/- image/gif 1082864599.770 10 192.168.1.5 TCP_HIT/200 1779 GET http://www.ibm.com/common/stats/stats.js - NONE/- application/x-javascript 1082864600.070 450 192.168.1.5 TCP_REFRESH_HIT/200 472 GET http://www-306.ibm.com/software/os/warp/images/blueline.gif - DIRECT/2 07.25.251.249 image/gif 1082864610.280 10550 192.168.1.5 TCP_REFRESH_HIT/200 375 GET http://t1d.www-306.cacheibm.com/software/main/img/com/c.gif - DIRECT/81.23.243.6 image/gif 1082864610.440 10630 192.168.1.5 TCP_MISS/301 1100 GET http://stats.www.ibm.com/rc/images/uc.GIF? - DIRECT/129.42.32.235 text/html 1082864610.740 300 192.168.1.5 TCP_MISS/302 591 GET http://stats.www.ibm.com/rc/images/bounce/uc.GIF? - DIRECT/129.42.32.235 text /html
Een TCP_HIT zat in de cache.
De cache_log is het belangrijkste logbestand. Het geeft de gegevens weer die Squid naar de console zond.
# TAG: cache_log # Cache logging file. This is where general information about # your cache's behavior goes. You can increase the amount of data # logged to this file with the "debug_options" tag below. # #Default: # cache_log logs/cache.log
Het geeft u de mogelijkheid om fouten op te lossen.
50|Shutting down... 51|FD 7 Closing ICP connection 52|storeDirWriteCleanLogs: Starting... 53| Finished. Wrote 37646 entries. 54| Took 0.1 seconds (376460.0 entries/sec).
Hier start Squid weer op.
0 2004/04/24 23:19:58|Starting Squid Cache version 2.5.s5_OS2_VAC TCPIP32 Delay Pools Icmp Mar 13 2004 for os2... 1|Process ID 1357 2|With 8192 file descriptors available 3|Performing DNS Tests... 4|Successful DNS name lookup tests... 5|DNS Socket created at 0.0.0.0, port 51213, FD 4 6|Adding nameserver 62.251.0.6 from squid.conf 7|Adding nameserver 62.251.0.7 from squid.conf 8|Adding nameserver 192.168.1.1 from squid.conf 9|authBasicConfigured: WARNING: returning unconfigured 10|authBasicConfigured: authenticate undefined 11|Swap maxSize 819200 KB, estimated 63015 objects 12|Target number of buckets: 3150 13|Using 8192 Store buckets 14|Max Mem size: 16384 KB 15|Max Swap size: 819200 KB 16|Rebuilding storage in /squid/cache (DIRTY) 17|/squid/cache: blocksize 4096 18|Using Least Load store dir selection 19|Loaded Icons. 20 2004/04/24 23:19:59|Accepting HTTP connections at 192.168.1.5, port 8080, FD 8 21|Accepting ICP messages at 0.0.0.0, port 3130, FD 9. 22|WCCP Disabled. 23|icmpOpen pinger not started 24|NETDB state reloaded; 0 entries, 10 msec 25|Ready to serve requests. 26 2004/04/24 23:24:42|Done scanning /squid/cache swaplog (0 entries) 27|Finished rebuilding storage from disk. 28| 53805 Entries scanned 29| 0 Invalid entries. 30| 0 With invalid flags. 31| 37565 Objects loaded. 32| 0 Objects expired. 33| 0 Objects cancelled. 34| 30 Duplicate URLs purged. 35| 0 Swapfile clashes avoided. 36| Took 283.9 seconds ( 132.3 objects/sec). 37|Beginning Validation Procedure 38 2004/04/24 23:24:44| Completed Validation Procedure 39| Validated 37563 Entries 40| store_swap_size = 697548k 41 2004/04/24 23:24:45|storeLateRelease: released 190 objects
Een paar opmerkingen hierbij.
0 2004/04/24 23:19:58|Starting Squid Cache version 2.5.s5_OS2_VAC TCPIP32 Delay Pools Icmp Mar 13 2004 for os2...
De startdatum en versie van Squid. Voor degenen die Squid in een beperkte LIBPATH omgeving willen opstarten: De VAC TCPIP32 versie gebruikt de volgende DLL bestanden: DOSCALL1.DLL, MSG.DLL, NLS.DLL, QUECALLS.DLL, TCPIP32.DLL en SESMGR.DLL (de laatste via systeemaanroep van DOSCALL.DLL).
1|Process ID 1357
Squid wordt met Proces ID 1357 opgestart (ik was al een een paar uur met OS/2 bezig).
2|With 8192 file descriptors available 3|Performing DNS Tests... 4|Successful DNS name lookup tests...
Standaard controleert Squid de aanwezigheid van DNS aan hand van een enige bekende domeinen.
# TAG: dns_testnames # The DNS tests exit as soon as the first site is successfully looked up # # This test can be disabled with the -D command line option. # #Default: # dns_testnames netscape.com internic.net nlanr.net microsoft.com
Met de -d optie gebeurt dit niet. U zou de IP adressen ook in uw hostbestand kunnen zetten.
5|DNS Socket created at 0.0.0.0, port 51213, FD 4
Een proxy regelt de DNS voor clients zonder DNS. In dit geval gebeurt dit vanaf UDP poort 51213. De DNS socket luistert naar alle (0.0.0.0) IP adressen. U ziet hem in netstat -s(ockets) terug.
-------------------------------------------------------------------------- AF_INET Address Family: Total Number of sockets 19 SOCK TYPE FOREIGN LOCAL FOREIGN STATE PORT PORT HOST ====== ===== ========== ========== ========== ======== 1 DGRAM 0 netbios-dgm..138 0.0.0.0 UDP 2 DGRAM 0 netbios-ns..137 0.0.0.0 UDP 3 STREAM 0 netbios-ssn..139 0.0.0.0 LISTEN 4 DGRAM 0 emfis-data..140 0.0.0.0 UDP 6 STREAM 0 0 0.0.0.0 CLOSED 18 DGRAM 0 49328 0.0.0.0 UDP 19 DGRAM 0 0 0.0.0.0 UDP 654 STREAM ssh..22 49171 192.168.1.2 ESTABLISH 673 STREAM 49184 49185 127.0.0.1 ESTABLISH 674 STREAM 49185 49184 127.0.0.1 ESTABLISH 927 STREAM 0 49213 0.0.0.0 LISTEN 1018 STREAM netbios-ssn..139 49448 192.168.1.2 ESTABLISH 1031 STREAM 0 6383 0.0.0.0 LISTEN 1199 STREAM 0 8118 0.0.0.0 LISTEN 2059 DGRAM 0 syslog..514 0.0.0.0 UDP 23011 DGRAM 0 51213 0.0.0.0 UDP 23012 STREAM 0 8080 0.0.0.0 LISTEN 23013 DGRAM 0 3130 0.0.0.0 UDP 23672 DGRAM 0 0 0.0.0.0 UDP
Op dit moment staan er meerdere browservensters open. Maar toch zie ik geen verbinding met een poort 80 (WWW server), 8118 (Privoxy) of 8080 (Squid): De reden is dat deze verbindingen met het internet inmiddels al weer afgesloten zijn. HTTP is een verbindingsloos protocol. Zodra de bestanden van de server binnen zijn wordt de verbinding weer afgesloten. En dat is in mijn browsers het geval. Alleen de verbindingen met de HTTPDL.EXE server van de VisualAge Help Server (poort 49184, 49185), het NetBIOS (poorten 137-140) en een SecureShell (poort 22) blijven aldoor actief.
Op die manier (de verbinding afsluiten als de GET transactie is voltooid) kan een webserver (of proxy) zeer veel klanten bedienen. Meer klanten dan dat hij plugins voor verbindingen (sockets) heeft.
Voor Squid (en webservers) is het wel belangrijk dat half-open verbindingen tijdig worden afgesloten. Een onschuldige half open verbinding ontstaat als iemand een TCP_ACK synchronisatieverzoek doet (kwestie van in de browser met de muis klikken), maar als het te lang duurt weer overgaat naar een andere server. Squid vraagt dan namens de client de opgevraagde gegevens bij de webserver op, maar de aanvragende client is al weer (met een muisklik) naar een andere server verdwenen. Squid kan de opgevraagde gegevens dus niet aan de webbrowser kwijt (error). Hij kan ze hoogstens nog in de cache plaatsen.
Voor Squid kunt u de optie "half_closed_clients off" gebruiken.
# TAG: half_closed_clients # Some clients may shutdown the sending side of their TCP # connections, while leaving their receiving sides open. Sometimes, # Squid can not tell the difference between a half-closed and a # fully-closed TCP connection. By default, half-closed client # connections are kept open until a read(2) or write(2) on the # socket returns an error. Change this option to 'off' and Squid # will immediately close client connections when read(2) returns # "no more data to read." # #Default: # half_closed_clients on half_closed_clients off # off geeft minder overhead op een groot netwerk # maar is het handig op een thuisnetwerk?
Belangrijker is dat u kwaadaardige syn flood aanval op de TCP/IP stack voorkomt. Start de 32 bits OS/2 TCP/IP stack dus op met een startup.cmd met:
inetcfg -s synattack 1 inetcfg -s syncookie 1
En stel ook uw routers syn flood protection in. Zie SYN flooding en denial of service.
6|Adding nameserver 62.251.0.6 from squid.conf 7|Adding nameserver 62.251.0.7 from squid.conf 8|Adding nameserver 192.168.1.1 from squid.conf
Squid maakt standaard gebruik van de DNS servers van OS/2. In dit geval zijn de nameservers van mijn ISP onder de TAG dns_nameservers nog eens expliciet opgegeven.
9|authBasicConfigured: WARNING: returning unconfigured 10|authBasicConfigured: authenticate undefined
Dit is me niet duidelijk. Ik vermoed dat het te maken heeft met het ontbreken van een Ident(ificatie) server op mijn netwerk.
11|Swap maxSize 819200 KB, estimated 63015 objects
De swap maxSize wordt bepaald door de cache_dir grootte (bij mij 800 MB). Squid zal bij 90% van 800 MB aan objecten de oude door de nieuwe beginnen te vervangen. Bij een bezetting 95 % van 8000 MB maakt Squid er echt werk van. Maar dat betekent niet dat de 800 MB nooit kan worden overschreden. Het prunen van de cache loopt bij een hoog aantal verzoeken (WWW Slurps) mogelijk achter.
#Default: # cache_swap_low 90 # cache_swap_high 95
De geschatte hoeveelheid objecten (estimated objects ) door de cache_dir grootte gedeeld door de store_avg_object_size (default is 13 KB). U kunt deze waarde verhogen als u grotere objecten dan de default maximum_object_size van 4096 KB gebruikt.
12|Target number of buckets: 3150 13|Using 8192 Store buckets
14|Max Mem size: 16384 KB
Dit is de waarde van het hierboven cache_mem van de kleine geheugen residente objecten.
15|Max Swap size: 819200 KB
Dit is de waarde van de cache_dir (hier 800 MB).
16|Rebuilding storage in /squid/cache (DIRTY) 17|/squid/cache: blocksize 4096
Dit is de mijn JFS blokgroote (onder HPFS zou het 512 kb zijn).
18|Using Least Load store dir selection 19|Loaded Icons. 20 2004/04/24 23:19:59|Accepting HTTP connections at 192.168.1.5, port 8080, FD 8
Squid kan nu HTTP verzoeken ontvangen (192.168.1.5:8080 is listening in netstat -s)
21|Accepting ICP messages at 0.0.0.0, port 3130, FD 9.
Idem voor IMCP berichten van naburige Squid servers.
22|WCCP Disabled. 23|icmpOpen pinger not started 24|NETDB state reloaded; 0 entries, 10 msec 25|Ready to serve requests.
Squid luistert niet alleen naar HTTP verzoeken, maar kan ze na bijna 5 minuten (!) ook volledig bedienen.
26 2004/04/24 23:24:42|Done scanning /squid/cache swaplog (0 entries) 27|Finished rebuilding storage from disk. 28| 53805 Entries scanned 29| 0 Invalid entries. 30| 0 With invalid flags. 31| 37565 Objects loaded. 32| 0 Objects expired. 33| 0 Objects cancelled. 34| 30 Duplicate URLs purged. 35| 0 Swapfile clashes avoided. 36| Took 283.9 seconds ( 132.3 objects/sec). 37|Beginning Validation Procedure 38 2004/04/24 23:24:44| Completed Validation Procedure 39| Validated 37563 Entries 40| store_swap_size = 697548k 41 2004/04/24 23:24:45|storeLateRelease: released 190 objects
In het bovenstaande geval vraten andere processen de CPU tijd op.
Meer normale waarden zijn 8-15 seconden.
25|Ready to serve requests. 26 2004/04/25 00:42:58|Store rebuilding is 10.9% complete 27 2004/04/25 00:43:08|Done reading /squid/cache swaplog (37576 entries) 28|Finished rebuilding storage from disk. 29| 37576 Entries scanned 30| 0 Invalid entries. 31| 0 With invalid flags. 32| 37576 Objects loaded. 33| 0 Objects expired. 34| 0 Objects cancelled. 35| 0 Duplicate URLs purged. 36| 0 Swapfile clashes avoided. 37| Took 11.2 seconds (3370.0 objects/sec). 38|Beginning Validation Procedure 39 2004/04/25 00:43:11| Completed Validation Procedure 40| Validated 37576 Entries 41| store_swap_size = 696880k
# TAG: cache_swap_log
# Location for the cache "swap.log." This log file holds the
# metadata of objects saved on disk. It is used to rebuild the
# cache during startup. Normally this file resides in each
# 'cache_dir' directory, but you may specify an alternate
# pathname here. Note you must give a full filename, not just
# a directory. Since this is the index for the whole object
# list you CANNOT periodically rotate it!
#
# If %s can be used in the file name then it will be replaced with a
# a representation of the cache_dir name where each / is replaced
# with '.'. This is needed to allow adding/removing cache_dir
# lines when cache_swap_log is being used.
#
# If have more than one 'cache_dir', and %s is not used in the name
# then these swap logs will have names such as:
#
# cache_swap_log.00
# cache_swap_log.01
# cache_swap_log.02
#
# The numbered extension (which is added automatically)
# corresponds to the order of the 'cache_dir' lines in this
# configuration file. If you change the order of the 'cache_dir'
# lines in this file, then these log files will NOT correspond to
# the correct 'cache_dir' entry (unless you manually rename
# them). We recommend that you do NOT use this option. It is
# better to keep these log files in each 'cache_dir' directory.
#
#Default:
# none
# TAG: emulate_httpd_log on|off
# The Cache can emulate the log file format which many 'httpd'
# programs use. To disable/enable this emulation, set
# emulate_httpd_log to 'off' or 'on'. The default
# is to use the native log format since it includes useful
# information that Squid-specific log analyzers use.
#
#Default:
# emulate_httpd_log off
# TAG: log_ip_on_direct on|off
# Log the destination IP address in the hierarchy log tag when going
# direct. Earlier Squid versions logged the hostname here. If you
# prefer the old way set this to off.
#
#Default:
# log_ip_on_direct on
# TAG: mime_table
# Pathname to Squid's MIME table. You shouldn't need to change
# this, but the default file contains examples and formatting
# information if you do.
#
#Default:
# mime_table etc/mime.conf
# TAG: log_mime_hdrs on|off
# The Cache can record both the request and the response MIME
# headers for each HTTP transaction. The headers are encoded
# safely and will appear as two bracketed fields at the end of
# the access log (for either the native or httpd-emulated log
# formats). To enable this logging set log_mime_hdrs to 'on'.
#
#Default:
# log_mime_hdrs off
# TAG: useragent_log
# Note: This option is only available if Squid is rebuilt with the
# --enable-useragent-log option
#
# Squid will write the User-Agent field from HTTP requests
# to the filename specified here. By default useragent_log
# is disabled.
#
#Default:
# none
# TAG: referer_log
# Note: This option is only available if Squid is rebuilt with the
# --enable-referer-log option
#
# Squid will write the Referer field from HTTP requests to the
# filename specified here. By default referer_log is disabled.
#
#Default:
# none
# TAG: pid_filename
# A filename to write the process-id to. To disable, enter "none".
#
#Default:
# pid_filename logs/squid.pid
# TAG: debug_options
# Logging options are set as section,level where each source file
# is assigned a unique section. Lower levels result in less
# output, Full debugging (level 9) can result in a very large
# log file, so be careful. The magic word "ALL" sets debugging
# levels for all sections. We recommend normally running with
# "ALL,1".
#
#Default:
# debug_options ALL,1
# TAG: log_fqdn on|off
# Turn this on if you wish to log fully qualified domain names
# in the access.log. To do this Squid does a DNS lookup of all
# IP's connecting to it. This can (in some situations) increase
# latency, which makes your cache seem slower for interactive
# browsing.
#
#Default:
# log_fqdn off
# TAG: client_netmask
# A netmask for client addresses in logfiles and cachemgr output.
# Change this to protect the privacy of your cache clients.
# A netmask of 255.255.255.0 will log all IP's in that range with
# the last digit set to '0'.
#
#Default:
# client_netmask 255.255.255.255
Hierbij speelt de keus van het cache algoritme een rol, maar ook de grootte van de cache en de de grootte en het type bestanden. En verder de vraag wat u voorop stelt: efficiëntie of veiligheid. In de regel zal een thuisgebruiker grote zip-bestanden niet willen cachen, omdat ze maar eenmaal worden opgehaald. Voor een thuisgebruiker kan het verstandig zijn om bijv. FTP verzoeken (bijv. met wget) buiten Squid om te laten gaan. niet als een FTP proxy willen instellen. Maar op een bedrijfsnetwerk ligt dat natuurlijk weer anders... Daar wilt u ook weten wat iedereen (gecached of niet) binnenhaalt en zult u het onveilige passieve FTP protocol zoveel mogelijk willen weren.
Ook de grootte van de cache doet ertoe: Stel u download een ISO bestand met een volledig gevulde cache van 700 MB. Als dit ISO bestand gecacht wordt, bent u met First In, First Out principe, meteen al uw veelgebruikte cache-bestanden (objecten) kwijt. Om dat te voorkomen dient een maximum_object_size instelling. Standaard worden alleen objecten < 4 MB in de cache bewaard.
Maar als u vaak dezelfde grote bestanden download (PDF, Java en Flash programma's, patches e.d.) kunt de maximale object grootte beter verhogen. Zeker als de cache zijn maximale grootte nog niet heeft bereikt.
#Default: # maximum_object_size 4096 KB maximum_object_size 8192 KB
Als u bijvoorbeeld Squid op een groot netwerk gebruikt, waar op dezelfde dag iedereen een patch van bijv. 120 MB moet installeren, zet u op die dag de waarde tijdelijk hoger.
maximum_object_size 121 MB
Dat scheelt u dan veel bandbreedte. Maar bedenk steeds dat het eenmalig downloaden van een groot bestand, duizenden kleine objecten uit de cache zal jagen. Vandaar dat de maximum_object_size standaard vrij laag ingesteld is.
Dynanisch HTML zou niet in de cache opgeslagen moeten worden. Het wordt door de server aangemaakt en is daarna meteen weer verouderd. De tag no_cache bepaalt welke verzoeken buiten de cache om moeten gaan. Standaard worden de door de common gateway interface (cgi) scripts aangemaakte bestanden niet opgeslagen. De reguliere expresie \? probeert queries te filteren. Omdat het vraagteken een speciaal teken (meta character) is wordt het door een \ voorafgegaan.
# TAG: no_cache # A list of ACL elements which, if matched, cause the request to # not be satisfied from the cache and the reply to not be cached. # In other words, use this to force certain objects to never be cached. # # You must use the word 'DENY' to indicate the ACL names which should # NOT be cached. # #We recommend you to use the following two lines. acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY
Op een thuisnetwerk kunt ook veel binaire bestanden buiten de cache laten. Een punt wordt door een backslash voorafgegaan.
# Geen zip bestanden e.d. opslaan (ze worden toch eenmalig opgehaald) acl ZIP urlpath_regex \.zip \.exe \.wpi \.arj \.lzh \.rpm \.iso no_cache deny ZIP
Op die manier kunt u ook andere bestanden uitsluiten.
# geen MP3's opslaan. acl MP3 urlpath_regex \.mp3 no_cache deny MP3
U kunt ook overwegen om de kleinste bestanden niet in de cache op te slaan en de maximum_object_size_in_memory wat te verhogen:
#Default: # minimum_object_size 0 KB minimum_object_size 2 KB
De kleinste bestanden komen dan niet in de cache terecht, maar zullen wel in het geheugen blijven staan als ze vaker gebruikt worden.
De 32 bits VACPP versie van Squid/2 werd hierdoor duidelijk sneller en het scheelde een hoop slack op JFS. Bedenk dat HPFS een veel kleinere clustergrootte (512 bytes) heeft dan JFS (standaard 4 KB onder OS/2 en Linux) en dat u met ADSL of de kabel met kleine bestanden waarschijnlijk sneller uit bent zonder Squid. Dit omdat Squid eerst bij de server navraagt of het in zijn cache directory opgehaalde bestand veranderd is. Het bestand meteen ophalen gaat dan wel wel zo snel.
Maar als bandbreedte het knelpunt is (een groot netwerk op een enkele ASDSL aansluiting) dan heeft ook het cachen van veelvuldig gebruikte kleine bestanden zin.
Voor een langzame dial-up modem verbinding zou ik dan Privoxy met WWWoffle en/of een Java cache gebruiken. De laatsten zijn ook offline te gebruiken.
Voor het opstarten van Squid is een beschikbare DNS server noodzakelijk. Alleen een host bestand op 127.0.0.1 voldoet niet.
Hier maakt Squid meteen gebruik van de DNS van mijn ADSL provider.
#Default: # dns_defnames off # TAG: dns_nameservers # Use this if you want to specify a list of DNS name servers # (IP addresses) to use instead of those given in your # /etc/resolv.conf file. #Default: # none dns_nameservers 62.251.0.6 62.251.0.7 192.168.1.1
Ik heb een lokale caching DNS server op de router (192.168.1.1). Maar een extra cache ertussen vertraagt de zaak alleen maar. Vandaar dat de DNS servers van mijn ISP als eerste vermeld staan.
Voor lokale hostnamen maakt Squid van het hostbestand gebruik.
hosts_file c:\MPTN\ETC\hosts
Als de ingang van het hostbestand ontbreekt worden de errors ook niet meer gevonden:
5|parseEtcHosts:WARNING: \MPTN\ETC\hosts: OS/2 error(3) PATH_NOT_FOUND 6|DNS Socket created at 0.0.0.0, port 50295, FD 4 7|Adding nameserver 62.251.0.6 from squid.conf 8|Adding nameserver 62.251.0.7 from squid.conf 9|Adding nameserver 192.168.1.1 from squid.conf 10|authBasicConfigured: WARNING: returning unconfigured 11|authBasicConfigured: authenticate undefined 12|errorTryLoadText: failed to fully read: 'etc/errors/Dutch/ERR_READ_TIMEOUT': OS/2 error(3) PATH_NOT_FOUND 13|errorTryLoadText: failed to fully read: 'etc\errors/ERR_READ_TIMEOUT': OS/2 error(3) PATH_NOT_FOUND FATAL: failed to find or read error text file.
Foutmeldingen geef ik in het Nederland.
error_directory etc/errors/Dutch
Speciale aandacht verdienen de toegangscontrole lijsten (Access Control Lists ACL's). Het gaat om de: wie, wat, waar vragen. Wie, welke gebruiker mag van waar elders iets opvragen. Squid doet dat aan de hand van het aan de proxy geleverde HTTP verzoek.
Net als een IP filter kan Squid op IP adressen filteren. Maar een HTTP verzoek bevat veel dan IP adressen. Bekijk de volgende HTTP verzoeken die Mozilla en Netscape 4 aan de op localhost draaiende Xitami webserver verzonden:
127.0.0.1 - - [16/Apr/2004:23:23:54 +0100] "GET /blauw_wit.gif HTTP/1.1" 200 5405 "http://localhost/" "Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.6) Gecko/20040117" 127.0.0.1 - - [17/Apr/2004:19:18:02 +0100] "GET /multiboot/blauwebalk.gif HTTP/1.0" 200 2586 "http://localhost/" "Mozilla/4.61 [en](OS/2; U)"
U ziet een bron IP adres (127.0.0.1), de datum en de tijd van het verzoek, een GET opdracht met een bestandsaanduiding, het getal 200 en 5405 resp. 2586, de servernaam (http://localhost) en de aanduiding van de webbrowser.
Met behulp van reguliere expressies kunt u op ieder aspect hiervan filteren. Zo kunt bepaalde browsers toestaan en de rest weren. Ook kunt u bepalen dat alleen maar bepaalde bestanden opgehaald worden (bijv. wel jpg en gif, maar geen exe, pif, scr en com bestanden).
Hiervoor moet u toegangscontrole lijsten definieren waarin u aangeeft wat u wel of niet toestaat.
Het algemene formaat hiervan is : acl GROEPSNAAM acltype LIJST
De groepsnaam mag u zelf bepalen. Evenals de LIJST van groepsleden die hieronder vallen. De LIJST moet echter wel aan de voorwaarden van het acl type voldoen.
# ACCESS CONTROLS # # TAG: acl # Defining an Access List # # acl aclname acltype string1 ... # acl aclname acltype "file" ... # # when using "file", the file should contain one item per line
De definities van de door Squid herkende acltypes worden in het Squid configuratiebestand aangegeven. Let er op dat de optie -i nodig is om Squids ACL commando geen onderscheid te laten maken tussen hoofd en kleine letters. Reguliere expressies doen dat standaard wel.
# acltype is one of the types described below # # By default, regular expressions are CASE-SENSITIVE. To make # them case-insensitive, use the -i option.
Het acltype src slaat op de bron (source) van het HTTP verzoek: het IP adres van de client.
# acl aclname src ip-address/netmask ... (clients IP address) # acl aclname src addr1-addr2/netmask ... (range of addresses)
Het acltype dts slaat op de bestemming (destination) van het HTTP verzoek: het IP adres van de HTTP server.
# acl aclname dst ip-address/netmask ... (URL host's IP address)
Het acltype myip slaat op het lokale IP adres van de met squid verbonden client.
# acl aclname myip ip-address/netmask ... (local socket IP address)
Het acltype srcdomain slaat op het domein van de met squid verbonden client.
# acl aclname srcdomain .foo.com ... # reverse lookup, client IP
Het acltype dstdomain slaat op het domein van de met squid verbonden server.
# acl aclname dstdomain .foo.com ... # Destination server from URL
Het acltype srcdom_regex slaat op het domein van de met squid verbonden client (reguliere expressie).
# acl aclname srcdom_regex [-i] xxx ... # regex matching client name
Het acltype dstdom_regex slaat op het domein van de met squid verbonden server (reguliere expressie).
# acl aclname dstdom_regex [-i] xxx ... # regex matching server # # For dstdomain and dstdom_regex a reverse lookup is tried if a IP # # based URL is used. The name "none" is used if the reverse lookup # # fails.
Het acltype time slaat op het tijdstip (dag van de week, tijd op de dag) van de verbinding.
# acl aclname time [day-abbrevs] [h1:m1-h2:m2] # day-abbrevs: # S - Sunday # M - Monday # T - Tuesday # W - Wednesday # H - Thursday # F - Friday # A - Saturday # h1:m1 must be less than h2:m2
Het acltype url_regex slaat op de complete URL van de verbinding (reguliere expressie).
# acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL
Het acltype url_regex slaat op het URL pad (zonder protocol en hostnaam) in de verbinding (reguliere expressie).
# acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path
Het acltype urllogin slaat op de login gegevens van de verbinding (reguliere expressie).
# acl aclname urllogin [-i] [^a-zA-Z0-9] ... # regex matching on URL login field
Het acltype port slaat op het poortnummer van de met squid verbonden server.
# acl aclname port 80 70 21 ... # acl aclname port 0-1024 ... # ranges allowed
Het acltype myport slaat op het lokale poortnummer van squid.
# acl aclname myport 3128 ... # (local socket TCP port)
Het acltype proto slaat op het protocol (http, ftp, etc) van de verbinding.
# acl aclname proto HTTP FTP ...
Het acltype method slaat op het methode (GET, POST) van het HTTP verzoek.
# acl aclname method GET POST ...
Het acltype browser slaat op de opgegeven browser in de User-Agent header van het HTTP verzoek (reguliere expressie).
# acl aclname browser [-i] regexp ... # # pattern match on User-Agent header
Het acltype browser slaat op de verwijzende URL in de Referrer header van het HTTP verzoek (reguliere expressie).
# acl aclname referer_regex [-i] regexp ... # # pattern match on Referer header # # Referer is highly unreliable, so use with care
Het acltype ident slaat op de gebruikersnaam van de client.
# acl aclname ident username ...
Het acltype ident_regex slaat op de gebruikersnaam van de client (reguliere expressie).
# acl aclname ident_regex [-i] pattern ... # # string match on ident output. # # use REQUIRED to accept any non-null ident.
Het acltype src_as slaat op het autonome systeemnummer van de client.
# acl aclname src_as number ...
Het acltype dst_as slaat op het autonome systeemnummer van de server.
# acl aclname dst_as number ... # # Except for access control, AS numbers can be used for # # routing of requests to specific caches. Here's an # # example for routing all requests for AS#1241 and only # # those to mycache.mydomain.net: # # acl asexample dst_as 1241 # # cache_peer_access mycache.mydomain.net allow asexample # # cache_peer_access mycache_mydomain.net deny all
Het acltype proxy_auth slaat op de gebruikersnaam via externe authentificatie.
# acl aclname proxy_auth username ...
Het acltype proxy_auth_regex slaat op de gebruikersnaam via externe authentificatie (reguliere expressie).
# acl aclname proxy_auth_regex [-i] pattern ... # # list of valid usernames # # use REQUIRED to accept any valid username. # # # # NOTE: when a Proxy-Authentication header is sent but it is not # # needed during ACL checking the username is NOT logged # # in access.log. # # # # NOTE: proxy_auth requires a EXTERNAL authentication program # # to check username/password combinations (see # # auth_param directive). # # # # NOTE: special word BLOCK can be added to the proxy_auth acltype # # parameters. When present, first requests of the authenticated user # # are blocked and an ACCESS_DENIED page is returned. # # See blocking_info and blocking_ttl tags below for customizations. # # (Florian DECKERT) # # # # # WARNING: proxy_auth can't be used in a transparent proxy. It # # collides with any authentication done by origin servers. It may # # seem like it works at first, but it doesn't.
Het acltype snmp_community slaat op de toegang tot SNMP dienst.
# acl aclname snmp_community string ... # # A community string to limit access to your SNMP Agent # # Example: # # # # acl snmppublic snmp_community public
Het acltype maxconn slaat op het maximale aantal verbindingen per individuele client.
# acl aclname maxconn number # # This will be matched when the client's IP address has # # more than <number> HTTP connections established.
Het acltype max_user_ip slaat op het maximale aantal IP adressen van dezelfde gebruiker.
# acl aclname max_user_ip [-s] number # # This will be matched when the user attempts to log in from more # # than <number> different ip addresses. The authenticate_ip_ttl # # parameter controls the timeout on the ip entries. # # If -s is specified then the limit is strict, denying browsing # # from any further IP addresses until the ttl has expired. Without # # -s Squid will just annoy the user by "randomly" denying requests. # # (the counter is then reset each time the limit is reached and a # # request is denied) # # NOTE: in acceleration mode or where there is mesh of child proxies, # # clients may appear to come from multiple addresses if they are # # going through proxy farms, so a limit of 1 may cause user problems.
Het acltype req_mime_type slaat op de content-type header van het HTTP verzoek (reguliere expressie).
# acl aclname req_mime_type mime-type1 ... # # regex match agains the mime type of the request generated # # by the client. Can be used to detect file upload or some # # types HTTP tunelling requests. # # NOTE: This does NOT match the reply. You cannot use this # # to match the returned file type.
Het acltype req_mime_type slaat op de content-type header van het antwoord op het HTTP verzoek (reguliere expressie).
# acl aclname rep_mime_type mime-type1 ... # # regex match against the mime type of the reply recieved by # # squid. Can be used to detect file download or some # # types HTTP tunelling requests. # # NOTE: This has no effect in http_access rules. It only has # # effect in rules that affect the reply data stream such as # # http_reply_access.
Het acltype external class_name slaat op een extern ACL Hulp programma dat bijv. de verbinding maakt naar een LDAP server of NT domein.
# acl acl_name external class_name [arguments...] # # external ACL lookup via a helper class defined by the # # external_acl_type directive. # #Examples: #acl myexample dst_as 1241 #acl password proxy_auth REQUIRED #acl fileupload req_mime_type -i ^multipart/form-data$
#acl javascript rep_mime_type -i ^application/x-javascript$
Als u alleen bepaalde applicaties op het internet wilt toelaten, bijv. wel Mozilla maar niet de Internet Explorer, dan kunt u een lijst definieren van toegestane HTTP applicaties: de lijst GoedeBrowser. "Mozilla/5.0" wordt in een reguliere expressie geschreven als "Mozilla/5\.0". Evenzo "Mozilla/4.61" als "^Mozilla/4\.61". De punt is een bijzonder teken en wordt door een backslash voorafgegaan. U zou zelfs kunnen filteren op OS/2 (geschreven als ^OS/2). Maar alleen filteren op Mozilla is niet genoeg, omdat ook verzoeken van Internet Explorer de term Mozilla kunnen bevatten.
# Goede webbrowsers definieren acl GoedeBrowser browser ^Mozilla/5\.0 acl GoedeBrowser browser ^Firefox/0\.8 acl GoedeBrowser browser ^Mozilla/4\.61 acl GoedeBrowser browser ^OS/2
De volgende regel bepaalt wat voor deze toegangscontrole regels de foutmelding moet zijn:
# Als een foute browser een verzoek doet # meldt dan \etc\errors\Dutch\foute_browser deny_info foute_browser GoedeBrowser
De HTML van het bestand etc/errors/Dutch/foute_browser luidt hier:
U surft niet met Mozilla!
U kunt deze met een tekstverwerker aanmaken door een andere standaardtekst in etc/errors/Dutch/ aan te passen. Laat u de specifieke foutmelding weg dan volgt een algemene "permission denied" foutmelding.
Tenslotte verbiedt de laatste regel alle HTTP verzoeken die niet (! geldt als ontkennings teken) aan de voorwaarden van de groep GoedeBrowser voldoen.
# Verbied alles behalve de GoedeBrowsers! http_access deny !GoedeBrowser
De regels worden van boven naar beneden uitgevoerd (parsing). In dit geval mogen alleen leden van de groep GoedeBrowser doorgaan.
Op dezelfde manier kunt u filteren op bestandstypen die u in ieder geval niet in uw netwerk toelaten wil.
acl Verboden_Bestanden url_regex -i \.(exe|zip|scr|pif|com)$ http_access deny Verboden_Bestanden
De Verboden_Bestanden groep bevat dan de bestanden met extensies exe, zip, scr, pif en com. Met de -i parameter worden ook hoofdletters gepakt. Het pijpteken staat voor "of" en de punt wordt weer door een backslash voorafgegaan.
Bij overtreding volgt een algemene foutmelding.
FOUT FOUT: De gevraagde URL kon niet worden opgehaald Tijdens het opvragen van de URL: http://hobbes.nmsu.edu/pub/incoming/limewire3.9.3.zip kwam de volgende fout voor: * Toegang niet toegestaan. U heeft geen toegang tot de URL die u probeerde op te vragen van deze server. Neem contact op met uw service provider als u denkt dat dit niet klopt. t klopt. Generated Tue, 20 Apr 2004 20:23:45 GMT by multiboot.thuis (Squid/2.5.s5_OS2_VAC TCPIP32 Delay Pools Icmp Mar 13 2004)
Om te voorkomen dat onbevoegden via Squid het internet opkomen, zult u in ieder geval moeten aangeven welke bronadressen van de proxy gebruik mogen maken. Ook moet u aangeven welke poorten ze mogen gebruiken en op welke manier dat moet gaan.
De groep src kenmerkt zich door een IP adres en een netmasker. De groepen all (iedereen, dus source 0.0.0.0/0.0.0.0) en localhost bestaan al. Anderen kunt u zelf definiëren met: acl groepnaam src ip-adres/netmasker.
#Recommended minimum configuration: # definitie van de groep all (iedereen) acl all src 0.0.0.0/0.0.0.0 # definitie van de cache beheerder acl manager proto cache_object # definitie van de groep localhost acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 # Clients op het 192.168.1.0/255.255.255.0 thuisnetwerk definieren als "lan" acl lan src 192.168.1.0/255.255.255.0
Daarna wordt een groep van veilige bestemmingspoorten (Safe_ports) gedefinieerd (de waar vraag).
# Een reeks bestemmingspoorten die we toelaten acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 563 # https, snews 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 # Ongeregistreerde poorten beschouw ik als onveilig. # acl Safe_ports port 1025-65535 # unregistered ports # Maar proxies laat ik toe: acl Safe_ports port 8000-9000 # unregistered ports # Voor Secure Sockets Layer verbindingen is een aparte CONNECT methode nodig acl SSL_ports port 443 563 acl CONNECT method CONNECT
Daarna volgen allow en deny regels. Hier is de volgorde van essentieel belang. De Allow en Deny regels worden van boven naar beneden gelezen: plaats de uitzonderingen dus voor de algemene regels. Hier wordt als laatste regel "http_access deny all" toegevoegd. Wat ervoor komt is toegestaan.
# Aanbevolen minimum configuration: # Alleen systeembeheer toestaan vanaf localhost http_access allow manager localhost # Geen systeembeheer via HTTP (/squid/etc/squid.conf bewerken) http_access deny manager all # De niet (!) expliciet als veilig aangemerkte poorten (Safe_ports) worden niet toegelaten http_access deny !Safe_ports # Verbiedt rechtstreekse verbindingen (CONNECT) met niet als SSL_ports bestempelde poorten http_access deny CONNECT !SSL_ports # De groep lan heeft toegang tot squid http_access allow lan # De laatste regel verbiedt HTTP acties die niet expliciet zijn toegestaan http_access deny all
Squid maakt ook gebruik van ICP berichten.
# Sta ICP queries van het lan toe # De groepen lan en localhost hebben toegang tot de ICP (fout)meldingen icp_access allow lan icp_access allow localhost # De rest krijgt geen toegang tot ICP berichten icp_access deny all
# TAG: dns_testnames # The DNS tests exit as soon as the first site is successfully looked up # # This test can be disabled with the -D command line option. # #Default: # dns_testnames netscape.com internic.net nlanr.net microsoft.com
De eerste keer start u Squid met optie -z op.
Hiermee wordt de directorystructuur van de cache aangemaakt.
5|parseEtcHosts:WARNING: \MPTN\ETC\hosts: OS/2 error(3) PATH_NOT_FOUND 6|DNS Socket created at 0.0.0.0, port 49163, FD 4 7|Adding nameserver 62.251.0.6 from squid.conf 8|Adding nameserver 62.251.0.7 from squid.conf 9|Adding nameserver 192.168.1.1 from squid.conf 10|authBasicConfigured: WARNING: returning unconfigured 11|authBasicConfigured: authenticate undefined 12|errorTryLoadText: failed to fully read: 'etc/errors/ERR_READ_TIMEOUT': OS/2 error(3) PATH_NOT_FOUND 13|errorTryLoadText: failed to fully read: 'etc\errors/ERR_READ_TIMEOUT': OS/2 error(3) PATH_NOT_FOUND FATAL: failed to find or read error text file.
Deze foutmeling was op te lossen door de lokatie van het hosts bestand op te geven.
# hosts_file \\MPTN\\ETC\\hosts hosts_file C:\MPTN\ETC\hosts
#Default:
# error_directory etc/errors
error_directory K:/squid/etc/errors/Dutch
Als u daarna Squid nogmaals opstart ziet u in de emx versie dit:
Starting unlinkd...
Is dat niet het geval, sluit dan Squid af en bekijk dan /squid/log/cache.log. Een reden kan zijn dat u offline was (en de DNS lookup niet werkte). Squid -D (na squid -z) zou het wel moeten doen. Andere logbestanden in squid\log zijn store.log (hoe de cache swapt) en access.log (wie vroeg wat op). Ze kunnen enorm groeien (wis ze dus geregeld).
Als er logische configuratiefouten zijn in squid.conf dan ziet u dat op de prompt:
[L:\squid]L:\squid\bin\squid 2002/03/03 13:56:43| squid.conf line 1422: always_direct allow CONNECT 2002/03/03 13:56:43| aclParseAccessLine: ACL name 'CONNECT' not found. 2002/03/03 13:56:43| squid.conf line 1422: always_direct allow CONNECT 2002/03/03 13:56:43| aclParseAccessLine: Access line contains no ACL's, skipping 2002/03/03 13:56:43| squid.conf line 1424: never_direct allow all 2002/03/03 13:56:43| aclParseAccessLine: ACL name 'all' not found. 2002/03/03 13:56:43| squid.conf line 1424: never_direct allow all 2002/03/03 13:56:43| aclParseAccessLine: Access line contains no ACL's, skipping Starting unlinkd...
In dit geval zaten de fouten in de opdrachtregels 1422 en 1424 die ik voor "parent" Junkbuster had ingesteld. Ze stonden gewoon op de verkeerde plaats. Namelijk vòòr de lokatie waar de ACL groepen 'CONNECT' (voor SSL) en "all" gedefinieerd waren. U moet ze achter de hierboven besproken #Recommended minimum configuration zetten.
Foutmeldingen met betrekking tot specifieke websites worden in de browser gemeld.
While trying to retrieve the URL: ftp://ftp.os2ezine.com/pub
The following error was encountered:
Connection Failed
The system returned:
(60) Connection timed out
The remote host or network may be down. Please try the request again.
Your cache administrator is sjoerd@zolder.thuis.
Generated Sat, 12 Jan 2002 00:35:10 GMT by ecs.thuis (Squid/2.4.STABLE3)
Nederlandse teksten zijn ook mogelijk: Voor liefhebbers is er in in\squid\etc\errors\errors.zip een Nederlandse versie beschikbaar om naar \squid\etc\errors\ te kopieren. Gebruikt u Junkbuster als "parent" voor Squid, dan zal Junkbuster de foutmeldingen leveren. Natuurlijk kunt u de tekst naar eigen wensen aanpassen (Ben je belazerd? Geen hotmail hier!).
Op het internet zit veel junk. Zie ook het artikel van Marcus de Geus in Draad/2 van okt 2001. Om die reden wordt Squid wel in combinatie met de non caching Internet Junkbuster gezet. Junkbuster filtert en Squid cachet de content. Zodat uw cache niet gevuld wordt met rommel.
Op
http://sourceforge.net/projects/ijbswa/
staan recente OS/2 versies van Junkbuster (Privoxy) die met WarpIn
gemakkelijk te installeren zijn.
Om de Privoxy met Squid te gebruiken hebt u twee opties:
Privoxy van Squid gebruik te laten maken (HTTP client <=> Privoxy <=> Squid <=> internet).
Squid van Privoxy gebruik te laten maken (HTTP client <=> Squid <=> Privoxy <=> internet).
De eerste optie bleek bij mij het snelst. Ik had daar eerst geen verklaring voor, maar bedacht me later dat Privoxy dynamisch HTML aanmaakt. En dat geeft dus altijd in de Squid cache misser. Maar dat was niet het geval: Privoxy maakt weliswaar dyaamisch HTML aan, maar verandert de Last-Modified datum van de server niet.
Een manier om het uit te proberen is met de optie "Open in tabs" van Mozilla Firefox. Door Privoxy naar de console te late schijven (rem # logfile logfile), krijgt u een indruk van de verzoeksnelheid. Ik kreeg de indruk, dat als er meerdere verzoeken tegelijkertijd worden gedaan, privoxy de flessehals was. Om die reden ben ik afzonderlijke (alleen naar localhost luisterende) Privoxy servers op mijn OS/2, Linux en Windows clients gaan gebruiken. Wat betreft de bescherming van uw privacy maakt die volgorde niets uit. Het gaat erom dat dat Privoxy tussen de webserver en de client zit.
Zoals gezegd was deze optie bij mij (breedband) het snelst. Als u bovendien de Windows en Linux Squid clients van een afzonderlijke privoxy server gebruik laat maken, zullen de responsetijden nog meer toenamen. De processor-overhead van privoxy is gering en ook programma's als Winamp, Realplayer en MediaPlayer kunnen van de HTTP proxies Squid en Privoxy gebruik maken.
Hiervoor hoef u alleen privoxy aan te passen. In het privoxy configuratiebestand geeft u het IP adres en de poort van de Squid server op.
forward / 192.168.1.5:8080
In de browser laat u HTTP naar Privoxy verwijzen (localhost:8118) en FTP en Secure HTTP naar Squid (hier 192.168.1.5:8080).
HTTP clients |
Privoxy op localhost |
Squid op de DMZ |
internet HTTP server |
HTTP clients |
Privoxy op localhost |
Dymamisch HTML niet cachen |
SSL internet HTTP server |
FTP clients |
|
Squid op de DMZ |
internet FTP server |
sHTTPs clients |
|
Squid op de DMZ |
internet sHTTP server |
Omdat Squid Dymamisch HTML met cgi-bin of ? standaard niet cachet (de cache loopt hier constant achter) kunt u Squid hiervoor beter passeren. Hetzelfde geldt voor SSL sessies. Dit kunt u met een terminal punt bereiken. Net als bij squid zijn reguliere expressies toegestaan.
forward / 192.168.1.5:8080 forward cgi-bin . forward lists . forward ? . forward :443 . forward /.*\.(asp|jsp|php|https)$ .
Door de laatste punt wordt de squid cache voor deze (waarschijnlijk) dynamisch aangemaakte bestanden omzeilt. Bestanden die pas zijn aangemaakt worden door Squid toch van de server opgehaald. Het inzetten van Squid geeft dan alleen maar vertraging. Overigens worden afbeeldingen waarnaar de HTML verwijst wel via Squid opgehaald.
Maar let wel op de volgorde: De uiztzonderingen zet u bij Privoxy achter de regel. De laatste regel wint.
# If http_parent is ".", then requests are not forwarded to # another HTTP proxy but are made directly to the web servers. # # Multiple lines are OK, they are checked in sequence, and the # last match wins.
Bij Squid en de OS/2 firewal is dat omgekeerd.
Deze optie wordt het meest geciteerd. Maar het is bepaald niet de snelste constructie, omdat het wachten op Privoxy Squid veel meer vertraagd, dan Squid Privoxy kan vertragen. Ook al lopen ze allebei met server priority 4. Voor een Squid server die meer dan vijf HTTP clients tegelijkertijd bediend raad ik het beslist af.
Het is bovendien de meest ingewikkelde, want u moet Squid duidelijk maken dat Privoxy voor HTTP gebruikt moet worden, maar niet voor secure HTTP en FTP.
HTTP clients |
Squid op de DMZ |
<via privoxy op localhost> |
Internet HTTP server |
FTP clients |
Squid op de DMZ |
<=> |
Internet FTP server |
sHTTPs clients |
Squid op de DMZ |
<=> |
Internet sHTTP server |
U past hiervoor Squid als volgt aan.
# cache_peer hostname type http_port icp_port # Junkbuster/Privoxy loopt op poort 8000 en cachet niets (heeft dus ook geen=0 icp_port) cache_peer 127.0.0.1 parent 8000 7 no-query
Hier moeten ACL's op aangepast worden. Privoxy doet niet aan FTP en Secure HTTP. Een FTP request via Privoxy levert iets op als http://ftp://ftpserver.com en zal dus niet werken. Die protocollen moet moet Squid dus zelf afhandelen.
Zet deze ingangen achter de #Recommended minimum configuration die hierboven besproken is.
# Definieer een toegangslijst (ACL) met de naam "FTP" voor het FTP protocol acl FTP proto FTP # Sta de toegangslijst "FTP" directe internettoegang toe always_direct allow FTP # Bemoei je ook niet met HTTPS (sta HTTPS direct = niet geblokkeerde internettoegang toe) always_direct allow CONNECT # Forward the rest to junkbuster # Alles wat niet onder het bovengestelde valt (ALL) moet via Junkbuster never_direct allow all # Het alternatief is dat de rest ook direct mag (als Junkbuster uitvalt). # prefer_direct off
Een voorbeeld van een door privoxy gefilterd Squid object:
#S ## Í1#°Á;2²Ì" ë«ÛC7## ÚÈX@ÕÈX@ÙË#@ # `### http://www.os2ss.com/ HTTP/1.1 200 OK Date: Wed, 17 Mar 2004 21:53:45 GMT Server: Apache Last-Modified: Wed, 21 Jan 2004 19:32:59 GMT ETag: "5300a5-20a-411c90c0" Accept-Ranges: bytes Content-Length: 665 Content-Type: text/html; charset=ISO-8859-1 Connection: close <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><script>function PrivoxyWindowOpen(){return(null);}</script> <title>NB/2 Web Site</title><meta http-equiv="refresh" content="0;url=http://www.os2warp.be/index2.php"></head> <body> This site has been moved, this url changed to <a href="http://www.os2warp.be/index2.php">http://www.os2warp.be</a> <p> You will be redirected there in 3 seconds. Please use the link above if you are not taken there automatically. </p> <p><img src="http://www.os2warp.be/logo.gif" width="153" height="74"></p> </body><script>function PrivoxyWindowOpen(a, b, c){return(window.open(a, b, c));}</script></html>
Een sibling is een proxy die op gelijke voet met deze cache (TCP/IP) samenwerkt. Hiervoor bestaan vele opties.
In dit geval werkt de OS/2 cache als proxy-only samen met de WWWoffle cache op de Linux PC "zolder", die op poort 8080 zit en als offline-reader geen ICP queries (0) ondersteund.
# WWWoffle op Linux cache_peer zolder sibling 8080 0 proxy-only
Gebruikers van een dial-up ISDN of modemverbinding konden Squid off-line gebruiken. Maar dit gaat sinds versie 2.4 niet meer zonder slag of stoot. Squid is voor permanente netwerkverbindingen ontworpen. De ontwerpers hadden snelheid, veiligheid en schaalbaarheid voor ogen, maar niet het offline gebruik bij dial-up verbindingen zoals bij de nog niet naar OS/2 geporteerde WWWoffle proxy.
Zie:http://linuxdevcenter.com/pub/a/linux/2001/08/02/offline_squid.html
by Jennifer Vesperman
08/02/2001
One of the more frequent requests on the Squid mailing lists is for help configuring Squid to operate well on dial-up or demand-dial networks. Offline mode will function for some of these networks, but is far from ideal. Unfortunately many of the features of Squid's offline mode appear to have largely vanished during the development of the Squid 2.x series. In the 2.3 STABLE 4 version, the offline mode has nearly no effect at all.
Squid can be patched to work well with dial-up and other intermittent connections. Having a cache on the intermittent side of the link can take some of the curse off these connections, providing access to cached information and reducing bandwidth use on the link. Unpatched, Squid can work reasonably well on dial-on-demand connections, but dialing in each time it needs to resolve a query can become expensive.
Zoals iedere proxy onthoudt Squid zowel de DNS (IP adressen) als de bestanden. Maar Squid slaat slechts de bestanden op. Geslaagde DNS queries worden voor bepaalde tijd in het geheugen bewaard, maar zullen voorgoed verloren gaan als Squid wordt afgesloten. Na een herstart van Squid krijgt u DNS foutmeldingen bij het opvragen van bestanden die in de cache aanwezig zijn.
Een nog niet voldoende door mij geteste optie kan zijn om uw favoriete sites in het hosts bestand vast te leggen.
[F:\]host www.os2voice.org www.os2voice.org = 12.106.145.9
Geeft dan in %ETC%\hosts:
127.0.0.1 localhost 12.106.145.9 www.os2voice.org
Dergelijke tips geeft HCC aan Windows gebruikers. Maar liever zag ik een niet handmatig in te stellen caching DNS server die de IP adressen op de schijf bewaard. Daarmee zou Squid beter offline te gebruiken zijn.
Zonder dat moet u Squids IP cache in ieder geval op een langere waarde zetten dan de standaard 6 uur Time To Live. En Squid permanent in het geheugen houden. Ook als u wijzigingen in het configuratiebestand aanbrengt (-k reconfigure).
#Default: # positive_dns_ttl 6 hours positive_dns_ttl 999999 hours # Langer voor offline gebruik,
Voor het offline gebruik maakt u een apart configuratiebestand aan. Een kopie van een werkend squid.conf voldoet. Hierin verandert u de volgende regel:
# TAG: offline_mode # Enable this option and Squid will never try to validate cached objects. # offline_mode off offline_mode on
Zodra u offline bent herconfigureert u Squid met het nieuwe configuratiebestand en met de optie -D (Disable initial DNS tests). Met k- reconfigure blijft Squids IP cache resident. Junkbuster kunt u ook afsluiten. Offline zijn geen namenserveerders beschikbaar zodat Squid en Junkbuster in de problemen komen..
%SQUID_DIRECTORY%\bin\squid -D -f %SQUID_DIRECTORY%\etc\squid_offline.conf -k reconfigure
Daarna kunt u de sites bezoeken waar u de afgelopen tijd bent geweest. Gaat u weer online dan start u Squid weer met de online configuratie op (offline_mode off).
%SQUID_DIRECTORY%\bin\squid -f %SQUID_DIRECTORY%\etc\squid.conf -k reconfigure
Andere opties die ik tegenkwam om het offline browsen te vergemakkelijken waren:
reference_age 20 year # Langer voor offline refresh_pattern . 0 100 525600 # het gaat vooral om de 100% negative_ttl 1 minutes # Korter voor offline? negative_dns_ttl 1 minutes # Korter voor offline?
NB Als u Internet Junkbuster (tegenwoordig Privoxy geheten) als parent achter Squid gebruikt dan moet u zich realiseren dat het Junkbuster filter gaten in de cache achterlaat. Het filter zorgt er immers voor dat veel banners, verklikkers en tellers niet opgehaald worden. De kracht van Junkbuster is dat de meeste sites desondanks goed ogen. Maar omdat veel commerciële sites alleen alleen maar met die nu ontbrekende rommel (en Javascript) willen werken, geeft dat bij offline browsen een probleem. Maar bij niet al te commercieel ontworpen sites hebt hier geen last van.
Ik moet nog onderzoeken of u bij het offline browsen Junkbuster voor de Squid cache kunt zetten (de omgekeerde volgorde dus) om dit probleem te verhelpen.
Usage: squid [-dhsvzCDFNRVYX] [-f config-file] [-[au] port] [-k signal] -a port Specify HTTP port number (default: 3128). -d level Write debugging to stderr also. -f file Use given config-file instead of /squid/etc/squid.conf -h Print help message. -k reconfigure|rotate|shutdown|interrupt|kill|debug|check|parse Parse configuration file, then send signal to running copy (except -k parse) and exit. -s Enable logging to syslog. -u port Specify ICP port number (default: 3130), disable with 0. -v Print version. -z Create swap directories -C Do not catch fatal signals. -D Disable initial DNS tests. -F Don't serve any requests until store is rebuilt. -N No daemon mode. -R Do not set REUSEADDR on port. -S Double-check swap during rebuild. -V Virtual host httpd-accelerator. -X Force full debugging. -Y Only return UDP_HIT or UDP_MISS_NOFETCH during fast reload.
Een publieke internetserver draait u niet vanuit de standaard prompt, maar liever in een sterk gereduceerde omgeving . Squid en Junkbuster/Privoxy zijn weliswaar geen internet servers, maar omdat ze vanaf het internet te bereiken (is te hacken) zijn, zou ik ze niet alle variabelen van uw CONFIG.SYS meegeven.
Deze setdel batch (met dank aan Eddy Thilleman!) is via het call opdracht aan te roepen om de omgevingsvariabelen van Junkbuster (2e batch) en Squid (3e batch) te trimmen. Junkbuster wordt na de "call tcpstart.cmd" met "start Junkbuster.cmd /c/b" in startup.cmd opgestart. Evenzo koos ik voor een minimale EMX\BIN1 (emxrt) en %ETC% schaduwconfiguratie voor servers. %ETC% hoeft slechts een getrimd hosts bestand en resolv2 te bevatten.
De gedachte hierachter is even simpel als effectief: Iemand die via een hack de controle over het proces (geheugen en processortijd) van Junkbuster, Squid of Xitami verkrijgt, moet niet aan CMD.EXE en alle utilities in \EMX\BIN kunnen komen. Die laten we dus buiten het pad. Door de omgevingsvariabelen en instellingen van riskante processen tot een minimum te beperken, beperkt u de kans op misbuik.
/* setdel verwijdert alle omgevingsvariabelen */ /*'@echo off'*/ '@SET | RXQUEUE' Do I = 1 to Queued() parse pull Line 'set' substr(Line,1,pos("=",Line)) End |
@echo off CALL SETDEL SET TMP=L:\temp SET USE_HOSTS_FIRST=1 SET USERNAME=www SET HOME=J:\home\www SET PATH=I:\EMX1\BIN SET ETC=I:\EMX1\ETC SET TZ=cet-1 I: CD \ CD bin\net\Junkbuster junkbuster |
@ECHO OFF CALL SETDEL SET TMP=L:\temp SET USE_HOSTS_FIRST=1 SET EMXOPT=-c -h40 SET USERNAME=www SET HOME=J:\home\www SET PATH=I:\EMX1\BIN SET ETC=I:\EMX1\ETC set SQUID_DIRECTORY=L:\squid L: CD \ CD %SQUID_DIRECTORY% %SQUID_DIRECTORY%\bin\squid |
Helaas is het in de CONFIG.SYS vastgelegde LIBPATH achteraf niet meer in een kindsproces te beperken. Ik dacht eerst dat het aan de ontbrekende SET opdracht lag, maar het geldt ook voor SET BEGINLIBPATH= en SET ENDLIBPATH= opdrachten. Meer info over LIBPATH varianten: VOICE OS/2 Tips.
Dit is een uitdaging. Squid is geprogrammeerd voor een Unix omgeving. Windows programma's zijn ontworpen voor de laatste Windows API. Unix is een multi-user systeem, maar Windows NT en 2000 zijn in theore "multi-user" van het type "niet liever dan één betalende gebruiker tegelijkertijd". Windows XP stelt ons in staat om meerdere logins tegelijkertijd te verwerken, maar ook dan is de taakwisseling moeizaam. Lichtgewicht virtuele terminals kent dit voor de voor de GUI geoptimaliseerde WIN32 API niet. Alle VIO applicaties lopen in een geëmuleerde DOS omgeving.
Met wat lichte aanpassingen is hij voor OS/2 Emulate Unix (EMX) bibliotheek geschikt te maken. Ook bestaan er versies voor native OS/2 (IBM C compiler).
Onder Windows NT/2000 en XP bestaat er een soortgelijke situatie. Zo bevat Redhats Unix emulatie pakket Cygwin een Squid 2.4 port. Daarnaast zijn er primair voor de Windows API gecompileerde Squid versies.
Cygwin levert een vrij complete UNIX/Linux omgeving voor het Windows platform. De cygwin1.dll vervult dezelfde centrale rol als de emx.dll van EMX: het vormt een op Unix/Linux API gelijkende laag tussen de Windows API en de Cygwin applicaties. De van UNIX afkomstige Cygwin applicaties roepen niet de hen vreemde Windows API aan, maar de meer op UNIX gelijkende Cygwin API. Door de API vertaling van Cygwin naar de Windows API zijn Unix applicaties gemakkelijker te porteren. De broncode hoeft nu niet naar de Windows manier van denken te worden omgezet.
U kunt de Cygwin installer (setup.exe) in een c:\cygwin map plaatsen. Na het starten haalt het pakket de bestanden van het internet op en installeert ze in de cygwin rootmap. Het is een groot pakket, niet iets voor dial-up verbindingen. Maar dan hebt u wel een uitgebreide Unix omgeving om mee te spelen. Zie: Cygwin Information and Installation.
Acme Consulting onderhoudt een open source Squid 2.5 for Windows NT 4.0/2000/XP/2003. Deze is als een Windows applicatie gecompileerd (gebruikt dus de Win32 API), maar toont gebreken waar Squid Unix functies aanroept. Deze worden deels met hulpapplicaties opgevangen.
De Windows NT/2000/XP versie heeft een groot nadeel: hij loopt alleen onder het Administrator account goed. Onder een gebruikers account loopt het opstartproces vast bij: "helperOpenServers: Starting 5 'dnsserver.exe' processes:
M:\squid\sbin>m:\squid\sbin\squid.exe -f m:\squid\etc\squid.conf -d 4 2004/07/06 21:07:14| Starting Squid Cache version 2.5.STABLE3-NT-CVS for i686-pc -winnt... 2004/07/06 21:07:14| Running on Windows XP 2004/07/06 21:07:14| Process ID 3236 2004/07/06 21:07:14| With 2048 file descriptors available 2004/07/06 21:07:14| With 512 CRT stdio descriptors available 2004/07/06 21:07:14| Windows sockets initialized 2004/07/06 21:07:14| Performing DNS Tests... 2004/07/06 21:07:14| Successful DNS name lookup tests... 2004/07/06 21:07:14| helperOpenServers: Starting 5 'dnsserver.exe' processes
De volledige initialisatie loopt alleen onder het Administrator account. Maar veilig is dat niet.
2004/07/06 21:07:14| User-Agent logging is disabled. 2004/07/06 21:07:14| Referer logging is disabled. 2004/07/06 21:07:14| Pinger socket opened on FD 26 2004/07/06 21:07:14| Unlinkd pipe opened on FD 29 2004/07/06 21:07:14| Swap maxSize 819200 KB, estimated 63015 objects 2004/07/06 21:07:14| Target number of buckets: 3150 2004/07/06 21:07:14| Using 8192 Store buckets 2004/07/06 21:07:14| Max Mem size: 8192 KB 2004/07/06 21:07:14| Max Swap size: 819200 KB 2004/07/06 21:07:14| Rebuilding storage in m:/squid/var/cache (DIRTY) 2004/07/06 21:07:14| Using Least Load store dir selection 2004/07/06 21:07:14| Set Current Directory to m:/squid/var/cache 2004/07/06 21:07:14| Loaded Icons. 2004/07/06 21:07:14| Accepting HTTP connections at 0.0.0.0, port 3128, FD 37. 2004/07/06 21:07:14| Accepting ICP messages at 0.0.0.0, port 3130, FD 38. 2004/07/06 21:07:14| Accepting HTCP messages on port 4827, FD 39. 2004/07/06 21:07:14| Accepting SNMP messages on port 3401, FD 40. 2004/07/06 21:07:14| Configuring Sibling 192.168.1.12/8080/3130 2004/07/06 21:07:14| Ready to serve requests. 2004/07/06 21:07:15| Done scanning m:/squid/var/cache swaplog (0 entries) 2004/07/06 21:07:15| Finished rebuilding storage from disk. 2004/07/06 21:07:15| 0 Entries scanned 2004/07/06 21:07:15| 0 Invalid entries. 2004/07/06 21:07:15| 0 With invalid flags. 2004/07/06 21:07:15| 0 Objects loaded. 2004/07/06 21:07:15| 0 Objects expired. 2004/07/06 21:07:15| 0 Objects cancelled. 2004/07/06 21:07:15| 0 Duplicate URLs purged. 2004/07/06 21:07:15| 0 Swapfile clashes avoided. 2004/07/06 21:07:15| Took 0.9 seconds ( 0.0 objects/sec). 2004/07/06 21:07:15| Beginning Validation Procedure 2004/07/06 21:07:15| Completed Validation Procedure 2004/07/06 21:07:15| Validated 0 Entries 2004/07/06 21:07:15| store_swap_size = 0k 2004/07/06 21:07:15| storeLateRelease: released 0 objects
Er bestaat een optie om Squid als een NT service te laten lopen,