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

SquidGuard und ADS: Was mache ich falsch?

mfuhrmann

Newbie
Hallo,

ich möchte den SquidGuard gerne über LDAP (ADS) authentifizieren. D.h. im ersten Schritt: User der Gruppe1 dürfen online gehen. Andere nicht. In den nächsten Schritten kämen dann auch Blacklists etc. dazu. Aber eins nach dem Anderen :)

In der squid.conf habe ich diesen Eintrag:

Code:
redirect_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf

und in der squidGuard.conf das hier:

Code:
src INTERNET {
        	ldapusersearch ldap://globalcatalogserver.domain.local:3268/cn=internet,ou=User_Gruppen,dc=domain,dc=local?memberUid?sub?(&(objectclass=posixGroup)(memberUid=%s)
                 	}
acl {
INTERNET { pass none }
default { pass local none }
}

stehen.

So wie ich das verstehe, sollten nun user aus der Gruppe "internet" nicht ins Internet kommen. Aber ich bin nicht in der Gruppe und bekomme auch keins :)
Wie läuft das denn ab: Der Squid lässt alles durch (z.B. durch IP Ranges) und der SquidGuard macht dann die "genauere Prüfung" (z.B. mittels LDAP, oder Zeiteinschränkungen etc)?

Danke für die Hilfe.

--
Marcel
 

spoensche

Moderator
Teammitglied
mfuhrmann schrieb:
Code:
src INTERNET {
        	ldapusersearch ldap://globalcatalogserver.domain.local:3268/cn=internet,ou=User_Gruppen,dc=domain,dc=local?memberUid?sub?(&(objectclass=posixGroup)(memberUid=%s)
                 	}
acl {
INTERNET { pass none }
default { pass local none }
}
So wie ich das verstehe, sollten nun user aus der Gruppe "internet" nicht ins Internet kommen. Aber ich bin nicht in der Gruppe und bekomme auch keins :)
Wie läuft das denn ab: Der Squid lässt alles durch (z.B. durch IP Ranges) und der SquidGuard macht dann die "genauere Prüfung" (z.B. mittels LDAP, oder Zeiteinschränkungen etc)?

Du suchst recursiv in der ab dem cn Internet in der OU User_Gruppen nach Usern, die Mitglied in einer Posix- Gruppe (Linux Gruppe, kein win.) sind und erlaubst den Internetzugriff.
Weiterhin nutzt LDAP den Port 389 und nicht 3268.
 
OP
M

mfuhrmann

Newbie
Hallo spoensche,

ich habe leider von LDAP wenig bis keine Ahnung. Muss mir echt mal ein passendes Buch dazu kaufen.
Nach einer Posix Gruppe brauche ich wohl nicht suchen, wenn ich nach ADS Gruppen suche.
Auf faq-o-matic.net habe ich was gefunden.

Code:
src INTERNET {
     ldapusersearch  ldap://srv-dc01.tclsg.local:389/cn=internet,ou=User_Gruppen,dc=tclsg,dc=local?memberUid?sub?(&(objectCategory=person)(objectClass=user))
  }

Leider kann ich die Konfig atm nicht testen. Muss mal die nächsten Tage schauen.

Gruß
Marcel
 

spoensche

Moderator
Teammitglied
Ist dein cn Internet den in de Organizational Unit (O) User_Gruppen?

Code:
ou=Internet,dc=tclsg,dc=local?uid?sub?(&(objectClass=person))

Ein Gutes und umfangreiches Buch zu LDAP: http://www.zytrax.com/books/ldap/ch2/index.html#basic
 
OP
M

mfuhrmann

Newbie
Ist dein cn Internet den in de Organizational Unit (O) User_Gruppen?

ja. Eine OU "User_Gruppen" und darin eine Gruppe "Internet".

Atm startet SquidGuard gar nicht mehr. Also diese Konfig mag er wohl nicht.

Code:
src INTERNET {
     ldapusersearch  ldap://srv-dc01.tclsg.local:389/cn=internet,ou=User_Gruppen,dc=tclsg,dc=local?memberUid?sub?(&(objectCategory=person)(objectClass=user))
  }
acl {
        INTERNET { pass all}
 default { pass local none}
}

Im Log steht nur:

Code:
2012-03-15 09:32:39 [18136] New setting: dbhome: /usr/local/squidGuard/db
2012-03-15 09:32:39 [18136] New setting: logdir: /usr/local/squidGuard/log
2012-03-15 09:32:39 [18136] destblock good missing active content, set inactive
2012-03-15 09:32:39 [18136] destblock local missing active content, set inactive
2012-03-15 09:32:39 [18136] squidGuard 1.4 started (1331800359.623)
2012-03-15 09:32:39 [18136] db update done
2012-03-15 09:32:39 [18136] squidGuard stopped (1331800359.623)
 

spoensche

Moderator
Teammitglied
Dann müsste dein LDAP Query wie folgt aussehen:

Code:
ou=Internet,ou=User_Gruppen,dc=tclsg,dc=local?uid?sub?(&(objectClass=person))

Person ist eine objectClass. memberUID gibt es auch nicht und muss stattdessen uid heissen.

Tipp:
Es ist einfacher, wenn du die Suche per Konsole durchführst. Du kannst dich so Stück für Stück dem Ergebnis nähern, evtl. Fehler werden sofort angezeigt und du sparst dir den Aufwand die Logs zu durchsucchen.
 
OP
M

mfuhrmann

Newbie
Danke spoensche!

Habe es schon getestet. Leider ohne Erfolg. Auch deinen Rat habe ich befolgt und mit ldapsearch rumgespielt.
Aber auch das ist bisher ein Fehlschlag.

Ich brauche eindeutig mehr Wissen über LDAP, bevor ich hier sinnvoll weiter machen kann. Will ja deine Gedult nicht zu sehr strapazieren. Obwohl es natürlich toll wäre, wenn das schon mal laufen würde :)
Ich habe ein wenig Literatur in der auch LDAP vorkommt. Mal schauen ob ich davon erleuchtet werde.

Und eins der beiden will ich mir auch noch mal kaufen. Kann mich nur noch nicht so recht entscheiden:
http://www.amazon.de/Kerberos-Singl...TF8&coliid=I26UVZVTLJ9NUH&colid=1YL8JI2VE813T

http://www.amazon.de/OpenLDAP-2-4-S...r_1_20?s=books&ie=UTF8&qid=1332502334&sr=1-20

Ich tendiere zum Ersten. Kennst du diese vielleicht zufällig?

Schönes Wochenende!
 

spoensche

Moderator
Teammitglied
mfuhrmann schrieb:
Danke spoensche!

Habe es schon getestet. Leider ohne Erfolg. Auch deinen Rat habe ich befolgt und mit ldapsearch rumgespielt.
Aber auch das ist bisher ein Fehlschlag.

Welche Ausgaben hat dir ldapsearch etc. den gegeben? Wie sahen denn deine Befehlsaufrufe aus?

mfuhrmann schrieb:
Ich brauche eindeutig mehr Wissen über LDAP, bevor ich hier sinnvoll weiter machen kann. Will ja deine Gedult nicht zu sehr strapazieren. Obwohl es natürlich toll wäre, wenn das schon mal laufen würde :)
Ich habe ein wenig Literatur in der auch LDAP vorkommt. Mal schauen ob ich davon erleuchtet werde.

Du strapazierst doch nicht meine Geduld. Das Wissen eignest du dir autom. an, auch wenn einiges evtl. nicht auf Anhieb klappt.

Wie bereits erwähnt, wäre es sehr hilfreich, wenn du Befehlsausgaben und Befehlsaufrufe auch mal postest.

mfuhrmann schrieb:
Und eins der beiden will ich mir auch noch mal kaufen. Kann mich nur noch nicht so recht entscheiden:
http://www.amazon.de/Kerberos-Singl...TF8&coliid=I26UVZVTLJ9NUH&colid=1YL8JI2VE813T

http://www.amazon.de/OpenLDAP-2-4-S...r_1_20?s=books&ie=UTF8&qid=1332502334&sr=1-20

Ich tendiere zum Ersten. Kennst du diese vielleicht zufällig?

Nein, kenne ich nicht und ich würde ohne zu zögern das zweite nehmen und auch Empfehlen, weil man mit offenen Standards besser fährt als mit propiertierem Ding.
 
OP
M

mfuhrmann

Newbie
Ich habe so einiges schon versucht. Hier mal 2 um anzufangen:

Code:
ldapsearch -x -D "cn=DOMÄNENADMIN, ou=User_Admin,dc=tclsg,dc=local" -w PASSWORT
ldap_bind: Invalid credentials (49)
        additional info: 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
Code:
ldapsearch -Y DIGEST-MD5 -D "cn=DOMÄNENADMIN, ou=User_Admin,dc=tclsg,dc=local" -w PASSWORT
SASL/DIGEST-MD5 authentication started
ldap_sasl_interactive_bind_s: Invalid credentials (49)
        additional info: 8009030C: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 52e, v1db1

Als mit wbinfo kann ich bereits AD Gruppen etc. abfragen. Das hatte ich gemacht um im Squid direkt AD Gruppen abfragen zu können. Aber das scheint hier nicht ins Gewicht zu fallen. Ich hatte dazu Winbind und krb5 konfiguriert. War eigentlich recht simpel.
 

spoensche

Moderator
Teammitglied
Du musst die Suche als Administrator durchführen, weil du sonst nicht die Berechtigung hast. Du hast auch keinen DC angegeben. Was ist den DOMÄNENADMIN für ein common name?

Code:
ldapsearch -H "ldap://deinserver.tclsg.local" -LLL -b ou=User_Admin,dc=tclsg,dc=local -x -W "(sn=nachname)" cn sn

Sucht nach einem User mit dem surename nachname und gibt den cn und sn aus. Die Ausgabe erfolgt im ldif Format. Sieh dir mal die Beispiele am Ende der Manpage von ldapsearch an.
 
OP
M

mfuhrmann

Newbie
Ich wollte über meinen DomänenAdmin Benutzer abfragen (anonymisiert), weil das Administrator PW Sonderzeichen enthält und ich das als Fehlerquelle ausschließen wollte. In der ldap.conf hatte ich BASE und URI eingegeben. Das habe ich jetzt aber wieder auskommentiert.


Aber hierbei wird doch auch nicht der Administrator angegeben? Einen Account mit Nachname Fuhrmann gibt es in der OU User_Admin.

Code:
ldapsearch -H "ldap://srv-dc01.tclsg.local" -LLL -b ou=User_Admin,dc=tclsg,dc=local -x -W "(sn=Fuhrmann)" cn sn
Enter LDAP Password:
Operations error (1)
Additional information: 000004DC: LdapErr: DSID-0C0906E8, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db1
 
OP
M

mfuhrmann

Newbie
DAS funktioniert!

Code:
ldapsearch -D "ldap@domain.local" -w "ladappasswort" -b "dc=domain,dc=local" -H "ldap://dc.domain.local" "(sn=USERNAME)" description dn

Werde mal weiter testen und berichten.
 
OP
M

mfuhrmann

Newbie
Hallo Spoensche,

nun bin ich der Meinung, dass meine Konfig stimmen sollte. Funktioniert aber nicht. So wie ich das verstehe, sollten jetzt die User die in der Gruppe "Internet" sind, nicht ins Internet kommen. Aber das geht komischerweise.

Hier noch mal der aktuelle Stand. Vielleicht siehst du noch einen Fehler.

squid.conf:
Code:
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
cache_effective_user proxy
error_directory /usr/share/squid3/errors/de-de
# Das ist mein Testrechner
acl LAN src 10.2.1.50
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 allow LAN
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
redirect_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
redirect_children 5

Spielt es eine Rolle wo der Redirect steht? Ich habe Konfigs im Netz gefunden wo es am Ende steht aber auch am Anfang.

Die squidGuard.conf (nur die LDAP Sachen)
Code:
ldapbinddn     dn=admin, ou=User_Admin, dc=tclsg, dc=local
ldapbindpass   PASSWORT

src INTERNET {
     ldapusersearch  ldap://srv-dc01.tclsg.local/cn=Internet,ou=User_Gruppen,dc=tclsg,dc=local?uid?sub?(&(objectClass=member))
  }
acl {

        INTERNET {
                pass none
                }
        default {
                pass    none
        }
}
 

spoensche

Moderator
Teammitglied
Was sagen die Logs?

Du hast
http://www.calculate-linux.org/blogs/show/1

AD forrest: answering with referals

Currently squidGuard is not able to handle referals as answer from an Active Directory. If you don't need referals in your environment you can turn them off. Otherwise you have to specify a fixed server and path where the user information can be obtained. Please take a look on the "What to do with Active Directory Referals?" page how users solved this problem in their environment.
 
OP
M

mfuhrmann

Newbie
Ich geb's auf. Ist mir echt zu viel Aufwand momentan.
Habe nun eine ADS Auth über Squid und eine Blacklist über Squidguard. Zeitgesteuert über Gruppen etwas sperren geht dann halt leider nicht.
Trotzdem noch mal vielen Dank spoensche!
 
Oben