Linux
Bridge mit Squid Proxy sowie Dansguardian
und ClamAV als Contentscanner unter Debian
Stefan Bauer (sb at edv-fix dot de)
23 September 2006
Einleitung:
Transparente Linux Bridge mit Squid als Proxyserver sowie Dansguardian
und ClamAV als Inhaltsscanner unter Debian
Voraussetzung:
Ausreichende Hardware gemessen an den Benutzern im Lan welche
über den Proxy gehen
Debian Stable Installations CD
(hier
erhältlich)
2 Linux kompatible Netzwerkkarten (kompatible
Karten hier)
Bestehende Internetverbindung auf Zweitrechner, der als Router agiert.
Evtl. vorher IP Adresse und Nameserver IP's erfragen.
Ablauf:
1. Der Grundgedanke
1.1 Ablauf der Installation
1.2 Die weitere Installation
2. Squid Proxy Server Installation
3. ClamAV sowie freshclam Installation
4. Dansguardian Installation
5. Konfiguration der Bridge - Iptables /
Ebtables
6. Verweise und Informationen
7. Quellen und weitere Hinweise
1. Der
Grundgedanke:
Zum Einsatz kommt ein Linux Server welcher als Bridge im eigenen
Netzwerk fungiert. Die Bridge kann, ohne die Konfiguration im Netzwerk
umzustellen, einfach dazwischen geklemmt werden und übernimmt
von nun an die Weiterleitung des Verkehrs.
In unserem Fall schnappt sich die Bridge Pakete an Port 80
(Web-Anfragen) gibt sie weiter an Dansguardian welcher im Schlepptau
mit ClamAV den Inhalt auf Viren prüft. Falls die angeforderte
Seite frei von Viren ist, übergibt Dansguardian die Anfrage an
Squid welcher jene lokal speichert und für zukünftige
Anfragen bereit hält um die Bandbreite zu schonen. Im
Anschluss liefert Squid die angeforderte Seite an den Benutzer aus.
Zum Einsatz kommen folgende Versionen / Programme:.
Debian Linux Stable v. 3.1r3 (www.debian.org)
Squid Proxyserver Stable v. 2.5.9-10sarge2 (www.squid-cache.org)
ClamAV Stable v. 0.88.4 aus den Sourcen (www.clamav.org)
Dansguardian v. 2.8.0.6 inkl. ClamAV Schnittstelle v. 6.4.4 Stable
(http://www.harvest.com.br/asp/afn/dg.nsf)
1.1 Ablauf
der Installation:
Wir installieren Debian Stable von der geladenen ersten CD und
wählen am Boot-Prompt
# linux26
Wir benötigen Kernel 2.6 um den Paketfilter zur Bearbeitung
der Pakete für die Bridge zu überreden, was mit
Kernel 2.4 nur mit zusätzlichem Patchen des Kernels
möglich ist.
Hinweise für 2.4 Kernelbenutzer
(http://ebtables.sourceforge.net/download.html#latest)
Ich gehe hier nicht weiter auf die grundlegende Installation von Debian
ein, aber gebe einige Hinweise am Rande:
Weitere Infos unter http://debiananwenderhandbuch.de/debianinstallation.html
Filesystem:
Wir verwenden reiserfs, dieses hat sich als beständig erwiesen
und nimmt uns Systemabstürze nicht so übel wie
Ext2/3. Zusätzlich ist die Geschwindigkeit besser als mit
Ext2/3.
Partitionierung:
Mindestens eine gesonderte Partiton für den Proxy Cache um
Überlauf zu vermeiden
Auswahl der Installation:
Bei der Frage ob es sich um einen Desktop Rechner handelt, oder ob wir
einen File-Server oder Ähnliches wünschen,
wählen wir nichts aus um die installierten Pakete so gering
wie möglich zu halten.
Apt-Konfiguration:
Wir wählen einen lokalen Debian Spiegel für den
späteren Bezug von zusätzlichen Paketen welche nicht
auf unserer CD enthalten sind.
1.2 Die
weitere Installation:
Nachdem unser Server das erste mal in seine neue Umgebung gestartet
hat, loggen wir uns ein und deaktivieren ein paar grundlegende Dinge:
# apt-get remove lpr portmap at
entfernt uns den Druck-Dienst sowie portmap welcher sich um
Netzwerkfreigaben kümmert.
# apt-get install libesmtp5
libesmtp-dev pkg-config zlib1g zlib1g-dev wget bzip2 ebtables
# apt-get
install libc6-dev libc6 libbz2-1.0 libssl-dev gcc libgmp3 libgmp3-dev
bridge-utils
installiert uns weitere Pakete welche für die
Übersetzung von ClamAV sowie Dansguardian nötig sind.
Jetzt legen wir noch eine weitere Systemgruppe sowie einen
Systembenutzer an, um bei der weiteren Installation die
Installationssabläufe nicht zu behindern
# groupadd clamav
# groupadd nobody
# useradd -g
clamav -s /bin/false -c "AntiVirus Dienst" clamav
Legt 2 Gruppen an für clamAV sowie Dansguardian. Letztlich
erstellen wir auch einen Systembenutzer für clamav
2. Squid
Proxy Server Installation:
Wir beginnen mit der Installation des Proxy Servers Squid.
# apt-get install
squid
Alle anfallenden Fragen verneinen wir, da wir auf eine fertige
Konfigurationsdatei zurückgreifen.
Die relevante Konfigurationsdatei für Squid befindet sich
unter /etc/squid/squid.conf
Wir installieren die externe Konfigurationsdatei mit folgender
Option:
# wget
http://www.plzk.de/archiv/files/cfgs/squid.conf -O /etc/squid/squid.conf
Folgendes
Grundgerüst stellt die Konfiguration zur Verfügung:
Proxy lauscht auf Port
8080 für Verkehr aus 169.254.0.1-254
http_port
8080
acl
lan src 169.254.0.0/255.255.255.0
http_access
allow lan
Der Proxy
erhält 128MB RAM für Cache Auslagerung
cache_mem
128 MB
Die
Größe der zugesicherten Plattenkapazität
beträgt 1000MB
cache_dir
ufs /var/spool/squid 1000 16 256
Bitte
die Werte nach Bedarf anpassen.
Die Konfiguration beinhaltet zusätzlich einen Abschnitt
für authorisierte Benutzer.
Bitte nach der Konfiguration im Browser die IP des Proxys eingeben, den
Port auf 8080 setzen und eine Überprüfung
durchführen
Bei Problemen siehe Verweise und Informationen:
3. ClamAV
sowie freshclam Installation
Da ClamAV aus dem Stable Zweig von Debian veraltet ist und ClamAV nur
einer aktuellen Version erlaubt, die Virendatenbanken zu erneuern bauen
wir uns unser ClamAV selber.
Hierzu wechseln wir in folgendes Verzeichnis und geben ... Befehl ein:
# cd /usr/src
# wget
http://jaist.dl.sourceforge.net/sourceforge/clamav/clamav-0.88.4.tar.gz
# tar xvzf
clamav-0.88.4.tar.gz
Nach dem erfolgreichen Entpacken wechseln wir in das entstandene
Verzeichnis und starten die Konfiguration:
# cd
/usr/src/clamav-0.88.4
# ./configure
--sysconfdir=/etc
Sollte dieser Befehl unerwarteter Weise Warnungen liefern, bitte kurze
E-Mail an mich (info at edv-fix dot de)
Läuft alles glatt, starten wir die Übersetzung der
Quellen und die anschließende Installation:
# make
# make install
Sollte dieser Befehl Probleme bei der Rechtevergabe des Log
Verzeichnisses haben (/var/log/clamav/) bitte die Rechte
händisch setzen.
Bitte bei Zeiten überprüfen ob nicht schon neuere
Versionen vorliegen (http://www.clamav.net/stable.php#pagestart)
Wir finden die Konfiguration unter /etc/clamd.conf
sowie /etc/freshclam.conf
Wir beziehen die externen Konfigurationsdateien und binden diese ins
System ein:
# wget
http://www.plzk.de/archiv/files/cfgs/clamd.conf -O /etc/clamd.conf
# wget
http://www.plzk.de/archiv/files/cfgs/freshclam.conf -O
/etc/freshclam.conf
Jetzt ist es an der Zeit das erste mal den clamd zu starten und unsere
Virendefinition zu holen was wir folgendermaßen machen:
# clamd
# freshclam
Die erfolgreiche Abarbeitung sollte in etwa so aussehen:
bridge:/#
freshclam
ClamAV
update process started at Sat Sep 30 16:02:53 2006
Downloading
main.cvd [*]
main.cvd
updated (version: 40, sigs: 64138, f-level: 8, builder: tkojm)
Downloading
daily.cvd [*]
daily.cvd
updated (version: 1951, sigs: 6733, f-level: 8, builder: ccordes)
Database
updated (70871 signatures) from db.de.clamav.net (IP: 217.160.141.39)
Clamd
successfully notified about the update.
Die letzte Zeile sagt aus, dass unsere Virendefinition erfolgreich
erneuert wurde.Des weiteren gibt der Update-Prozess eine Info an den Clamd ab, dass neue Virendefinitionen vorliegen.
Wir überprüfen ob der Scanner richtig arbeitet und
besorgen uns ein Eicar-Testfile:
# wget
http://dansguardian.org/downloads/2/Variants/AVTest/danger/eicar.com.txt
-O /tmp/eicar.com.txt
# clamscan -v
/tmp/eicar.com.txt
Die Ausgabe sollte in etwa so lauten:
bridge:/#
clamscan -v /tmp/eicar.com.txt
Scanning
/tmp/eicar.com.txt
/tmp/eicar.com.txt:
Eicar-Test-Signature FOUND
-----------
SCAN SUMMARY -----------
Known
viruses: 70871
Engine
version: 0.88.4
Scanned
directories: 0
Scanned
files: 1
Infected
files: 1
Data
scanned: 0.00 MB
Time:
4.309 sec (0 m 4 s)
Jetzt wo ClamAV läuft gehen wir zu Kapitel 4
über
4.
Dansguardian Installation:
Da Dansguardian die Anti-Virus Schnittstelle bis dato nur in seiner
Alpha Version mitliefert, greifen wir auf ein fertiges Paket
zurück.
Wir beziehen die Quelle für Dansguardian inkl. Anti-Virus
Schnittstelle:
# cd /usr/src
# wget http://www.plzk.de/archiv/files/dansguardian-2.8.0.6-antivirus-6.4.4.tar.bz2
# tar jxvf
dansguardian-2.8.0.6-antivirus-6.4.4.tar.bz2
Wir konfigurieren das Paket und übersetzen es im Anschluss:
# cd
dansguardian-2.8.0.6-antivirus-6.4.4
# ./configure
# make
# make install
Bei dem Installskript gibt es einen Fehler beim Anlegen der Logverzeichnisse diesen übergehen wir mit:
# chown -R
nobody:nogroup /var/log/dansguardian/
Jetzt beziehen wir noch eine extrerne Konfigurationsdatei und binden
diese ins System ein:
# wget http://www.plzk.de/archiv/files/cfgs/dansguardian.conf -O
/etc/dansguardian/dansguardian.conf
Jetzt ist es an der Zeit, das erste mal Dansguardian zu starten:
# dansguardian
Dansguardian nimmt Anfragen auf Port 3128 an und gibt sie im Anschluss
an Squid weiter. Wir prüfen dies, indem wir in unserem Browser
als Proxy den Host des Servers eintragen und als Port 3128.
Wir beobachten die Log Dateien von Dansguardian unter
/var/log/dansguardian/access.log
#
tail -f /var/log/dansguardian/access.log
Die Ausgabe sollte in etwa so sein, wenn wir auf www.edv-fix.de
zugreifen:
2006.9.30
16:38:00 - 169.254.0.15 http://www.edv-fix.de *SCANNED* GET
1373
2006.9.30
16:38:01 - 169.254.0.15 http://www.edv-fix.de/css/print.css
*SCANNED* GET 1041
2006.9.30
16:38:02 - 169.254.0.15 http://www.plzk.de/archiv/files/icons/handy.gif
*SCANNED* GET 135
2006.9.30
16:38:02 - 169.254.0.15
http://www.plzk.de/archiv/pics/badge-link-apache.gif
*SCANNED* GET 276
2006.9.30
16:38:02 - 169.254.0.15 http://www.plzk.de/archiv/pics/vim-powered.png
*SCANNED* GET 0
2006.9.30
16:38:02 - 169.254.0.15 http://www.plzk.de/archiv/pics/debianbanner.png
*SCANNED* GET 530
2006.9.30
16:38:02 - 169.254.0.15 http://www.edv-fix.de/img/blume.jpg
*SCANNED* GET 1098
2006.9.30
16:38:03 - 169.254.0.15 http://www.edv-fix.de/img/wechselschatten.png
*SCANNED* GET 166
2006.9.30
16:38:03 - 169.254.0.15 http://www.edv-fix.de/img/blaue-blume.png
*SCANNED* GET 5700
Soltle alles bis hierhin erfolgreich velaufen sein, steht unser
Grundgerüst und wir können die Bridge konfigurieren.
Sollten bis dato Probleme aufgetreten sein, siehe: Verweise
und Informationen:
Hinweis: Per Default ist Dansguardian extrem hartnäckig.
Hierzu bitte die Files unter /etc/dansguardian/exept* sowie banned*
anpassen.
except enthällt Informatinen was ausgenommen wird
banned* enthält die Verbote
5.
Konfiguration der Bridge - Iptables/Ebtables:
Wir sind an dem Punkt, wo wir unseren Server in eine
Bridge umfunktionieren. Hierzu benutzen wir brctl (man
brctl)
Wir gehen davon aus, dass unsere Netzwerkkarten eth0 und eth1 sind. Die
Bridge erhält den Namen br0
Folgende Einstellungen in der /etc/network/interfaces
erstellt automatisch beim Systemstart eine Bridge und startet sie.
auto
lo br0
iface
lo inet loopback
iface
br0 inet static
pre-up
brctl addbr br0
pre-up
brctl addif br0 eth0
pre-up
brctl addif br0 eth1
pre-up
ifconfig eth0 0.0.0.0
pre-up
ifconfig eth1 0.0.0.0
post-down
brctl delbr br0
address
169.254.0.100
netmask
255.255.255.0
network
169.254.0.0
broadcast
169.254.0.255
gateway
169.254.0.15
bridge_fd
0
bridge_hello
0
bridge_stp
off
Nach einem Neustart sollte jetzt ein neues Netzwerkinterface namens br0 zur
Verfügung stehen.
Da eine Bridge auf der OSI Schicht 2 arbeitet, bekommt iptables
vorerst garnichts von dem Verkehr mit. Wir benutzten ebtables
um dort einzugreifen und Verkehr an Port 80 (--dport) an iptables zu
leiten.
# ebtables -t
broute -A BROUTING -p IPv4 --ip-protocol 6 --ip-destination-port 80 -j
redirect --redirect-target ACCEPT
Dadurch sind alle Pakete an Port 80 für iptables
zugänglich. iptables erfährt aber erst mit folgender
Zeile was es damit tun soll:
# iptables -t nat
-A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Jetzt sollte Verkehr an Port 80 welcher normalerweise ungesehen durch
die Bridge geht an den lokalen Port 3128 wandern und
überprüft werden.
Falls Probleme auftreten siehe Verweise und Informationen:
6.
Verweise und Informationen:
Frage: Wie automatisiere ich
den Start von Dansguardian ClamAV sowie der Iptable/Ebtable Regeln?
Antwort:
Die Quick and Dirty
Lösung ist alle Eintrage in eine Datei
zu schreiben und beim Systemstart mit cron zu starten.
Lege Datei proxy-bridge.sh
unter /etc/proxy-bridge.sh ab.
Setze die Rechte ausführbar. (chmod +x )
Binde die Datei in /etc/crontab ein ( echo "@reboot
root /etc/proxy-bridge.sh"
>> /etc/crontab )
Frage: Wie kontrolliere ich ob die
Bridge schon Mac Adressen gelernt hat?
Antwort: brctl showmacs br0
Frage: Ich erhalte im Browser: "Die
angeforderte Webseite konnte nicht gefunden werden"
Antwort: Dies kann mehrere Ursachen
haben, gehe folgendermaßen vor:
- Prüfe ob du ausserhalb der Bridge die Seite
erreichen kannst
- Prüfe ob ein DNS (Namensauflösung)
Problem besteht (nslookup / dig)
- Überwache den lokalen Verkehr mit tcpdump um zu
sehen, wo die Pakete landen ( #
tcpdump -i br0 tcp port 80 )
- Behalte die Übersicht von iptables im Auge, um zu
sehen, wo deine Pakete hin gehen ( #
iptables -t nat -vnL )
- Kontrolliere ob die IP-Adressen, die Host Adressen die
Gateway Adressen sowie die Nameserver korrekt sind
- Prüfe ob die physikalische Verbindung steht
Frage:
Ich kann die Testviren von der Dansguardian Webseite speichern?! Was
ist mit der Überprüfung?
Antwort:
Die Log Dateien hätten es euch verraten.
Standardmäßig ist die Dansguardianseite von der
Überprüfung ausgenommen
siehe /etc/dansguardian/exceptionsitelist
Frage: Warum?
Antwort:
Weil!
7.
Quellen und weitere Informationen:
Configuring a Transparent Proxy/Webcache in a Bridge using Squid and ebtables - Ariel Molina Rueda - Freshmeat.net
Xen Installation - Routing - Bridging - pug.org
Unsichtbarer Schutz mit Linux: Firewall auf Bridge-Ebene - Ralf Spenneberg - Linux Magazin
Linux-Firewalls mit Iptables & Co. - Ralf Spenneberg - Addison Wesley Verlag
Howto
Version 0.1
Dieses
HOWTO wurde mit größter Sorgfalt erstellt. Trotzdem
können Fehler nicht
vollstaädig ausgeschlossen werden. Ich kann für fehlerhafte
Angaben
und deren Folgen weder eine juristische Verantwortung noch irgendeine
Haftung uebernehmen. Für Verbesserungsvorschläge und Hinweise
auf
Fehler bin ich dankbar.