Ergebnis 1 bis 2 von 2

Thema: firewall/natsharing

  1. #1
    Neuer Benutzer
    Registriert seit
    20.02.2005
    Beiträge
    7

    firewall/natsharing

    sollte selbsterklärend sein...
    "The Software package said: 'Require Windows 95 or better.', so I installed Linux." -David Paessler (SuSE Linux)

  2. #2
    Erfahrener Benutzer
    Registriert seit
    02.11.2003
    Beiträge
    1.071

    RE: firewall/natsharing

    Geniales einfaches Script.
    Zwei Punkte habe ich jedoch.
    Zum einen wären das drei zusätzliche Befehle, die die Firewall etwas besser abschotten und die Funktion des Routings nicht beeinflussen. Und zwar kann man mit sogenannten Policen arbeiten. Das sind Grundregeln, die immer dann zutreffen, wenn sie nicht durch eine andere Regel aufgehoben werden. Für gewöhnlich baut man diese Policen direkt nach dem Flush ein.
    Code:
    [...]
    iptables --policy INPUT DROP
    iptables --policy OUTPUT DROP
    iptables --policy FORWARD DROP
    [...]
    Nun ist natürlich alles zu und nichts kommt rein, raus oder wird weitergeleitet. Das spart dir das schließen aller Ports von 0 - 1024, wie du das gemacht hast. Die Policies sind sogar noch gründlicher. Sie schließen alle Ports von 0 bis 65535.
    Das Routing jedoch funktioniert trotzdem. Denn das wird über den Wert 1 oder 0 in der Datei /proc/sys/net/ipv4/ip_forward gesteuert.
    Wenn man jetzt auf dem Router einige Dienste am Laufen hat und diese erreichbar sein müssen, dann öffnet man diese Ports explizit. Für ssh würde das z.B. dann so aussehen:
    Code:
    [...]
    iptables -A INPUT -p tcp --dport ssh -j ACCEPT
    iptables -A OUTPUT -p tcp --sport ssh -j ACCEPT
    [...]
    Das würde jetzt den Zugriff auf den Rechner per ssh von allen devices und aus allen Netzen ermöglichen. Manchmal ist das nicht erwünscht. Dann kann man das durch hinzufügen von zusätzlichen Schlüsseln in die Zeile erreichen. Wenn man z.B. möchte, dass nur vom internen Netz auf den Router zugegriffen werden kann, dann kann man das folgendermaßen realisieren:
    Code:
    [...]
    iptables -A INPUT -i $iif -p tcp --dport ssh -j ACCEPT
    iptables -A OUTPUT -o $iif -p tcp --dport ssh -j ACCEPT
    [...]
    In meinen Augen ist die Policy-Strategie etwas umfassender und vor allem wesentlich flexibler.

    Zum zweiten Punkt:
    Ich kann den Punkt nicht finden, wo das Sharing eingestellt wird.
    Ich persönlich definiere Sharing so, dass die Verbindung geteilt und zwar genauer genommen aufgeteilt wird. Mit iptables ist es durchaus möglich, dass man bestimmten IP-Adressen oder Netzwerkbereichen nur eine bestimmte Bandbreite gestattet. Man kann auch den Verkehr auf einigen Ports beschränken. Der Vorteil liegt natürlich auf der Hand. Beim normalen Routing bekommt derjenige die meiste Bandbreite, der zuerst da ist. Durch verdrängendes Multitasking ist es möglich, dass den anderen auch ab und zu mal ein Paket zugeschickt wird. Das dient aber eigentlich eher dazu um die Verbindung am Leben zu erhalten.
    Es ist zwar erstaunlicherweise so, dass man bei gerouteten Netzwerken fast immer die volle Bandbreite zur Verfügung hat. Aber besonders dann, wenn einer große files aus dem Netzwerk zieht oder hineinsendet, dann wird die Leitung für recht lange Zeit blockiert und alle die nach dem Power-Sauger/-Sender eine Verbindung aufbauen, haben eine quälend langsame Verbindung.
    Dieses Phänomen kann man unterbinden indem man einfach die Bandbreite auf bestimmten Ports oder für bestimmte Adressen beschränkt. Besonders sinnvoll ist es, wenn man einen Server im Netz hat, der ja meist versucht die Daten so schnell wie möglich zu senden und damit den Upload dicht macht. Hier hilft nur eins. Entweder bietet der Server selber Möglichkeiten um die Bandbreite für den Upload zu beschränken, oder man muß das irgendwie anders realisieren. Dieser andere Weg ist Bandbreiten-Sharing mittels iptables entweder direkt am Server oder am Router (die internen Netzwerke sind meist mit erheblich mehr Bandbreite ausgestattet wie der DSL-Anschluss bietet).

    Um mal zm Ende zu kommen:
    Meiner Ansicht nach könnte das Kern-Script mit gleicher Funktionalität auf folgende Zeilen reduziert werden:
    Code:
    #!/bin/bash
    #variables
    eif=$1
    iif=$2
    ina=$3
    ism=$4
    #flushes all rules
    iptables -F 
    iptables -t nat -F #kann man eigentlich weglassen, denn die NAT-Regeln gehören zu allen Regeln
    #close all ports
    iptables --policy INPUT DROP
    iptables --policy OUTPUT DROP
    iptables --policy FORWARD DROP
    #activates routing, NAT and masquerading
    iptables -A POSTROUTING -s $ina/$ism -t nat -j MASQUERADE -o $eif
    echo 1 > /proc/sys/net/ipv4/ip_forward
    #activates a better safety against ip spoofing
    for foo in /proc/sys/net/ipv4/rp_filter
    do
    echo 1 > $foo
    done
    #rules for special services and ports
    #exits the script with error code 0
    exit 0
    Die Überprüfung der Parameter habe ich weggelassen, weil daran prinzipiell nicht viel zu rüttel ist. Die Usage-Geschichte darin hätte man jedoch auch auf zwei oder drei Zeilen reduzieren können, wenn man echo mit dem Parameter -e aufruft. Dann ist es möglich mit den Steuerzeichen \t einen Tabulator einzufügen und mit \n einen Zeilenumbruch. Zwei \n ergeben folglich eine Leerzeile und ein leeres Echo könnte man damit weglassen.
    Das mit dem Sharing per iptables habe ich auch nicht aufgenommen. Einfach aus dem Grunde, weil ich zwar weiß, dass es geht, aber nicht genau weiß wie. Darum war ich ja so gespannt auf das Script... (und war dann ein wenig enttäuscht als ich feststellte, dass es lediglich Masquerading und Routing aktiviert).

    cu

    disaster

    P.S.: Bei beiden Scripten kann man Probleme mit ebay bekommen (meist spätestens bei der Anmeldung). Die Ursache liegt in der unterschiedlichen Paketgröße zwischen DSL (MTU 1495) und Ethernet (MTU meist 1500). daher muß man die unterschiedlich großen Pakete zusammenklammern. Wenn man also Probleme mit ebay hat, dann helfen folgende drei Zeilen:
    Code:
    [...]
    iptables -A FORWARD -p tcp -m tcp  --tcp-flags ALL SYN -j TCPMSS --clamp-mss-to-pmtu
    iptables -A FORWARD -i $eif -o $iif -d $ina/$ism -p tcp -f -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i $iif -o $eif -s $ina$/$ism -p tcp -f -m state --state RELATED,ESTABLISHED -j ACCEPT
    [...]

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •