Port-Freigabe auf die Box ist so möglich! Virtual-IP überflüssig?!?

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
3
Punkte
38
Moin zusammen,

ich möchte euch mal bitten, den folgenden Vorschlag zu prüfen:

Code:
--- usr/www/all/html/de/internet/portrule.js.ori        2008-02-05 09:52:26.000000000 +0100
+++ usr/www/all/html/de/internet/portrule.js    2008-02-05 10:12:04.000000000 +0100
@@ -35,10 +35,8 @@
        for (i=0; i < 4; i++) {
                if ((Number(digits[i]) > 255 ) || (Number(digits[i]) < 0 )) return g_mldIpAdr;
        }
-       // IP-Adresse 0.0.0.0 verbieten
-       if ((Number(digits[0]) == 0) && (Number(digits[1]) == 0) && (Number(digits[2]) == 0) && (Number(digits[3]) == 0)) return g_mldIpAdr0000;
-       // IP-Adresse *.*.*.0 verbieten
-       if (Number(digits[3]) == 0) return g_mldIpAdr0;
+       // IP-Adresse *.*.*.0 verbieten ... aber 0.0.0.0 erlauben ;-)
+       if (Number(digits[3]) == 0 && address[0] != "0.0.0.0") return g_mldIpAdr0;
        // IP-Adresse *.*.*.255 verbieten
        if (Number(digits[3]) == 255) return g_mldIpAdr255;
        // IP-Adresse 169.254.*.* verbieten

Damit kann man in der "normalen" Oberfläche als Ziel die "0.0.0.0" also die Box selbst angeben. Damit geht dann z.B. folgendes, ohne Eingriffe in die ar7.cfg:

"tcp 0.0.0.0:22 0.0.0.0:22 0 # SSH auf FBOX",
"udp 0.0.0.0:1194 0.0.0.0:1194 0 # OVPN";


Jörg


EDIT 20080406: Nachtrag einer "Minianleitung"

Um das ganze ohne Patches zu nutzen, kann man das oben genannte auch per Telnet auf der Box direkt eingeben. Die "kurze" Variante ermöglicht es, Portfreigaben auf "0.0.0.0" zu setzen, die zwar im Flash abgespeicert werden, nach einem Reboot aber nicht mehr in der GUI sichtbar sind. Die "längere" Variante zeigt auch in der GUI alle Weiterleitungen auf 0.0.0.0 an und ermöglicht deren Änderung (Ausnahme ist die Standard-AVM-Regel für VOIP auf Port 5060).

Für die "Mini-Lösung" per telnet auf die Box und dann das folgende ausführen:

Code:
pr=`find /var/html/ -name portrule.js`
sed  's/return g_mldIpAdr0000/return null/'  $pr > /var/tmp/portrule.js
mount -o bind  /var/tmp/portrule.js  $pr

Wie gesagt: Damit kann man bis zu einem Neustart 0.0.0.0 als Ziel eintragen und diese Einträge (nicht schon existierende) "sehen". Nach einem Neustart bleiben diese Einträge zwar erhalten, sind aber nicht sichtbar in der GUI.


Die "lange" Version ermöglicht auch die Anzeige der Einträge in der GUI:
Code:
pr=`find /var/html/ -name portrule.js`
sed  's/return g_mldIpAdr0000/return null/'  $pr > /var/tmp/portrule.js
mount -o bind  /var/tmp/portrule.js  $pr

cat > /var/tmp/unhiderules << 'EOF'
#! /bin/sh

# Die VOIP-Regel "ausblenden"
EXCLUDE="0\.0\.0\.0\:5060"

#PW extrahieren
local PWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{
/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}
}' | grep '^password=' | cut -d '"' -f2)
    ret=$?
    if [ $ret != 0 ]; then
      echo "ERROR: Unhide_local_PFWD (exit code $ret)" >&2
      exit $ret
    fi

# 0.0.0.0:xx 0.0.0.0:yy ersetzen durch 0.0.0.0:xx 127.0.0.1:yy
cat /var/flash/ar7.cfg | sed  "/dslifaces/,/} {/ {/forward/,/}/ {/$EXCLUDE/! s/\(.*0\.0\.0\.0.*\)\(0\.0\.0\.0\)\(.*\)/\1127\.0\.0\.1\3/}}" > /var/tmp/tmpar7.cfg
cat /var/tmp/tmpar7.cfg > /var/flash/ar7.cfg

# Die "neuen" Regeln einlesen lassen, so dass sie per GUI erreichbar sind (die 0.0.0.0-er Regeln sind nicht "ansprechbar":
killall -9 ctlmgr && sleep 1 && /usr/bin/ctlmgr
sleep 5

# ... und nun das Aendern auf 0.0.0.0 per GUI "emulieren"
#
TESTSTRING="127.0.0.1"
NEUEIP="0.0.0.0"
# Die Rules finden ... 
rules="`wget -q -O - "http://127.0.0.1/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=portfw&var%3Amenu=internet&var%3Apagemaster=" | grep -v $EXCLUDE |grep -A 6 $TESTSTRING | grep "uiDoEdit" | sed "s/.*uiDoEdit('\(.*\)').*/\1/"`"

if [ "$rules" != "" ]; then
  # ... POST_DATA String "basteln" 
  PDATA="getpage=/usr/www/all/html/query.txt&login:command/password=$pw&id=uiPostForm&name=uiPostForm&var:pagename=portrule&var:menu=internet"
  for myrule in `echo "$rules" | tr '\n' ' '`; do
    PDATA="${PDATA}&var:rule=${myrule}&var:isnew=0&var:isexp=0&forwardrules:settings/${myrule}/fwip=$NEUEIP"
  done
  echo -n "$PDATA" | REQUEST_METHOD="POST" REMOTE_ADDR="127.0.0.1" CONTENT_TYPE="application/x-www-form-urlencoded" CONTENT_LENGTH=${#PDATA} /usr/www/html/cgi-bin/webcm > /dev/null
fi
# ... fertig
EOF
sh /var/tmp/unhiderules
 

Anhänge

  • remove_potrforwading-restriction.patch.gz
    378 Bytes · Aufrufe: 549
Zuletzt bearbeitet:
sorry...habe deinen patch schon für dich im ticketing hinterlassen...
wohl daher 2 doofe ein gedanke...

aber gut das wir das jetzt ahben...denn die 7270 firm version 50 und grösser machen kein virtual ip mehr...
 
Kleiner hacken an der sache gefunden...
Die portfreigaben gehen zwar damit wunderbar, aber die werden ausgeblendet nach dem nächsten neustart der box...
sicherlich das selbe verhalten das zum nicht anzeigne der voip freigaben angewendet wird...
 
Kleiner Haken ist gut. Das heißt, dass man diese Freigaben also nicht mehr löschen kann?

MfG Oliver
 
Interessante Lösung, vielleicht lässt sich die Anzeige ja noch so patchen, dass es möglich ist, die Freigaben trotzdem zu sehen.

Löschen wird wohl kein Problem darstellen:
Einfach per nvi /var/flash/ar7.cfg die betroffenen Zeilen löschen, wenn man weiß was man macht. (Habe die Box so schon einmal zerschossen)
 
ich mach es noch etwas anders...
Code:
cat /var/flash/ar7.cfg > /var/media/ftp/uStor01/ar7.cfg
dann mit nem editor der an dieser datei geht editieren, speichern und 
cat /var/media/ftp/uStor01/ar7.cfg > /var/flash/ar7.cfg
so muss man erstmal nicht vi nutzen...
 
Wer die ar7.cfg direkt bearbeitet, braucht sowieso weder ein Pseudo-Interface noch einen Patch des Webinterfaces... ;) Das Ziel des OP war ja doch ein etwas anderes.
 
erstellen tu ich die dann schon über das avm webif...ich gebe je eher dauerhaft frei und mann muss ja nicht oft da wieder ran
 
Ich überlege gerade einen "ugly workaround" beim Starten der Box:
  • Per "sed" die ar7.cfg verändern z.B. die "Ziel 0.0.0.0" auf 127.0.0.1 (nein, die hat bei mir leider nicht funktioniert :-()
  • ctlmgr killen und neu starten -> Regeln wären mit "127.0.0.1" sichtbar
  • per Script die GUI-CGI-Änderung von 127.0.0.1 auf 0.0.0.0 veranlassen
  • fertig

Sieht da einer einen Haken an dem Vorgehen?

Jörg
 
wenn es denn funktioniert?
 
Gibt es denn keine Möglichkeit die Mekker-Abfrage auf die IP des Interfaces (z.B. eth0 = 192.168.178.1) zu unterbinden?

Das wäre doch die beste Lösung.

Gruß
HS
 
... leider ist diese Abfrage im Binary (ich meine ctlmgr(?)) mit drin...

Bei mir klappt es hiermit, damit werde alle Rules wieder angezeigt:
Code:
#! /bin/sh

# Die VOIP-Regel "ausblenden"
EXCLUDE="0\.0\.0\.0\:5060"

#PW extrahieren
local PWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{
/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}
}' | grep '^password=' | cut -d '"' -f2)
    ret=$?
    if [ $ret != 0 ]; then
      echo "ERROR: Unhide_local_PFWD (exit code $ret)" >&2
      exit $ret
    fi

# 0.0.0.0:xx 0.0.0.0:yy ersetzen durch 0.0.0.0:xx 127.0.0.1:yy
cat /var/flash/ar7.cfg | sed  "/dslifaces/,/} {/ {/forward/,/}/ {/$EXCLUDE/! s/\(.*0\.0\.0\.0.*\)\(0\.0\.0\.0\)\(.*\)/\1127\.0\.0\.1\3/}}" > /var/tmp/tmpar7.cfg
cat /var/tmp/tmpar7.cfg > /var/flash/ar7.cfg

# Die "neuen" Regeln einlesen lassen, so dass sie per GUI erreichbar sind (die 0.0.0.0-er Regeln sind nicht "ansprechbar":
killall -9 ctlmgr && sleep 1 && /usr/bin/ctlmgr
sleep 5

# ... und nun das Aendern auf 0.0.0.0 per GUI "emulieren"
#
TESTSTRING="127.0.0.1"
NEUEIP="0.0.0.0"
# Die Rules finden ... 
rules="`wget -q -O - "http://127.0.0.1/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=portfw&var%3Amenu=internet&var%3Apagemaster=" | grep -v $EXCLUDE |grep -A 6 $TESTSTRING | grep "uiDoEdit" | sed "s/.*uiDoEdit('\(.*\)').*/\1/"`"

if [ "$rules" != "" ]; then
  # ... POST_DATA String "basteln" 
  PDATA="getpage=/usr/www/all/html/query.txt&login:command/password=$pw&id=uiPostForm&name=uiPostForm&var:pagename=portrule&var:menu=internet"
  for myrule in `echo "$rules" | tr '\n' ' '`; do
    PDATA="${PDATA}&var:rule=${myrule}&var:isnew=0&var:isexp=0&forwardrules:settings/${myrule}/fwip=$NEUEIP"
  done
  echo -n "$PDATA" | REQUEST_METHOD="POST" REMOTE_ADDR="127.0.0.1" CONTENT_TYPE="application/x-www-form-urlencoded" CONTENT_LENGTH=${#PDATA} /usr/www/html/cgi-bin/webcm > /dev/null
fi
# ... fertig

Jörg
 
wo hast du das denn stehen??
 
Erstmal nur als Skript abgespeichert und händisch gestartet, dann "sind sie alle wieder da" ;-)

Jörg
 
Geht es hierbei denn darum, daß Virtual-IP nicht mehr funktioniert und eine Alternative gebraucht wird, oder ging es darum, das Ganze einfacher zu machen?

Wenn Virtual-IP noch funktioniert, dann würde ich es dabei belassen. Der Ansatz hier wäre eleganter gewesen, aber nicht, wenn man dafür etliche andere Klimmzüge machen muß.
 
Wenn ich das oben richtig gelesen hatte, sollte Virtual-IP ab der 50-er FW nicht mehr gehen, das war aber nicht die ursprüngliche Intention...

Eine Virtuelle IP über die debug.cfg ist vermutlichwegen der Probleme noch immer die beste Methode: "Sofort" beim Starten da und ohne weitere Klimmzüge....

Jörg
 
Warum soll denn VirtualIP nicht mehr funktionieren?
Hab ne 7141 und ne 50er FW und VirtualIP startet ganz normal:
Code:
/var/log/mod.log

rc.mod version ds26-pre16
Starting crond...done.
telnetd is disabled
Starting webinterface...done.
Setting up virtual network interface ... done.
...
 
Virtual IP geht natürlich immer noch. Aber angeblich sollen die Portweiterleitungen nicht funktionieren. Ich habs aber auch noch nicht ausprobiert.

MfG Oliver
 
Virtual IP geht natürlich immer noch. Aber angeblich sollen die Portweiterleitungen nicht funktionieren. Ich habs aber auch noch nicht ausprobiert.

Hi,

ich habe seit 4 Tagen auf meine Box die aktuelle Labor-FW Gaming mit Freetz laufen, sie läuft stabil, aber die Portweiterleitungen gehen nicht mehr. Virtual IP läuft, intern ist die Box auch über die zusätzliche IP erreichbar, aber von außen leider nicht mehr. :-(
Wahrscheinlich möchte AVM nun, dass man Ihren VPN-Client nutzt, leider weiß ich noch nicht, wie ich ihn einrichten muss. Die Hilfe habe ich dummerweise entfernt. ;-)

MfG Michael
 
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.