Proxyserver (ADS, Havp, Squidguard, Sarg)

Posted: 5th April 2012 by marcel in Proxy
Tags: , , , , , ,

Ziel ist es, einen Squid Proxy zu installieren, der folgende Konfigurationen berücksichtigt:

  • SquidGuard für die Nutzung von Blacklists
  • Authentifizierung über eine ADS (Sicherheitsgruppe)
  • Havp Proxy als Parentproxy zwecks HTTP-Virenscan
  • Zwecks Reporting wird Webmin (Sarg) genutzt

Installiert wurde ein Ubuntu 10.04 LTS x64 Server.
Ram: 2GB
CPU: Dual Core
HDDs: 2 Harddisks (für / und Squid-Cache). Ich habe 2x 10GB im Einsatz.

Je nach Größe der Umgebung kann man darüber nachdenken, ob man für den Cache Ordner von Squid ein RAID nutzen will.
Zumindest kann man für /var/spool/squid3 das Dateisystem XFS und eine eigene Festplatte nutzen.

Alles wird als root ausgeführt. Ich nutze meist:

sudo -i
#/etc/fstab
/dev/sdb1 /var/spool/squid3 xfs noatime 0 2

Nach Systeminstallation ein Update und die Installation der nötigen Programme durchführen:

aptitude update && aptitude upgrade -y && aptitude install squid3 squidguard krb5-user winbind havp sarg -y

Die Datei /etc/krb5.conf muss konfiguriert werden. Aber erst ein Backup machen und die Konfig leeren.

cp /etc/krb5.conf{,.orig}
> /etc/krb5.conf
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
ticket_lifetime = 24000
clock_skew = 300
default_realm = DOMAIN.LOCAL
[realms]
DOMAIN.LOCAL = {
kdc = DOMAINCONTROLLER:88
admin_server = DOMAINCONTROLLER.DOMAIN.LOCAL
default_domain = DOMAIN.LOCAL
}
[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

Jetzt testen, ob Kerberos funktioniert:

kinit administrator

Ein

klist

sollte nun eine vergleichbare Ausgabe bringen:

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@DOMAIN.LOCAL

Valid starting Expires Service principal
04/02/12 09:40:38 04/02/12 16:20:38 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL

Die Datei /etc/samba/smb.conf wie folgt anpassen (Backup erstllen nicht vergessen):

cp /etc/samba/smb.conf{,.orig}
> /etc/samba/smb.conf
[global]
security = ads
realm = DOMAIN.LOCAL
password server = DOMAINCONTROLLER
workgroup = DOMAIN
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind cache time = 10
winbind use default domain = yes
template homedir = /home/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = yes
restrict anonymous = 2
domain master = no
local master = no
preferred master = no
os level = 0
winbind separator = +

Der FQDN muss noch in die Hostdatei:

#/etc/hosts
localhost 127.0.0.1 PROXYSERVERNAME.DOMAIN.LOCAL

Nun kann man mit diesem Befehl der ADS beitreten:

net ads join -U administrator

Dann noch einmal Winbind neustarten:

service winbind restart

Zum Test kann man sich mit „wbinfo -g“ alle Gruppen (in der ADS und lokal) anzeigen lassen.

Man muss den User „proxy“ noch der Gruppe winbindd_priv hinzufügen, damit Squid Zugriff bekommt. Mit

groups proxy

kann man sich anzeigen lassen in welchen Gruppen der User proxy ist.

Mit

adduser proxy winbindd_priv

kann man den User hinzufügen.

Jetzt wird der Havp noch konfiguriert.
Kleiner Tipp: cat Datei | grep -v ^# | grep -v ^$
gibt nur die Konfig, die nicht auskommentiert und keine Leerzeilen aus.

Vorher wieder ein Backup:

cp /etc/havp/havp.conf{,.orig}
> /etc/havp/havp.conf
#/etc/havp/havp.config
# je nach Leisung des Servers kann man hier ein wenig rumspielen.
SERVERNUMBER 32
MAXSERVERS 100
#Port
PORT 8899
# Deutsche Texte
TEMPLATEPATH /etc/havp/templates/de
#Maximale Größe, die gescannt werden soll
MAXSCANSIZE 2000000
#ClamAV aktivieren
ENABLECLAMLIB true
service havp restart

Jetzt geht’s an den Squid!

cp /etc/squid3/squid.conf{,.orig}
> /etc/squid3/squid.conf
#/etc/squid3/squid.conf
# Cache Einstellungen
cache_mem 1024 MB
maximum_object_size 10000 KB
maximum_object_size_in_memory 32 KB
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
cache_dir aufs /var/spool/squid3 8000 256 256

# Parent Proxy ist der HavP.
cache_peer localhost parent 8899 0 no-query no-digest

# SquidGuard-Nutzung
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf

# Issue: permissions on /var/run/samba/winbindd_privileged/ and /usr/bin/ntlm_auth for Squid
# - added the proxy user to the winbindd_privileged group
# - in /etc/squid/squid.conf
# set "cache_effective_user proxy" but NOT "cache_effective_group proxy"
cache_effective_user proxy
cache_mgr admin@DOMAIN

# Deutsche Fehlermeldungen
error_directory /usr/share/squid3/errors/de-de

# ADS Authentifizierung
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Domain Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
authenticate_cache_garbage_interval 10 seconds
external_acl_type nt_group ttl=5 children=5 %LOGIN /usr/lib/squid3/wbinfo_group.pl
# Credentials past their TTL are removed from memory
authenticate_ttl 0 seconds

# Sicherheitsgruppe, die den Proxy nutzen darf
acl INTERNET_SQUID external nt_group internet
http_access allow INTERNET_SQUID

# ACLs
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 0

Squid stoppen, Cache löschen und neu starten:

service squid3 stop
rm -R /var/spool/squid3/*
service squid3 start
  • Hinweis:

    Mit „/usr/sbin/squid -NCd1“ kann man den Squid im Debug Modus in der Konsolensitzung starten. D.h. man sieht auch sofort, ob Fehler in der Konfig sind.

  • So, nun noch den SquidGuard. Ich habe mir dazu noch den Apachen installiert und einen Verweis (Zeile redirect) auf eine „Access Denied“ Seite eingestellt (wenn etwas von der Blacklist zutrifft).

    cp /etc/squid/squidGuard.conf{,.orig}
    > /etc/squid/squidGuard.conf
    #/etc/squid/squidGuard.conf
    dbhome /var/lib/squidguard/db
    logdir /var/log/squid3
    dest good {
    }
    dest local {
    }
    dest blacklist {
    domainlist domains
    }

    acl {
    default {
    pass !blacklist all
    redirect http://interner_webserver/access_denied.html
    }
    }

    Hier noch kurz ein Bsp. wie die Blacklist aussehen könnte:

    #/var/lib/squidGuard/db/domains
    facebook.de
    werkkenntwen.de

    Immer wenn am Squidguard etwas verändert wurde muss man:

    sudo -u proxy squidGuard -C all -d
    chown -R proxy /var/lib/squidguard/db/*

    durchführen. In der oberen Ausgabe sieht man auch Fehler, die sich vielleicht in die Konfig geschlichen haben.
    Dann noch ein

    service squid3 reload

    Zu guter letzt noch den Webmin für die Auswertungen. Diese Zeilen hinzufügen:

    #/etc/apt/sources.list
    deb http://download.webmin.com/download/repository sarge contrib
    deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib

    Dann noch den Schlüssel importieren und Webmin installieren:

    wget http://www.webmin.com/jcameron-key.asc && apt-key add jcameron-key.asc
    aptitude update && aptitude install webmin -y

    Über den Browser kann man nun recht simpel Sarg konfigurieren:

    https://PROXYSERVER:10000/

    Mit root anmelden und unter „unused modules“ den „Squid Report Generator“ aktivieren (Modul Config).

    Dieser erscheint dann unter „Servers/Squid Report Generator“ (es kann sein, dass man sich im Webmin neu anmelden muss). Dort muss man noch die Konfig abändern. Hier ein paar Screenshots:



    So! Das sollte es gewesen sein, sofern mich mein Gedächtnis nicht trügt…