Linux Bridge mit Squid Proxy sowie Dansguardian
und ClamAV als Contentscanner unter Debian
linux-image
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:


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.