Proxy-Server squid

Ein Proxy-Server hat die Aufgabe, alle abgefragten Internetseiten zu speichern und bei einer erneuten Anfrage auf die bereits gespeicherten Seiten zurückzugreifen. Dadurch kann auf häufig besuchte Seiten viel schneller zugegriffen werden, als wenn die Anfrage die langsame Internetverbindung bemüht.

Squid ist hierfür bestens geeignet. Damit squid auch als FTP-Proxy fungiert, muss mindestens die Version "Version 2.3.STABLE4" verwendet werden. Ältere Versionen unterstüzen nur das HTTP-Protokoll.

tar xfj squid-2.5.STABLE4.tar.bz2
cd squid-2.5.STABLE4
./configure  --sysconfdir=/etc/squid --enable-ssl --enable-linux-netfilter 
make
make install

Die letzte Option beim Configure-Skript aktiviert transparentes Proxy. Was das ist und wozu man es verwendet, wird weiter unten erläutert. Nach erfolgreicher Kompilation finden sich die Squid-Startdateien in /usr/local/squid/bin. Die Konfiguration findet in /etc/squid/squid.conf statt.

http_port 3128
cache_mem  8 MB
cache_swap_low  90
cache_swap_high 95
maximum_object_size 65536 KB
minimum_object_size 0 KB
cache_dir ufs /squid_cache 4000 16 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
emulate_httpd_log off
mime_table /etc/squid/mime.conf
pid_filename /var/lock/squid.pid
debug_options ALL,0
log_fqdn off
ftp_user Squid@krypton.laas.priv
ftp_list_width 96
ftp_passive off
dns_nameservers 192.168.0.1
unlinkd_program /usr/bin/unlinkd
refresh_pattern  ^ftp:    1440 20% 10080
refresh_pattern  ^gopher: 1440  0%  1440
refresh_pattern  .           0 20%  4320
reference_age 2 month
quick_abort_pct 80
connect_timeout 120 seconds
request_timeout 60 seconds
shutdown_lifetime 30 seconds
acl all        src    0.0.0.0/0.0.0.0
acl laas       src    192.168.0.0/255.255.255.0
acl localhost  src    127.0.0.1/255.255.255.255
acl manager    proto  cache_object
acl Protocols  proto  HTTP FTP SSL
acl Safe_ports port   20 21 22 80 443
acl Methods    method CONNECT GET PUT HEAD INFO
http_access allow manager localhost
http_access deny manager
http_access allow Protocols laas
http_access deny !Safe_ports
http_access deny !Methods
http_access deny all
icp_access deny all
miss_access allow all
cache_mgr webmaster@mail.laas.de
cache_effective_user squid
cache_effective_group nogroup
visible_hostname proxy.laas.de
append_domain .laas.priv
forwarded_for off
anonymize_headers deny From Referer Server
icon_directory  /etc/squid/icons
error_directory /etc/squid/errors

Man sollte bei der Konfiguration den Speicherbedarf des temporären Verzeichnisses einplanen. Die hier vorgestellte Konfiguration geht von 4 GByte aus. In der angegebenen Beispielkonfiguration ist allen Nutzern des lokalen Netzes erlaubt worden, squid zu benutzen.

Die Nutzer müssen in ihrem Browser für HTTP-, HTTPS- und FTP-Verbindungen unseren Rechner angeben. In allen Fällen wird der Port 3128 verwendet, wenn nicht anders in der squid-Konfiguration festgelegt.

Transparenter Proxy

Ein transparenter Proxy ist ein Zwischenspeicher, der von den Benutzern nicht extra im Browser eingestellt werden muss. Im großen und Ganzen funktioniert das derart, dass ihre Anfragen "heimlich" über den Proxy geleitet werden, ohne dass sie das beeinflussen können. Der Vorteil liegt auf der Hand. Die Nutzer müssen im Browser keinen Proxy eintragen, was gerade bei einer größeren Anzahl von Rechnern viel Arbeit ersparen kann.

Squid ist in der Lage, transparentes Proxying anzubieten. Dazu werden in der Konfigurationsdatei die folgenden Optionen aktiviert.

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Ferner muss noch die Firewall angepaßt werden. Dazu werden alle Pakete, die auf dem internen Netzgeräten ankommen (hier: eth0 und eth1) mit Zielport 80 auf den Proxy geleitet. Die Regel sieht in diesem Fall so aus und sollte am besten vor allen anderen Regeln zum externen Netzwerk stehen:

#lokales Netz
LAN="192.168.0.0/16"
#Interface (LAN)
i="eth0"
$IPTABLES -A PREROUTING -t nat -i $i -p tcp -d ! $LAN --dport 80 \\
 -s $LAN -j REDIRECT --to-port 3128