Squid Traffic Shaping per User + W2k AD

sammy2ooo

voll Tohuwabohu
Hallo zusammen,

ich möchte einen Squid konfigurieren um ein Traffic Shaping per Windows-2000-User zu bewerkstelligen. Wenn ich richtig informiert bin benötige ich dazu das squid_ldap_auth Modul, damit wäre dann eine transparente Authentifizierung am Domain-Controller möglich. Ist es möglich mit Squid so eine Art "Borrow" bzw. "Burstable" Option zu definieren?

Also gehen wir mal davon aus ich hätte eine 10Mbit SDSL Inet-Leitung für 10 User (!). Jetzt möchte ich jedem Benutzer 1 Mbit (down/up) geben, das Ganze aber so gestallten, dass wennn nicht alle Benutzer online sind und ihre Bandbreite benötigen diese dann von den anderen User ge-"borrowed" werden kann. Ich hoffe es ist klar geworden was ich meine...

Hat jemand damit Erfahrungen gemacht und könnte mir vielleicht sogar seine/ihre Konfiguration schicken???

Gruss,
Matze
 

teK

.
Dein Stichwort lautet dynamich delay pools.
Zu dem Thema gibt es eine Doktorarbeit(?) mit massig Praesentationen und Dokumenten aber keinen Patch. Auch auf der Mailingliste war nicht wirklich etwas zu finden, bis auf das hier:
http://users.123.net.au/daniadhipta/
Ob du den gewuenschten Effekt damit erreichst, kann ich dir nicht sagen.

HTH
 

sammy2ooo

voll Tohuwabohu
nach einigem hacking-kungfu läuft squid nun soweit das sich User am Proxy authentifizieren müssen und dabei eine LDAP Abfrage ans AD gestellt wird.

Bevor ich nun soweit gehe und ein Trafficshapping (Quoting) mache würde mich interessieren welcher Benutzer wieviel Traffice verursacht. Kennt jemand einen empfehlenswerten Log-Analyser, der genau das bewerkstelltig und auch noch schöne bunte PNGs erzeugt??

Danke und Gruss

Da alles ein geben und ein nehmen ist, hier meine Config für squid/2.6.STABLE9
squid-server ~ # cgrep /etc/squid/squid.conf
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
auth_param basic program /usr/libexec/squid/squid_ldap_auth -R -b "dc=organisation,dc=local" -D "cn=Service_User,cn=Users,dc=organisation,dc=local" -w "supersecret" -f sAMAccountName=%s -h 10.128.2.2 -p 3268
auth_param basic children 5
auth_param basic realm Organisation
auth_param basic credentialsttl 5 minutes
external_acl_type InetGroup %LOGIN /usr/libexec/squid/squid_ldap_group -R -b "dc=organisation,dc=local" -D "cn=Service_User,cn=Users,dc=organisation,dc=local" -w "supersecret" -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=Permission,ou=Organisation Groups,dc=organisation,dc=local))" -h 10.128.2.2 -p 389
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl localnet proxy_auth REQUIRED src 10.128.0.0/16
acl InetAccess external InetGroup P_Proxy
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 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
acl ldap-auth proxy_auth REQUIRED
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow InetAccess
http_access deny all
http_reply_access allow all
icp_access allow all
cache_mgr ich@organisation.org
forwarded_for off
coredump_dir /var/cache/squid
 

sammy2ooo

voll Tohuwabohu
Merci fuer den Tip, allerdings bin ich zwischenzeitlich fuendig geworden und ueber "sarg" gestolpert. Dieses Script erfuellt alles was ich brauche...
http://sarg.sourceforge.net/

Opensource ruuuuuuulleeess :p

Jetzt muss ich nur noch warten bis die Patches zum dynamischen Poolen in das stable-release einfliesen, was wohl etwas dauern wird, wenns denn ueberhaupt soweit kommt...
 

sammy2ooo

voll Tohuwabohu
okay langsam finde ich Spass an der Sache... Ich hab noch einige Sachen über NTLM Authentifizierung gelesen und bin nun etwas verwirrt inwiefern das ganze Samba tangiert.

Was ich erreichen möchte, ist eine "Pass-Through" Authentifizierung, also das der Internet Explorer direkt die Logindaten benutzt um sich gegenüber dem Proxy zu authentifizieren.

Wenn ich die ganzen Anleitungen richtig verstanden habe, dann muss mit Samba ein neuer Domänencontroller erstellt werden an dem wiederrum sich Squid dann die Logindaten holt. Ist das soweit richtig? Wenn ja, könnte man die ganze Sambabastlerei nicht umgehen und die Squidhelper direkt auf den W2k DC zeigen lassen?

Danke für euren Input...

Gruss,
der Matze
 

marzl

Well-Known Member
Was ich erreichen möchte, ist eine "Pass-Through" Authentifizierung, also das der Internet Explorer direkt die Logindaten benutzt um sich gegenüber dem Proxy zu authentifizieren.
Dieses "Pass-Through" geht leider nur mit NTLM und nicht direkt mit der LDAP Abfrage. Wobei die Logininformation ja fest in der IE_Konfiguration hinterlegt werden können, was bei festen Benutzerprofilen (idealerweise Servergespeichert) ja auch durchaus Sinn macht.
könnte man die ganze Sambabastlerei nicht umgehen und die Squidhelper direkt auf den W2k DC zeigen lassen?
Ich meine ja, aber noch nicht probiert. Ich selber habe einen Squid mit LDAP Abfrage erstellt, da mit den LDAP-Filtern wunderbar die Gruppen und Gruppenberechtigungen ausgewwertet werden können.
 

sammy2ooo

voll Tohuwabohu
Sooooooooooo, hier mal ne kleine Step-by-Step Anleitung, vielleicht kann das Ganze ja mal jemand ins Wiki stellen...

Zunächst muss folgende Software installiert werden:
- Samba Version 3.0.22-r3
- Squid Version 2.6.9
- mit-krb5 Version 1.5.2

Ich habe die Installation auf einem Gentoolinux durchgeführt. Wichtig ist, dass man das USE-Flag winbind und pam gesetzt hat ansonsten artet das später in einer längeren Fehlersuche aus :rolleyes:

In der Zwischenzeit kann man sich mal das offizielle Howto durchlesen:
http://wiki.squid-cache.org/ConfigExamples/WindowsAuthenticationNTLM?highlight=%28%5EConfigExamples/%5B%5E/%5D%2A%24%29#head-fdad1165c96922f95f17f9bfd448af78431baec3

Ein paar Sachen die zu beachten sind:
- bei der Kerberos Geschichte peinlichst auf Gross- und Kleinschreibung achten!
- die Uhr muss mit dem DC syncronisiert sein!
- bei einer Installation auf Gentoo muss der winbindd zunächst manuell gestartet werden. Ergänzt man aber die Datei: /etc/conf.d/samba um daemon_list="smbd nmbd winbind" wird das von den init.d-Scripts übernommen
- um das erstellen der Initalkeys bzw. das Seeden zu beschleunigen, kann man in einer anderen Konsole ein "find / -iname "blablubfilegibtsnicht" eingeben.

sszh0032 pam.d # cgrep /etc/krb5.conf
[libdefaults]
ticket_lifetime = 600
default_realm = DOMAIN.LOCAL
default_tkt_enctypes = des-cbc-crc des-cbc-md5 rc4-hmac
default_tgs_enctypes = des-cbc-crc des-cbc-md5 rc4-hmac
prefered_enctypes = des-cbc-crc des-cbc-md5 rc4-hmac
dns_lookup_realm = false
dns_lookup_kdc = true
forwardable = yes
[realms]
DOMAIN.LOCAL = {
kdc = dczh0002.domain.local.:88
kdc = dczh0001.domain.local.:88
admin_server = dczh0002.domain.local.:749
default_domain = DOMAIN.LOCAL.
}
[domain_realm]
.domain.local. = domain.local.
domain.local. = domain.local.
[kdc]
profile = /etc/kdc.conf
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
[logging]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log

sszh0032 samba # cgrep /etc/kdc.conf
[kdcdefaults]
kdc_ports = 750,88
acl_file = /var/lib/krb5kdc/kadm5.acl
admin_keytab = FILE:/var/lib/krb5kdc/kadm5.keytab
v4_mode = noreauth
[libdefaults]
default_realm = DOMAIN.LOCAL.
dict_file = /usr/share/dict/cracklib-words
[realms]
DOMAIN.LOCAL. = {
master_key_type = des-cbc-crc
supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3
}


sszh0032 samba # cgrep /etc/samba/smb.conf
[global]
netbios name = sszh0032
realm = DOMAIN.LOCAL
workgroup = NETBIOSDOMAIN
security = ADS
password server = dczh0002.domain.local dczh0001.domain.local
socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
idmap uid = 10000-20000
winbind enum users = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind separator = +
winbind use default domain = yes
encrypt passwords = yes
log level = 3 passdb:5 auth:10 winbind:5

sszh0032 pam.d # cgrep /etc/squid/squid.conf
http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Company-XYZ
auth_param basic credentialsttl 2 hours
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl lcl src 10.128.0.0/16
acl auth proxy_auth REQUIRED
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 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow lcl auth
http_access deny all
http_access deny all
http_reply_access allow all
icp_access allow all
forwarded_for off
coredump_dir /var/cache/squid

Als erste Anlaufstelle bei Fehlern sollten die ganzen Logs abgeklappert werden:
- /var/log/squid/cache.log
- /var/log/squid/access.log
- /var/log/krb5kdc.log
- /var/log/kadmin.log
- /var/log/samba/log.winbindd

Falls sich winbind über falsche Berechtigung mokieren sollte, checkt das Socket-file. In meinem Fall:

-rw-rwx--- 1 root squid 40K Feb 2 14:40 winbindd_cache.tdb
-rw-rwx--- 1 root squid 8.0K Feb 2 09:36 winbindd_idmap.tdb
drwxr-x--- 2 root squid 4.0K Feb 2 14:40 winbindd_privileged
sszh0032 samba # l /var/cache/samba/winbindd_privileged/
total 8.0K
drwxr-x--- 2 root squid 4.0K Feb 2 14:40 .
drwxr-xr-x 5 root root 4.0K Feb 2 15:02 ..
srwxrwxrwx 1 root root 0 Feb 2 14:40 pipe

Wichtig ist die richtige Perm-Maske auf das Verzeichnis winbindd_privileged gesetzt ist.

Soweit mal in aller Kürze...Happy hacking...
 

sammy2ooo

voll Tohuwabohu
hier noch ein paar Tweaks:

- erlaube Zugriff nur, wenn user xyz in der Domänengruppe P_Proxy ist
- SNMP
- delay_pool hinzugefügt (die ersten 4MB an downloads mit der acl magic_words1 mit voller Bandbreite dann refill mit 50K)

...
external_acl_type w2k_group ttl=0 children=5 %LOGIN /usr/libexec/squid/wbinfo_group.pl
...
acl magic_words1 url_regex -i .avi .mpeg .mpg. .qt .zip .rar .iso .mp3 .mp4 .tar.bz2 .tar.gz .gz .exe .wma .wav .swf .ram .raw
acl snmppublic snmp_community public
acl w2k_user external w2k_group p_proxy
...
http_access deny !w2k_user
http_access allow lcl auth
http_access deny all
...
snmp_port 3401
snmp_access allow snmppublic localhost
snmp_access allow snmppublic lcl
snmp_access deny all
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 255.255.255.255
delay_pools 1
delay_class 1 2
delay_access 1 allow magic_words1
delay_parameters 1 -1/-1 51200/4194304
delay_initial_bucket_level 100
...

Kennt jemand eine Möglichkeit quasi life zu sehen wieviel Traffic durch den Proxy geht? Würde das mit snmp gehen? Hab das soweit noch nicht ausgetestet...
 

PoJ

Member
Hallo,

Kennt jemand eine Möglichkeit quasi life zu sehen wieviel Traffic durch den Proxy geht? Würde das mit snmp gehen? Hab das soweit noch nicht ausgetestet...

weiss jetzt nicht ob es genau das ist was Du suchst...

Sowas ?

Das geht mit einer Kombination von net-snmp/mrtg/apache sowie einem Squid übersetzt mit aktiver SNMP-Unterstützung.

Bin im Moment selber da am 'rumbasteln'. Wenn es von allgemeinem Interessse ist, kann ich ja mal meine 'wüsten' configs als .tar hier verlinken.

MfG PoJ
 
Oben