Aufruf zur Dokumentation der internen Firewall

kriegaex

Aktives Mitglied
Mitglied seit
7 Nov 2006
Beiträge
2,927
Punkte für Reaktionen
3
Punkte
36
Anstatt ständig mit dem (unter Kernel 2.6.13 nicht stabilen) Iptables herumzuspielen, könnten wir doch mal schauen, wie weit man mit der Fritz!Box-Firewall kommt, um verschiedene Dinge zu erreichen. Sascha Schmidt hat in einem Blog unter dem Titel "Die interne Fritzbox Stateful-Firewall" vor einigen Monaten etwas darüber geschrieben, das zwar nicht sehr ausführlich und noch ergänzungsbedürftig, aber vielleicht ein guter Anfang ist. Ich selbst beschäftige mich mit dem Thema kaum, aber ich rufe alle experimentierfreudigen Anwender dazu auf, sich mit dem Thema zu befassen und hier Informationen zu posten, was alles wie geht (oder auch, was nicht geht oder unbekannt ist). Diese Datensammlung sollte idealerweise in einen Wiki-Artikel münden, welcher von der Anwendergemeinde gepflegt wird. Für die Iptables-Umsteiger sollten Gegenüberstellungen von Iptables-Befehlen und ihren AVM-Pendants eingepflegt werden.

Geht mal davon aus, daß es genügt zu beschreiben, wie man direkt in ar7.cfg editiert. Die Frage, wie man das über die DS-Mod-Webschnittstelle konfigurierbar machen kann, können wir später klären, da kann einer der DS-Mod-Entwickler (evtl. ich) ggf. helfen, wobei ich selbst in den nächsten Wochen und womöglich Monaten voraussichtlich in einem Auftrag zeitlich stark gebunden sein werde, so daß ich wenig zum Forum und zum DS-Mod werde beitragen können in nächster Zeit.
 
Zuletzt bearbeitet:
danke für den link zu dieser info sammlung...werde nach bestem wissen und gewissen mitzuwerkeln...
 
Hallo, werde mich diesem Projekt anschließen.
Nachdem meine iptables GUI fertig ist, kann ich sicherlich einiges daraus übernehmen und auf ar7.cfg umbasteln. Sieht sehr interessant aus.

Gruß
Thomas
 
Edit Beitrag gelöscht da hier nicht Fragen darf.
 
Zuletzt bearbeitet:
Hallo,

wollte schonmal Kund tun, dass ich bereits einen Weg zum Auslesen und zurückschreiben der ar7.cfg gefunden habe.

Arbeite gerade an der Umsetzung in einer GUI. Lasst euch überraschen!

Gruß
HS
 
Hallo,

die Anfänge für ein Webinterface habe ich schonmal fertig.
Ich habe erstmal nur an der Darstellung gearbeitet und dafür iptables.cgi als Grundlage verwendet.
Negativ ist, dass die GUI sehr langsam arbeitet. Die Fritz!Box hat nunmal nicht den stärksten Prozessor und somit sind die Abläufe entsprechend langsam.

Ich habe zwei VIEW-Modi eingebaut.

SIMPLE: (Seitenaufbau bei 14 Regeln ca. 8 Sekunden)
========================================
- Subnetmaske und Portnummer müssen manuell eingegeben werden
- Anzeige der Firewall-Regeln im raw Format ohne Umsetzung von Ports in Services

DETAILS: (Seitenaufbau bei 14 Regeln ca. 24 Sekunden)
==========================================
- Subnetmaske und Ports aus Dropdown-Menü auswählbar
- Anzeige der Firewall-Rules geordnet und bekannte Portnummern werden in Service-Names umgewandelt.


Wer möchte, kann sich ja meine Test-Version mal anschauen.
Einfach beiliegendes Packet entpacken und die Dateien nach /mod/..... kopieren.
Danach das cgi folgendermaßen registrieren:

Code:
/mod/etc/init.d/rc.firewall load

Aber es ist derezit ein VIEW-only. Mann kann noch keine Regeln erstellen.

Gruß
HS
 

Anhänge

  • firewall-cgi.jpg
    firewall-cgi.jpg
    415 KB · Aufrufe: 514
  • firewall-cgi-1.0.0.tar
    20 KB · Aufrufe: 51
So, hier meine Erfahrungen zur AVM Firewall.

Erstmal noch ein paar Worte zur Darstellung:
Die Ladezeiten sind definitiv hoch wenn man viele Services gestartet hat und die Box bereits einige Stunden uptime auf dem Buckel hat.
Ich hab jetzt noch ein paar kleine Optimierungen vorgenommen. Bei einer frisch gebooteten Box kommen bei mir folgende Zeiten zum Tragen:

- simple-mode ca. 3-4 Sekunden
- detail-mode ca. 16-18 Sekunden

Der simple-mode ist also zufriedenstellend. Auf den detail-mode sollte man verzichten. Zudem ergeben sich dabei ein paar Schwierigkeiten, welche ich weiter unten erläutere.


Ausführung und Testing:
In dem im Anhang befindlichen Paket ist bereits eine Version enthalten, welche die Regeln setzt und in die ar7.cfg zurück schreibt.
Wer das Paket testen möchte, sollte erstmal in den beiden Dateien firewall.cgi und rc.firewall die Variable...

Code:
REAL=/var/flash/ar7.cfg

... anpassen, damit erstmal nicht wirklich in die echte ar7.cfg geschrieben wird. Ich mach das so:

Code:
cat /var/flash/ar7.cfg > /var/tmp/ar7.cfg

Code:
REAL=/var/tmp/ar7.cfg


Gefährlich:
Sehr gefährlich ist jedlicher Schreibfehler in der echten ar7.cfg Datei. Selbst ein Leerzeichen zuviel verursacht einen Schaden, der zumindest bei mir nicht ohne Recover zu beheben war :-(

Deshalb ist meiner Meinung nach der detail-mode auch nicht zu empfehlen. Dadurch müssen in der rc.firewall diverse Abfragen erfolgen, welche die Variablen verändern oder zurücksetzen.
Dadurch kommen Leerzeichen zustande, die ich bisher noch nicht eliminieren konnte. Hier ist die Gefahr des Zerstörens der ar7.cfg meiner Meinung nach sehr groß.

Weiterhin ist der Reload der ar7.cfg sehr langwierig und auch sehr prozessorlastig.
Das Ausführen von ar7cfgchanged hat bei mir von drei Versuchen zweimal zum reboot der Box geführt. Man sollte diesen Befehl also nicht nach jeder Regelsetzung automatisch inizieren, sondern einen "Extra Button" dafür vorsehen. Dies hab ich noch nicht eingebaut. Einen autamtischen reload habe ich aus vorgenannten Gründen ebenfalls nicht eingebaut. Dieser ist also derzeit noch manuell auszuführen.


Sonstiges:
Die Services im detail-mode habe ich auf meine iptables_services verlinkt.
Wer also iptables-cgi geladen hat, findet zwar unter Einstellungen zwei Einträge "Iptables: Services" und "AVM-Firewall: Services" aber es wird auf die selbe Datei zugegriffen.

Ich geh aber davon aus, dass der detail-mode sowieso verschwinden wird.

Weiterhin ist anzumerken, dass ich mich erstmal nur mit der GUI und dem Zurückschreiben der Regeln befasst habe.
Löschaktionen sind derzeit noch nicht integriert.
Auch das Testen der Regeln hab ich nocht nicht im Detail ausprobiert.
Aber Sascha http://www.realriot.de/index.php/2007/05/30/die-interne-fritzbox-stateful-firewall/ hat das ja bereits erfolgreich kommuniziert.


Meinung:
Ich kann noch nicht beurteilen, ob die AVM-Firewall letztendlich die gleichen Funktionen bietet wie iptables. Das wird sich noch rausstellen.
Jedenfalls wird die Bedienung bei weitem weniger komfortabel sein.
Jedoch denke ich, wenn sich hier noch ein paar Entwickler zusammen raufen, wird das bestimmt besser werden.

Im Screenshot ist eine Regel zu sehen (roter Kasten) welche ich per GUI hinzugefügt habe.

So long..... Gruß
HS
 

Anhänge

  • firewall-cgi_1.0.1.jpg
    firewall-cgi_1.0.1.jpg
    401.3 KB · Aufrufe: 293
  • firewall-cgi-1.0.1.tar
    23 KB · Aufrufe: 25
Zuletzt bearbeitet:
Moin,

ich hätte noch eine "blinde" Anmerkung dazu (meine Box macht nicht den Internetzugang, so dass ich nicht wirklich testen kann).

Bei meinen "Experimenten" mit Änderungen der ar7.cfg hatte ich das Phänomen, dass ein ar7cfgchanged die veränderten/neuen Regeln nicht angewendet hat. Ich hatte es dann mit "killall -9 ctlmgr && ctlmgr" gemacht. Oder betraf dass nur die "Darstellung", die Regeln hätten aber funktioniert? Wie gesagt, ich kann es leider nicht wirklich testen....

Jörg
 
Hallo,

ich wollte nur kurz sagen, dass ich mich freue, dass sich hier was tut, weil ich auch unter den 3-stündlichen iptables-Abstürzen leide.
Ich verfolge das hier mit Spannung, habe aber leider keine Zeit, selber was auszuprobieren. Insbesondere, wenn ich lese, dass die Box dabei so leicht abstürzt.

Um so mehr schonmal Dank an alle, die sich hierum bemühen.


Dirk
 
Ich will mich zwischendurch auch bedanken, daß hier endlich was passiert. Die langen Zeitdauern hören sich immer noch verbesserungsfähig an, hoffentlich komme ich irgendwann mal dazu, das Paket auch anzuschauen. Momentan bin ich Land unter mit meiner (frei)beruflichen Tätigkeit.
 
Daumen hoch für dieses Paket! :groesste:

Leider benutze auch ich die Fritz!Box allerdings nicht als Internet Gateway und habe daher kaum Möglichkeiten, das ganze zu testen.

Trotzdem noch einen Vorschlag: wenn es erstmal ein brauchbares System zur Bearbeitung der ar7.cfg von der Weboberfläche aus gibt, dann wäre es doch super, wenn auch noch die QoS Funktionalität auf diesem Wege einstellbar würde...
 
Negativ ist, dass die GUI sehr langsam arbeitet.
Moin!

Versuche es dochmal so, ist schon deutlich schneller ;-) (vielleicht kriegt man ja das letzte "READ" auch noch weg...)

Code:
...
showline()
{
mystring="<tr>\n   <td width='20%' align='center'> $3 </td>\n   <td width='20%' align='center'> $4 </td>\n   <td width='20%' align='center'>$2</td>\n   "
mystring="${mystring}<td width='20%' align='center'>$6"
if [ "$5" = "range" ]; then mystring="${mystring} - $7"; fi
mystring="${mystring}</td>\n   <td align='center'><img src='../images/"
if [ "$1" = "permit" ]; then mystring="${mystring}ACCEPT" ; else mystring="${mystring}DROP"; fi
mystring="${mystring}.gif' title='"$1"' border="0" alt=""></td>\n   <td align='center'><a href='pkgconf.cgi?pkg=iptables&chain=$CHAIN&remove=$1'> remove</a></td>\n</tr>"
}
...


case "$MODE" in
         simple)
                echo "<tr><th bgcolor="#bae3ff" colspan='6'>#Aktion# #Protokoll# #Quelle# #Ziel# #Zus�tzliche parameter#</td></tr>"
                cat $LOWINPUT | sed -n "s/^[ ]*//g;/^\"permit\|deny/ {s/^/\<tr\>\<td colspan='6' align='center'\> /g;s/$/\<\/td\>\<\/tr\>/gp}"
                ;;
        details)
                echo "
                <tr>
                <th bgcolor="#bae3ff">Source</th>
                <th bgcolor="#bae3ff">Destination</th>
                <th bgcolor="#bae3ff">Protokoll</th>
                <th bgcolor="#bae3ff">Service/PORT</th>
                <th bgcolor="#bae3ff">Action</th>
                <th bgcolor="#bae3ff">Configure</th>
                </tr>"
                cat $LOWINPUT | sed -n "s/^[ ]*\"//gp"| sed -e "/^permit\|deny/ s/host //g"|sed -e 's/\"[,;]//g' | while read ZEILE
                do
                        showline ${ZEILE}
                        echo -e $mystring
                done
                ;;
esac
....
Ich sehe zwar keine Images, das was aber beim Original genauso.

Jörg

EDIT Also, ich schlage vor, vielleicht nochmal zu überdenken in Bezug darauf, wie man die Daten intern hält.
Vom Prinzip sollte die GUI wohl folgendes Können (sollen):
- Die Regeln darstellen (das geht jetzt schon gut)
- Regeln hinzufügen (geht bedingt)
- Vorhandene Regeln löschen oder bearbeiten (das geht vermutlich so nicht, oder? Ich habe die Daten jetzt ja nur in der Oberfläche und müßte mit InnerHTML und sowas tricksen, um die wieder zu bekommen)

Daher wäre mein Vorschlag, die Daten komplett in eine interne Datenstruktur einzulesen, um die dann mit Javascript oder so zu behandeln. Für das "problematische" Zurückschreiben müsste man vermutlich auf einen "Rudishell-Aufruf" oder so zurückgreifen?!?
 

Anhänge

  • firewallcgi.diff.gz
    1.2 KB · Aufrufe: 13
Zuletzt bearbeitet:
Prima, mit dem Patch von MaxMuster verringern sich die Ladezeiten erheblich bei mir um:

simple-mode = 1-2 Sekunden
detail-mode = 3-4 Sekunden

Allerdings werden im detail-mode die Namen der Services nicht mehr dargestellt.

Bei meinem iptables-cgi hab ich auch jeweils einen Link zum Löschen eingebaut.
Mit $QUERY_STRING lässt sich das ganz gut händeln. Ich schau mal, dass ich das noch eingebaut bekomme.


EDIT: Hab jetzt ein bisschen rum probiert, aber scheitere an folgendem:
Code:
/var/media/ftp/uStor01 # REMOVE="deny ip any 242.0.0.0 255.0.0.0"
/var/media/ftp/uStor01 # echo $REMOVE
deny ip any 242.0.0.0 255.0.0.0
/var/media/ftp/uStor01 # sed '/"'$REMOVE'",/d' </var/tmp/ar7.cfg >/var/tmp/ar7.tmp
sed: unmatched '/'
/var/media/ftp/uStor01 #

Wo mach ich hier einen Fehler?

Gruß
HS
 
Zuletzt bearbeitet:
Vermutlich an der Syntax ;-)

Das erste ' ist beim nächsten ' schon zu Ende, dass willst du aber doch garnicht, oder? Hier sind die ' sowieso vermutlich "falsch", denn du möchtest ja $REMOVE durch die Shell expandiert haben, daher ist hier " angesagt.

Ich denke du meinst von der Funktion her dieses?
Code:
sed "/$REMOVE/d" </var/tmp/ar7_2.cfg >/var/tmp/ar7.tmp
# oder auch ein
grep -v "$REMOVE" /var/tmp/ar7_2.cfg >/var/tmp/ar7.tmp

Jörg
 
Super, jetzt klappts auch mit dem Löschen.
 

Anhänge

  • firewall-1.0.2.tar
    7.5 KB · Aufrufe: 43
sooo...getestet bis der arzt kommt...
einrichten kein thema...er schriebt aber immer sofort in die echte ar7.cfg...aber was solls...
es kommen immer ein paar fehler...
Code:
Jan 21 19:46:40 fritz auth.info login[3081]: root login on 'pts/0'
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:290: member policy not found in ST_struct DPCFG_config
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:290: member policy not in DPCFG_config, try to recover
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:292: member highinput not found in ST_struct dslifaceconfig
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:292: member highinput not in dslifaceconfig, try to recover
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:295: member highoutput not found in ST_struct dslifaceconfig
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:295: member highoutput not in dslifaceconfig, try to recover
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:300: member forwardrules not found in ST_struct dslifaceconfig
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:300: member forwardrules not in dslifaceconfig, try to recover
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:301: member shaper not found in ST_struct dslifaceconfig
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:301: member shaper not in dslifaceconfig, try to recover
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:304: ST_topsection targets not found
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:360: ST_topsection { not found
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: /var/flash/ar7.cfg:361: missing "{" after topsection name {
Jan 21 19:46:41 fritz user.info ar7cfgctl[3104]: FactoryDefault=/etc/default/avm/ar7.cfg (ar7)
Jan 21 19:46:41 fritz user.err ar7cfgctl[3104]: load_config(ar7): factory default loaded
und die übernommene rule steht dann in der ar7.cfg
ABER ohne funktion...(rule siehe firewall.jpg)
änderungen im webmenü von avm in der portfreigabe killen die eigenen einträge sofort wieder...
daher TOLLER ANSATZ...
nur noch keine funktion bei mir....
vielleicht hat meine portfreigabe ja auch einen fehler...bitte das dann berichtigen...will ja produktiv kritisieren...*GRINS*

EDIT1:
Die rule war falsch...nach korrecktur leider recover...
aber es geht gut voran..danke
genau das hat mir gefehlt
 

Anhänge

  • Firewall.jpg
    Firewall.jpg
    102.2 KB · Aufrufe: 152
Zuletzt bearbeitet:
Moin,

@Darkyputz
was "beschrieben" wird, kannst du in der "REAL" Variable festlegen. Erstmal eine Kopie nach /tmp/ und die Bearbeiten wäre nicht schlecht (siehe Beitrag [noparse]#8)[/noparse] ;-)

Du solltest dann mal die entstandene "ar7.cfg" (bzw. den entsprechenden Ausschnitt) posten um zu sehen, was daran "verkehrt" sein könnte.

Ich hätte noch zwei generelle "Anmerkungen":
  1. Wie wäre ein eigener "CGI-Thread" (unabhängig von der Firewall-"Dokumentation") ?
  2. Zur CGI: Ich hoffe ich darf noch "allgemeine Kritik" anbringen. Die "Sofortwirkung" der GUI ist für mich zumindest ungewöhnlich. "Erwartet" hätte ich ein "beliebiges Editieren" der FW-Regeln, die dann erst mit "übernehmen" übernommen werden. Ich weiß, dass das eine grundlegende Änderung bedeutet, aber ...

Jörg
 
Die "Sofortwirkung" der GUI ist für mich zumindest ungewöhnlich. "Erwartet" hätte ich ein "beliebiges Editieren" der FW-Regeln, die dann erst mit "übernehmen" übernommen werden.

Ansich ist das vielleicht keine schlechte Idee, denn so kann man erst einmal diverse Regeln einstellen ohne umgehend recovern zu müssen bei einem simplen Typo oder so. Weiterhin kann man sich das dann noch einmal überlegen, ob man das wirkllich machen möchte.


Allerdings besteht so natürlich dann noch eher die Gefahr, sich das System unerreichbar zu "regeln" undsomit dann noch nicht einmal zu wissen, wo der Fehler nun überhaupt steckte.
 
Hat denn schon jemand so einen guten Durchblick bezüglich der ar7-Firewall, dass er eine Aussage darüber machen kann, ob es, nur mit ar7-Firewall, möglich ist, die einzelnen LAN-Ports so zu trennen, dass zwar jeder ins Internet kommt, aber die Teilnehmer an den Ports nicht untereinander kommunizieren können?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.