[Wien] portforwarding wifi/wan

Markus Gschwendt (spam-protected)
Do Jul 16 22:13:54 CEST 2009


On Thu, 2009-07-16 at 21:41 +0200, Wolfgang Vanek wrote:
> ... Für "portfw.html" und "local.fw-portfw" habe ich Änderungsvorschläge gemacht, siehe "aenderungsvorschlaege.txt".

ich glaube dass das auch einfacher geht.

statt einer eigenen chain könnte das in der PREROUTING chain passieren,
z.b.:

iptables -A PREROUTING -t nat -p tcp -d  $LOCALIP --dport $DPORT -j DNAT
--to $DESTIP:$DPORT

iptables -A PREROUTING -t nat -p udp -d  $LOCALIP --dport $DPORT -j DNAT
--to $DESTIP:$DPORT

gibt es einen grund das in einer eigenen chain zu machen?
gibt es einen grund warum im script ein "case stop" vorgesehen ist? bei
änderungen wird 'eh' rebootet.
falls "case stop" notwendig, gibt es einen trick die rules zu löschen?
sonst muss ma halt eigene chain machen.

markus

das komplette script, vlt. kanns wer testen, ich hab grad wenig zeit:

#!/bin/sh

# /usr/bin/netparam is executed in /etc/init.d/S45firewall, we may just
use this
# variables here
FWTARGETS=$(nvram get ff_portfw)
if [ "$(nvram get ff_portfw_wan)" = "1" ]; then
LOCALIP=$WANADR
else
LOCALIP=$WIFIADR
fi

# Struktur von ff_portfw: 
# IP:Port/Protokoll,[Port/Protokoll,...]
[IP:Port/Protokoll,[Port/Protokoll,...]] ...
# IP: IP-Adresse, an die geforwarded werden soll
# Port: einzelner Port oder Portrange im Format Port-Port (Bindestrich
der besseren Lesbarkeit wegen)
# Protokoll: t steht für tcp, u für udp, tu f tcp+udp 

# Daten werden nicht geprüft,weil hier sowieso nicht mehr eingegriffen
werden kann. Daher Prüfung in der Weboberfläche (Work in Progress).

portfw_rules() {
  for FWTARGET in $FWTARGETS; do
  	DESTIP=${FWTARGET%%:*} 			# IP-Adresse am Anfang des Blocks
  	DPORTS=${FWTARGET#*:}  			# alle zu forwardenden Ports am Ende des
Blocks
  	
  	while [ ${#DPORTS} != "0" ]; do 	# Länge des Blocks der Ports ist
nicht 0
  		PORTPROTO=${DPORTS%%,*} 	# Der 1. Port im Block wird bearbeitet"
  		DPORT=`echo ${PORTPROTO%/*} | sed -e s/-/:/`	# Aus dem
Port/Protokollblock wird der Zielport ermittelt
  		PROTO=${PORTPROTO#*/}		# Aus dem Port/Protokollblock wird das
Protokoll ermittelt
  		case $PROTO in (*t*)
  		    iptables -A PREROUTING -t nat -p tcp -d  $LOCALIP --dport $DPORT
-j DNAT  --to $DESTIP:$DPORT
  		esac 
      case $PROTO in (*u*) 
  			iptables -A PREROUTING -t nat -p tcp -d  $LOCALIP --dport $DPORT -j
DNAT  --to $DESTIP:$DPORT
  		esac
  		DPORTS=${DPORTS#*,} 		# Schleife mit restlichen Ports wiederholen
  	done
  done
}

case $1 in
  start)
    portfw_rules
  ;;

  stop)
  ;;
esac
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : smime.p7s
Dateityp    : application/x-pkcs7-signature
Dateigröße  : 1832 bytes
Beschreibung: nicht verfügbar
URL         : <http://lists.funkfeuer.at/pipermail/wien/attachments/20090716/d30918c9/attachment.bin>


Mehr Informationen über die Mailingliste Wien