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

[gelöst] 802.1x-Authentifizierung übernehmen

linusr

Newbie
Hallo zusammen

Ich (3.Lj) habe den Auftrag bekommen, einen Squid-Server für eine Schule aufzusetzen. Ich habe mich dabei für die aktuellste Version von Squid und Ubuntu Server als OS entschieden.
Ich bin jetzt schon rund 2 Wochen daran und komme nicht mehr weiter, vielleicht könnt ihr mir ja helfen:
Es gibt rund 3'000 unterschiedliche, variable Clients die sich per 802.1X (PEAP - MSCHAPv2) über den Switch am Radius-Server authentifizeren um Zugriff auf unser Netzwerk zu bekommen. Nun hätte ich gerne diese Authentifizierung an Squid übergeben, damit ich später die Clients über die Gruppen auf dem AD bequem verwalten kann und diese den Benutzername und das Kennwort nicht noch ein zweites Mal eingeben müssen. Eigentlich dachte ich, dass dies nicht so schwierig sein kann, da sooo viele "Authenticators" existieren und dies (meiner Meinung nach) ein halbwegs "normaler" Usecase ist. Jedoch bin ich entweder zu blöd den richtigen zu finden oder es gibt noch nichts passendes :???:
Zumindest in der Theorie sollte dies doch möglich sein, denn in der Ereignisanzeige auf dem Radius-Server findet man den Benutzername und die MAC-Adresse und die MAC-Adresse könnte man dann wiederum über die Ereignisanzeige des DHCP-Servers (oder arp -a im gleichen Netz) in eine IP-Adresse umsetzen, so dass die Zuordnung von Benutzer und IP erstellt wird. Kennt jemand ein Authenticator der mir in diesem Fall helfen könnte? Oder meint ihr ich habe eine Chance, mit meinem doch noch ziemlich begrenzten Wissen, dieses Programm selbst zu schreiben?

Nun habe ich noch 3 kleinere Fragen (oder Frägchen):
1. Leider kann man bekanntlich keinen transparenten SSL-Proxy erstellen. So ist es nötig Proxyeinstellungen von Hand vorzunehmen oder zu hoffen, dass die Clientprogramme WPAD unterstützen. Ist es nicht irgendwie möglich den Squid-Server als Gateway anzugeben so dass man doch irgendwie den Inhalt filtern kann? Oder wie macht man dies normalerweise (natürlich ohne zusätzlich Konfiguration am Client)? Gibt es allenfalls eine Squid-Alternative die dies unterstützt?

2. Da wir eine Berufsschule sind, haben wir leider auch Informatiklehrlinge, die durchaus in der Lage wären, andere Dienste als https über 443 zu versenden. Würde dies Squid merken und ggf. blockieren? Wenn dies nicht blockiert werden könnte, würde zumindest der verursachte Traffic gemessen werden (so dass Delaypools greifen würden)?

3. Ich habe mich noch nicht allzusehr mit den Delaypools beschäftigt, aber es beunrhigt mich dass diese einerseits "...pools" heissen und ich andereseits nie gelesen habe, dass man diese auf einzelne Benutzer/IP's beziehen kann, ohne diese explizit angeben zu müssen. Ich hoffe aber schon das dies geht. Kann mir das jemand bestätigen?

Vielen Dank für eure Zeit
Gruss

Edit: Genauer zu 3: Ich meine natürlich nicht, dass alle eine eigene Geschwindigkeit haben (User A: 40kb/s;User B: 60kb/s;User C: 80kb/s), sondern alle die selbe eigene (User A: 40kb/s;User B: 40kb/s;User C: 40kb/s), jedoch nicht die Summe aller (User A+User B+User C: 120kb/s). Irgendwie schwierig zu erklären.
 

spoensche

Moderator
Teammitglied
linusr schrieb:
Nun hätte ich gerne diese Authentifizierung an Squid übergeben, damit ich später die Clients über die Gruppen auf dem AD bequem verwalten kann und diese den Benutzername und das Kennwort nicht noch ein zweites Mal eingeben müssen.

Die Gruppen etc. kannst du nicht per Squid am AD verwalten. Du kannst dem Squid aber sagen, dass er am AD prüfen soll, ob der User authentifizoert ist. Ist der User authentifiziert kann er den Proxy nutzen.

linusr schrieb:
Kennt jemand ein Authenticator der mir in diesem Fall helfen könnte? Oder meint ihr ich habe eine Chance, mit meinem doch noch ziemlich begrenzten Wissen, dieses Programm selbst zu schreiben?

Siehe meinen oben erwähnten Authentifizierungsmechanismus.

linusr schrieb:
1. Leider kann man bekanntlich keinen transparenten SSL-Proxy erstellen. So ist es nötig Proxyeinstellungen von Hand vorzunehmen oder zu hoffen, dass die Clientprogramme WPAD unterstützen.

WPAD ist nur eine Datei, in der ein JavaScript abgearbeitet wird, das den Hostnamen oder IP des Proxies zurück gibt und genutzt werden soll. Das kann jeder Browser.

linusr schrieb:
Ist es nicht irgendwie möglich den Squid-Server als Gateway anzugeben so dass man doch irgendwie den Inhalt filtern kann? Oder wie macht man dies normalerweise (natürlich ohne zusätzlich Konfiguration am Client)? Gibt es allenfalls eine Squid-Alternative die dies unterstützt?

Ein Proxy ist ein Application- Level Gateway und Filtert den Content der Antwort, sofern er dafür konfiguriert ist. Mit dem Proxy können URL´ s auch ganz gesperrt werden.

linusr schrieb:
2. Da wir eine Berufsschule sind, haben wir leider auch Informatiklehrlinge, die durchaus in der Lage wären, andere Dienste als https über 443 zu versenden. Würde dies Squid merken und ggf. blockieren?

Vom Prinzip her wird bei HTTPS einen HTTP GET Anfrage gestellt, nur in verschlüsselter Form (daten werden verschlüsselt) undas kann man konfigurieren.


linusr schrieb:
Edit: Genauer zu 3: Ich meine natürlich nicht, dass alle eine eigene Geschwindigkeit haben (User A: 40kb/s;User B: 60kb/s;User C: 80kb/s), sondern alle die selbe eigene (User A: 40kb/s;User B: 40kb/s;User C: 40kb/s), jedoch nicht die Summe aller (User A+User B+User C: 120kb/s). Irgendwie schwierig zu erklären.

Du meinst Traffic Shaping (Bandbreitenbegrenzung oder QoS) oder?
 
OP
L

linusr

Newbie
hi spoensche

vielen Dank für deine Antwort.

spoensche schrieb:
linusr schrieb:
Nun hätte ich gerne diese Authentifizierung an Squid übergeben, damit ich später die Clients über die Gruppen auf dem AD bequem verwalten kann und diese den Benutzername und das Kennwort nicht noch ein zweites Mal eingeben müssen.

Die Gruppen etc. kannst du nicht per Squid am AD verwalten. Du kannst dem Squid aber sagen, dass er am AD prüfen soll, ob der User authentifizoert ist. Ist der User authentifiziert kann er den Proxy nutzen.

Das klingt gut. Bis jetzt dachte ich, das ist nur möglich, wenn der PC selbst in der Domäne ist. Ich werde am Freitag (wenn ich wieder im Betrieb bin) versuchen dies mit dieser Anleitung einzurichten:
http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
(Ich hoffe das ist schon die korrekte, oder?)

spoensche schrieb:
linusr schrieb:
1. Leider kann man bekanntlich keinen transparenten SSL-Proxy erstellen. So ist es nötig Proxyeinstellungen von Hand vorzunehmen oder zu hoffen, dass die Clientprogramme WPAD unterstützen.

WPAD ist nur eine Datei, in der ein JavaScript abgearbeitet wird, das den Hostnamen oder IP des Proxies zurück gibt und genutzt werden soll. Das kann jeder Browser.

Ok das ist schonmal gut, allerdings dachte ich auch an Programme, welche die zwar keine Browser sind, aber trotzdem Daten über HTTPS versenden. Wobei mir beim näheren überlegen kein solches eingefallen ist (zumindest keines das in unserm Netz ins Internet kommen soll ;) ). Ich vermute auch, dass wenn ein Programm tatsächlich eine solche Verbindung verwenden würde, dies per HTTP geschehen würde. Somit ist diese Frage eigentlich hinfällig.

spoensche schrieb:
linusr schrieb:
Edit: Genauer zu 3: Ich meine natürlich nicht, dass alle eine eigene Geschwindigkeit haben (User A: 40kb/s;User B: 60kb/s;User C: 80kb/s), sondern alle die selbe eigene (User A: 40kb/s;User B: 40kb/s;User C: 40kb/s), jedoch nicht die Summe aller (User A+User B+User C: 120kb/s). Irgendwie schwierig zu erklären.

Du meinst Traffic Shaping (Bandbreitenbegrenzung oder QoS) oder?
Ja, exakt. Einfach sollte dies User/IP abhängig sein, ohne das ich jede IP einzeln beschränken muss und nicht in Pools, wie dies der Name "Delay Pools" suggeriert.
 

spoensche

Moderator
Teammitglied
linusr schrieb:
Ok das ist schonmal gut, allerdings dachte ich auch an Programme, welche die zwar keine Browser sind, aber trotzdem Daten über HTTPS versenden. Wobei mir beim näheren überlegen kein solches eingefallen ist (zumindest keines das in unserm Netz ins Internet kommen soll ;) ). Ich vermute auch, dass wenn ein Programm tatsächlich eine solche Verbindung verwenden würde, dies per HTTP geschehen würde. Somit ist diese Frage eigentlich hinfällig.

HTTPS ein Protokoll, was Port 443 zur Kommunikation verwendet, was aber nicht heisst, das jedes Programm, das den port 443 verwendet auch HTTPS verwenden muss, sondern beispielsweisse auch ein anderes Potokoll verwenden kann, was sehr aufällig ist und direkt durch entsprechende Filterung unterbunden werden kann.

linusr schrieb:
Das klingt gut. Bis jetzt dachte ich, das ist nur möglich, wenn der PC selbst in der Domäne ist. Ich werde am Freitag (wenn ich wieder im Betrieb bin) versuchen dies mit dieser Anleitung einzurichten:
http://wiki.squid-cache.org/ConfigExamples/Authenticate/WindowsActiveDirectory
(Ich hoffe das ist schon die korrekte, oder?)

Du solltest auf gar keinen Fall auf Teufel komm raus einfach die Anleitung umsetzen, sondern erst Überlegungen anstellen und eine Planung machen, was bei der Ralisierung zu beachten ist, um einen möglichst reibungslosen Betrieb der bestehenden Infrastruktur gewährleistenzu könnenk, was das Ziel ist, aus welchem Grund der Proxy dafür notwendig ist, was die Umsetzung und das Resultat für Vorteile bzw. Optimierungen mit sich bringt oder ob andere Lösungen evtl. effizienter und köstengünstiger sind und wofür der Proxy verwendet werden soll.

Ohne IST- Zustand, Erfassen möglicher Probleme, (egal ie banal sie auch sein mögen) und einer Planung bzw. konzept macht man es sich nur unnötig kompliziert und nachträgliche Änderungen sind i.d.R. umständlicher und komplizierter. Also erst schreibarbeit und Zeichnungen etc. anfertigen bevor man zum schönen Teil der Umsetzung bz. Realisierung kommt. ;)

linusr schrieb:
Einfach sollte dies User/IP abhängig sein, ohne das ich jede IP einzeln beschränken muss und nicht in Pools, wie dies der Name "Delay Pools" suggeriert.

QoS = Quality of Service. D.h, das Dienste (z.B. HTTP (Webseiten etc.)), durch Priosierung (Priorität im Sinne der Wichtigkeit, Verfügbarkeitskriterien, Antwortzeiten etc.) Bandbreite zugeteilt wird und/oder diese bevorzugt werden. Die Dienste (Services etc.) werden sogenannten Delay Pools (Verzögerungscontainer) zugeordnet und dem entsprechend abgehandelt.

In einer Domäne, und dem damit verbundenem Active Directory, können sich die Benutzer i.d.R. von beliebigen Rechnern aus an der Domäne anmelden, weil die Profile auf dem Server gespeichert sind. Daher ist dein Vorhaben, Benutzer einer IP zuzuordnen, und anhand der IP die Bandbreite zu beschränken ein nicht zu rechtfertigender Zeitaufwand und abgesehen davon abgesehen so wieso quasi unmöglich.

Für eine Lösung wäre es sehr hilfreich, wenn du uns mitteilen würdest, wofür du die Bandbreitenbegrenzung benötigst bzw. was du damit bezwecken möchtest? So wirklich geht das aus deinen Postings nämlich nicht hervor.

Ich hätte ein paar Ansätze für dich. Ob sie aber auf dein Szenario anwendbar und effizient sind kann ich erst beurteilen, enn mehr Informationen verfügbar sind.
 
OP
L

linusr

Newbie
Zuerst einmal zum aktuellen Stand:
Ich konnte am Freitag die Authentifizierung wie gewollt einrichten (zeitaufwändiger als gedacht), so dass die einzelnen Usernamen in den Logs erscheinen, ohne das diese ihre Daten nochmals eingeben müssen. Darüber hinaus hat es sogar funktioniert, die Rechte auf Gruppen auf dem AD (Verwaltung, Lehrerschaft, Schüler) bezogen zu vergeben.

spoensche schrieb:
Du solltest auf gar keinen Fall auf Teufel komm raus einfach die Anleitung umsetzen, sondern erst Überlegungen anstellen und eine Planung machen, was bei der Ralisierung zu beachten ist, um einen möglichst reibungslosen Betrieb der bestehenden Infrastruktur gewährleistenzu könnenk, was das Ziel ist, aus welchem Grund der Proxy dafür notwendig ist, was die Umsetzung und das Resultat für Vorteile bzw. Optimierungen mit sich bringt oder ob andere Lösungen evtl. effizienter und köstengünstiger sind und wofür der Proxy verwendet werden soll.

Ohne IST- Zustand, Erfassen möglicher Probleme, (egal ie banal sie auch sein mögen) und einer Planung bzw. konzept macht man es sich nur unnötig kompliziert und nachträgliche Änderungen sind i.d.R. umständlicher und komplizierter. Also erst schreibarbeit und Zeichnungen etc. anfertigen bevor man zum schönen Teil der Umsetzung bz. Realisierung kommt. ;)

Ja, ich bin im Prinzip erst in der Informieren-Phase des Projekts. Es geht im Moment nur darum zu erfahren, was Squid alles kann, ob es die bestehende Infrastruktur unterstützt und ob es die gesetzten Ziele irgendwie erreichen kann. Wie schon erwähnt, sind die Ziele schon relativ fix. Dabei gibt es 2 Hauptziele: Einerseits das faire Verteilen der, leider sehr beschränkten, Bandbreite und andererseits um zu verhindern, dass Schüler auf unangemessene Webseiten zugreifen. Zwei weitere Ziele, die optional sind: Das Cachen von Webseiten (wieder um Bandbreite zu sparen) und andererseits um den Schüler glaubhaft machen zu können, dass sie in der Schule nicht machen können, was sie wollen, da die Daten geloggt werden. (Wir werden sie darüber natürlich überdeutlich in Kenntnis setzen und Bestätigungen über die Kentnissname einfordern um rechtliche Probleme zu vermeiden)

Die detailierte Planung kann aber natürlich nur erfolgen, wenn man weiss, was möglich ist und wo Probleme liegen und ob diese überhaupt umgangen werden können.

spoensche schrieb:
Für eine Lösung wäre es sehr hilfreich, wenn du uns mitteilen würdest, wofür du die Bandbreitenbegrenzung benötigst bzw. was du damit bezwecken möchtest? So wirklich geht das aus deinen Postings nämlich nicht hervor.

Ich hätte ein paar Ansätze für dich. Ob sie aber auf dein Szenario anwendbar und effizient sind kann ich erst beurteilen, enn mehr Informationen verfügbar sind.

Wir haben das Problem, das die Bandbreite der Schule eigentlich immer komplett ausgelastet ist. Wenn wir anschliessend die Top 10 der trafficintensivsten Domains anschauen finden wir beinahe nur Filesharing-Websites wie Rapidshare oder Uploaded.to (gelegentlich auch Microsoft, Sourceforge, Sun). Dies soll verhindert werden, daher werden wir diese wahrscheinlich mit SquidGuard sperren. Jedoch haben wir die Befürchtung, das wir mit Blocklisten (z.B. Shalla's Blacklist) nicht alle Filehoster erwischen. (Wir könnten uns auch vorstellen, das einige geschickte Informatiklehrlinge den Traffic über einen externen Server tunneln, welcher nicht erfasst/geblockt ist) Zudem soll auch der Download von grossen Dateien verboten, bzw. unattraktiv gemacht werden (z.b. SP's, legale Images wie Linux Distributionen u.ä.) Jedoch soll das normale Surfen nicht eingeschränkt werden. Daher haben wir gedacht es wäre das einfachste wenn wir z.B. sagen könnten: jeder Schüler hat 40kb/s zur Verfügung, jeder Lehrer 250kb/s und die Verwaltung ist unbeschränkt. Hast du eine Idee was man da machen könnte?

Gruss

Edit:
Habe jetzt eine Methode gefunden (ist ja im Prinzip offensichtlich)
Code:
delay_pools 3

delay_class 1 2
delay_class 2 2
delay_class 3 2

delay_access 1 allow vwnet
delay_access 1 deny all
delay_access 2 allow lpnet
delay_access 1 deny all
delay_access 3 allow blnet
delay_access 1 deny all

delay_parameters 1 512000/512000 256000/256000
delay_parameters 2 256000/256000 64000/64000
delay_parameters 3 128000/128000 8000/8000

und es funktioniert sogar :D

Somit wären eigentlich alle meine Fragen beantwortet. Vielen Dank!
 
Oben