Portforwarding geht nicht - dringend Hilfe gesucht!
Portforwarding geht nicht - dringend Hilfe gesucht!
Hi Leutz,
ich möchte gerne ein Portforwarding durch meine Firewall an einen meiner Rechner machen, auf dem Apache läuft. Leider funktioniert es nicht und ich finde den Fehler im Firewallscript nicht. Vielleicht wäre einer so nett und kontrolliert das mal.
Bitte Bitte Bitte Bitte Bitte!!!
##################
#! /bin/sh
IPTABLES=/sbin/iptables
DEFAULTPOLICY="DROP"
DEVINT1="eth0"
DEVEXT="ppp0"
LOCALNET100="192.168.0.0/24"
FlushFilterRules()
{
#Setzt die Filterregeln zurueck
TABLE="filter"
$IPTABLES -t $TABLE -F
$IPTABLES -t $TABLE -X
$IPTABLES -t $TABLE -P INPUT $DEFAULTPOLICY
$IPTABLES -t $TABLE -P OUTPUT $DEFAULTPOLICY
$IPTABLES -t $TABLE -P FORWARD $DEFAULTPOLICY
}
FlushNATRules()
{
#Setzt die NAT (Masquerading) zurueck
OLD=$DEFAULTPOLICY
DEFAULTPOLICY="ACCEPT"
TABLE="nat"
$IPTABLES -t $TABLE -F
$IPTABLES -t $TABLE -X
$IPTABLES -t $TABLE -P PREROUTING $DEFAULTPOLICY
$IPTABLES -t $TABLE -P POSTROUTING $DEFAULTPOLICY
$IPTABLES -t $TABLE -P OUTPUT $DEFAULTPOLICY
DEFAULTPOLICY=$OLD
}
BuildFilterRules()
{
#INPUT
#Port 113 (identd) rejecten fuer FTP
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 113 -j REJECT
#Port 22 fuer SSH oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 22 -j ACCEPT
#Port 8888 TCP fuer TEST oeffnen <--------
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 8888 -j ACCEPT
#Port 4661,4662,4665 TCP fuer EDonkey oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4661 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4662 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4665 -j ACCEPT
#Port 4661,4662,4665 UDP fuer EDonkey oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4661 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4662 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4665 -j ACCEPT
#Port 21 fuer FTP oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 21 -j ACCEPT
#Port 80 fuer WWW oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 80 -j ACCEPT
#ICMP Anfragen reinlassen
$IPTABLES -I INPUT -i $DEVEXT -p icmp -j ACCEPT
#Blockiert alle Verbindungsanfragen von aussen und laesst bestehenden
#Verbindungen rein, mit Connection Tracking
BLOCKEXT="block-ext"
$IPTABLES -N $BLOCKEXT
$IPTABLES -A $BLOCKEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A $BLOCKEXT ! -i $DEVEXT -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -j $BLOCKEXT
#FORWARD
$IPTABLES -A FORWARD -j $BLOCKEXT
$IPTABLES -A FORWARD -i $DEVEXT -m state --state NEW -j DROP
#Es werden nur gueltige Adressen weitergeleitet
$IPTABLES -A FORWARD -i $DEVINT1 -o $DEVEXT -j ACCEPT
#Anpassen der Paketgroessen fuer PPPoE
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#OUTPUT
#Der Rest kann rausgelassen werden
$IPTABLES -A OUTPUT -j ACCEPT
}
BuildNATRules()
{
TABLE="nat"
$IPTABLES -t $TABLE -A POSTROUTING -o $DEVEXT -j MASQUERADE
#Port 8888 fuer TEST weiterleiten an Laptop <--------
$IPTABLES -t $TABLE -A PREROUTING -i ppp0 -p tcp --dport 8888 -j DNAT --to 192.168.0.4:80
}
#--Start-----------------------
#IP-Forward aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
#Alle Regeln zuruecksetzen
FlushFilterRules
FlushNATRules
#Filterregeln setzen
BuildFilterRules
#Masqueradingregeln setzten
BuildNATRules
exit 0
###################
Vielen Dank
Bis denne
Grumbler
ich möchte gerne ein Portforwarding durch meine Firewall an einen meiner Rechner machen, auf dem Apache läuft. Leider funktioniert es nicht und ich finde den Fehler im Firewallscript nicht. Vielleicht wäre einer so nett und kontrolliert das mal.
Bitte Bitte Bitte Bitte Bitte!!!
##################
#! /bin/sh
IPTABLES=/sbin/iptables
DEFAULTPOLICY="DROP"
DEVINT1="eth0"
DEVEXT="ppp0"
LOCALNET100="192.168.0.0/24"
FlushFilterRules()
{
#Setzt die Filterregeln zurueck
TABLE="filter"
$IPTABLES -t $TABLE -F
$IPTABLES -t $TABLE -X
$IPTABLES -t $TABLE -P INPUT $DEFAULTPOLICY
$IPTABLES -t $TABLE -P OUTPUT $DEFAULTPOLICY
$IPTABLES -t $TABLE -P FORWARD $DEFAULTPOLICY
}
FlushNATRules()
{
#Setzt die NAT (Masquerading) zurueck
OLD=$DEFAULTPOLICY
DEFAULTPOLICY="ACCEPT"
TABLE="nat"
$IPTABLES -t $TABLE -F
$IPTABLES -t $TABLE -X
$IPTABLES -t $TABLE -P PREROUTING $DEFAULTPOLICY
$IPTABLES -t $TABLE -P POSTROUTING $DEFAULTPOLICY
$IPTABLES -t $TABLE -P OUTPUT $DEFAULTPOLICY
DEFAULTPOLICY=$OLD
}
BuildFilterRules()
{
#INPUT
#Port 113 (identd) rejecten fuer FTP
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 113 -j REJECT
#Port 22 fuer SSH oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 22 -j ACCEPT
#Port 8888 TCP fuer TEST oeffnen <--------
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 8888 -j ACCEPT
#Port 4661,4662,4665 TCP fuer EDonkey oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4661 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4662 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 4665 -j ACCEPT
#Port 4661,4662,4665 UDP fuer EDonkey oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4661 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4662 -j ACCEPT
$IPTABLES -I INPUT -i $DEVEXT -p udp --destination-port 4665 -j ACCEPT
#Port 21 fuer FTP oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 21 -j ACCEPT
#Port 80 fuer WWW oeffnen
$IPTABLES -I INPUT -i $DEVEXT -p tcp --destination-port 80 -j ACCEPT
#ICMP Anfragen reinlassen
$IPTABLES -I INPUT -i $DEVEXT -p icmp -j ACCEPT
#Blockiert alle Verbindungsanfragen von aussen und laesst bestehenden
#Verbindungen rein, mit Connection Tracking
BLOCKEXT="block-ext"
$IPTABLES -N $BLOCKEXT
$IPTABLES -A $BLOCKEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A $BLOCKEXT ! -i $DEVEXT -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -j $BLOCKEXT
#FORWARD
$IPTABLES -A FORWARD -j $BLOCKEXT
$IPTABLES -A FORWARD -i $DEVEXT -m state --state NEW -j DROP
#Es werden nur gueltige Adressen weitergeleitet
$IPTABLES -A FORWARD -i $DEVINT1 -o $DEVEXT -j ACCEPT
#Anpassen der Paketgroessen fuer PPPoE
$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#OUTPUT
#Der Rest kann rausgelassen werden
$IPTABLES -A OUTPUT -j ACCEPT
}
BuildNATRules()
{
TABLE="nat"
$IPTABLES -t $TABLE -A POSTROUTING -o $DEVEXT -j MASQUERADE
#Port 8888 fuer TEST weiterleiten an Laptop <--------
$IPTABLES -t $TABLE -A PREROUTING -i ppp0 -p tcp --dport 8888 -j DNAT --to 192.168.0.4:80
}
#--Start-----------------------
#IP-Forward aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward
#Alle Regeln zuruecksetzen
FlushFilterRules
FlushNATRules
#Filterregeln setzen
BuildFilterRules
#Masqueradingregeln setzten
BuildNATRules
exit 0
###################
Vielen Dank
Bis denne
Grumbler
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Wenn ich das richtig sehe, dann blockt Deine "block-ext" Chain von der FORWARD Chain aus alle ankommenden Verbindungen...
Patrick
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
FTP, HTTP usw, funktionieren ja auch. Das sind abgehende Verbindungen, oder Verbindungen aus dem internen Netz. NAT übersetzt aber (normalerweise, ich weiss ja nicht was Du vorhast) Verbindungen aus dem Internet zu Deiner Workstation.
Ich habe gerade nochmal auf http://www.netfilter.org nachgelesen: Das Oaket aus dem Internet wird vor der Routingentscheidung geNATted, und geht dann durch die FORWARD Chain und nicht durch INPUT! Scau Dir unter diesem Aspekt nochmal genau an, was FORWARD darf...
Patrick
Ich habe gerade nochmal auf http://www.netfilter.org nachgelesen: Das Oaket aus dem Internet wird vor der Routingentscheidung geNATted, und geht dann durch die FORWARD Chain und nicht durch INPUT! Scau Dir unter diesem Aspekt nochmal genau an, was FORWARD darf...
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
Ich meinte mit FTP und HTTP auch den ProFTPD Server und den Apache, der auf der Linuxkiste läuft. Die sind von außen doch auch ansprechbar.
Oder gehen diese Pakete durch die INPUT Chain?
Ich steige da gerade selbst nicht mehr durch.
Also ich glaube das folgende Zeilen in meinem Script das Portforwarding verhindern
$IPTABLES -A $BLOCKEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
Hier müßte noch NEW eingefügt werden, da meine Pakete von außen ja NEW sind. Richtig?
$IPTABLES -A FORWARD -i $DEVEXT -m state --state NEW -j DROP
Hindert meine Anfrage am eindringen und muß deshalb erst einmal auskommentiert werden. Richtig?
Beides habe ich zusammen versucht, es funktioniert allerdings immernoch nicht.
Bis denne
Grumbler
Oder gehen diese Pakete durch die INPUT Chain?
Ich steige da gerade selbst nicht mehr durch.
Also ich glaube das folgende Zeilen in meinem Script das Portforwarding verhindern
$IPTABLES -A $BLOCKEXT -m state --state ESTABLISHED,RELATED -j ACCEPT
Hier müßte noch NEW eingefügt werden, da meine Pakete von außen ja NEW sind. Richtig?
$IPTABLES -A FORWARD -i $DEVEXT -m state --state NEW -j DROP
Hindert meine Anfrage am eindringen und muß deshalb erst einmal auskommentiert werden. Richtig?
Beides habe ich zusammen versucht, es funktioniert allerdings immernoch nicht.
Bis denne
Grumbler
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Pakete vom Inet an der Router gehen durch INPUT
Pakete vom Inet durch NAT an eine WS gehen durch FORWARD
Nimm einfach 'mal die ganzen Block Regeln raus, und versuch einfach 'mal ein FW einzurichten, die erstmal nur das NAT hinbekommt. Danach kannst Du dann schrittweise die Schutzregeln einbauen, und sehen, welche Dein NAT stört...
Patrick
Pakete vom Inet durch NAT an eine WS gehen durch FORWARD
Nimm einfach 'mal die ganzen Block Regeln raus, und versuch einfach 'mal ein FW einzurichten, die erstmal nur das NAT hinbekommt. Danach kannst Du dann schrittweise die Schutzregeln einbauen, und sehen, welche Dein NAT stört...
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
Ich möchte noch einmal sicherstellen, dass ich das richtig verstanden habe.
Also:
Mein Paket kommt beim Server an. Es ist an den lokalen Rechner gerichtet, da es den zweiten internen ja nicht kennen kann. Der ZielPort ist 8888.
Jedes erste Paket geht zunächst durch die PREROUTING durch. Hier wird durch meine Regel die Zieladresse auf den internen Rechner 192.168.0.4 und der Zielport auf 80 geändert.
Das Paket geht nun in die FORWARD rein, weil das Paket ja nun nicht mehr an einen lokalen Prozeß gerichtet ist. INPUT hat mit dem ganzen Prozeß NICHTS zu tun. Hier müßte doch dann eigentlich Port 80 und NICHT port 8888 freigegeben werden, da der ZielPort durch PREROUTING geändert wurde.
Nun geht das Paket in die POSTROUTE. Hier müßte der Port 80 ebenfalls freigegeben werden, damit das Paket diese Chain ebenfalls durchdringen kann. Danach wird das Paket nun an die Zieladresse nämlich 192.168.0.4:80 geschoben.
Habe ich das alles so richtig verstanden?
Grumbler
Also:
Mein Paket kommt beim Server an. Es ist an den lokalen Rechner gerichtet, da es den zweiten internen ja nicht kennen kann. Der ZielPort ist 8888.
Jedes erste Paket geht zunächst durch die PREROUTING durch. Hier wird durch meine Regel die Zieladresse auf den internen Rechner 192.168.0.4 und der Zielport auf 80 geändert.
Das Paket geht nun in die FORWARD rein, weil das Paket ja nun nicht mehr an einen lokalen Prozeß gerichtet ist. INPUT hat mit dem ganzen Prozeß NICHTS zu tun. Hier müßte doch dann eigentlich Port 80 und NICHT port 8888 freigegeben werden, da der ZielPort durch PREROUTING geändert wurde.
Nun geht das Paket in die POSTROUTE. Hier müßte der Port 80 ebenfalls freigegeben werden, damit das Paket diese Chain ebenfalls durchdringen kann. Danach wird das Paket nun an die Zieladresse nämlich 192.168.0.4:80 geschoben.
Habe ich das alles so richtig verstanden?
Grumbler
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
- pdreker
- Beiträge: 8298
- Registriert: 29.07.2002 21:53:30
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Nürnberg
Yepp, right, hab's nicht sofort gesehen, weil's unten steht... Ich schreib's aus Gewohnheit immer irgendwo an den Anfang...
Patrick
Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de
Jabber: pdreker@debianforum.de
Flushe mal Deine bisherigen Regelketten ...
dann probier dies hier.
#module
hattest Du ja anscheinend richtig
.
.
.
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -t nat -A POSTROUTING -o /externes_dev/ -s /LAN_IP_RANGE/ -j MASQUERADE
#Bsp: interner webserver
iptables -t nat -A PREROUTING -p tcp --dport 80 -i /externes_device/ -j DNAT --to-destination x.x.x.x[deine IP]:80
#jetz FORWARD Chain
iptables -A FORWARD -p tcp -d $WEBSERVER01 --sport 1024: --dport 80 -o /internes_device/ -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s $WEBSERVER01 --dport 1024: --sport 80 -o /externes_device/ -m state --state ESTABLISHED -j ACCEPT
In der PREROUTING Chain fallen Entscheidungen bevor überhpt ans irgendwo hin routen gedacht wird ..
Schreibe uns mal bitte die Ausgabe von netstat -rn auf Deinem $WEBSERVER01 nieder ...
dann probier dies hier.
#module
hattest Du ja anscheinend richtig
.
.
.
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr
iptables -t nat -A POSTROUTING -o /externes_dev/ -s /LAN_IP_RANGE/ -j MASQUERADE
#Bsp: interner webserver
iptables -t nat -A PREROUTING -p tcp --dport 80 -i /externes_device/ -j DNAT --to-destination x.x.x.x[deine IP]:80
#jetz FORWARD Chain
iptables -A FORWARD -p tcp -d $WEBSERVER01 --sport 1024: --dport 80 -o /internes_device/ -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s $WEBSERVER01 --dport 1024: --sport 80 -o /externes_device/ -m state --state ESTABLISHED -j ACCEPT
In der PREROUTING Chain fallen Entscheidungen bevor überhpt ans irgendwo hin routen gedacht wird ..
Schreibe uns mal bitte die Ausgabe von netstat -rn auf Deinem $WEBSERVER01 nieder ...
Also ich habe den Fehler nun gefunden.
Zunächst einmal ist zu beachten, dass in der Forward Chain die Pakete an 192.168.0.4:80 erlaubt sein sollen. Desweiteren muss die Postroutingchain ebenfalls die Pakete von 192.168.0.4 wieder am gleichen Port des Server herausgeben.
Außerdem habe ich einen weiteren Fehler bei meinen Netzwerkkarten gehabt. Undzwar waren beide im gleichen Netz.
eth0 192.168.0.1
eth1 192.168.0.2
Dies funktioniert leider nicht. Ich habe sie deshalb von einander getrennt.
eth0 192.168.1.1
eth1 192.168.0.1
Nun geht es
Bis denne
Grumbler
Zunächst einmal ist zu beachten, dass in der Forward Chain die Pakete an 192.168.0.4:80 erlaubt sein sollen. Desweiteren muss die Postroutingchain ebenfalls die Pakete von 192.168.0.4 wieder am gleichen Port des Server herausgeben.
Außerdem habe ich einen weiteren Fehler bei meinen Netzwerkkarten gehabt. Undzwar waren beide im gleichen Netz.
eth0 192.168.0.1
eth1 192.168.0.2
Dies funktioniert leider nicht. Ich habe sie deshalb von einander getrennt.
eth0 192.168.1.1
eth1 192.168.0.1
Nun geht es
Bis denne
Grumbler