Andere materialen in de categorie Linux. Caching van anonieme transparante proxyserver Squid

Dit artikel geeft een voorbeeld snelle installatie caching proxyserver Squid in Linux-Debian 6. Het resultaat van de installatie is de mogelijkheid om toegang te krijgen tot internet via deze server via protocollen: http, https en ftp.

Laat ik meteen een voorbehoud maken dat de resulterende server dat niet is overspanningsbeveiliging en is potentieel kwetsbaar voor netwerk aanvallen.
De server is geconfigureerd op Linux Debian 6 OS. Alle onderstaande opdrachten moeten worden uitgevoerd met superuser-rechten (root).

Meteen een belangrijke waarschuwing: autorisatie en transparante proxy zijn onverenigbaar! Je zult één ding moeten kiezen. Tweede waarschuwing: autorisatie via een proxy beperkt de internettoegang alleen via het HTTP-protocol. Andere protocollen: FTP, SMTP, POP3 en andere blijven stilletjes werken via NAT. Hoewel binnen kleine organisaties dit is niet zo cruciaal, de meest gebruikte (en misbruikte) is juist HTTP-protocol, en een van de taken van de beheerder is het beperken van de toegang van medewerkers tot internet via een browser.

Als u Apteture gebruikt en pakketten van het netwerk downloadt, raad ik u aan de lijsten met huidige pakketten bij te werken vóór de installatie:

# apt-get-update

Laten we beginnen met de Squid-installatie:

# apt-get install squid3

Nadat de installatie is voltooid, beginnen we met het bewerken van het inktvisconfiguratiebestand. Ik weet niet hoe het met jou zit, ik vind het persoonlijk handiger als er niets overbodigs in het configuratiebestand staat, dat wil zeggen dat alleen de configuratieparameters aanwezig zijn. Laten we hiervoor een back-up maken van de originele inktvisconfiguratie (zodat er een plek is waar u beschrijvingen van alle parameters kunt zoeken):

cp /etc/squid/squid.conf /etc/squid/squid.conf.original

en haal uit de originele configuratie alles wat niet is becommentarieerd:

cat /etc/squid/squid.conf.original | grep -v "^\(#\|$\)" > /etc/squid/squid.conf

Als gevolg hiervan hebben we een standaardconfiguratie zonder iets speciaals. Maar ik raad je ten zeerste aan om de originele configuratie te bekijken en deze op je gemak te lezen - er staan ​​veel interessante dingen in!

Laten we eindelijk beginnen met bewerken:

nano /etc/squid/squid.conf

Na de installatie heb je nodig kleine aanpassing. Open het Squid-configuratiebestand in de editor, dat zich in /etc/squid/squid.conf zou moeten bevinden. In dit bestand vinden we de regels:

Acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16

Deze regels moeten worden becommentarieerd. En voeg uw eigen regel toe met uw eigen parameters lokaal netwerk. Het zou er zo uit moeten zien:

# acl localnet src 10.0.0.0/8
# acl localnet src 172.16.0.0/12
# acl localnet src 192.168.0.0/16
acl localnet src 192.168.1.0/24 # Eigen lokaal netwerk

In de laatste regel moet u, in plaats van 192.168.1.0/24, de parameters van uw netwerk vervangen.

Net onder de opmerking # TAG: http_access moet je de regel vinden:

Http_access staat localhost toe
of
http_access staat manager localhost toe

Voeg onmiddellijk na deze regel de regel toe:

Http_access staat localnet toe
cache_dir ufs /var/cache/inktvis 2048 16 256
mkdir -p /var/cache/squid
chmod 755 -R /var/cache/inktvis

Hierdoor is toegang tot het netwerk mogelijk voor alle computers op het lokale netwerk. Sla hierna het bestand squid.conf op en start de Squid-server opnieuw op:

# /etc/init.d/squid opnieuw opstarten

Als u na het opnieuw opstarten van squid een foutmelding krijgt (WAARSCHUWING cache_mem is groter dan de totale schijfcacheruimte!) Verlaag dan gewoon de waarde van de cache_mem-parameter 8 MB. Ik stel deze in op 32

Als u vanwege fouten wijzigingen in het configuratiebestand hebt aangebracht, zou Squid succesvol opnieuw moeten opstarten. Als er een fout optreedt, kunt u in het logbestand achterhalen waarom deze is opgetreden: /var/log/squid/cache.log
De browser configureren om via een proxyserver te werken

IN deze optie instellingen, kan onze server netwerkverzoeken niet automatisch naar de proxyserverpoort routeren. Daarom moeten browsers expliciet het adres van onze server opgeven.

Het is belangrijk dat de proxyserver op het lokale netwerk staat vast IP-adres. Laten we aannemen dat de jouwe 192.168.1.1 is. Om te configureren bijvoorbeeld Internet Explorer U moet Extra-Internetopties-Verbindingen-Netwerkinstellingen openen. In het geopende venster vinkt u het selectievakje Een proxyserver gebruiken aan lokale verbindingen. Vink het vakje Gebruik geen proxyserver voor aan lokale adressen. Voer in het veld Adres het IP-adres van onze proxyserver in: 192.168.1.1. Voer in het veld Poort de standaardpoort in die door Squid wordt gebruikt: 3128.

Na deze instellingen krijgt uw browser toegang tot het netwerk via onze nieuwe proxyserver. In andere browsers is de instelling vergelijkbaar met die hierboven Microsoft-internet Ontdekkingsreiziger.

De proxyserverpoort kan naar eigen goeddunken worden gewijzigd in het bestand /etc/squid/squid.conf. Het wordt gegeven in de regel:

http_poort 3128 transparant

Conclusie
Het installeren en configureren van een caching-proxyserver op basis van Squid is slechts de eerste stap in het creëren van een productieve toegangspoort tot internet. Even later zal ik u vertellen hoe u een “Transparent Proxy Server”, Firewall instelt en hoe u statistieken kunt bijhouden van sitebezoeken door lokale netwerkgebruikers.

Het is erg belangrijk om iptables correct te configureren. De tweede optie is iets lager, ik vind het beter

Bij deze stap raad ik u aan een installatiescript te maken, omdat dit nuttig zal zijn als universeel hulpmiddel.1 # vim ./setiptables.sh

#!/bin/bash
LAN=$1
WAN=$2
IP=$3
GB = $ 4
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j DNAT --to $IP:3128
iptables -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j REDIRECT --naar-poort 3128
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -i $WAN -o $LAN -s $GW/24 -p tcp -m multiport --dport 443,21,22 -j ACCEPTEREN
echo "net.ipv4.ip_forward = 1" > /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1

We hebben variabelen gelabeld (voor het gemak), 3 regels voor de NAT-tabel en 1 voor FORWARD.
We gebruiken poorten 443,21,22 om de proxyserver te omzeilen.
Daarnaast iptables-instellingen In dit script schakelen we het doorsturen van pakketten in.
Laten we het als volgt uitvoeren: 1

# sh./setiptables.sh eth0 eth1 192.168.100.1 192.168.100.0

6) Stel het automatisch laden van iptables-instellingen in.
Laten we de iptables-instellingen opslaan.

# mkdir -p /usr/local/iptables && iptables-save > /usr/local/iptables/session.ipt

Voeg het autorun-commando toe aan /etc/rc.local (Ik hou van Perl, maar andere kunnen verschillen).

# perl -i -pe "print"iptables-restore< /usr/local/iptables/session.ipt\n" if $. == 2" /etc/rc.local

Vergeet ook het doorsturen van pakketten niet

# perl -i -pe "print "sysctl -w net.ipv4.ip_forward=1\n" if $. == 3" /etc/rc.local

Tweede optie voor het instellen van firewall iptables

Laten we het doorsturen in het systeem inschakelen. Verwijder in het bestand /etc/sysctl.conf het commentaar op de regel

net.ipv4.ip_forward=1

Spoedig huidige moment we hebben de firewall-instellingen (iptables) volledig gereset.

Het resetten van de kettingen:

$ sudo iptables -F
$ sudo iptables -F -t nat
Wij verbieden alle inkomende en staan ​​alle uitgaande en doorsturen toe:
sudo iptables -P INPUT DROP
sudo iptables -P UITGANG ACCEPTEREN
sudo iptables -P VOORUIT ACCEPTEREN
Wij staan ​​u toe een antwoord te accepteren op een REEDS tot stand gebrachte verbinding:
sudo iptables -A INPUT -m staat --staat VERWANT, GEVESTIGD -j ACCEPTEREN
Loopback-verkeer toestaan:
sudo iptables -A INPUT -i lo -j ACCEPT
Wij staan ​​al het verkeer van onze intern netwerk(laten we subnet 222 nemen):
sudo iptables -A INPUT -s 192.168.222.0/24 -i eth1 -j ACCEPTEREN
En een garantie voor transparantie! We leiden al het uitgaande http-verkeer (naar poort 80) om naar squid-poort 3128:
iptables -t nat -A PREROUTING -s 192.168.222.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --naar-poorten 3128
iptables -t nat -A POSTROUTING -s 192.168.222.0/24 -o eth0 -j SNAT --naar-bron 192.168.56.39

We controleren het internet op de client. Ik wil u eraan herinneren dat als het niet nodig is om een ​​proxy op te geven, u de gateway moet instellen!
Na de eerste herstart zullen we echter begrijpen dat al onze inspanningen tevergeefs waren.
Laten we ze leren hoe ze kunnen overleven!
Laten we dus alles wat we hier hebben gedaan, opslaan:

iptables-save > /etc/firewall.conf

Deze truc werkte voor mij niet met sudo (hoewel dat in theorie wel zou moeten...), dus je kunt het doen door volledig in te loggen op root (su) en de opdracht uit te voeren, maar zonder sudo.
Laten we nu een script maken dat ifupdown dwingt om onze firewall weer tot leven te wekken:

nano /etc/network/if-up.d/00-iptables

Laten we het volgende erin invoeren:

#!/bin/sh
iptables-herstel< /etc/firewall.conf

Laten we uitvoeringsrechten instellen:

chmod +x /etc/network/if-up.d/00-iptables

Over het algemeen is het opzetten van een transparante proxyserver voltooid, maar om de logs leesbaar te maken, moeten we ipv6-ondersteuning uitschakelen (vanwege het feit dat ipv6 niet is geconfigureerd op de adapter, zullen er veel waarschuwingen zijn) .

Schakel IPv6 uit als niemand het gebruikt

Ik stel voor om opnieuw een script te maken om niet in de war te raken.
nano ./ipv6disable.sh

#!/bin/bash
perl -i -pe "print "alias net-pf-10 ipv6 uit\n" if $. == 17" /etc/modprobe.d/aliases.conf
perl -i -pe "print "alias net-pf-10 off\n" if $. == 18" /etc/modprobe.d/aliases.conf
perl -i -pe "print "alias ipv6 uit\n" if $. == 19" /etc/modprobe.d/aliases.conf
echo1 | tee /proc/sys/net/ipv6/conf/all/disable_ipv6
echo "zwarte lijst ipv6" | tee -a /etc/modprobe.d/blacklist.conf
STR=$(cat /boot/grub/grub.cfg | sed -n "67p")
STR=$(STR)" ipv6.disable=1"
sed "67d" /boot/grub/grub.cfg > /boot/grub/grub.cfg.backup
cp /boot/grub/grub.cfg.backup /boot/grub/grub.cfg
sed -i 67i\ "$STR" /boot/grub/grub.cfg

IN algemene schets Wat gebeurt er in dit script:
Schakel eerst de ipv6-fire in de kernelmodules uit.
Vervolgens specificeren we een markering in /proc om geen IPv6 te gebruiken.
En in regel 67 van /boot/grub/grub.cfg voegen we de parameter ipv6.disable=1 toe.
Deze gimmick met tee en sed is nodig om de instellingen in /boot/grub/grub.cfg op te slaan, aangezien apparaten daar niet door /dev/sd* en door UUID worden aangewezen.
Hoewel alles altijd met de hand kan worden voltooid.
Nu moeten we de inktvisbeschermer bevestigen
De helft van het werk is dus al gedaan, het enige dat overblijft is het installeren van het SquidGuard-pakket en het configureren ervan. Om te installeren, schrijft u van onderaf in de terminal root-gebruiker (wortelrechten in Debian GNU/Linux kun je het verkrijgen met het su-commando, in Ubuntu schrijven we sudo vóór de commando's):

apt-get installeer squidguard

Download na de installatie het commando blacklists wget vanaf de terminal (let op, de bestandsgrootte is 24 MB!):
wget -c mijn_zwartelijsten.tar.gz

En pak het uit in de map waar de SquidGuard-databases zich zouden moeten bevinden (beheerdersrechten zijn vereist):

tar zxvf my_blacklists.tar.gz -C /var/lib/squidguard/db

Als resultaat van het uitpakken zal de map /var/lib/squidguard/db/my verschijnen, met daarin veel submappen van verschillende categorieën met lijsten met domeinen en adressen van ongewenste sites. We hebben deze lijst samengesteld op basis van drie zwarte lijsten die zijn gedownload van de sites http://www.squidguard.org, http://www.shallalist.de en http://www.urlblacklist.com. Als gevolg hiervan bevat onze lijst meer dan 3 miljoen sites.

Nu moet je een combinatie van Squid en SquidGuard configureren en er zwarte lijsten aan koppelen. Om dit te doen, voegt u het bestand squid.conf toe volgende regels door het bestand in de nano-editor te openen met beheerdersrechten:

nano /etc/squid/squid.conf

Voeg de regels toe aan het einde van het bestand:

Redirector_bypass ingeschakeld
redirect_program /usr/bin/squidGuard
omleiding_kinderen 1

mv /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf_original

Download het configuratiebestand squidGuard.conf van onze website met behulp van de wget-opdracht in de terminal:
wget -c squidGuard.conf

Kopieer het naar de plaats van het oude bestand (met beheerdersrechten):

cp squidGuard.conf /etc/squid/squidGuard.conf

Na het kopiëren van het configuratiebestand starten we de conversie van de tekst-blacklists die u hebt gedownload en uitgepakt naar het Berkeley DB-databaseformaat (de opdracht zal enige tijd worden uitgevoerd - u moet wachten tot deze volledig is voltooid) door de opdracht uit te voeren vanaf de beheerder:

squidGuard -d -C alles

Als alles correct is gedaan, zal de terminal na de opdracht veel berichten weergeven over het maken van nieuwe databasebestanden, en aan het einde van hun reeks ziet u zoiets als dit:

2012-03-16 12:51:53 squidGuard 1.4 gestart (1331887787.768)
16-03-2012 12:51:53 db-update voltooid
2012-03-16 12:51:53 squidGuard gestopt (1331887913.657)

Wat zal de succesvolle voltooiing van het creëren van zwartelijstdatabases zeggen? Stel vervolgens de rechten van de Squid-server op de databasebestanden in door de opdracht met beheerdersrechten uit te voeren:

chown -R proxy:proxy /var/lib/squidguard/db/

En herstart de Squid-server door Debian als root uit te voeren:

/etc/init.d/squid3 opnieuw opstarten

Na de herstart was het resultaat samenwerking Squid en SquidGuard zullen vanaf ongewenste sites doorverwijzen naar de site. U kunt deze vervangen door een andere pagina door het adres te wijzigen laatste regel configuratiebestand /etc/squid/squidGuard.conf.

Vermeldingen in domein- en URL-lijsten wijzigen
Voorbeeld. Maak naast het bestand domains.db in de map /var/lib/squiguard/db/direction een bestand domains.diff. We voeren er een regel of meerdere regels in, één voor elke invoer:

Website (wat betekent dat dit domein uit de database wordt verwijderd)
of +sysadmin -komi.ru (wat betekent dat dit domein aan de database moet worden toegevoegd)

Wij geven commando's:

(update db-databases vanuit diff-bestanden. In de squidguard-logboeken kun je zien hoeveel er is toegevoegd/verwijderd.)

$ squid3 -k opnieuw configureren

(Lees de instellingen opnieuw zonder opnieuw op te starten.)
Het is niet nodig om het bestand domains.diff te verwijderen of er gegevens uit te wissen. Dit bestand zal ook nuttig zijn tijdens globale database-updates. En dankzij meerdere updates is er geen sprake van dubbele records in de database.

U kunt uw eigen omleidingsregels maken door categorieën ongewenste sites toe te voegen of uit te sluiten. Helaas is het onmogelijk om 100% bescherming te verkrijgen, omdat... Er verschijnen voortdurend nieuwe sites met aanstootgevende inhoud. Zelfs als u de zwarte lijsten voortdurend bijwerkt. Als je sterke bescherming nodig hebt, kan SquidGuard worden geconfigureerd om te werken met een witte lijst van toegestane sites, waarbij al het andere wordt verboden - maar dan zal er een zeer beperkt aantal sites zijn.

En er is nog één moment over! Laten we statistieken plaatsen over wie, wat, waar en waarom, genaamd sarg

apt-get install-sarg

Het kan een hele groep pakketten meenemen, en dat is geen wonder, want het heeft een webserver nodig om de resultaten weer te geven.

We passen de configuratie (/etc/squid/sarg.conf) aan onze eigen wensen aan. Dit zijn de belangrijkste regels waar u op moet letten:

Access_log /var/log/squid/access.log
...
output_dir /var/www/squid-reports
...
tekenset UTF-8

Maak de laatste map als deze niet bestaat.
Laten we twill lanceren (het zou leuk zijn om de lancering ervan in cron te duwen, ik zal het hier nog niet beschrijven...)

Hoera! We gaan van binnen het netwerk naar onze server, bewonder de rapporten op http://IP_SERVER/squid-reports/
Alle jongens zijn er klaar voor. Als je vragen hebt, stel ze dan, ik zal je op alle mogelijke manieren helpen.

Goede tijd, lieve lezers en gasten! Met dit artikel begin ik met het beschrijven van het werk SQUID caching-proxyserver. Dit artikel zal voornamelijk inleidend en theoretisch zijn.

Wat is een proxyserver en wat is inktvis

Ik zal beginnen met de basis. inktvis is cache-proxyserver voor HTTP, FTP en andere protocollen. Proxyserver voor HTTP is een programma dat HTTP-verzoeken doet namens een clientprogramma (of het nu een browser of andere software is). Proxy misschien cachen of niet-caching. Caching, slaat dienovereenkomstig alle verzoeken op in een opslagruimte voor een snellere levering aan klanten, en niet-caching- zendt eenvoudigweg HTTP-, ftp- of andere verzoeken uit. Vroeger maakte verkeerscaching het mogelijk om behoorlijk aanzienlijke verkeersbesparingen te realiseren, maar tegenwoordig, met de toename van de internetsnelheid, heeft dit zijn relevantie een beetje verloren. Proxyservers kunnen worden ingebouwd hiërarchie verzoeken te verwerken. Tegelijkertijd communiceren proxyservers met elkaar via ICP-protocol.

Inktvis ontworpen en kan op de meeste werken besturingssystemen(zowel unix als windows). Gelicentieerd onder GNU-licentie GPL. Geschikt voor het verwerken en cachen van HTTP-, FTP-, gopher-, SSL- en WAIS-verzoeken (verwijderd in 2.6), evenals DNS. Meest frequente verzoeken winkels in RAM. Momenteel zijn er 2 stabiele versies inktvis: 2.7 En 3.1 . De verschillen zijn te vinden in de links aan het einde van het artikel. Alle afhankelijkheden bij het installeren vanuit pakketten zijn hetzelfde. Configuratiebestand versie 2 is compatibel met versie 3, maar versie 3 voegt nieuwe parameters toe. In het artikel zal ik erover nadenken inktvis3 versie. Het is ook vermeldenswaard dat als u squid3 installeert, de configuratiebestanden behouden blijven /etc/inktvis3, evenals de standaardlogboeken in squid3 bevinden zich in de directory /var/log/squid3/, niet /var/log/inktvis/, zoals veel loganalysatoren ‘graag denken’.

Het woord "werd een aantal keren genoemd" cachen"En wat is dit precies... cachen? Dit een methode voor het opslaan van via internet opgevraagde objecten op een server die zich dichter bij de aanvragende computer bevindt dan de oorspronkelijke computer. Een internetobject is een bestand, document of antwoord op een verzoek aan een dienst die op internet wordt aangeboden (bijvoorbeeld FTP, HTTP of gopher). De client vraagt ​​een internetobject op uit de proxycache; als het object nog niet in de cache is opgeslagen, ontvangt de proxyserver het object (of van het netwerkknooppunt dat is opgegeven door de gevraagde URL-adres, vanuit een bovenliggende of naburige cache) en levert deze af aan de client.

Bedrijfsmodi van de Squid-proxyserver

De Squid-proxyserver kan in de volgende drie hoofdmodi werken:

Transparante modus

In deze modus HTTP-verbinding uitgevoerd door clients wordt doorgestuurd naar de proxyserver zonder hun medeweten of expliciete configuratie. In deze modus is clientconfiguratie niet vereist. Gebreken deze methode : NAT-configuratie en verkeeromleiding zijn vereist, clientauthenticatie werkt niet, FTP- en HTTPS-verzoeken worden niet omgeleid.

Authenticatiemodus

Om in deze modus te kunnen werken, moeten clients worden geconfigureerd om met een proxyserver te werken (het proxyserveradres moet worden opgegeven in de verbindingsinstellingen). Clientauthenticatie en -autorisatie kan worden uitgevoerd via Kerberos, Ldap, NTLM, IP en Radius. Het is mogelijk om interactie op te bouwen Microsoft-servers Actieve map door domeinlidclients te authenticeren met behulp van het Kerberos-protocol, en daaropvolgende autorisatie van domeingroepleden met behulp van LDAP in een transparante modus (de gebruiker voert zijn wachtwoord alleen in wanneer hij zich in het domein registreert). Voor geautoriseerde groepen is het mogelijk om gebruik te maken van verschillende instellingen toegangscontrole en QoS (vertragingspools).

Omgekeerde proxy

De proxyserver slaat uitgaande gegevens op in de cache. De Squid reverse proxy ontvangt namens de client gegevens van de HTTP-server en verzendt deze terug naar de client (bijvoorbeeld naar internet). Met deze modus kunt u:

  • Gebruik maken van caching, waardoor de belasting op HTTP-servers wordt verminderd;
  • Belastingverdeling tussen HTTP-servers;
  • Vermomming HTTP-servers en hun kenmerken;
  • Voorkomen van webaanvallen op servers.

SQUID-bedrijfsmodusdiagrammen

transparante modus

omgekeerde modus

authenticatiemodus

In de weergegeven diagrammen geven groene pijlen proxy-verkeersstromen aan. De beweging van deze streams in Linux wordt meestal gereguleerd door de krachten en instellingen van de browser. Bovendien worden de functies van een router en een proxy heel vaak door één machine uitgevoerd.

SQUID installeren

Voordat u squid installeert en configureert, moet u ervoor zorgen dat de machine waarop squid zal draaien toegang heeft tot extern netwerk en clients die deze proxy gebruiken, hebben toegang tot deze machine. Het installeren van de squid-proxyserver is, net als andere software in Linux, mogelijk op verschillende manieren beschreven in het artikel. Ik zal bespreken hoe je kunt installeren vanuit een repository in Debian. Om squid te installeren moet je dus het squid3-pakket installeren. Voer hiervoor de volgende opdracht uit:

Gw ~ # aptitude install squid3 De volgende NIEUWE pakketten zullen worden geïnstalleerd: libltdl7(a) squid-langpack(a) squid3 squid3-common(a) 0 pakketten bijgewerkt, 4 nieuwe geïnstalleerd, 0 pakketten gemarkeerd voor verwijdering en 0 pakketten niet bijgewerkt . Het is noodzakelijk om 2.157 kB aan archieven te verkrijgen. Na het uitpakken is er 10,3 MB in beslag genomen. Wil je doorgaan? y Get:1 http://ftp.ru.debian.org/debian/squeeze/main libltdl7 i386 2.2.6b-2 Get:2 http://ftp.ru.debian.org/debian/squeeze/main squid- langpack alle 20100628-1 Get:3 http://ftp.ru.debian.org/debian/squeeze/main squid3-common all 3.1.6-1.2+squeeze2 Get:4 http://ftp.ru.debian.org /debian/ squeeze/main squid3 i386 3.1.6-1.2+squeeze2 2.157 kB ontvangen in 9s (238 kB/s) Selectie van het voorheen niet-geselecteerde pakket libltdl7. (Database lezen... aan op dit moment

41133 bestanden en mappen zijn geïnstalleerd.) Het libltdl7-pakket wordt uitgepakt (uit het bestand.../libltdl7_2.2.6b-2_i386.deb)... Het eerder niet-geselecteerde squid-langpack-pakket wordt geselecteerd. Het squid-langpack-pakket wordt uitgepakt (uit het bestand.../squid-langpack_20100628-1_all.deb)... Het eerder niet-geselecteerde squid3-common-pakket wordt geselecteerd. Het squid3-common pakket wordt uitgepakt (uit het bestand.../squid3-common_3.1.6-1.2+squeeze2_all.deb)... Het eerder niet-geselecteerde squid3 pakket wordt geselecteerd. Het squid3-pakket is uitgepakt (uit het bestand.../squid3_3.1.6-1.2+squeeze2_i386.deb)... Triggers voor man-db worden verwerkt... Het libltdl7-pakket (2.2.6b-2) is geconfigureerd.. . Het squid-langpack-pakket is geconfigureerd (20100628-1) ... Het squid3-common-pakket configureren (3.1.6-1.2+squeeze2) ... Het squid3-pakket configureren (3.1.6-1.2+squeeze2) .... Squid HTTP-proxy 3.x spoolmapstructuur maken 2012/02/15 21:29:41| Wisselmappen maken Squid HTTP Proxy 3.x opnieuw starten: squid3 Squid HTTP Proxy 3.x cachestructuur maken ... (waarschuwing). 2012/02/15 21:29:43| Wisselmappen maken. Zoals u kunt zien, is er bij de installatie van het pakket geprobeerd een cachemap inktvis, maar omdat als deze niet is geconfigureerd, verschijnt er een waarschuwing. Ook, toegevoegd aan opstarten, gelanceerd en accepteren van verbindingen op alle interfaces . Maar omdat het is niet geconfigureerd, de toegang tot internetpagina's via de server is beperkt. Inktvisconfiguratie gelegen in/etc/squid3/squid.conf

Gw ~ # grep -v ^# /etc/squid3/squid.conf | grep -v ^$ acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports poort 443 acl Safe_ports poort 80 # http acl Safe_ports poort 21 # ftp acl Safe_ports poort 443 # https acl Safe_ports poort 70 # gopher acl Safe_ports poort 210 # wais acl Safe_ports poort 1025-65535 # niet-geregistreerde poorten acl Safe_ports poort 280 # http-mgmt acl Safe_ports poort 488 # gss-http acl Safe_ports poort 591 # filemaker acl Safe_ports poort 777 # multiling http acl CONNECT methode CONNECT http_access toestaan ​​manager localhost http_access weigeren manager http_access weigeren !Safe_ports http_access weigeren CONNECT !SSL_ports http_access toestaan ​​localhost http_access weigeren alles http_port 3128 hiërarchie_stoplijst cgi-bin ? coredump_dir /var/spool/squid3 vernieuwingspatroon ^ftp: 1440 20% 10080 vernieuwingspatroon ^gopher: 1440 0% 1440 vernieuwingspatroon -i (/cgi-bin/|\?) 0 0% 0 vernieuwingspatroon . 0 20% 4320

Zoals u kunt zien, is de proxyserver in de standaardconfiguratie actief en staat deze alleen verzoeken toe van adressen 127.0.0.0/8. U dient de gehele lijst zorgvuldig door te nemen en regels met onnodige of ongebruikte services van commentaar te voorzien. Een vollediger begrip van deze configuratie zal verkregen worden na het lezen van de volgende secties. Dat. als we de lunx-consolebrowser starten die naar onze proxy verwijst, kunnen we de gegeven pagina zien:

Gw ~ # # start de browser en specificeert de ya.ru-pagina: gw ~ # http_proxy=http://127.0.0.1:3128 lynx ya.ru Zoekend naar "ya.ru" eerst gw ~ # # in het log zien we een toegang tot de opgegeven pagina: gw ~ # cat /var/log/squid3/access.log 1329527823.407 110 127.0.0.1 TCP_MISS/200 9125 GET http://ya.ru/ - DIRECT/93.158.134.203 text/html

Sommige parameters in het inktvisconfiguratiebestand kunnen meerdere keren worden gebruikt (bijvoorbeeld acl). Sommige parameters, vooral die met één waarde, kunnen slechts één keer worden gebruikt. Tegelijkertijd wordt deze parameter gebruikt als deze parameter twee keer of vaker wordt gebruikt laatste waarde. Bijvoorbeeld:

Logfile_rotate 10 # Meerdere waarden - de laatste is 5 logfile_rotate 5

inktvisbeheer

De parameters waarmee squid voor uw distributie is gebouwd, kunnen worden bekeken met de opdracht squid3 -v. In Debian wordt squeezy squid bijvoorbeeld gebouwd met de onderstaande parameters:

Prefix=/usr - prefix voor andere sleutels: --mandir=$(prefix)/share/man - map voor het opslaan van manpagina's --libexecdir=$(prefix)/lib/squid3 - map met uitvoerbare modules (inclusief helpers) - -sysconfdir=/etc/squid3 - map voor configuratieopslag --with-logdir=/var/log/squid3 - map voor logboekopslag en meer. enz...

Inktvis opzetten

Beschrijving van squid3-instellingen Ik zal beginnen met basisinstellingen, wat raadzaam is om te doen bij het instellen van een proxyserverconfiguratie. De inktvisconfiguratie bevindt zich in /etc/squid3/squid.conf, dit is het hoofdconfiguratiebestand dat alle instellingen bevat. (IN Debian-distributies en RedHat kijkt bij het opstarten ook naar de parameters van de startconfiguratiebestanden /etc/default/squid3 En /etc/sysconfig/squid3 respectievelijk). Ik zei ook dat er meer dan vijfduizend regels zijn en dat het niet de moeite waard is om iets te haasten zonder het meteen te begrijpen. squid3 configuratiesyntaxis klassiek: regels met # zijn commentaar, parameters zijn regels " parameterwaarde", is het mogelijk om te gebruiken. Het configuratiebestand is voor het gemak in secties verdeeld, maar het is belangrijk om te onthouden dat de parameters van boven naar beneden worden geparseerd in volgorde van prioriteit. Ook met behulp van parameter bevatten u kunt externe configuratiebestanden aansluiten.

Standaard wordt de naam van de host waarop Squid draait, omgezet met behulp van gethostnaam(), afhankelijk van DNS-instellingen, kan het soms niet ondubbelzinnig de naam bepalen die zal verschijnen in logs en foutuitvoer “ Gegenereerd ... door server.com (squid/3.0.STABLE2)" Om de hostnaam correct vast te leggen, moet u deze naam (FQDN??) in de parameter invoeren:

Zichtbare_hostnaam mijnproxy

Standaard accepteert inktvis verbindingen op alle interfaces. Als onze server een van is netwerkinterfaces kijkt naar buitenwereld, dan is het raadzaam om verbindingen alleen op de lokale netwerkinterface te beperken (bijvoorbeeld 10.0.0.10/24). Verantwoordelijk hiervoor http_port-parameter:

Http_poort 10.0.0.10:3128

Hoe deze parameters werken, kunt u zien in de volgende lijst:

Gw ~ # # controleer de daemon voordat u deze instelt: gw ~ # netstat -antp | grep squ tcp 0 0 0.0.0.0:3128 0.0.0.0:* LUISTER 25816/(squid) gw ~ # # wijzigingen aangebracht: gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 gw ~ # # herlees de gewijzigde gw-configuratie ~ # /etc/init.d/squid3 reload Squid HTTP Proxy 3.x-configuratiebestanden opnieuw laden. klaar. gw ~ # # controleer de werking met de gewijzigde configuratie: gw ~ # netstat -antp | grep squ tcp 0 0 10.0.0.10:3128 0.0.0.0:* LUISTER 25816/(inktvis)

Zoals u kunt zien, werkt de daemon nu alleen op de interface van het opgegeven netwerk. Het is ook vermeldenswaard dat nieuwe versies van inktvis (<3.1) поддерживают задание нескольких параметров http_port. При этом, у разных параметров могут быть указанны дополнительные ключи такие как intercept, tproxy, accel и др., например:

Gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 http_port 10.0.0.10:3129 tproxy

Deze parameters stellen de werkingsmodi van de proxyserver in. Tproxy (oude syntaxis - transparant) stelt bijvoorbeeld de modus in. Deze modi zijn aparte artikelen waard en kunnen in de toekomst worden overwogen.

Nu moet u de clientcomputer configureren en internet gebruiken. Maar standaard is toegang alleen toegestaan ​​vanaf de localhost en wanneer hij probeert toegang te krijgen tot internet, krijgt de gebruiker de foutmelding 'Toegang geweigerd'. Het log /var/log/squid3/access.log zal zoiets als dit bevatten:

1329649479.831 0 10.0.1.55 TCP_DENIED/403 3923 KRIJG http://ya.ru/ - NONE/-text/html

Om lokale netwerkclients te laten werken, is dit noodzakelijk configureer machtigingen met behulp van toegangscontrolelijsten.

Inktvistoegang instellen

Eigenlijk toegang tot instellingen is objectbeschrijving toegang via acl-parameter en dan toestemming of werkverbod het beschreven acl-object gebruikt parameter “http_access”. Het eenvoudigste formaat voor deze instellingen is als volgt:

Acl lijstnaam selectietype kenmerken van selectietype

Waar incl- parameterbeschrijving toegangscontrolelijst, waarvan de naam wordt gegeven door de waarde lijstnaam. De naam is hoofdlettergevoelig. selectie_type specificeert het type waarmee het onderstaande zal corresponderen karakteristiek_type_van_selectie. Dit kenmerk kan dergelijke veelgebruikte waarden aannemen als src(van bron) - bron van het verzoek, dst- bestemmingsadres, arp- MAC-adres, srcdomein En dstdomein- domeinnaam van respectievelijk de bron en de bestemming, haven- haven, proto-protocol, tijd- tijd en vele anderen. Dienovereenkomstig, de waarde kenmerken_van_selectie_type zal worden gevormd afhankelijk van selectie_type.

U kunt meerdere acl-regels opgeven met dezelfde namen en selectietypes, in welk geval de acl-gegevens worden gecombineerd tot één lijst met de logische OR-bewerking. Bijvoorbeeld:

Acl site dstdomain site.com acl site dstdomain site.org # vergelijkbaar met de vermelding: acl site dstdomain site.com site.org

In woorden klinkt het als volgt: de toegangslijst met de naam site is eigenaar van alle verzoeken die naar site.com OF site.org worden verzonden. Bovendien zijn reddingsnamen hoofdlettergevoelig, wat betekent dat acl site en acl Site twee verschillende toegangslijsten zijn.

Nadat de toegangslijsten zijn gegenereerd, kunt u met behulp van http_access-parameter toegang tot de opgegeven ACL toestaan ​​of weigeren. Het algemene oproepformaat is:

Http_access allow|deny [!]lijstnaam

Waar, http_toegang- parameter die de volgende toestemmingsregel specificeert ( toestaan) of verboden ( ontkennen) toegang hieronder gespecificeerd lijstnaam. Het optionele uitroepteken keert echter de betekenis van de lijstnaam om. Dat wil zeggen, markeer de betekenis met een uitroepteken lijstnaam zal klinken iedereen behalve degenen die tot deze lijst behoren. Bovendien kunt u meerdere lijsten opgeven, gescheiden door een spatie. Vervolgens wordt toegang toegestaan ​​als deze tot alle opgegeven lijsten behoort. In dit geval moeten alle toegestane regels worden opgegeven vóór ALLE verboden regels:

Http_access alles weigeren

Er kan een redelijke vraag rijzen: waarom deze regel instellen als we bijvoorbeeld alleen toegang tot de inktvis toestaan ​​aan geselecteerde acls? De rest die niet in deze acl valt, “gaat voorbij”... Het is simpel. Standaard gebruikt inktvis de regel toestaan/weigeren die het tegenovergestelde is van de laatste. Bijvoorbeeld:

# we hebben één enkele toestemmingsregel voor een bepaalde gebruikers-acl: http_access allow user # als, bij toegang tot squid, de client niet is opgenomen in deze acl, dan wordt de deny-actie daarop toegepast. # En als we twee regels hebben: http_access allow user http_access deny user2 # en de client is geen lid van acl user of acl user2, dan wordt allow hierop toegepast. # Dat wil zeggen, de tegenovergestelde actie van de laatste http_access deny user2

Dit is, zoals ze zeggen, de basis. Laten we naar een eenvoudig voorbeeld kijken. Stel dat we 2 netwerken 10.0.1.0/24 en 10.0.0.0/24 hebben, evenals een host 10.0.4.1, die toegang tot internet moeten krijgen. Om toegang mogelijk te maken, moet u een beschrijving van een nieuwe toegangslijst maken in de sectie "TOEGANGSCONTROLE" van het bestand squid.conf:

Acl lan-bron 10.0.1.0/24 10.0.0.0/24 acl lan-bron 10.0.4.1

Voor meer gemak kunt u deze regels in een apart bestand instellen, waarbij u het pad ernaartoe op de locatie specificeert kenmerken_van_selectie_type. Hier:

Gw ~ # # laten we een aparte map maken voor het opslaan van toegangslijsten gw ~ # mkdir /etc/squid3/acls/ gw ~ # # plaats onze subnetten en hosts in een apart bestand gw ~ # vim /etc/squid3/acls/lan. acl gw ~ # cat /etc/squid3/acls/lan.acl 10.0.1.0/24 10.0.0.0/24 10.0.4.1 gw ~ # # beschrijft het gemaakte bestand in de configuratie (het pad moet tussen aanhalingstekens staan) gw ~ # grep lan.acl /etc /squid3/squid.conf acl lan src "/etc/squid3/acls/lan.acl"

Laten we de aangemaakte LAN-toegangslijst toegang geven tot internet en de inktvis vertellen het configuratiebestand opnieuw te lezen:

Gw ~ # grep lan /etc/squid3/squid.conf | grep acce http_access allow lan gw ~ # service squid3 reload Squid HTTP Proxy 3.x-configuratiebestanden opnieuw laden. klaar.

Om deze sectie in een notendop samen te vatten, kunnen we zeggen dat acl een webverzoek identificeert, en dat http_access een geïdentificeerd verzoek toestaat of weigert. Nu maken onze lokale klanten graag gebruik van internet nadat ze hun browser hebben ingesteld!

Inktviscache-instellingen configureren

Een belangrijk punt bij het opzetten van inktvis is cachingparameters instellen in inktvis. De cachelocatie is ingesteld parameter cache_dir in inktvis.conf. Het parameterformaat is als volgt:

Cache_dir type padgrootte L1 L2

Waar, type- dit is een algoritme voor cachevorming, misschien: ufs (unix-bestandssysteem), aufs (asynchrone ufs), diskd(externe processen om squid-blokkering op schijf-I/O te voorkomen). Aanbevolen om te gebruiken ufs, hoewel enige lof aufs. Pad- specificeert de locatie van de cache in het bestandssysteem (moet bestaan ​​en schrijftoegangsrechten hebben voor de gebruiker waaronder squid draait - meestal een proxy). Maat- stelt de maximale grootte in waarna de cache wordt gewist. Er zijn veel holivars op internet voor deze parameter. De ideale cachegrootte is van 2 tot 10 GB, afhankelijk van het aantal clients. Ongeveer 1 GB cache voor elke 100.000 verzoeken/dag. Ik blijf bij 5GB. In Squid bevindt elk object in de cache zich in een afzonderlijk bestand; de bestanden zelf worden niet op één plaats gedumpt, maar er wordt een directoryhiërarchie met twee niveaus gebruikt. Het aantal mappen van niveau 1 en 2 en bepaal de parameters L1 en L2. Deze waarden kunnen als standaard blijven staan. Maar om u te helpen de situatie te navigeren, geef ik u een citaat van bog.pp.ru:

Uit het experiment bleek dat met een cache van 700 MB slechts 2 mappen op het eerste niveau worden gebruikt. Dat wil zeggen, voor een standaard cachemapstructuur passen een miljoen objecten (9 GB) er "comfortabel" in; als er meer zijn, moet je het aantal mappen op het hoogste niveau vergroten

Je kunt er meerdere gebruiken cache_map. Dit heeft een positief effect op de prestaties, vooral als de cache op verschillende schijven wordt geplaatst. Je kunt de cache nog sneller maken door de cache in tmpfs te plaatsen. Voor elke parameter cache_map mogelijk binnen opties sectie definieer de parameter alleen-lezen (alleen-lezen) en max-size (maximale objectgrootte).

De maximale grootte van een object in de cache wordt bepaald door de parameter maximum_object_size, is de standaardwaarde 4 MB. Ik heb deze waarde verhoogd naar 60 MB, omdat... Medewerkers op het lokale netwerk moeten vaak bestanden van hetzelfde type downloaden tot de opgegeven grootte:

Maximale objectgrootte 61440 KB

Insgelijks? er is ook parameter minimum_object_size verantwoordelijk voor de minimale grootte van een object; standaard is de waarde “0”, dat wil zeggen uitgeschakeld. Ik raad aan om de waarde van deze parameter te verhogen naar 2-3 KB, waardoor de schijfbelasting wordt verminderd bij het zoeken naar kleine objecten.

RAM-capaciteit, gebruikt door de inktvis is gespecificeerd in cache_mem-parameter, de standaardwaarde is 256 MB (in versie 3.1). Ik heb deze waarde standaard gelaten. U moet deze waarde alleen wijzigen als de inktvis u hierom vraagt ​​in de logboeken. Na deze wijzigingen moet je de inktvis opnieuw opstarten en wordt de mapstructuur gemaakt:

Gw ~ # service squid3 start Squid HTTP Proxy 3.x starten: squid3Squid HTTP Proxy 3.x cachestructuur maken ... (waarschuwing). 2012/02/19 22:58:21| Wisselmappen maken 2012/02/19 22:58:21| /var/spool/squid3 bestaat 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/00 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/01 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/02 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/03 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/04 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/05 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/06 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/07 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/08 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/09 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0A 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0B 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0C 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0D 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0E 2012/02/19 22:58:21| Mappen maken in /var/spool/squid3/0F .

Veel interessante vragen en antwoorden daarop over het gebruik van cache en geheugen door squid worden beschreven. Hiermee kunnen we de standaardoplossing voor het opzetten van een proxyserver als voltooid beschouwen.

Voorbeeld van het opzetten van een transparante inktvisproxy

Wat is transparante proxy? Dit is de bedrijfsmodus van de proxyserver wanneer de client niet configureerbaar werkt via een proxy en stuurt via het HTTP-protocol verzoeken naar het netwerk, alsof de browserclient rechtstreeks met de webserver werkt. Tegelijkertijd worden uitgaande HTTP-verzoeken verzonden naar de poort waarop de proxy draait. De proxyserver zet op zijn beurt HTTP-verzoeken om in proxyprotocolverzoeken en verzendt antwoorden naar de client, zoals een webserver. Dat. Interactie met de proxyserver vindt transparant plaats voor de client.

Het is belangrijk om te begrijpen en te weten! Deze methode ondersteunt Alleen HTTP-protocol, en ondersteunt geen gopher, FTP of andere proxying. En ook kan Squid niet tegelijkertijd in de transparante modus en de authenticatiemodus werken.

Om de transparante modus te configureren, moet u:

1. Stel de transparante modus in in de proxy-instellingen. Dit wordt binnen gedaan http_port-parameter, Bijvoorbeeld:

Http_port ip:poort transparant

2. Wikkel gebruikers de overeenkomstige regel naar de gewenste poort met behulp van iptables:

Iptables -t nat -A PREROUTING -i inkomende_interface_naam -s local_network_subnet -p tcp --dport 80 -j REDIRECT --to-port squid_port, bijvoorbeeld: iptables -t nat -A PREROUTING -i eth1 -s 10.0.0.0/24 - p tcp --dport 80 -j REDIRECT --naar-poort 3128

Alle. Kan worden genoten door ingepakte en nietsvermoedende gebruikers op onze proxyserver.

Problemen oplossen

Allereerst, diagnostiek van inktvisoperatie is bladeren door tijdschriften gelegen in /var/log/squid3. De meeste problemen worden op deze manier opgelost. Als dit het probleem niet heeft opgelost, schakel dan de daemon naar de debug-modus met de opdracht squid3 -k debuggen het probleem zal gemakkelijker te vinden zijn. Wat is eigenlijk een inktvislogboek? Logbestanden bevatten verschillende informatie over de belasting en prestaties van Squid. Naast toegangsinformatie, /pre, worden systeemfouten en informatie over het verbruik van hulpbronnen, zoals geheugen of schijfruimte, ook naar het logboek geschreven.

Inktvis logbestandsformaat is een reeks waarden gescheiden door een of meer spaties:

Time.ms response_time ip_src Squid_req_status/HTTP_status byte_snd methode URL gebruiker squid_her_status/ip_dst MIME

  • tijd- tijd in Unix-formaat (aantal seconden vanaf 00:00 1970.01.01)
  • mevrouw- milliseconden nauwkeurig tot op 3 cijfers
  • reactietijd- responstijd, milliseconden
  • ip_src- bron-IP-adres
  • Inktvis_verzoek_status- inktvisverzoekstatus (bijvoorbeeld TCP_HIT voor eerder in de cache opgeslagen objecten, TCP_MISS als het aangevraagde object niet uit de lokale cache is gehaald, UDP_HIT en UDP_MISS hetzelfde voor broerverzoeken)
  • HTTP-status- http-protocolstatus (200 voor succesvol, 000 voor UDP-verzoeken, 403 voor omleidingen, 500 voor fouten)
  • byte_snd- verzonden, byte als reactie inclusief HTTP-header
  • methode- verzoekmethode GET of POST
  • URL- gevraagde URL
  • gebruiker- naam van de geautoriseerde gebruiker
  • inktvis_her_status- Inktvishiërarchiestatus - Resultaat van zoekopdrachten naar caches van broers/ouders
  • ip_dst- IP-adres van het aangevraagde knooppunt
  • MIME- mime-type

Laten we eens kijken naar een voorbeeld:

1329732295.053 374 10.0.1.55 TCP_MISS/200 1475 KRIJG http://www.youtube.com/live_comments? - DIRECT/173.194.69.91 tekst/xml

Zoals u kunt zien, is het verzoek gedaan op 1329732295.053, het antwoord van de externe server was 374 ms, de host die de pagina heeft opgevraagd heeft IP 10.0.1.55, het opgevraagde object is niet overgedragen vanuit de lokale cache (TCP_MISS), de server responscode was 200, 1475 bytes werden overgebracht naar de client met behulp van de GET-methode, de URL http://www.youtube.com/live_comments? werd opgevraagd, de gebruikersnaam was niet gedefinieerd, het object werd rechtstreeks van de server met IP ontvangen 173.194.69.91, de tekst werd verzonden omdat mime - tekst/xml. Hier.

Enkele laatste punten over inktvis3

In het artikel heb ik de basisprincipes van de proxyserver besproken, evenals de basisinstellingen waarmee je een eenvoudige caching-server kunt implementeren en de werking van inktvis in transparante modus kunt organiseren. Squid ondersteunt verschillende autorisatieopties (via IP, via LDAP, MySQL, NTLM, enz.), de mogelijkheid om de kanaalbandbreedte te beperken en de toegang tot internetbronnen te controleren. In de volgende artikelen zal ik de werking van de SQUID met verschillende autorisatiemethoden en voorbeelden van verkeerscontrole bespreken.

Laten we ons om te beginnen voorstellen dat we een normaal netwerk hebben dat via één gateway verbinding maakt met internet (hier is de Squid-proxyserver geïnstalleerd). Laten we aannemen dat het gateway-IP-adres 192.168.1.1 is. Alle andere computers in het netwerk ontvangen IP-instellingen via DHCP. De computers in het netwerk zijn verschillend: Windows XP/7, Ubuntu en wie weet wat. Je kunt niet iedereen in de gaten houden. Maar we moeten het verkeer tellen, terwijl we de toegang tot internet versnellen, we moeten de toegang tot internet controleren (tenminste voor de “dwaas”), enz. Squid heeft uitgebreide mogelijkheden voor loggen, het beperken van de toegang, enz. Daarom hebben we alle computers in het netwerk konden onze Squid-proxyserver niet omzeilen. Daarom moeten we het verzoek van clientcomputers in ieder geval alleen via de Squid-proxyserver verzenden (sluiten, doorsturen).

Port forwarding instellen

Wanneer lokale netwerkclients toegang krijgen tot externe sites, moet Squid het verzoek op transparante wijze voor de client onderscheppen en verwerken volgens de regels: beslissen welke inhoud moet worden weergegeven, of de gebruikersactiviteit moet worden geregistreerd en of deze gebruiker überhaupt toegang heeft tot internet. Onze taak is ervoor te zorgen dat er geen browserinstellingen op de client zelf hoeven te worden gemaakt. De client heeft eenvoudigweg verbinding gemaakt met het lokale netwerk en werkt al via onze proxyserver en GEEN andere manier. Die. zelfs als iemand onze proxy wil omzeilen, zal hij dat niet meer zonder trucjes kunnen doen.

Port forwarding in FreeBSD

Als FreeBSD op onze gateway is geïnstalleerd en de standaardfirewall is IPFW, dan moeten we om deze taak uit te voeren port forwarding op de gateway installeren:

# Omleiden naar lokale proxy
/sbin/ipfw voeg 0170 toe fwd 127.0.0.1,3128 tcp van 192.168.1.0/24 naar elke 80

  • 0170 - regelnummer (in uw geval kan dit elk zijn).
  • fwd 127.0.0.1,3128 - waar we de pakketten naartoe zullen sturen, - in ons geval, naar onze geliefde Squid die op poort 3128 op de gateway draait - ...
  • van 192.168.1.0/24 - ... verzonden door computers op het lokale netwerk...
  • naar elke 80 - ... naar elke website op internet

Nu aandacht! Deze regel moet vóór de NAT-regels worden toegevoegd(Network Address Translation) zal dit verzoek ontvangen. Laat me het een beetje niet-academisch uitleggen: wat doet NAT? In ons geval verandert NAT het bronadres (vervangt het lokale IP-adres van de client door het externe IP-adres van de gateway en onthoudt van welke interne client het verzoek afkomstig was. Om Squid het verzoek van de client te laten verwerken, hoeft het niet om iets te converteren - het kan het zelf afhandelen. Daarom moet Squid het pakket in de originele vorm ontvangen en zelf beslissen wat het vervolgens gaat doen.

Bovendien zijn NAT en Squid nog steeds verschillende dingen, en een pakket geadresseerd aan bijvoorbeeld 2.3.4.5:80 bevat geen informatie over hoe je bij Squid kunt komen (naar poort 3128 van de gateway). En het pakket wordt alleen door NAT verwerkt. Inktvis zal het pakket nooit zien. Daarom is het onze taak om Squid eenvoudigweg het pakket te geven dat de browser van de gebruiker heeft verzonden. Ik zal uitleggen hoe ik een deel van de ipfw-configuratie als voorbeeld gebruik:

Cmd="ipfw -q add" $skip="skipto 5000" pif="xl1" #external interface... # Omleiden naar lokale proxy $cmd 0170 fwd 127.0.0.1,3128 tcp van 192.168.1.0/24 naar elke 80 # NAT $cmd 0200 leidt natd ip af van elk naar elk in via $pif # Sta keep-state verklaring toe. $cmd 0201 check-state # POP3/POP3S $cmd 0325 $skip tcp van elke naar elke 110 uit via $pif setup keep-state $cmd 0326 $skip tcp van elke naar elke 995 uit via $pif setup keep-state # WWW (HTTP/HTTPS/..) $cmd 0350 $skip tcp van willekeurig naar willekeurig 80 uit via $pif setup keep-state $cmd 0352 $skip tcp van willekeurig naar willekeurig 443 uit via $pif setup keep-state # Dit is skipto locatie voor uitgaande stateful regels $cmd 5000 omleiden natd ip van elk naar elk uit via $pif ...

In de bovenstaande configuratie wordt het verzoek om de site te openen eerst verwerkt door regel 0170, die het verzoek verpakt in Squid. Squid voldoet (zoals elk ander programma) ook aan de vereisten van de firewall - alleen hiervoor is regel 0170 niet van toepassing, maar regel 0350 staat Squid toe een verzoek naar internet te sturen. Om toegang te krijgen tot internet zonder Squid, moet je regel 0170 uitspreken. In dit geval ontvangt Squid niets en worden alle browserverzoeken van het lokale netwerk verwerkt volgens regel 0350.

Port forwarding in Linux

Als Linux op onze gateway is geïnstalleerd, ziet het bovenstaande commando er als volgt uit:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --naar-poort 3128

waarbij eth0 de interne interface is.

Voor het overige is de betekenis van omleidingen, etc. vergelijkbaar met hoe het werd uitgelegd voor ipfw. Alleen de regels voor het samenstellen van de ipfw- en iptables-configuratiebestanden verschillen. Een voorbeeld van iptables-regels kan worden bestudeerd.

Dat is geregeld. Nu moeten we Squid instrueren dat het pakketten moet verwerken die er oorspronkelijk niet naar waren gestuurd. Laten we de Squid-transparantiemodus inschakelen.

Transparante inktvis in squid.conf

Nu hoeft u alleen nog Squid in de onzichtbare modus te configureren, d.w.z. automatisch doorgestuurde pakketten ontvangen en verwerken. In verschillende versies van Squid waren verschillende teams hiervoor verantwoordelijk. Het instellen van Squid versie 2.6.* ziet er als volgt uit:

http_port 127.0.0.1:3128 transparant # Squid draait in transparante modus

Controleer het configuratiebestand squid.conf zorgvuldig op dubbele richtlijnen - ik heb twee uur van mijn tijd besteed aan het wenden tot het forum voor hulp bij een "niet-standaard probleem", terwijl ik eenvoudigweg geen aandacht schonk aan het feit dat de eerste regel de normale Squid-bedrijfsmodus:

http_port 3128 # Inktvis werkt normaal

Bijna alles. Start Squid opnieuw op, pas firewallregels toe met het toegevoegde port forwarding-commando - nu zal elke computer op het lokale netwerk, die via onze gateway toegang heeft tot internet, onze Squid, die voor iedereen transparant is geworden, niet kunnen omzeilen. Probeer nu een proxy in te stellen op een computer. De computer zou geen toegang tot internet moeten kunnen krijgen. Dat lijkt het te zijn. Als je vragen of advies hebt, zijn reacties welkom, vooral gezien het feit dat het opzetten van transparante Squid en port forwarding over het algemeen een “ziek” onderwerp is op de forums.

Voor- en nadelen

Een van de voordelen is het absolute vertrouwen dat alle verzoeken op poort 80 (standaard voor internet) door Squid worden verwerkt. Dienovereenkomstig zullen er logboeken en statistieken voor de baas zijn en hoeft u niet rond te rennen en alles handmatig te configureren.

De nadelen zijn onder meer:

  • onvermogen (althans op een eenvoudige manier) om gebruikers toegang te geven tot internet;
  • Als Squid plotseling crasht, wordt de toegang tot sites stopgezet. Daarom moet de beheerder er zeker van zijn dat alles in orde is, of de configuratie van de firewall op afstand kunnen wijzigen, of een script schrijven dat automatisch controleert of Squid op poort 3128 blijft hangen, en als dat niet het geval is, het dan start.

Het configureren van Squid in de transparante modus is voltooid. Dat is alles nu.

Squid is een krachtig pakket dat proxying van verzoeken implementeert die er doorheen gaan en een enorm scala aan mogelijkheden heeft. Op een lokaal netwerk wordt het meestal gebruikt als transparante caching-proxy. Laten we de 3 belangrijkste kenmerken van inktvis op volgorde configureren.

1. Installeer eerst squid (voor Debian 6)

Apt-get installeer squid3

2. Het configuratiebestand squid.conf bevindt zich in /etc/squid3/. Het bevat ongeveer 5,5 duizend regels. Maar niet alles is zo eng, het grootste deel van dit bestand bestaat uit gedetailleerd commentaar op de instellingen. Het is aan u om te beslissen hoe u gemakkelijker wijzigingen in het bestand kunt aanbrengen. Op deze manier kunt u alles wat overbodig is in een bestand verwijderen

# ga naar de map inktvis cd /etc/squid3 # maak een reservekopie van het cp-instellingenbestand squid.conf squid.conf_backup # haal van squid.conf_backup een schoon bestand met instellingen zonder commentaar in squid.conf cat squid.conf_backup | egrep -v "^#|^$" > inktvis.conf

en verkrijg een “naakt” bestand met de volgende inhoud:

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports poort 443 acl Safe_ports poort 80 # http acl Safe_ports poort 21 # ftp acl Safe_ports poort 443 # https acl Safe_ports poort 70 # gopher acl Safe_ports poort 210 # wais acl Safe_ports poort 1025-65535 # niet-geregistreerde poorten acl Safe_ports poort 280 # http-mgmt acl Safe_ports poort 488 # gss-http acl Safe_ports poort 591 # filemaker acl Safe_ports poort 777 # multiling http acl CONNECT-methode CONNECT http_access toestaan ​​manager localhost http_access weigeren manager http_access weigeren !Safe_ports http_access weigeren CONNECT !SSL_ports http_access toestaan ​​localhost http_access weigeren alles http_poort 3128 hiërarchie_stoplijst cgi-bin ? coredump_dir /var/spool/squid3 vernieuwingspatroon ^ftp: 1440 20% 10080 vernieuwingspatroon ^gopher: 1440 0% 1440 vernieuwingspatroon -i (/cgi-bin/|\?) 0 0% 0 vernieuwingspatroon . 0 20% 4320

Het enige dat overblijft is het aanbrengen van de nodige wijzigingen in de lijnen. De tweede optie is om het hele bestand te bewerken zonder het op te schonen. Dat is ook vrij eenvoudig als je weet hoe je de zoekfunctie in de vi-editor moet gebruiken. In dit geval zult u veel nuttige opmerkingen over de instellingen krijgen om u te helpen.

Om naar tekst te zoeken in de vi-editor, drukt u op de toets “/”. Als u zich in de bewerkingsmodus bevindt, moet u deze verlaten om opdrachten naar de editor te sturen door op "Esc" te drukken. We krijgen de volgende reeks acties: “/” > “voer het zoekwoord in” > “Enter”.

Nu bewerken we het bestand en maken de basisinstellingen. Als de benodigde regels er niet zijn, voeg ze dan toe of verwijder de opmerkingen.

Vi /etc/squid3/squid.conf # Sta alleen toegang tot de proxy toe vanaf het gevonden netwerk acl localnet src 172.16.0.0/24 http_access allow localnet http_access allow localhost # Standaard is de werkende poort van de proxy 3128 # Omdat onze proxy dat zal zijn transparant, dit geven we aan # evenals het adres van de interface met de poort waarop de proxy zal werken # verzoeken in iptables worden doorgestuurd naar dezelfde poort http_port 172.16.0.1:3128 transparant

3. Wij bieden caching van verzoeken

# De cachemap instellen en configureren # ufs - een methode voor het cachen van bestanden op schijf # /var/spool/squid3 - cachemap # 5000 - cachegrootte in megabytes # 16 - aantal mappen op het eerste niveau in de cache # 256 - getal van mappen op het tweede niveau in de cache cache_dir ufs /var/spool/squid3 5000 16 256 # we zullen de minimale grootte van het in de cache opgeslagen bestand beperken om het gemakkelijker te maken voor de harde schijf # of je kunt het hele punt van de cache verliezen als deze werkt langzaam minimum_object_size 2 KB # we beperken ook de maximale grootte maximum_object_size 61440 KB

4. Squid, standaard geconfigureerd, voegt verschillende headers toe aan het http-verzoek. In dit geval bevatten de eerste twee headers het client-IP (of zelfs meerdere ips, in het geval van een proxyketen). Als we dit bijvoorbeeld niet nodig hebben, als we het interne IP-adres van onze lokale omgeving niet willen onthullen, dan is het anoniem maken van inktvis heel eenvoudig

Via uit doorgestuurd_voor verwijderen

Nadat u alle instellingen heeft voltooid, is het de moeite waard om de anonimiteit van de verzoeken op de pagina http://checker.samair.ru te controleren. Als alles correct is gedaan, is het resultaat het bericht “Hervatten: u gebruikt hoog-anoniem (elite) volmacht."

Hiermee zijn de wijzigingen in het bestand voltooid. Uiteindelijk zou squid.conf er zo uit moeten zien

Acl manager proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl localnet src 172.16.0.0/24 # RFC1918 mogelijk intern netwerk acl SSL_ports poort 443 acl Safe_ports poort 80 # http acl Safe_ports poort 21 # ftp acl Safe_ports poort 443 # https acl Safe_ports poort 70 # gopher acl Safe_ports poort 210 # wais acl Safe_ports poort 1025-65535 # niet-geregistreerde poorten acl Safe_ports poort 280 # http-mgmt acl Safe_ports poort 488 # gss-http acl Safe_ports poort 591 # filemaker acl Safe_ports poort 777 # multiling http acl CONNECT-methode CONNECT http_access toestaan ​​manager localhost http_access weigeren manager http_access weigeren !Safe_ports http_access weigeren CONNECT !SSL_ports http_access toestaan ​​localnet http_access toestaan ​​localhost http_access weigeren alles http_poort 172.16.0.1: 3128 transparante hiërarchie_stoplijst cgi-bin ? cache_dir ufs/var/spool/squid3 5000 16 256 Minimum_object_size 2 kb maximum_object_size 61440 kb coredump_dir/var/spool/squid3 verfresh_pattern ^ftp: 1440 20% 10080% 10080% 10080% 10080% 10080% 10080 Refresh_pattern ^Gopher: 1440 0% 1440 Refresh_pattersn - \?) 0 0% 0 ververs_patroon . 0 20% 4320 via uit doorgestuurd_voor verwijderen

Stop inktvis om de instellingen toe te passen

Service inktvis3 stop

Bereid de inktviscachemap voor

Inktvis3 -z

Een proxy starten

Service inktvis 3 start

Als u de instellingen met betrekking tot de proxycache niet hebt gewijzigd, kunt u één enkele opdracht uitvoeren. De instellingen worden automatisch geaccepteerd zonder dat de inktvis opnieuw wordt opgestart.

Squid3 -k opnieuw configureren

5. Het enige dat overblijft is het configureren van de proxy-transparantie. Dit zorgt ervoor dat gebruikers van het lokale netwerk ongemerkt via een proxy kunnen werken. gebruikers hoeven geen programma's te configureren om met proxy's te werken. Transparantie wordt verzekerd door simpelweg http-verzoeken van poort 80 om te leiden naar de proxyserverpoort met behulp van de iptables-firewall en door de transparante proxy-modus in squid zelf in te schakelen. We hebben wijzigingen aangebracht in de inktvisinstellingen hierboven. Voeg nog een regel toe aan de iptables-regels:

Iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --naar-poort 3128

Zorg ervoor dat u in de parameter de gewenste interface specificeert waarop de proxy zal werken: -i eth0. Dit bespaart u problemen met de toegang tot de webserver vanaf internet als er meer dan één actieve interface is, als er in de toekomst een op deze server staat. En ook omwille van proxy-beveiliging.