Probleme mit dem Portforwarding bei IPTABLES

Post Reply
Message
Author
grumbler
Posts: 1
Joined: 13. Oct 2002 12:26

Probleme mit dem Portforwarding bei IPTABLES

#1 Post by grumbler »

Hi Leutz,

ich versuche seit einiger Zeit durch meinen Debianserver auf dem bisher alles funktioniert hat (Webserver, FTP Server, Client-FTP, Masquerading, usw.) ein Portforwarding auf einen im lokalen Netz liegenden Rechner zu machen.
Leider will mir das irgendwie nicht gelingen. Es soll der Port 8888 auf einen im lokalen Netz liegenden Windows-Apache auf Port 80 geforwarded werden.
Vielleicht kann mal jemand mein Script durchschauen.

############
#! /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
$IPTABLES -I FORWARD -i $DEVEXT -p tcp --destination-port 8888 -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

#Laesst bestehenden
#Verbindungen rein, mit Connection Tracking
BLOCKEXT="block-ext"
$IPTABLES -N $BLOCKEXT

#Akzeptiere alle bereits bestehenden Verbindungen (CT)
$IPTABLES -A $BLOCKEXT -m state --state ESTABLISHED,RELATED -j ACCEPT

#Akzeptiere alle intern neu aufgebauten Verbindungen
$IPTABLES -A $BLOCKEXT ! -i $DEVEXT -m state --state NEW -j ACCEPT

#Wende block-ext auf die Input Chain an
$IPTABLES -A INPUT -j $BLOCKEXT

#FORWARD

$IPTABLES -A FORWARD -j $BLOCKEXT

#Verwerde alle von außen aufgebauten Verbindungen durch FORWARD
#WILL ICH ERST EINMAL NICHT!
#$IPTABLES -A FORWARD -i $DEVEXT -m state --state NEW -j DROP

#Erlaube alle von außen aufgebauten Verbindungen durch FORWARD
$IPTABLES -A FORWARD -i $DEVEXT -j ACCEPT

#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
#HIER SOLL PORT 8888 am Server auf Port 80 an einen netzinternen Rechner weitergeleitet werden
$IPTABLES -t $TABLE -A PREROUTING -i $DEVEXT -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 vielen Dank

Bis denne

Grumbler

ratte

Re: Probleme mit dem Portforwarding bei IPTABLES

#2 Post by ratte »

soweit ich iptables noob sehen kann, ist die prerouting rule ok.

vielleicht fehlt dir noch etwas à la

# Linux 2.4
iptables -A OUTPUT -t nat -p tcp -d 1.2.3.4 --dport 8080 \
-j DNAT --to 192.168.1.1:80

wenn die pakete lokal generiert werden?

wenns das auch nicht ist, dann schau dir das mal an:

Umadressierung (Redirection)
Es gibt einen speziellen Fall von Destination NAT, der Redirection genannt wird: Es ist eine einfache
Bequemlichkeit, die genau das gleiche tut wie NAT auf der eingehenden Schnittstelle.
## Eingehenden Webtraffic an Port 80 an unseren (transparenten) Squid-
# Proxy weiterleiten
# iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
-j REDIRECT --to-port 3128

ratte

Post Reply