Portforwarding geht nicht - dringend Hilfe gesucht!

Gemeinsam ins Internet mit Firewall und Proxy.
Antworten
Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Portforwarding geht nicht - dringend Hilfe gesucht!

Beitrag von Grumbler » 12.10.2002 01:26:03

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

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 12.10.2002 02:17:25

Wenn ich das richtig sehe, dann blockt Deine "block-ext" Chain von der FORWARD Chain aus alle ankommenden Verbindungen...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Beitrag von Grumbler » 12.10.2002 19:22:18

Aber dann dürfte doch nichts auf meinen internen Rechnern funktionieren oder?
Es funzt allerdings alles. FTP, HTTP usw.
Mir fehlt lediglich das Portforwarding.

Bis denne

Grumbler

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 12.10.2002 19:56:38

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
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Beitrag von Grumbler » 12.10.2002 23:38:04

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

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 13.10.2002 15:32:19

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
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Beitrag von Grumbler » 13.10.2002 20:52:51

Ich habe jetzt die DEFAULTPOLICY auf ACCEPT gestellt. Damit wird jedes Paket durchgelassen. Ich habe jetzt keine Regel mehr, die ein Paket verbieten würde.

Aber es geht immernoch nicht. :cry:

Ich weiß nicht mehr weiter.

Grumbler

Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Beitrag von Grumbler » 13.10.2002 22:10:09

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

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 14.10.2002 16:23:34

Hmm, :oops:

Code: Alles auswählen

echo 1 > /proc/sys/net/ipv4/ip_forward
Wird's damit besser?

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
demarque
Beiträge: 70
Registriert: 29.07.2002 19:59:46

Beitrag von demarque » 14.10.2002 21:22:21

Ne, das steht im script ... habs gesehen.

Benutzeravatar
pdreker
Beiträge: 8298
Registriert: 29.07.2002 21:53:30
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Nürnberg

Beitrag von pdreker » 14.10.2002 21:26:14

Yepp, right, hab's nicht sofort gesehen, weil's unten steht... Ich schreib's aus Gewohnheit immer irgendwo an den Anfang...

Patrick
Definitely not a bot...
Jabber: pdreker@debianforum.de

Benutzeravatar
demarque
Beiträge: 70
Registriert: 29.07.2002 19:59:46

Beitrag von demarque » 14.10.2002 21:40:11

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

Benutzeravatar
demarque
Beiträge: 70
Registriert: 29.07.2002 19:59:46

Beitrag von demarque » 14.10.2002 21:55:44

@pdreker - Nun ja ich schreibs auch immer an den Anfang ... aber jedem das seine ....

Benutzeravatar
Grumbler
Beiträge: 65
Registriert: 27.04.2002 18:16:01
Kontaktdaten:

Beitrag von Grumbler » 01.11.2002 00:12:42

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 :D

Bis denne

Grumbler

Antworten