Menu

Netzwerkbrücke und iptables

Help
Maurice
2012-03-03
2013-05-29
  • Maurice

    Maurice - 2012-03-03

    Hallo nochmal!

    Gleich noch eine Frage - in einem neuen Thread wegen des neuen Themas:
    Ich nutze (wie schon gesagt) BS als reinen AP und habe dazu LAN und WLAN in eine Netzwerkbrücke gesteckt. Jetzt würde ich aber gerne trotzdem diverse Sachen ausfiltern und dazu iptables nutzen. Beispielsweise filtere ich Windows-Netzwerkfreigaben mit:

    iptables -t filter -A FORWARD -d 192.168.1.255 -p tcp -sport 137:139 -dport 137:139 -j DROP
    iptables -t filter -A FORWARD -d 192.168.1.255 -p udp -sport 137:139 -dport 137:139 -j DROP
    iptables -t filter -A INPUT -d 192.168.1.255 -p tcp -sport 137:139 -dport 137:139 -j DROP
    iptables -t filter -A INPUT -d 192.168.1.255 -p udp -sport 137:139 -dport 137:139 -j DROP

    Allerdings schlagen die Filter der FORWARD-Kette nicht an, obwohl sie es sollten (vgl. http://ebtables.sourceforge.net/br_fw_ia/PacketFlow.png). Fehlt dem Kern von BS die "Bridged IP/ARP packets filtering"-Option oder mache ich was falsch?

    Beste Grüße.

     
  • Patrick Schmidt

    Patrick Schmidt - 2012-03-04

    Wie schon richtig verlinkt benutzt man bei Bridge-Interfaces ebtables um Pakete auf Layer2 zu filtern.
    Deshalb können deine Regeln gar nicht ziehen, weil gebridgte Pakete niemals die iptables FORWARD chain
    durchlaufen, denn da gehen nur geroutete Pakete durch.

    Also am besten mal mit der Syntax von ebtables vertraut machen und die Regeln entsprechend anpassen.

     
  • itfriend

    itfriend - 2012-03-04

    Naja, das stimmt nicht ganz. Viele Sachen bei bridges lassen sich auch mit iptables machen. Hilfreich ist dabei vor allem dieses Diagramm: http://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
    Die INPUT und FORWARD chain passen in diesem Fall.
    @mauromp: lass mal die Source-Ports weg. Die können nämlich ganz zufällig sein. Außerdem filterst du nur nach bestimmten IP-Adressen. Alle anderen IP-Adressen gehen durch. Besser ist nach dem Interface zu filtern:
    iptables -t filter -A FORWARD -i br0 tcp -dport 137:139 -j DROP
    iptables -t filter -A FORWARD -i br0 -p udp -dport 137:139 -j DROP
    iptables -t filter -A INPUT -i br0 -p tcp -dport 137:139 -j DROP
    iptables -t filter -A INPUT -i br0 -p udp -dport 137:139 -j DROP

     
  • Patrick Schmidt

    Patrick Schmidt - 2012-03-04

    Nein die chains passen nicht, denn der Paketfluss traversiert die forward chain auf Layer 3 natürlich nur
    wenn geroutet wird. Richtig wäre z.B. nat-PREROUTING.

     
  • itfriend

    itfriend - 2012-03-04

    @coolman1982: ich will nicht vom Thema abschweifen, aber ich glaub weiterhin, dass du falsch liegst. Warum gehen durch eine bridge keine Pakete, wenn man FORWARD auf die default Policy DROP setzt?
    Hier ein kleines Beispiel:
    Ohne Zeile 24 geht bei mir kein Verkehr durch die bridge: http://paste.pocoo.org/show/560998/
    Hier die config der interfaces: http://paste.pocoo.org/show/561000/
    Hier die config der bridges: http://paste.pocoo.org/show/561001/
    Oder findet da irgendwo routing statt?

     
  • itfriend

    itfriend - 2012-03-05

    @coolman1982: wir haben beide Recht:. Es kommt auf den Kernel an, ob es geht. Wenn BRIDGE_NETFILTER nicht gesetzt ist, verhält es sich, wie du beschrieben hast. Ist es gesetzt, verhält es sich, so wie ich beschrieben habe.
    Weitere Infos gibts hier: http://ebtables.sourceforge.net/documentation/bridge-nf.html
    Ich hab gerade nachgsehen: Bei BS ist es nicht gesetzt. Also funktioniert meine Lösung nicht und man muss ebtables verwenden.
    @mauromp: Deine gesuchten Befehle lauten dann wohl:
    ebtables -t broute -A BROUTING -i br0 -p ip -ip-proto tcp -ip-destination-port 137:139 -j DROP
    ebtables -t broute -A BROUTING -i br0 -p ip -ip-proto udp -ip-destination-port 137:139 -j DROP
    ebtables -t broute -A BROUTING -i br0 -p ip6 -ip6-proto tcp -ip6-destination-port 137:139 -j DROP
    ebtables -t broute -A BROUTING -i br0 -p ip6 -ip6-proto udp -ip6-destination-port 137:139 -j DROP
    Was ich in den vorherigen Regeln absolut vergessen hab: INPUT ist wurst, wenn auf dem Router kein SAMBA läuft. Und IPv6 darf man nicht vergessen, das wurde von den vorherigen Regeln nicht abgedeckt.
    Wichtig ist auf alle Fälle das du verstehst, was die Regeln machen.

     
  • Maurice

    Maurice - 2012-03-05

    itfriend
    lass mal die Source-Ports weg. Die können nämlich ganz zufällig sein.
    OK. Meine Recherchen nach sollten die Ports fix sein und wollte die Filter möglichst eng machen. Werd' zum testen mal nur auf die Zielports gehen.

    itfriend
    Besser ist nach dem Interface zu filtern

    Bewirkt das was? Immerhin gibt es nur das eine, weil der Router lediglich LAN und WLAN hat und die zusammen in der Brücke stecken…

    Apropos: Kann ich beim Filtern auch die einzelnen Schnittstellen (eth0 und wl0) weiterhin nutzen, obwohl sie in der Brücke stecken? Zum Beispiel um bestimmte Anfragen zwar raus aber nicht rein zu lassen.

    itfriend
    Ich hab gerade nachgsehen: Bei BS ist es nicht gesetzt.

    Um bei der Sache gleich noch was mitzunehmen: Wo schaut man das nach?

    itfriend
    ebtables -t broute -A BROUTING

    Wieso die 'broute' und 'BROUTING' und nicht 'filter' und 'FORWARD'? Erschiene mir logischer. Oder ist das eher Geschmackssache welche man nutzt?

    itfriend
    Und IPv6 darf man nicht vergessen, das wurde von den vorherigen Regeln nicht abgedeckt.

    IPv6 ist im BS-Web-GUI komplett deaktiviert.

    Und nochmal vielen Dank für die Antworten an Euch beide!

     
  • itfriend

    itfriend - 2012-03-05

    Bewirkt das was? Immerhin gibt es nur das eine, weil der Router lediglich LAN und WLAN hat und die zusammen in der Brücke stecken…

    Vermutlich kannst du in deinem Fall auch -i br0 weglassen.

    Apropos: Kann ich beim Filtern auch die einzelnen Schnittstellen (eth0 und wl0) weiterhin nutzen, obwohl sie in der Brücke stecken? Zum Beispiel um bestimmte Anfragen zwar raus aber nicht rein zu lassen.

    Ich bin mir gerade nciht sicher ob das geht. Ich würde dir nicht dazu raten das anfangen zu vermischen. Mach lieber alles auf dem bridge-interface und dann mit -in-interface  und -out-interface. Wo was wie geht steht in den manpages.

    Wo schaut man das nach?

    In der .config aus den sourcen. (Entweder per svn auschecken oder im tarball)

    Oder ist das eher Geschmackssache welche man nutzt?

    Soweit ich weiß, ist es Geschmacksache. Mit broute/brouting deckst du sowohl input, als auch forward ab.
    Aber da bekomm ich vermutlich von irgendwelchen Geeks haue, wenn ich das so sag…

    IPv6 ist im BS-Web-GUI komplett deaktiviert.

    Dann wird ipv6 vermutlich in dem Fall uninteressant sein.

     
  • Maurice

    Maurice - 2012-03-06

    Vermutlich kannst du in deinem Fall auch -i br0 weglassen.

    Ja, geht wunderbar. Danke nochmal!

    Ich habe die Regeln etwas anpassen müssen: Sie stecken in 'FORWARD' der 'filter'-Tabelle (siehe auch unten) und komischerweise kann das ebtables von BS mit 'tcp' und 'udp' nichts anfangen. Ich mußte 6 und 17 benutzen.

    Soweit ich weiß, ist es Geschmacksache.

    Stimmt nicht ganz. Ich lese mich grade durch die manpage und zur 'broute'-Tabelle meint die:
    "broute, is used to make a brouter, it has one built-in chain: BROUTING. The targets DROP and ACCEPT have special meaning in the broute table. DROP actually means the frame has to be routed, while ACCEPT means the frame has to be bridged.".

     

Log in to post a comment.

MongoDB Logo MongoDB