• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Solved] Squid und Winbind

ddtobi

Newbie
Hallo liebe Gemeinde

Ich bin neu hier und ich hoffe, ihr könnt mir helfen.

Nun zu meinem Problem.

Ich habe hier einen Squid Cache: Version 3.1.6 und eine Windows AD 2008 R2 (Deutsch)

Soweit funktioniert alles wunderbar.

Authentifizierung läuft über ntlm und Kerberos

Das Problem ist folgendes:

Ich lege einen neuen Benutzer in der AD an, schiebe ihn in eine Gruppe, die im Internet servern kann, soweit alles gut.
Der User meldet sich an seinem Windows an, und er kann servern.
Möchte ich diesen User jetzt aber speren, schiebe ich ihn in eine Gruppe, die nicht das Recht hat im Internet zu server.
Jetzt kommt mein Problem. Der User kann solange weiter im Internet serven, bis ich den winbind Dienst auf dem Proxyserver neu gestartet habe.
Was muss ich wo einstellen, das der Proxy Server das von selbst merkt?

hier meine smb.conf.

Code:
[global]
   workgroup = HOME
   server string = %h server
   realm = HOME.LOCAL
   password server = DC1.HOME.LOCAL
   netbios name = PROXYSERVER
   security = ADS
   winbind refresh tickets = yes
   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
   winbind cache time = 10
   template shell = /bin/bash
   template homedir = /home/%D/%U
   preferred master = no
   domain master = no
   local master = no
   os level = 0
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes

und hier die squid.conf

Code:
http_port 8080
http_port 3128
icp_port 3130

#Deutsche Uebersetzung der Error Seiten
error_directory /usr/share/squid3/errors/German

cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log

#CACHE Optionen#############################
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\?)    0       0%      0
refresh_pattern .               0       20%     4320

#Download CHACHE Optionen
quick_abort_min 16 KB
quick_abort_max 16 KB
quick_abort_pct 95

#CACHE Groessen und Regeln
ipcache_size 102400
ipcache_low 90
ipcache_high 95
fqdncache_size 102400
cache_mem 512 MB
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
cache_dir ufs /var/cache/squid3 2024 16 256
cache_replacement_policy heap GDSF
memory_replacement_policy heap GDSF

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 Safe_ports port 631         # cups
acl Safe_ports port 873         # rsync
acl Safe_ports port 901         # SWAT
#acl purge method PURGE
acl CONNECT method CONNECT
#Regeln die es erlauben ohne Athentifizierung auf das Internet zu zu greifen z.B. Windows Update
acl redir dstdom_regex -i r\.office\.microsoft\.com
redirector_access allow redir

#Browser und Webadressen die ohne authentifizierung zugänglich sind
acl acl_no_auth_browser browser -i "/etc/squid3/listen/noauth-browser.txt"
acl acl_no_auth_urlpath urlpath_regex -i /squid-internal-static/icons/
acl acl_no_auth_dstdomain dstdom_regex -i "/etc/squid3/listen/noauth.txt"
acl Gopher proto Gopher
http_access deny Gopher

http_access allow acl_no_auth_browser
http_access allow acl_no_auth_urlpath
http_access allow acl_no_auth_dstdomain
####################################################################################

#Zugriffsrechte Windows AD

### negotiate kerberos and ntlm authentication
auth_param negotiate program /usr/local/bin/negotiate_wrapper --ntlm /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --kerberos /usr/lib/squid3/squid_kerb_auth
auth_param negotiate children 10
auth_param negotiate keep_alive on

### pure ntlm authentication
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 10
auth_param basic realm Internet Proxy
auth_param ntlm keep_alive on


auth_param basic program /usr/lib/squid3/squid_ldap_auth -R -b "dc=home,dc=local" -D squid@home.local -W /etc/squid3/ldappass.txt -f sAMAccountName=%s -h dc1.home.local
auth_param basic children 10
auth_param basic realm Internet Proxy


external_acl_type nt_group ttl=5 children=20 negative_ttl=5 %LOGIN /usr/lib/squid3/wbinfo_group.pl_org -d

acl AuthorizedUsers proxy_auth REQUIRED
....

und die krb5.conf

Code:
[libdefaults]
    default_realm = HOME.LOCAL

[realms]
    HOME.LOCAL = {
        kdc = dc1.home.local
        admin_kdc = dc1.home.local
    }

[domain_realm]
    .home.local = HOME.LOCAL
    home.local = HOME.LOCAL
ich hoffe ihr könnt mir helfen
 

spoensche

Moderator
Teammitglied
.local ist eine Multicastdomäne und sollte auch nur dafür verwendet werden.

Der User kann aus folgendem Grund weiter surfen:

Wenn du den User in eine andere Gruppe verschoben hat, sein Kerberosticket aber noch gültig ist, also der User ist noch angemeldet und daher ist er noch Mitglied der Gruppe die surfen darf. Wenn der User abgemeldet ist und du ihn dann in eine andere Gruppe verschiebst sollte es funktionieren.
 
OP
D

ddtobi

Newbie
So jetzt gehts :)

Folgendes habe ich festgestellt.

System auf dem es nicht getht:

Debian 6 32bit
winbind Version 3.5.6

System auf dem es funktioniert (im laufendem Betrieb, ohne das der User sich abmelden muss oder das man den winbind neu starten muss)

Ubuntu 10.04.4 LTS
winbind Version 3.4.7

Die Konfiguration der beiden Systeme ist mit den identischen Konfigfiles gemacht wurden.
Scheint also am Winbind selber zu liegen.

Gruß Tobi
 
OP
D

ddtobi

Newbie
leider etwas zu früh gefreut aber jetzt ist das Problem, was in Wahrheit ein Bug in wbinfo ist, gelöst.

Die Methode ist zwar mehr als dirty aber sie funktioniert, das einzige, was ich nicht beurteilen kann, ist die Performance wenn viele User auf den Proxy zugreifen.
Kann einer von euch dazu eine Aussage treffen?

also Problem/Bug habe ich folgender maßen umgangen.

wbinfo schein die Userdaten zwischen zu speichern, ab und zu bekommt wbinfo dadurch einfach nicht mit, wenn sich in der AD etwas geändert hat.
Die schnellste Lösung, ist einfach den cache von wbinfo zu leeren, mit wbinfo -a HOME\\<AD user>%<password>.

Das ganze habe ich dann in die Datei /usr/lib/squid3/wbinfo_group.pl reingebastelt. Es funktioniert tadellos.
Das einzige, was mir ein wenig Sorgen macht, wie verhält es sich mit der Performance oder hat das Löchen des caches irgend welche anderen negativen Auswirkungen?????
Reicht es eventuel auch, wenn man das als Cron Job alle 5 Minuten laufen lässt????
Jetzt läuft der befehl bei jedem Webseitenaufruf mit durch!

Wenn jemand eine Meinung oder noch besser Erklärung dazu hat, dann immer her damit :)

Gruß Tobi
 

spoensche

Moderator
Teammitglied
Den Bug bzw. eine ähnlichen kenne ich. Der zieht sich hin bis Version 3.5.7. Ab Version 3.6.0 ist der Bug behoben.
 
OP
D

ddtobi

Newbie
Danke für den Tipp, das werde ich mal testen.

Kannst du mir sagen, wie da Verhalten meiner Lösung in größeren Umgebungen ist?

Gruß Tobi
 

spoensche

Moderator
Teammitglied
ddtobi schrieb:
Kannst du mir sagen, wie da Verhalten meiner Lösung in größeren Umgebungen ist?

Der Bug hat sich nicht gerade leicht finden lassen und sorgte für stotternden Arbeitsfluss meiner Arbeitskollegen und der stotternde Arbeitsfluss wurde in kurzer Zeit zum totalen Nervfaktor. Der GDB förderte den Bug ans Licht, während meine Arbeitskollegin dem Server ordentlich Arbeit aufbrummte. :)

Ich habe dann Samba 3.6.0 Pakete gebaut und bin leider noch nicht dazu gekommen eine Anleitung in meinem Blog einzustellen.

Fazit:
Mistkäfer erkannt, Mistkäfer gebannt. ;):)

Den Internetzugriff durch verschieben des Users in eine andere Gruppe ist eine sehr aufwendige und wenig effiziente Lösung.
Wenn du das Szenario mit dem Internetzugriff genauer erläutern könntest (Bedingungen, Voraussetzungen, Sicherheitsanforderungen), können wir dir dabei helfen eine elegantere Lösung zu finden, die deinen Aufwand reduziert und dir die Arbeit erleichtert.
 
Oben