SquidGuard-Update Skript

(1198 Worte insgesamt im Text)
(19808 mal aufgerufen)  Druckerfreundliche Ansicht [1]

Stand: 24.05.2005

Ausgangslage

Auf Schulservern wird als Proxyserver oft der unter GPL [2] stehende Squid-Caching Proxy Server verwendet. Als Redirector kann dann SquidGuard [3] zum Einsatz kommen, welcher ebenfalls unter der GPL stehend als Backend eine Berkeley Datenbank verwendet.

Die Einträge in dieser Datenbank dienen dabei meist als "Blacklist", d.h. die hier eingetragenen Domains und URLs werden nicht zugelassen. Der Aufwand für die Pflege und Aktualisierung der Einträge in der Datenbank ist jedoch sehr hoch, wenn man einen ausreichenden Schutz garantieren möchte.

Im Internet selbst sind freie Blacklists verfügbar, die aber Probleme aufwerfen:

Projektziele

Folgende Ziele sollen mit dem Skript erreicht werden:
  1. Automatisches Update per Cron-Job über Nacht. Das Skript liest die Listen aus einer Konfigurationsdatei und bindet die aktivierten Listen automatisch in den bestehenden Filter ein. über ein Logfile kann der Admin nachvollziehen, was passiert.
    Da viele Domains, etc. in vielen Listen doppelt auftauchen, werden diese mehrfachen Einträge aussortiert, bevor sie in die Datenbank von SquidGuard eingepflegt werden.
  2. Manuelles Update: Der Admin übergibt eine neue Liste testweise an das Skript. Dieses kann die Listen für eine genauere Analyse herunterladen und die Inhalte (Verzeichnisse) anzeigen. Das Einbinden in eine "default Liste" ist ebenso möglich. Damit lassen sich dann schnell andere Listen hinzufügen oder testen ohne dass Änderungen an der Konfigurationsdatei notwendig sind.
  3. Die Konfigurationsdatei. Diese kann mit verschiedenen GUIs (beim OSS [4] z.B. durch das Webfrontend) bearbeitet werden und hat folgende Struktur (Beispiel):

    [global]
    loglevel=1
    logfile=get_blacklist.log
    default_dest=blacklist
    tempdir=/tmp/blacklist
    sg_conf=/etc/squid/squidguard.conf
    squid_conf=/etc/squid/squid.conf
    # If YOU are behind a proxy-server just fill out the next lines
    #http_proxy=http://proxy:8080
    #http_proxy_user=admin
    #http_proxy_pass=mypass
    #ftp_proxy=http://proxy:8080
    #ftp_proxy_user=admin
    #ftp_proxy_pass=mypass

    [SquidGuard.org]
    URL=http://ftp.teledanmark.no/pub/www/proxy/squidGuard/contrib/blacklists.tar.gz
    dests=ads=>ads
    dests=aggressive=>blacklist
    dests=audio-video=>blacklist
    dests=drugs=>blacklist
    dests=gambling=>blacklist
    dests=hacking=>blacklist
    dests=porn=>blacklist
    dests=warez=>blacklist
    active=yes
    rating=5


    In der [global] Sektion werden einige für das Skript nötige Werte gesetzt.
    WertBeschreibung
    loglevelReicht von 1(wenig) bis 7(debug) und kann mit der Option "-d" beim Start des Skripts überschrieben werden.
    logfileHier werden sämtliche Meldungen des Skripts ausgegeben.
    default_destSoll eine fremde URL eingebunden werden oder gibt es für eine eingetragene URL keine dest-Zuordnung, werden alle in der URL enthaltenen Listen in dieser Liste zusammengefasst.
    tempdir"Arbeitsverzeichnis" - hier werden die Listen ausgepackt und bearbeitet. Das Verzeichnis wird automatisch angelegt und auch wieder gelöscht.
    sg_confOrt der SquidGuard-Konfigurationsdatei. Sollte der hier angegebene Ort nicht mit der in der squid.conf übereinstimmen, dann wird eine entsprechende Warnung ausgegeben und die Konfiguration in der squid.conf genutzt. Diese Variable dürfte also demnächst obsolet werden.
    squid_confOrt der Konfigurationsdatei von Squid [5].
    http_proxyWenn der Server die URL nur über einen HTTP-Proxy beziehen kann, dann wird hier dieser Proxy angegeben.
    http_proxy_userEvtl. notwendiger Nutzername für die Authentifizierung am HTTP-Proxy.
    http_proxy_passEvtl. notweniges Passwort für die Authentifizierung am HTTP-Proxy.
    ftp_proxyWenn der Server die URL nur über einen FTP-Proxy beziehen kann, dann wird hier dieser Proxy angegeben.
    ftp_proxy_userEvtl. notwendiger Nutzername für die Authentifizierung am FTP-Proxy.
    ftp_proxy_passEvtl. notweniges Passwort für die Authentifizierung am HTTP-Proxy.

    Die [SquidGuard.org]-Sektion dient mal als Beispiel für eine Blacklist.

    WertBemerkung
    urlDie vollständige URL, von welcher die Liste bezogen wird.
    destsHier werden die Inhalte der externen Liste den internen Listen zugeordnet. So gibt es beim OSS nur 2 interne Listen, ads und blacklist, bei Arktur gibt es mehr, die hier zugeordnet werden müßten.
    activedamit lassen sich Listen schnell vom automatischen Update ausnehmen.
    ratingFür später - hier ist eine Bewertung der einzelnen Listen geplant. Dann könnten diese Listen z.B. anders eingeordnet werden.

    Weitere Schlüssel könnten später noch zu den einzelnen Sektionen hinzugefügt werden - das Update-Skript wertet derzeit aber nur die hier vorgestellten aus.

    Hinweise zu den Funktionen des Skripts

    Automatische Sperre

    Das Skript erzeugt bei einem Aufruf eine Datei namens get_blacklist.pid im Verzeichnis /var/run. Wenn diese Datei existiert, werden weitere Aufrufe des Skripts blockiert. Dies soll verhindern, dass das Skript zu viel Internet-Bandbreite und zu viel Prozessorlast erzeugt. Das Herunterladen und Einbinden der Blacklists kann auch bei einem aktuellen Rechner bis zu einer Stunde dauern.

    Wenn Sie also das Skript dennoch neu starten möchten, müssen Sie mit dem Befehl
    killall `pidof get_blacklist`
    das Skript gewaltsam beenden. Sollte das Skript beim Start mit einer Fehlermeldung abbrechen, sollten Sie überprüfen, ob die Datei /var/run/get_blacklist.pid noch existiert und diese ggf. löschen.

    Zwischenspeichern der Listen

    Um bei der späteren Aktualisierung der Listen Bandbreite und Zeit zu sparen, werden die heruntergeladenen Listen in einem separatem Verzeichnis gespeichert. Stellt das Skript bei einem erneuten Update keine Änderungen der Liste auf dem externen Servern im Vergleich zur schon vorhandenen Liste fest, wird diese Liste übersprungen und somit (Rechen-)Zeit gespart.

    Das verwendete Verzeichnis ist abhängig von dem in der squidguard.conf angegebenen Datenbankverzeichnis. Die Listen werden in einem (automatisch neu erstellten) Unterverzeichnis namens download gespeichert.

    Update von einzelnen Listen

    Um nicht jedesmal die Konfigurationsdatei ändern zu müssen, wenn eine Aktualisierung nur von einzelnen, ausgewählten Listen erfolgen soll, nimmt das Skript als Übergabeparameter auch URLs an. Sind diese URLs in der Konfigurationsdatei enthalten, werden die entsprechenden Parameter ausgewertet und angewendet.

    Sind die URLs nicht in der Konfigurationsdatei enthalten, werden die externen Listen in die in der "globals"-Sektion der Konfigurationsdatei mit "default_dest" bezeichnete interne Liste einge­bundne. So kann schnell ein Update von einer bislang unbekannten Liste gemacht werde.

    Unbekannte Listen analysieren

    Wenn man nicht weiß ob und wie man eine bislang unbekannte Liste einbindet, so kann man die URL zu dieser Liste zusammen mit dem Parameter "-g" an das Skript übergeben. Als Resultat erhält man eine Liste der möglichen Zuordnungen. Die so geholte Liste wird aber noch nicht in die Datenbank eingebunden.

    Automatisches Update als Cronjob

    Wird das Skript über einen Cronjob (oder ohne Parameter) aufgerufen, werden alle mit "active=yes" markierten Listen heruntergeladen und in die Datenbank eingetragen.

    Ein typischer Cronjob könnte etwa so aussehen:
    59 23 * * 6 /usr/sbin/get_blacklist


    Download und Installation

    Download

    Das Skript ist als Sourceforge-Projekt hier zu bekommen:
    http://sourceforge.net/projects/sgupdate/ [6]

    Im Tarball ist auch schon eine Konfigurationsdatei enthalten, die nur noch angepasst werden muss.

    Installation

    Nach dem Download entpackt man das Archiv mit dem Befehl:
    tar -xvjf sgupdate.tar.bz2
    und erhält zwei Dateien: get_blacklist und get_blacklist.conf Die Datei get_blacklist sollte man nun mit dem Befehl:
    mv get_blacklist /usr/sbin/
    an die Richtige Stelle kopieren und mit den Befehlen:
    chown root:root /usr/sbin/get_blacklist
    chmod 750 /usr/sbin/get_blacklist
    mit den richtigen Rechten ausstatten. ähnlich verläuft es mit der Konfigurationsdatei:
    mv get_blacklist.conf /etc/squid/
    chown root:root /etc/squid/get_blacklist.conf
    chmod 640 /etc/squid/get_blacklist.conf
    Damit ist das Skript grundsätzlich einsatzbereit. Was jetzt noch fehlt ist ein Blick in die Konfigurationsdatei - hierfür kann ein beliebiger Editor genommen werden. Passen Sie die Daten in der [global]-Sektion an ihre Bedürfnisse an - ebenso die dest-Zuordnungen in den einzelnen Listen.
    Danach sollte einem ersten Test mit dem Befehl get_blacklist nichts mehr im Wege stehen. Aber Achtung: das kann dauern!

    Wenn Sie evtl. Ausgaben oder Fehler des Skripts ansehen wollen, werfen Sie einen Blick in die Datei get_blacklist.log. Diese befindet sich im SquidGuard-Log-Verzeichnis, welches Sie in der Konfiguration von SquidGuard festgelegt haben.

    Programmablaufplan Wer sich in die Struktur des Skripts einarbeiten möchte, der kann dazu diesen Ablaufplan verwenden. Anmerkungen und Anregungen werden gerne entgegen genommen!

    PAP für get_blacklist




  

[ zurück zu Serverprogramme [7] | Index [8] ]

Kommentare

Einen Kommentar hinzufügen


Links
  [1] http://www.linux-schulserver.de/index.php?name=Sections&req=viewarticle&artid=33&allpages=1&theme=Printer
  [2] http://www.gnu.org/licenses/gpl.html
  [3] http://www.linux-schulserver.de/Sections-article2-p1.phtml
  [4] http://www.extis.de/oss
  [5] http://www.squid-cache.org/
  [6] http://sourceforge.net/projects/sgupdate/
  [7] http://www.linux-schulserver.de/index.php?name=Sections&req=listarticles&secid=1
  [8] http://www.linux-schulserver.de/index.php?name=Sections