Situations-Beschreibung

    Viele Unternehmen verwenden das ActiveDirectory von Microsoft um die Benutzer und Computer-Objekte ihrer Umgebung zu verwalten. Häufig kommt daher auch der Wunsch auf, den Internet-Zugang anhand der AD-Benutzer zu steuern. Häufig über AD-Gruppen-Mitgliedschaften, da dies die Verwaltung wesentlich vereinfachen kann. Hierbei sollte es aber nicht nur einfach um die AD-Anbindung gehen, sondern nach Möglichkeit auch mit der entsprechenden Sicherheit bei der Authentifizierung. Nachfolgend ist daher Beispielhaft die Konfiguration eines Debian 7 Systems beschrieben, auf dem Squid3 mit der Anbindung an eine Windows 2008 R2 installiert wurde. Der einfachheitshalber wird der Proxy auch so vorbereitet, dass er eine Proxy.pac über Port 8083 ausliefern kann. Die notwendige Sicherheit bei der Authentifizierung der Benutzer wird erreicht, indem der Proxy die Benutzer mittels Kerberos, NTLM oder der Basic-Authentifizierung authentifizieren kann und das genau in der Reihenfolge.

    Um die Beispielkonfiguration zu vereinfachen, wird zuerst die Beispiel-Umgebung beschrieben. Später wird dann pro Abschnitt auf die jeweilige Konfigurationsdatei verlinkt. Am Ende des Artikels gibt es dann ein Zip-Archiv, mit allen im Artikel verwendeten Konfigurations-Dateien.

    Umgebungsübersicht

    Eigenschaft Wert Beschreibung
    NetBios Domain-Name DOMAIN  
    FQDN DOMAIN.TLD  
    Proxy-Name squidproxy  
    Domain-Controller 1 192.168.0.1  
    Domain-Controller 2 192.168.0.2  
    Parent-Proxy IP 192.168.1.1  
    AD-Gruppe(n) mit Internet-Zugang AD-Group_with_Internet_Access Mitglieder dieser AD-Gruppe dürfen ins Internet
    Speicherort der AD-Gruppen OU=Groups,OU=Common Objects,ou=DEU,dc=DOMAIN,dc=TLD Wenn mehrere AD-Gruppen für unterschiedliche Regeln angelegt werden,
    müssen diese alle hier liegen, da nur dort gesucht wird
    AD-Proxy-Benutzer AD-Proxy-User Service-Konto für die Kerberos-Authentifizierung
    AD-Suchpfad ou=DEU,dc=DOMAIN,dc=TLD Einschränkung des Suchpfades für die Benutzer-Objekte.
    Macht in größeren Umgebungen Sinn.

     

    #1. Zeitsynchronisierung sicherstellen

    Für eine funktionieren Kerberos-Authentifizierung darf sich die Zeit zwischen dem Client und dem Server maximal um 5 Minuten unterscheiden. Um die gewährleisten zu können, sollte sich das Linux-System immer mit den DCs der Domäne abgleichen. Hierzu wird ntp installiert.

    $ apt-get install ntp ntpdate

    Anschließend müssen in der Datei /etc/ntp.conf die nachfolgenden Zeilen

    server 0.debian.pool.ntp.org iburst
    server 1.debian.pool.ntp.org iburst
    server 2.debian.pool.ntp.org iburst
    server 3.debian.pool.ntp.org iburst

    auskommentiert werden und durch eine Zeile für die Domäne ersetzte werden:

    server domain.tld iburst

    Anschließend den Dienst neustarten und die Uhrzeit einmal manuell synchronisieren:

    $ /etc/init.d/ntp restart
    $ ntpd -q -g

    Der Neustart des Dienstes geht auch mittels

    $ service restart ntp

    … jedoch kann ich mich nur langsam in diese Schreibweise gewöhnen

     

    #2. Installation und Einrichtung von Samba sowie winbind

    $ apt-get install winbind samba

    Für die Konfiguration muss die /etc/samba/smb.conf wie folgt angepasst werden:

    [global]netbios name = squidproxy
    workgroup = DOMAIN
    realm = DOMAIN.TLD
    server string =
    security = ADS
    encrypt passwords = true
    log level = 3
    log file = /var/log/samba/%m
    preferred master = no
    template shell = /bin/false
    template homedir = /home/%D/%U
    winbind uid = 10000-20000
    winbind gid = 10000-20000
    enhanced browsing = no
    winbind use default domain = yes
    winbind enum users = no
    winbind enum groups = no
    idmap cache time = 604800
    idmap negative cache time = 20
    winbind cache time = 600
    
    password server = 192.168.0.1, 192.168.0.2
    load printers = no
    printing = bsd
    printcap name = /dev/null
    disable spoolss = yes
    
    kerberos method = system keytab
    dedicated keytab file = /etc/krb5.keytab

     

    #3. Installation und Einrichtung von Apache2

    $ apt-get install apache2 libapache2-mod-perl2

    Damit Apache2 über Port 8083 eine proxy.pac (Funktionen,Microsoft-Artikel) ausliefern kann, muss dieser Port in der Datei /etc/apache2/ports.conf freigeschaltet werden, indem der folgende Eintrag hinzugefügt wird:

    Listen 8083

    Des weiteren muss für die proxy.pac noch eine Site erstellt und aktiviert werden. Dazu wird die Datei /etc/apache2/sites-available/proxypac.conf mit folgendem Inhalt erstellt:

    <VirtualHost *:8083>
        DocumentRoot "/var/www/proxypac/"
    </VirtualHost>

    und aktiviert

    $ mkdir /var/www/proxypac/
    $ a2ensite proxypac.conf

    Soll der Apache2 Dienst auch cgi bzw. pl-Skripte verarbeiten können, muss die Datei /etc/apache2/sites-available/default noch wie folgt angepasst werden:

    <Directory /var/www/>
    Options ExecCGI
    AddHandler cgi-script cgi pl

    Dies macht z.B. dann Sinn, wenn man eine individuelle Blockpage verwenden möchte. Weitere Informationen dazu findet man unter http://www.squidguard.org/Doc/redirect.html.

    Nun noch den Apache2-Dienst neustarten:

    $ service apache2 restart

     

    #4. Installation und Einrichtung von Squid3

    $ apt-get install squid3
    $ service squid3 stop
    $ adduser proxy winbindd_priv

    Damit die Authentifizierung später auch klappt, müssen in der Datei /etc/nsswitch.conf die folgenden Zeilen angepasst werden:

    passwd: files winbind
    group: files winbind


    Nun ist der Zeitpunkt gekommen, das Service-Konto für den Proxy im AD anzulegen. In diesem Beispiel heißt das Konto AD-Proxy-User.
     Sobald es angelegt wurden, muss das Kennwort dieses Konto in der Datei /etc/squid3/authfile gespeichert werden. Man kann das Kennwort auch später direkt in der Konfigurationsdatei eintragen, jedoch würde es in diesem Fall auch im Klartext in der Prozessliste ausgegeben.

    $ touch /etc/squid3/authfile
    $ echo <password> > /etc/squid3/authfile

    Nun kann das Linux-System der Domäne beitreten. Dazu wird im nachfolgenden Befehl mittels DEU/XX/Servers direkt angegeben, in welcher OU das Computerobjekt erstellt werden soll:

    $ net ads join createcomputer='DEU/XX/Servers' -U ADA-Firstname.Lastname

    Anschließend einmal den Winbind- und Samba-Dienst durchstarten:

    $ service winbind restart
    $ service samba restart

    Nun kann die AD-Konnektivität überprüft werden, indem einmal die Authentifizierung eines Benutzers getestet wird:

    $ /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
    <username> <password>

    … sowie die Gruppenmitgliedschaft abgefragt wird:

    $ /usr/lib/squid3/wbinfo_group.pl
    <username> <group_name>

    Wenn beides überrüft werden konnte, geben beide Test jeweils ein OK zurück. Ein ERR bedeutet, dass die Abfrage nicht erfolgreich war.

    Jetzt bitte die /etc/squid3/squid.conf erstmal so übernehmen. Nachfolgend ein paar Worte zu den Einstellungen. Unter "cheap rules first" sind die Regel aufgeführt, die am häufigsten zutreffen und die wenigsten "Kosten" durch weitere Abfragen verursachen. Im Abschnitt "sites free for all part" können Internetseiten angegeben werden, die für alle Mitarbeiter, unabhänging von weiteren Internetrechten erreichbar sein sollen, wie z.B die Seite der Gewerkschaft. Anschließend kommt der Kerberos, NTLM und BASIC Abschnitt. Die Reihenfolge ist Absicht, da zwar eigentlich von einem Client die stärkste Authentifizierungsmethode zuerst verwendet werden sollte, aber da dies nicht immer der Fall ist, wird dies durch die Reihenfolge erzwungen.

    In den Abschnitten NTLM und BASIC ist jeweils die erste Zeile auskommentiert, da eine Gruppenabfrage auch direkt erfolgen kann. Möchte man jedoch auf verschiedene Gruppenmitgliedschaften prüfen, darf diese Zeile nicht verwendet werden. Statt dessen muss die Abfrage mittels "ldap_group" erfolgen.

    Nun wird noch der Squid-Cache angelegt sowie zwei Whiteliste-Dateien.

    $ squid3 -z
    $ touch /etc/squid3/dom_white.acl
    $ touch /etc/squid3/regexp_white.acl

    Jetzt den ganzen Server einmal durchstarten um sicher zu gehen, dass alle Dienste die aktuellen Konfigurationsdateien gelesen haben.

     

    #5. Installation und Einrichtung von Kerberos

    Als erstes müssen wiede ein paar Pakete installiert werden:

    $ apt-get install krb5-doc krb5-user

    Anschließend muss die Datei /etc/krb5.conf wie folgt angepasst werden:

    [libdefaults]debug = true
        default_realm = DOMAIN.TLD
        clockskew = 300
        default_tkt_enctypes = rc4-hmac
        default_tgs_enctypes = rc4-hmac
    
    [realms]DOMAIN.TLD = {
        kdc = 192.168.0.1:88
        kdc = 192.168.0.2:88
        admin_server = 192.168.0.1:464
        admin_server = 192.168.0.2:464
        default_domain = DOMAIN.TLD
        kpasswd_server = 192.168.0.1:88
        kpasswd_server = 192.168.0.2:88
    }
    
    [domain_realm].DOMAIN.TLD = DOMAIN.TLD
        DOMAIN.TLD = DOMAIN.TLD
    
    [logging]kdc = SYSLOG:DEBUG:AUTH
        admin_server = SYSLOG:DEBUG:AUTH
        default = SYSLOG:DEBUG:AUTH
    
    [appdefaults]pam = {
            ticket_lifetime = 1d
            renew_lifetime = 1d
            forwardable = true
            krb4_convert = false
    }

    Da in der Datei /etc/krb5.keytab gleich Informationen für die Kerberos Authentifizierung gespeichert werden und diese Datei beim starten von Squid3 mit gezogen werden muss, ist noch eine Anpassung der Datei /etc/default/squid3 notwendig. Um über die Bash auch gleich die entsprechende Tests durchführen zu können, muss die Datei /etc/profile ebenfalls angepasst werden.

    $ vim /etc/default/squid3
    
    KRB5_KTNAME=/etc/squid3/krb5.keytab
    export KRB5_KTNAME
    $ vim /etc/profile
    
    # /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
    # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
    
    KRB5_KTNAME=/etc/squid3/krb5.keytab
    export KRB5_KTNAME

    Nun den Squid3-Dienst noch einmal neustarten und in der Bash einmal ab- & wieder anmelden, damit diese Änderungen greifen.

    Noch einmal zur Sicherheit die AD-Anbindung prüfen

    $ net ads testjoin

    Jetzt wird die Datei krb5.keytab erstellt. Dazu muss man sich auf einem DC anmelden und einer Eingabeaufforderung mit Administratorrechten den folgenden Befehel ausführen:

    c:> ktpass /princ HTTP/squidproxy.domain.tld@DOMAIN.TLD /mapuser AD-Proxy-User /crypto RC4-HMAC-NT /pass <password> /ptype KRB5_NT_SRV_HST /out krb5.keytab

    Die Datei krb5.keytab wird nun auf die Linux Maschine kopiert und es werden die Dateirechte angepasst

    $ chmod 644 /etc/squid3/krb5.keytab
    $ chown proxy:proxy /etc/squid3/krb5.keytab

    Nun kann die Kerberos Authentifizierung getestet werden:

    $ kinit -V -k -t /etc/squid3/krb5.keytab HTTP/squidproxy.domain.tld@DOMAIN.TLD
    
    HTTP/squidproxy.dommain.tld
    Using default cache: /tmp/krb5cc_0
    Using principal: HTTP/squidproxy.domain.tld@DOMAIN.TLD
    Using keytab: /etc/squid3/krb5.keytab
    Authenticated to Kerberos v5

    Bei erfolgreicher Authentifizierung sollte das Ergebniss wie oben aussehen. Wenn dies nicht klappt, bitte folgendes prüfen:

    • Winbind & Samba Konfiguration, ob die richtigen DCs angegeben wurden und diese auch erreichbar sind.
    • Das Service-Konto richtig angelegt wurde. Bitte nicht vom SamAccountName irritieren lassen, dieser lautet jetzt HTTP/…, was aber richtig ist.
    • Die krb5.keytab richtig erstellt wurde.

    Bei erfolgreicher Authentifizierung sollte die Linux Maschine jetzt ein Kerberos-Ticket erhalten haben.

    $ klist -ek
    Keytab name: FILE:/etc/squid3/krb5.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       6 01.01.1970 01:00:00 HTTP/squidproxy.domain.tld@DOMAIN.TLD (arcfour-hmac)

    Mit folgendem Befehl noch die KVNO (Key-Version-Number) prüfen. Diese sollte identisch sein mit der obigen Ausgabe:

    $ kvno HTTP/squidproxy.domain.tld@DOMAIN.TLD
    HTTP/squidproxy.domain.tld@DOMAIN.TLD: kvno = 6

    Weitere Informatione zu Kerberos findet man unter http://www.grolmsnet.de/kerbtut/.

    Links

    Leave A Reply