Proxy Bridge

Transcription

Proxy Bridge
Transparent Linux Bridge mit Squid
Proxy, Dansguardian und ClamAV als
Contentscanner unter CentOS 5
Autor: Sandro Matt - s.matt(AT)arcade.ch
27. August 2009
Einleitung:
Das Ziel dieser Installation ist eine transparente Linux Bridge mit Squid als Proxyserver sowie
Dansguardian und ClamAV als Inhalts- und Virenscanner unter CentOS 5.
Inhalt
1. Voraussetzung: .................................................................................................................................... 3
2. Der Grundgedanke: ............................................................................................................................. 3
3 Installation ............................................................................................................................................ 4
3.1. Ablauf der Grundinstallation: ....................................................................................................... 4
3.2. Die weitere Installation: ............................................................................................................... 5
4. Squid Proxy Server Installation:........................................................................................................... 5
5. ClamAV sowie freshclam Installation .................................................................................................. 6
6. Dansguardian Installation.................................................................................................................... 8
7. Konfiguration der Bridge (brctl) .......................................................................................................... 9
8. Umleitung des Traffics (iptables, ebtables) ....................................................................................... 10
9. Fragen und Antworten: ..................................................................................................................... 11
10. Quellen und weitere Informationen: .............................................................................................. 12
Proxy Bridge.Docx
2
27.08.2009
1. Voraussetzung:
-
Ausreichende Hardware gemessen an den Benutzern im LAN welche über den Proxy gehen
Für 5 bis 10 Benutzer reicht ein Pentium 166MHz mit 128MB RAM aus. Eine schnelle
Harddisk ist von Vorteil. (Nicht, dass die Daten von der Internetleitung schneller da wären als
von der Harddisk.)
Ich empfehle einen Intel ATOM Prozessor 1,6GHz oder schneller, 1GB RAM und eine schnelle
SATA Disk.
-
CentOS Installation DVD - www.centos.org oder auf einem Mirror z.B. Switch Mirror
-
Zwei Linux kompatible Netzwerkkarten
2. Der Grundgedanke:
Zum Einsatz kommt ein Linux Server welcher als transparente 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:.
CentOS 5.3 stable (www.centos.org)
Squid Proxyserver Stable v. 2.6.STABLE21 (http://www.squid-cache.org/)
ClamAV Stable v. 0.95.2 (http://www.clamav.net/)
Dansguardian v. 2.10.1.1 (http://dansguardian.org/)
Proxy Bridge.Docx
3
27.08.2009
3 Installation
3.1. Ablauf der Grundinstallation:
Wir installieren CentOS 5.3 von der geladenen ersten DVD
Ich gehe hier nicht weiter auf die grundlegende Installation von CentOS ein, aber gebe einige
Hinweise am Rande:
Partitionierung:
Mindestens eine gesonderte Partiton für den Proxy Cache um Überlauf zu vermeiden.
Beispiel:
/boot 100MB
swap 2048MB (2x RAM)
/
20GB
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. Die Pakete squid, vi editor, und make nicht vergessen.
Dienste beim Systemstart:
Beim ersten Bootvorgang erscheint die Systemkonfiguration. Hier Bestimme ich, dass „squid“ und
„ntpd“ sicher bei jedem Bootvorgang gestartet werden.
WICHTIG! Beim ersten Systemstart kann man auch SELinux ausschalten. Dies muss ausgeschaltet
werden, da sonst der Squid Proxy nicht korrekt läuft.
YUM-Konfiguration:
Wir wählen einen lokalen CentOS Spiegel für den späteren Bezug von zusätzlichen Paketen welche
nicht auf unserer CD enthalten sind. (in der Schweiz: mirror.switch.ch)
Zusätzlich binden wir das Atomicorp Repository ein.
wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh
(Weitere Infos: http://www.6010.ch/wordpress/?p=192)
Update:
Nach der Installation bringen wir CentOS 5.3 mal auf den neusten Stand.
yum update erledigt dies schnell und zuverlässig.
Proxy Bridge.Docx
4
27.08.2009
3.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:
# yum remove lpr
# yum remove portmap
entfernt uns den Druck-Dienst sowie portmap welcher sich um Netzwerkfreigaben kümmert.
Danach benötigen wir noch die libesmtp Library. Download von
http://www.stafford.uklinux.net/libesmtp/libesmtp-1.0.4.tar.gz
und danach mit
# ./configure
# make
# make install
Und weiter wird noch die PCRE Library benötigt:
# .yum install pcre
# yum install pcre-devel
4. Squid Proxy Server Installation:
Wir beginnen mit der Installation des Proxy Servers Squid.
Die eigentliche Installation hat CentOS ja bereits erledigt. Aber folgende Eisntellungen müssen noch
vorgenommen werden.
Die relevante Konfigurationsdatei für Squid befindet sich unter /etc/squid/squid.conf
Wir installieren die externe Konfigurationsdatei mit folgender Option:
# wget http://www.6010.ch/test/squid.conf -O /etc/squid/squid.conf
Proxy Bridge.Docx
5
27.08.2009
Folgendes Grundgerüst stellt die Konfiguration zur Verfügung:
Proxy lauscht auf Port 8080 für Verkehr aus 192.168.0.0/255.255.0.0
http_port 8080
acl lan src 192.168.0.0/255.255.0.0
http_access allow lan
Der Proxy erhält 256MB RAM für Cache Auslagerung
cache_mem 256 MB
Die Größe der zugesicherten Plattenkapazität beträgt 1000MB
cache_dir ufs /cache 1000 16 256
Bitte die Werte nach Bedarf anpassen.
Die Konfiguration beinhaltet zusätzlich einen Abschnitt für autorisierte Benutzer.
Bitte nach der Konfiguration im Browser die IP des Proxys eingeben, den Port auf 8080 setzen und
eine Überprüfung durchführen.
5. ClamAV sowie freshclam Installation
Jetzt benötigen wir den Virenscanner und die aktuellen Definitionen.
[root@proxy ~]# yum install clamav
[root@proxy ~]# yum install clamd
[root@proxy ~]# yum install clamav-devel
Installiert automatisch die neuste Version des Antivirenscanners ClamAV und automatisch noch die
ClamAV-db. Die zwei weiteren Pakete installieren den ClamAV Daemon und die
Entwicklerbibliotheken, welche für die Installation von Dansguardian benötigt werden.
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.6010.ch/test/clamd.conf -O /etc/clamd.conf
# wget http://www.6010.ch/test/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:
# service clamd start
# freshclam
Proxy Bridge.Docx
6
27.08.2009
Die erfolgreiche Abarbeitung sollte in etwa so aussehen:
ClamAV update process started at Tue Aug 11 17:07:57 2009
main.cvd is up to date (version: 51, sigs: 545035, f-level: 42, builder: sven)
Downloading daily-9677.cdiff [100%]
daily.cld updated (version: 9677, sigs: 63969, f-level: 43, builder: ccordes)
Database updated (609004 signatures) from db.local.clamav.net (IP: 212.71.0.71)
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.
Jetzt stellen wir sicher, dass bei einem Systemstart der clamd wieder gestartet wird.
# chkconfig clamd on
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:
[root@proxy tmp]# wget http://dansguardian.org/downloads/2/Variants/AVTest/danger/eicar.com.txt -O
/tmp/eicar.com.txt
--17:10:56-- http://dansguardian.org/downloads/2/Variants/AVTest/danger/eicar.com.txt
Auflösen des Rechnernamens »dansguardian.org«.... 89.16.172.190, 2001:41c8:1:5847::2
Verbindungsaufbau mit dansguardian.org[89.16.172.190]:80... verbunden.
HTTP-Anfrage gesendet, warte auf Antwort... 200 OK
Länge: 68 [text/plain]
Speichere nach: »/tmp/eicar.com.txt«
100%[================================================================>] 68 --.-K/s in 0s
17:10:56 (3,18 MB/s) - »/tmp/eicar.com.txt« gespeichert [68/68]
[root@proxy tmp]# clamscan -v /tmp/eicar.com.txt
Scanning /tmp/eicar.com.txt
/tmp/eicar.com.txt: Eicar-Test-Signature FOUND
----------- SCAN SUMMARY ----------Known viruses: 1118627
Engine version: 0.95.2
Scanned directories: 0
Scanned files: 1
Infected files: 1
Data scanned: 0.00 MB
Data read: 0.00 MB (ratio 0.00:1)
Time: 13.654 sec (0 m 13 s)
Jetzt wo ClamAV läuft gehen wir zu Kapitel 6 über.
Proxy Bridge.Docx
7
27.08.2009
6. Dansguardian Installation
Wir beziehen die neuste Quelle für Dansguardian und übersetzen diese mit dem ClamD Support.
# cd /usr/src
# wget http://dansguardian.org/downloads/2/Stable/dansguardian-2.10.1.1.tar.gz
# tar -xzf dansguardian-2.10.1.1.tar.gz
Wir konfigurieren das Paket und übersetzen es im Anschluss:
# cd dansguardian-2.10.1.1
# ./configure –enable-clamd
# make
# make install
Bei dem Installskript gibt es einen Fehler beim Anlegen der Logverzeichnisse diesen übergehen wir
mit:
# chown -R clamav:clamav /var/log/dansguardian/
Jetzt besorgen wir uns noch die zwei Konfigurationsdateien für Dansguardian:
# wget http://www.6010.ch/test/dansguardian.conf -O /usr/local/etc/dansguardian/dansguardian.conf
# wget http://www.6010.ch/test/clamdscan.conf -O /usr/local/etc/dansguardian/contentscanners/clamdscan.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.google.ch zugreifen:
2009.8.11 22:05:44 - 192.168.10.24 http://www.google.ch/url?sa=p&pref=ig&pval=1&q=/webhp%3Frls%3Dig *SCANNED* GET 230 0 1 302 - 2009.8.11 22:05:44 - 192.168.10.24 http://www.google.ch/webhp?rls=ig *SCANNED* GET 7722 -50 1 200 text/html 2009.8.11 22:05:45 - 192.168.10.24
http://www.google.ch/extern_js/f/CgJkZRICY2grMAo4LSwrMA44BSwrMBY4DiwrMBc4AywrMBg4BCwrMCE4IEABLCswJTjJiAEsKzAmOAUsKzAnOAIs/ao73axq20s.js *SCANNED* GET 30560 0 1 200 text/javascript -
Sollte alles bis hierhin erfolgreich verlaufen sein, steht unser Grundgerüst und wir können die Bridge
konfigurieren.
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
Proxy Bridge.Docx
8
27.08.2009
7. Konfiguration der Bridge (brctl)
Wir sind an dem Punkt, wo wir unseren Server in eine Bridge umfunktionieren. Hierzu benutzen wir
brctl. Dieses Paket muss zuerst installiert werden.
#yum
install bridge-utils
Wir gehen davon aus, dass unsere Netzwerkkarten eth0 und eth1 sind. Die Bridge erhält den Namen
br0.
Mit den folgenden Befehlen richten wir eine Bridge zwischen den beiden Netzwerk-Interfaces ein.
ifconfig eth0 0.0.0.0
ifconfig eth0 up
#remove IP from eth0
#ensure the interface is up
ifconfig eth1 0.0.0.0
ifconfig eth1 up
#remove IP from eth1
#ensure the interface is up
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 eth1
#create br0 node
#add eth0 to bridge br0
#add eth1 to bridge br0
ifconfig br0 192.168.1.100 netmask 255.255.255.0
ifconfig br0 up
route add default gw 192.168.1.1
#or relevant settings for your network
#bring up interface
#or relevant settings for your network
Um die Einstellungen auch nach einem Reboot zu erhalten konfigurieren wir die drei ifcfg- Scripts.
/etc/sysconfig/network-scripts/ifcfg-br0
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
::::::::::::::
ifcfg-br0
::::::::::::::
# Virtual Ethernet Bridge by Sandro Matt
DEVICE=br0
BOOTPROTO=static
BROADCAST=192.168.10.255
IPADDR=192.168.10.144
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes
TYPE=Bridge
STP=yes
IPV6INIT=no
::::::::::::::
ifcfg-eth0
::::::::::::::
# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
HWADDR=00:50:FC:EE:20:CA
ONBOOT=yes
BRIDGE=br0
Proxy Bridge.Docx
9
27.08.2009
::::::::::::::
ifcfg-eth1
::::::::::::::
# Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller
DEVICE=eth1
HWADDR=00:1C:C0:9B:4E:97
ONBOOT=yes
BRIDGE=br0
Nach einem Neustart sollte jetzt ein neues Netzwerkinterface namens br0 zur Verfügung stehen.
8. Umleitung des Traffics (iptables, ebtables)
Da eine Bridge auf der OSI Schicht 2 arbeitet, bekommt iptables vorerst gar nichts von dem Verkehr
mit. Wir benutzten ebtables um dort einzugreifen und Verkehr an Port 80 (--dport) an iptables zu
leiten.
ebtables muss zuerst installiert werden. Da dies nicht im Offiziellen YUM Repository aufgenommen
wurde, installieren wir das Paket per RPMvon http://dag.wieers.com/rpm/packages/ebtables/.
# cd /usr/local/src/
# wget http://dag.wieers.com/rpm/packages/ebtables/ebtables-2.0.8.2-1.el5.rf.i386.rpm
und danach
# rpm -i ebtables-2.0.8.2-1.el5.rf.i386.rpm
Jetzt können wir den Traffic mit folgendem Befehl umleiten:
# 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.
Proxy Bridge.Docx
10
27.08.2009
9. Fragen und Antworten:
Frage: Wie starte ich die Programme automatisch beim booten?
Antwort: Um all diese Programme und Konfigurationen bei jedem Reboot zu starten, habe ich ein
Script geschrieben und starte dies im rc.local.
#!/bin/sh
#
# Start Script fuer dansguardian und iptable Eintraege
# (c) by Sandro Matt
#
#startet dansguardian
/usr/local/sbin/dansguardian
# schlaeft 5 sekunden
sleep 5
# setzt die ebtables rule
ebtables -t broute -A BROUTING -p IPv4 --ip-protocol 6 --ip-destination-port 80 -j redirect --redirect-target ACCEPT
# setzt die iptables rule
iptables -t nat -A PREROUTING -i br0 -p tcp --dport 80 -j REDIRECT --to-port 3128
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
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
Proxy Bridge.Docx
11
27.08.2009
10. Quellen und weitere Informationen:
Configuring a Transparent Proxy/Webcache in a Bridge using Squid and ebtables - Ariel Molina Rueda
- Freshmeat.net
Unsichtbarer Schutz mit Linux: Firewall auf Bridge-Ebene - Ralf Spenneberg - Linux Magazin
Linux-Firewalls mit Iptables & Co. - Ralf Spenneberg - Addison Wesley Verlag
Adam Palmer - http://www.adamsinfo.com/brctl-creating-a-network-bridge/
EBTables - http://ebtables.sourceforge.net/
IDEE und VORLAGE dieses Dokumentes: Stefan Bauer, http://www.plzk.de/
Howto Version 1.0
Dieses HOWTO wurde mit größter Sorgfalt erstellt. Trotzdem können Fehler nicht vollständig ausgeschlossen werden. Ich
kann für fehlerhafte Angaben und deren Folgen weder eine juristische Verantwortung noch irgendeine Haftung
übernehmen. Für Verbesserungsvorschläge und Hinweise auf Fehler bin ich dankbar.
Proxy Bridge.Docx
12
27.08.2009