MAC Zugriffskontrolle

Alter Schwede

Lt. Junior Grade
Registriert
Juli 2005
Beiträge
284
Hallo zusammen

Ein Freund und ich verwalten in unserem Schulnetzwerk das WLAN. Es handelt sich dabei um einen AP von D-Link in der Preisklasse um die 40-50€. Mittlerweile haben wir so viele WLAN-Nutzer, dass der AP keine weiteren MAC-Adressen einspeichern kann. Unser Lehrer meinte, dass es möglich sei eine Datei auf dem Linux-Server zu erstellen und somit eine Zugriffskontrolle über MAC-Adressen zu haben.
Nun ist meine Frage, wie geht das? Denn weder mein Freund noch mein Lehrer haben dafür die zündende Idee.
Ich hoffe, dass jemand von euch eine Idee hat, wie das zu realisieren ist. Welche Linux Version auf dem Schulserver läuft, weiß ich leider nicht.

mfg,
Stefan
 
Ohne zu wissen wie euer Netz aufgebaut ist wird es schwer euch da zu helfen...

Es gibt eine mac extension für iptables, aber dafür muss der netzverkehr eben auch über iptables geroutet werden...

man iptables dürfte helfen.

--mac-source [!] address
Match source MAC address. It must be of the form
XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets
coming from an Ethernet device and entering the PREROUTING, FOR‐
WARD or INPUT chains.
 
JayKay schrieb:
Ohne zu wissen wie euer Netz aufgebaut ist wird es schwer euch da zu helfen...
Versuche ein paar mehr Details über das Netzwerk zu erfahren.

- Samba?
- NFS?
- NIS?
- LDAP?
- Squid?
- IPCop?

Alles Schlagworte mit unterschiedlichen Strategien. Und jede Lösung hat seinen eigenen Weg und seinen eigenen Zweck. Eine pauschale Antwort a la "das trägst Du in Datei xy.z ein", kenne ich nicht.

Vielleicht möchtest Du die Anleitungen (in deutsch) von netfilter.org erstmal lesen :)
 
für mac-adressenfilterung:
du brauchst einen linux-kernel, der mit arpfilter-support kompiliert ist, dann kannst du über das programm arptables das einrichten oder du brauchst einen kernel, der mit dem iptables-mac-filter kompiliert ist, dann kannst du die mac-option von iptables nehmen.
tutorials für iptables gibt es wie sand am meer, daher spar ich hier längere ausführungen, wie das genau geht.

bei wlan ist das aber beides vergebene liebesmühe, da bei wlan-geräten die mac sogar mit windows ohne jeden aufwand änderbar ist. anders als bei andere nic-varianten, die eine quasi nicht änderbare mac haben.
 
Der Lehrer wird mit hoher Wahrscheinlichkeit nicht den Linux-Kernel updaten. Das ist ihm einfach zu riskant, da davon nun mal alles in der Schule abhängt (Internetzugang, Domänenanmeldung etc).

Das mit iptables hört sich nicht schlecht an. Aber wie soll das in der Praxis genau gehen, dass nur MAC-Adressen, die dort drin stehen, zugelassen werden und das bei anderen die Datenpakete verworfen werden.

In der Schule gibt es zwei Server.

Der Hauptserver, worauf die sogenannte "Linux Musterlösung" läuft, hat die IP Adresse 10.1.1.254, SNM: 255.255.0.0 (hat also 254 Subnets).

Der zweite Server hat die IP Adresse 192.168.1.1; dieser Server soll nach und nach seine Aufgaben abgeben aber das tut jetzt nichts zur Sache. Auf jeden Fall ist an diesem Server der WLAN-AP (IP: 192.168.1.50). Die Datenpakete werden an der 10er Server weiter geroutet und der 10er Server besitzt das PPP-Interface. Die WLAN Clients bekommen IP Adressen aus dem 192er Netz vom DHCP Server zugewiesen.

Ich nehme mal stark an das der Netzverkehr über iptables läuft, da der Server schließlich die Pakete von innen maskiert und auch gewisse Ports nach außen sperrt (z.B. POP, SMTP).
 
Zuletzt bearbeitet:
Und du glaubst tatsaechlich, dass der Internetzugang und die Domaene mit dem Kernel zusammenhaengen? Das beides hat mit dem Kernel ueberhaupt nichts zu tun. Er kann dabei so viel updaten so viel er will, solang er keine Module vergisst. Und wenn er keinen anstaendigen Kernel bauen kann, ist er eh zu unfaehig fuer den Job.

Ich nehme mal stark an das der Netzverkehr über iptables läuft, da der Server schließlich die Pakete von innen maskiert und auch gewisse Ports nach außen sperrt (z.B. POP, SMTP).

Das geht auch mit Squid.

MfG
 
Und du glaubst tatsaechlich, dass der Internetzugang und die Domaene mit dem Kernel zusammenhaengen? Das beides hat mit dem Kernel ueberhaupt nichts zu tun. Er kann dabei so viel updaten so viel er will, solang er keine Module vergisst.

Darum geht es nicht. Der Server läuft rund um die Uhr und für einen Kernelupdate müsste man:

1. Zeit investieren
2. Ein gewisses Risiko eingehen
3. Den Server neu starten

Ich bin dafür nicht verantwortlich und kann auch sowas nicht entscheiden - also ich schließe diese Möglichkeit mal aus.

Wie kann ich denn prüfen ob iptables diesem MAC-Filter schon integriert haben?
 
Das mit iptables hört sich nicht schlecht an. Aber wie soll das in der Praxis genau gehen, dass nur MAC-Adressen, die dort drin stehen, zugelassen werden und das bei anderen die Datenpakete verworfen werden.
aus der man-page von iptables (eigentlich nicht wirklich schwer zu finden...):

--mac-source [!] address
Match source MAC address. It must be of the form XX:XX:XX:XX:XX:XX. Note that this only makes sense for packets coming from an Ethernet device and entering the PREROUTING, FORWARD or INPUT chains.

das heißt einfach, wenn du einen neuen chain einfügst "--mac-source mac-von-rechner-für-den-diese-regel-gilt" dranhängen.
solltest dir bei vielen regeln/rechner ein script dafür schreiben bzw. nach einem suchen, das das macht.

was die frage ist, wie man rausbekommt, ob der kernel das kann: einfach einen chain mit mac-filterung einfügen und gucken, ob er sich beschwert. das ist keine schöne variante funktioniert aber ohne probleme.
 
Also bei mir wollte ich das mal testen (SuSe 10.0 - iptables 1.3.3.3).

Welche Kernel-Version oder welches Modul brauche ich jetzt damit diese Erweiterung --mac-source verfügbar ist? Ich würde das gerne mal vorher bei meinem Rechner hier testen.
 
*cerox* schrieb:
Darum geht es nicht. Der Server läuft rund um die Uhr und für einen Kernelupdate müsste man:

1. Zeit investieren
2. Ein gewisses Risiko eingehen
3. Den Server neu starten

Dann kompiliert man den Kernel halt nach der Schule, wo keiner mehr den Server benoetigt. Du kannst mir nicht sagen, dass rund um die Uhr der Schulserver benoetigt wird.

MfG
 
Wie schon gesagt - ich bin noch Linuxnooby und ich bin auch nicht der Serveradministrator.

Ich werde morgen mal fragen, wie das mit dem Kernel aussieht, ob die MAC-Extension bereits installiert ist (wohl kaum^^) und wegen einem Kernel-Update fragen. Natürlich könnte man das Samstag nachmittag wunderbar machen, wenn der Server bis Montag nicht mehr benötigt wird aber ich kann es nun mal nicht entscheiden.

Wo bekomme ich dann die MAC-Erweiterung her, so dass ich es auch zuhause mal ausprobieren kann?
 
*cerox* schrieb:
Also bei mir wollte ich das mal testen (SuSe 10.0 - iptables 1.3.3.3).

Welche Kernel-Version oder welches Modul brauche ich jetzt damit diese Erweiterung --mac-source verfügbar ist? Ich würde das gerne mal vorher bei meinem Rechner hier testen.
da suse quasi sie alle optionen von iptables angestellt bzw. als modul kompiliert hat, solltest du gute chancen haben, das der mac-filter auch mit drin ist. (ich kann das gerade nicht beurteilen, da ich keinen "echten" suse-kernel + module irgendwo rumfliegen habe.)

ansonsten es ist keine erweiterung von iptables, sondern schlicht ein modul mit filterregelungen unter vielen.
 
linux:~ # iptables -A INPUT -i eth0 -p icmp --mac-source 00:50:8D:ED:7D:10 -j DROP
iptables v1.3.3: Unknown arg `--mac-source'
Try `iptables -h' or 'iptables --help' for more information.

Also es geht bei mir nicht wie man sieht, vielleicht mache ich auch irgendetwas falsch.

Wo bekomme ich dieses Modul dann her?
 
iptables -I INPUT -i eth0 -p icmp -m mac --mac-source 00:50:8D:ED:7D:10 -j DROP

so müsste das klappen. (bei mir geht es zumindest.)
ich hatte vergessen auf "-m mac" explizit hinzuweisen. ist der hinweis welche matching-methode du denn gerne hättest.
 
Hallo,

bin bisher ja bestens durch meinen Freund vertreten worden. Wenn ich mir den Befehl so ansehe fällt mir am ende das "-j DROP" auf. Bewirkt dies nun, dass Zugriffe auf das Internet duch die angegebene MAC-Adresse erlaubt werden, oder dass Zugriffe blockiert werden?


mfg,
Stefan
 
Alter Schwede schrieb:
Wenn ich mir den Befehl so ansehe fällt mir am ende das "-j DROP" auf. Bewirkt dies nun, dass Zugriffe auf das Internet duch die angegebene MAC-Adresse erlaubt werden, oder dass Zugriffe blockiert werden?
drop heißt drop, weil das packet auf das diese regel zutrifft verworfen wird. also nach der oben stehende regel, ist ein ping von der mac-adresse über das interface eth0 (man kann -i auch weglassen, dann gilt es für alle interfaces: also netzwerkkarten) nicht mehr möglich.
edit: ok anders: der rechner mit der mac-adresse bekommt auf dem port von ping keine antwort. wenn du nur die weiterleitung in das internet verbieten willst, gehört es in eine andere kategorie. dann müsstest du "-A FORWARD" schreiben.
 
Zuletzt bearbeitet:
hmm, ok. verstanden. Es soll aber dummerweise genau andersrum sein, dass die eingetragen MACs Zugriff haben und alle anderen MACs geblockt werden. Also gibt es noch ein anders Argument als "-j DROP"?

ja ok, sehe gerade dass du meine frage in der änderung soeben gelöst hast :), zumindest zum Teil. Die eingetragenen MACs sollen eine Art Vollzugriff haben. Also pingen können, ins Internet etc., und die nichteingetragenen sollten optimalerweise gar nichts dürfen.
 
Zuletzt bearbeitet:
naja das geht recht einfach:
einfach alles grundsätzlich dropen und nur die nicht dropen die du rein haben willst.
also zuerst die regel alle dropen rein und dann für die, die dürfen die regeln danach einfügen. dann nicht mit "-j DROP" sondern mit "-j ACCEPT".

btw. man sollte sowieso immer als erstes die regel alle dropen reintun und dann erst die reinlassen, die man haben will.
 
Ja das müsste dann mit:

iptables -A INPUT -i eth0 -m mac --mac-source mac-adresse -j ACCEPT

Kann man das Protokoll Argument auch weglassen oder muss ich das für TCP, ICMP etc. einzeln schreiben?

Es sollten dann ja Pakete von einer Quell-MAC-Adresse geroutet werden und die anderen verworfen. Oder muss das durch die Forward Chain?
 
wenn du es ruoten willst, ist das der forward chain. du kannst das auch afaik über input machen, aber das ist nicht so schön und spiegelt nicht das wieder, was machen willst. das protokoll ist optional, genau wie das interface. daher wie gesagt einfach einfügen "alle raus" ("iptables -A INPUT -j DROP" bzw. "iptables -A FORWARD -j DROP". wobei man interface besser mit erwähnen sollte. er spart streß auf dem lokalen system... lo kann auch von iptables überwacht werden.) und dann díe reinlassen, die man mag.

EDIT: BEVOR MAN "iptables -A INPUT -j DROP" EINGIBT: DAS BLOCKIERT ALLES. DAHER EIN TIPP: LÖSCHEN _ALLER_ REGEL MIT "iptables -F". dann ist alles wieder in ordnung.
ich hab das hier mal so groß geschrieben, da ich ein bisschen angst bekommen habe, als ich meinen beitrag las, dass es jemand einfach so mal eingibt.
 
Zuletzt bearbeitet:
Zurück
Oben