Hi an Alle,

ich habe schon vor einiger Zeit nach einem "alten" How-To eine iptables Firewall in Verbindung mit DSL als Routing-Lösung bei mir installiert. Das Script funktioniert soweit auch sehr gut. Ich kann Verbindungen von Außen direkt für den Server oder für Clients im Netzwerk freischalten - sprich direkten INPUT oder FORWARD nutzen.
Der Linux Server fungiert also mit iptables und ppp0 als Router bzw. Standardgateway in meinem LAN.

Da ich nun aber einen zweiten Standort in meine Überlegungen mit einbeziehen muss, habe ich mich näher mit VPNs befasst und bin bei OpenVPN hängengeblieben. Das funktioniert zwischen zwei unabhängigen Windows Rechnern schon sehr gut - würde es am Routing bzw. an der Firewall nicht scheitern, würde es wahrscheinlich auch schon mit dem Linux Server funktionieren.

Mein Problem ist nun folgendes: Mein Firewall Script scheint nur das eine lokale Subnetz (192.168.0.0) mit einzubeziehen. Anfragen aus anderen lokalen Subnetzen oder in andere lokale Subnetze scheinen nicht akzeptiert zu werden.

Mit welchen Regeln könnte ich es bewerkstelligen, dass der Linux Server unbehelligt seinem Dienst als Router nachgehen kann?
Sprich, dass er Pakete die aus Subnetz 192.168.0.0 auf Schnittstelle eth1 kommen auf der Schnittstelle tun0 mit dem Subnetz 10.0.0.0 verarbeiten kann bzw. diese forwarden kann.

Ich hoffe mein Problem ist klar geworden.

Für das bessere Verständnis hänge ich auch noch das Firewall-Script an:
Code:
#!/bin/sh

IPTABLES=/sbin/iptables

LSMOD=/sbin/lsmod
DEPMOD=/sbin/depmod
MODPROBE=/sbin/modprobe
GREP=/bin/grep
AWK=/bin/awk
SED=/bin/sed
IFCONFIG=/sbin/ifconfig

EXTIF="ppp0"
INTIF="eth1"

#  The following line will determine your external IP address.  This
#  line is somewhat complex and confusing but it will also work for
#  all NON-English Linux distributions:
#
EXTIP="`$IFCONFIG $EXTIF | $AWK \
 /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"

# Assign the internal TCP/IP network and IP address
INTNET="192.168.0.255/24"
INTIP="192.168.0.2/24"

# Setting a few other local variables
#
UNIVERSE="0.0.0.0/0"

$DEPMOD -a

if [ -z "` $LSMOD | $GREP ip_tables | $AWK {'print $1'} `" ]; then
   $MODPROBE ip_tables
fi

if [ -z "` $LSMOD | $GREP ip_conntrack | $AWK {'print $1'} `" ]; then
   $MODPROBE ip_conntrack
fi

if [ -z "` $LSMOD | $GREP ip_conntrack_ftp | $AWK {'print $1'} `" ]; then
   $MODPROBE ip_conntrack_ftp
fi

if [ -z "` $LSMOD | $GREP ip_conntrack_irc | $AWK {'print $1'} `" ]; then
   $MODPROBE ip_conntrack_irc
fi

if [ -z "` $LSMOD | $GREP iptable_nat | $AWK {'print $1'} `" ]; then
   $MODPROBE iptable_nat
fi

if [ -z "` $LSMOD | $GREP ip_nat_ftp | $AWK {'print $1'} `" ]; then
   $MODPROBE ip_nat_ftp
fi

echo "1" > /proc/sys/net/ipv4/ip_forward

echo "1" > /proc/sys/net/ipv4/ip_dynaddr


#Clearing any previous configuration
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT 
$IPTABLES -P OUTPUT DROP
$IPTABLES -F OUTPUT 
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD 
$IPTABLES -F -t nat

#Not needed and it will only load the unneeded kernel module
#$IPTABLES -F -t mangle
#
# Flush the user chain.. if it exists
if [ -n "`$IPTABLES -L | $GREP drop-and-log-it`" ]; then
   $IPTABLES -F drop-and-log-it
fi

# Delete all User-specified chains
$IPTABLES -X

# Reset all IPTABLES counters
$IPTABLES -Z

#Configuring specific CHAINS for later use in the ruleset
echo "  Creating a DROP chain.."
$IPTABLES -N drop-and-log-it
$IPTABLES -A drop-and-log-it -j LOG --log-level info 
$IPTABLES -A drop-and-log-it -j REJECT

echo -e "\n   - Loading INPUT rulesets"

$IPTABLES -t filter -P INPUT       ACCEPT
$IPTABLES -t filter -P FORWARD     ACCEPT
$IPTABLES -t filter -P OUTPUT      ACCEPT
$IPTABLES -t nat    -P PREROUTING  ACCEPT
$IPTABLES -t nat    -P POSTROUTING ACCEPT


#######################################################################
# INPUT: Incoming traffic from various interfaces.  All rulesets are 
#        already flushed and set to a default policy of DROP. 
#

# loopback interfaces are valid.
#
$IPTABLES -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT


# local interface, local machines, going anywhere is valid
#
$IPTABLES -A INPUT -i $INTIF -s $INTNET -d $UNIVERSE -j ACCEPT


# remote interface, claiming to be local machines, IP spoofing, get lost
#
$IPTABLES -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it


# external interface, from any source, for ICMP traffic is valid
#
#  If you would like your machine to "ping" from the Internet, 
#  enable this next line
#
#$IPTABLES -A INPUT -i $EXTIF -p ICMP -s $UNIVERSE -d $EXTIP -j ACCEPT


# remote interface, any source, going to permanent PPP address is valid
#
#$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -j ACCEPT


# Allow any related traffic coming back to the MASQ server in
#
$IPTABLES -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m state --state \
 ESTABLISHED,RELATED -j ACCEPT


# ----- Begin OPTIONAL INPUT Section -----

## hier steht eigentlich noch viel mehr
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,ESTABLISHED,RELATED -p tcp -s 0.0.0.0/0 -d $EXTIP --dport 21 -j ACCEPT

# Catch all rule, all other incoming is denied and logged. 
#
$IPTABLES -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it


#######################################################################
# OUTPUT: Outgoing traffic from various interfaces.  All rulesets are 
#         already flushed and set to a default policy of DROP. 
#

# loopback interface is valid.
#
$IPTABLES -A OUTPUT -o lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT

# local interfaces, any source going to local net is valid
#
$IPTABLES -A OUTPUT -o $INTIF -s $EXTIP -d $INTNET -j ACCEPT

# local interface, any source going to local net is valid
#
$IPTABLES -A OUTPUT -o $INTIF -s $INTIP -d $INTNET -j ACCEPT

# outgoing to local net on remote interface, stuffed routing, deny
#
$IPTABLES -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it

# anything else outgoing on remote interface is valid
#
$IPTABLES -A OUTPUT -o $EXTIF -s $EXTIP -d $UNIVERSE -j ACCEPT

# Catch all rule, all other outgoing is denied and logged. 
#
$IPTABLES -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it


echo -e "   - Loading FORWARD rulesets"

### Beispiel
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -p tcp --dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A PREROUTING -t nat -i ppp0 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.11:25
$IPTABLES -A FORWARD -t filter -i ppp0 -s 0/0 -p tcp --dport 25 -j ACCEPT

echo "     - FWD: Allow all connections OUT and only existing/related IN"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED \
 -j ACCEPT
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

# Catch all rule, all other forwarding is denied and logged. 
#
$IPTABLES -A FORWARD -j drop-and-log-it

echo "     - NAT: Enabling SNAT (MASQUERADE) functionality on $EXTIF"
#
#More liberal form
#$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
#
#Stricter form
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j SNAT --to $EXTIP

Freue mich über jeden Tipp - das Thema iptables erschlägt mich einfach ...


Grüße,

Yannick