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