# Zugriff auf WLAN gestatten, aber nicht auf LAN - mit IPTables ?



## kleriker (8. Juli 2007)

Hallo Leute, 

Ich möchte Internet über WLAN zulassen, aber nicht den LAN-Zugang. Dieser soll anhand der Mac-Adresse gesperrt werden. Das ganze soll in meinem Router eingestellt werden: LinkSys WRT54GS mit Custom Firmware (Firmware Version: v4.71.1, Hyperwrt 2.1b1 + Thibor15c). Mit der Firmware hat man die Möglichkeit Linux-Befehle auszuführen. Ich habe gestern schon mit einem Kumpel experimentiert, aber wir haben es nur geschafft, den Rechner komplett auszusperren: 

*iptables -I INPUT -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP* 


Danach hat er nochmal weiterprobiert und hat diesen Befehl zusammengestellt, der aber leider nicht funktioniert: 

*iptables -I FORWARD 1 -m mac --mac-source xx:xx:xx:xx:xx:xx -m iprange --dst-range 192.168.0.1-192.168.0.99 -j DROP* 


Ich hoffe einer von Euch kann mir hier weiterhelfen, wäre echt klasse. 

Gruß, 
Alex


----------



## Dennis Wronka (8. Juli 2007)

Da Du die Moeglichkeit hast Linux-Befehle auszufuehren schau doch mal mittels *ifconfig* welche Netzwerk-Interfaces existieren.
Dort solltest Du mindestens 4 finden: ein Loopback-Interface, eines fuer das LAN, eines fuer das WLAN und eines fuer das Internet.
Nun musst Du Deine IPTables-Regel so anpassen dass die MAC-Addresse nur ueber das WLAN-Interface (moeglicherweise wlan0) zugreifen darf. Ueber lo, das Loopback-Interface, und ueber das Internet-Interface (moeglicherweise ppp0) kann es eh nicht zugreifen, bleiben also nur das LAN-Interface (wahrscheinlich eth0) und eben das WLAN-Interface. Es reicht wenn Du Deine Regel anpasst sodass die MAC auf dem LAN-Interface gesperrt wird.

"Hoeflicher" ist es uebrigens REJECT statt DROP zu nehmen, vor allem da Du ja im LAN arbeitest. Dort bekommt der Rechner dann noch eine Info dass er nicht verbinden kann und muss nicht auf einen Time-Out warten um dies selbst zu merken.
Es duerfte uebrigens auch noetig sein diese Regel in FORWARD zu definieren, denn dort kommen Pakete an die durch den Rechner/Router gehen.


----------



## kleriker (8. Juli 2007)

Hallo,

erstmal danke für deine Antwort. Ifconfig hat mir folgendes ausgeworfen:

*br0 *       Link encap:Ethernet  HWaddr  xx:xx:xx:xx:xx:xx 
          inet addr:192.168.0.254  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:79439787 errors:0 dropped:0 overruns:0 frame:0
          TX packets:94026390 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:370212536 (353.0 MiB)  TX bytes:595886576 (568.2 MiB)
*eth0*       Link encap:Ethernet  HWaddr  xx:xx:xx:xx:xx:xx  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:173735050 errors:10 dropped:0 overruns:10 frame:10
          TX packets:173305673 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:4147461189 (3.8 GiB)  TX bytes:2953389872 (2.7 GiB)
          Interrupt:4 Base address:0x1000 
*eth1 *      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:171489 errors:0 dropped:0 overruns:0 frame:411311
          TX packets:856404 errors:509 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:24196374 (23.0 MiB)  TX bytes:455412927 (434.3 MiB)
          Interrupt:2 Base address:0x5000 
*lo *        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING MULTICAST  MTU:16436  Metric:1
          RX packets:1180 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1180 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:85216 (83.2 KiB)  TX bytes:85216 (83.2 KiB)
*ppp0*       Link encapoint-Point Protocol  
          inet addr:xx.xx.xx.xx  P-t-P:xx.xx.xx.xx  Mask:255.255.255.255
          UP POINTOPOINT RUNNING MULTICAST  MTU:1492  Metric:1
          RX packets:25517 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20897 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:15433375 (14.7 MiB)  TX bytes:5564022 (5.3 MiB)
*vlan0*      Link encap:Ethernet  HWaddr  xx:xx:xx:xx:xx:xx 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:79315998 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93850543 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:683978862 (652.2 MiB)  TX bytes:763769001 (728.3 MiB)
*vlan1*      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx
          inet addr:169.254.1.7  Bcast:169.255.255.255  Mask:255.0.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1492  Metric:1
          RX packets:94419052 errors:0 dropped:0 overruns:0 frame:0
          TX packets:79455130 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:336251427 (320.6 MiB)  TX bytes:2189620871 (2.0 GiB)


Leider habe ich überhaupt keine Ahnung von den IPTables. Die oben genannte Befehlszeile hat ein Kumpel für mich erarbeitet, der aber dann auch nicht mehr weiterkam. Deshalb wäre es wirklich nett, wenn du mir vielleicht mal einen passenden Befehl schreiben könntest. Das ganze ist auch für kein Firmennetz gedacht. Es geht einfach nur darum, dass wir unseren Feriengästen den Internetzugang über WLAN gestatten wollen, sie aber kein Zugriff auf unser LAN haben sollen.

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Viele IPs sieht man da ja jetzt nicht bei den ganzen Interfaces.
Ich nehme mal an, dass Du ppp0 selbst maskiert hast, richtig?

Ueber welche IPs ist der Router denn so erreichbar? Also vom LAN und vom WLAN.
Wenn Du verschiedene Subnetze nutzt sollte das schon reichen. Du kannst aber auch per IPTables festlegen dass eine Kommunikation von NetzA zu NetzB nicht erlaubt ist, und zwar in der Kette FORWARD, welche ja fuer Verbindungen ist die durch den Router gehen.
Wenn wir mal annehmen, dass hier br0 Dein Interface zum LAN und vlan1 zum WLAN geht kannst Du dies z.B. so verhindern.

```
iptables -A FORWARD -i br0 -o vlan0 -j REJECT
```
Um sicherzustellen, dass diese Regel nicht von anderen ausser Kraft gesetzt wird kannst Du sie an den Anfang der FORWARD-Kette setzen, und zwar so:

```
iptables -I FORWARD 1 -i br0 -o vlan0 -j REJECT
```


----------



## kleriker (8. Juli 2007)

Ich nutze nur ein Subnet. Die IP bei *ppp0* habe ich editiert, sowie die ganzen mac-adressen. Der Router ist über WLAN und LAN unter 192.168.0.254 erreichbar.

Was mir gerade noch als Alternative einfällt: Ich habe noch einen AP, den ich momentan nicht benutze. Den könnte ich doch für die Ferienwohnung zurecht machen. Wenn ich den AP nun per LAN-Kabel an den Router anschließe, könnte man dann nicht vielleicht per IPTables regeln, dass dieser LAN-Anschluss nicht auf die anderen zugreifen kann ? Die frage ist dann nur, ob die WLANs, die ja dann unterschiedlich konfiguriert sind, sich nicht untereinander stören.
Naja wie gesagt, nur eine Alternative.

Gruß,
Alex


----------



## kleriker (8. Juli 2007)

Achso, ich will nochmal dazusagen, falls das jetzt falsch verstanden wurde, ich will nur bestimmte Rechner ausschließen (die der Gäste). Ich will dennoch weiterhin über mein Laptop per WLAN auch aufs LAN zugreifen können. Also keine generelle Sperrung!


----------



## Dennis Wronka (8. Juli 2007)

Also sowohl das LAN als auch das WLAN nutzen das Netz 192.168.0.0, richtig?
Dann musst Du auf jeden Fall mit IPTables arbeiten um die Kommunikation zu unterbinden.
Willst Du nur mit Deinem Laptop vom WLAN auf das LAN zugreifen oder auch noch mit anderen Rechnern?

Falls nur mit dem Notebook wuerde ich empfehlen die MAC des Notebooks zuzulassen und eben alles andere zu blocken.

Das folgende sollte alles was von br0 kommt und nicht nach ppp0 rausgeht und nicht von Deinem Notebook kommt ablehnen.

```
iptables -I FORWARD 1 -i br0 -o ! ppp0 -m mac --mac-source ! NOTEBOOK_MAC -j REJECT
```


----------



## kleriker (8. Juli 2007)

Ja WLAN und LAN nutzen das gemeinsame Netz.

Es sind zwar mehrere Rechner in unserem Haushalt, die auch über WLAN zugreifen, aber deine Lösung gefällt mir sehr viel besser, denn meine Rechner ändern sich ja nicht soo schnell, somit ist die Arbeit nur einmal da, während wir ständig wechselnde Gäste haben.

Also kann ich diese Befehlszeile für alle meine Rechner eingeben ?

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Wenn Du mehrere Rechner hast wuerde ich eine Reihe von Regeln als Whitelist einrichten und anschliessend alles andere verbieten.
Z.B. so:

```
iptables -I FORWARD 1 -m mac --mac-source ALLOWED_MAC_1 -j ACCEPT
iptables -I FORWARD 2 -m mac --mac-source ALLOWED_MAC_2 -j ACCEPT
...
iptables -I FORWARD X -i br0 -o ! ppp0 -j REJECT
```
Das X steht hier natuerlich fuer die Stelle an der dann diese Regel effektiv eingefuegt wird, welche natuerlich abhaengig von der Anzahl der MAC-Addressen in der Whitelist ist.


----------



## kleriker (8. Juli 2007)

Hmm ... mir ist gerade die Idee gekommen, dass das im Grunde ja nicht wirklich sicher ist, denn die MAC Adresse lässt sich ja sehr leicht am Rechner ändern. Deshalb doch nochmal die Alternative: Wäre es mögliche einen Lan Anschluss am Router so einzurichten, dass der nicht auf die anderen Zugreifen kann ?
Dann könnte ich am AP ein anderes WPA Passwort einrichten und die WLANs wäre sozusagen von einander getrennt.

Nochmals danke für deine tolle Hilfe.

Gruß,
Alex

EDIT: Jetzt ist mir gerade ne ganz "blöde" Idee gekommen: Kann ich nicht die MAC des APs für den LAN Zugang sperren ? Würde ich damit auch die per WLAN verbundenen Rechner fürs LAN ausschließen ?


----------



## Dennis Wronka (8. Juli 2007)

Ja, so eine Mac-Addresse ist natuerlich recht einfach zu faelschen, jedoch muss man dafuer dann das Glueck haben eine der erlaubten Addressen zu erwischen.

Zu Deinem Edit: Da kann ich Dir nichts zu sagen da ich nicht weiss ob die Kommunikation dann mit der Mac des AP weitergeht oder weiterhin mit der Mac des Clients.


----------



## kleriker (8. Juli 2007)

Die erlaubten Adressen zu finden, ist eigentlich recht einfach. Da muss ja nur ein erlaubter Rechner mal per WLAN online sein. Schon hat man die MAC.

Nochmal zu meiner Frage, würde das gehen mit den LAN-Ports, also einen LAN-Anschluss von den anderen absondern ?

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Hmm, gute Frage. Dann musst Du aber immer noch einrichten, dass nur bestimmte Rechner auf diesen Anschluss duerfen.
Auch wenn Du verschiedene Subnetze nutzt wirst Du Routing brauchen, wo Du wiederum filtern musst wer darf und wer nicht.

So gross ist die Gefahr meiner Meinung nach auch nicht. Denn der User kann auch nur raten welcher Rechner zu den erlaubten gehoert und welcher nicht.
Er muss dann die verfuegbaren MACs durchprobieren.
Zudem kann man davon ausgehen, dass die meisten User garnicht wissen wie das geht.
Natuerlich besteht ein gewissen Risiko, jedoch faellt mir momentan keine wirkliche Loesung ein.


----------



## kleriker (8. Juli 2007)

Also wenn wäre das so gestaltet, dass der AP nur für die Ferienwohnung ist. Unsere Rechner greifen weiterhin direkt über den Router zu. Somit bräuchte man keine Ausnahmen zu machen. Es wäre mir halt der angenehmere Weg, denn so bräuchte ich den Haupt-WPA Schlüssel nicht rausgeben, andem alles hängt. Gut ok, bin in der Hinsicht einwenig paranoid, muss ich zugeben +gg+.

Achso schreib mir bitte auch nochmal einen Befehl, womit ich eine Mac für LAN sperren kann, dann kann ich das ja mal mit der Mac des APs probieren.

Nochmals Danke.

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Um den Zugriff einer bestimmten MAC auf das LAN zu sperren sollte Dir folgender Befehl helfen:

```
iptables -I FORWARD 1 -i br0 -o ! ppp0 -m mac --mac-source NOTEBOOK_MAC -j REJECT
```


----------



## kleriker (8. Juli 2007)

Super, danke.

Ich glaube ich habe jetzt auch ne Lösung gefunden: 

Der AP hat ein eigenes WLAN mit eigenem WPA Schlüssel. Zusätzlich stell ich noch einen MAC Filter ein. Auf diesem AP greifen nur die Feriengäste zu, somit sind auch nur deren MCs eingetragen. Soo ... im Router nehme ich dann dein Script von oben und stelle ein, dass nur meine eingetragenen MACs aufs Lan zugreifen können. Wenn jetzt nun einer wirklich ne MAC von meinen Rechnern spoofen würde, dann kann er mit der nix anfangen, da sie nicht auf dem AP eingetragen ist. Auf den Router kann er wiederrum auch nicht zugreifen, da er nicht den richtigen WPA Schlüssel hat. Somit wäre ich relativ abgesichert.

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Nichts zu danken.
Wenn Du's probiert hast waere eine Rueckmeldung nett ob es denn so geklappt hat.


----------



## kleriker (8. Juli 2007)

Hallo,

so habe jetzt alle Befehle getestet und leider führte keiner zum Erfolg. Ich konnte immer mit dem Test-Laptop auf das LAN zugreifen. Hast du vielleicht noch ne Idee ?

Gruß,
Alex


----------



## Dennis Wronka (8. Juli 2007)

Hast Du auf dem Router eine Moeglichkeit einzusehen von welchem Interface der Traffic kommt und wo er hingeht?
TCPDump ist nicht zufaellig verfuegbar, oder?


----------



## kleriker (8. Juli 2007)

habe gerade mal tcpdump probiert, aber den Befehl kennt er nicht. Auch sonst habe ich wohl keine Möglichkeit das einzusehen.


----------



## Dennis Wronka (8. Juli 2007)

Hmm.
Falls Du noch was findest, irgendwas an Infos lass es hier im Thread liegen. Ich schau morgen wieder rein, aber jetzt muss ich mal in die Falle, ist wieder spaet geworden.


----------



## kleriker (8. Juli 2007)

Ach stimmt ja ... bist ja nen paar stunden voraus +gg+ ... Vielen Dank für deine Hilfe ... ich schau nochmal rum, vielleicht find ich ja noch was. 

Gute Nacht dir.

Gruß,
Alex


----------



## kleriker (14. Juli 2007)

Hallo,

sorry, dass ich mich jetzt erst wieder melde, aber ich bin die Woche über nicht zuhause. Also ich habe alles nochmal durchprobiert, allerdings alles ohne Erfolg. Mein Kumpel hat mir allerdings folgende Zeilen gebastelt, die dazu führten, dass der Internetzugriff nicht mehr ging, LAN und Routerzugriff aber schon. Vielleicht hilft das ja weiter.

iptables -I FORWARD 1 -m mac --mac-source laptop_mac -j ACCEPT
iptables -I FORWARD 2 -o ! ppp0 -j REJECT

In der 2ten Befehlsreihe habe ich dann mal das "ppp0" durch alle Möglichen Interfaces ersetz, allerdings kam es immer zu dem gleichen Ergebnis -> Inet ging nicht, LAN und Routerzugriff aber schon.

So ich hoffe, dass das dich/euch vielleicht noch auf eine Idee bringt.

Gruß,
Alex


----------

