iptables: Zugriff auf mehrere Netze verhindern

Hi,

ich habe folgende Situation: Ein Netzwerk (N1), das hinter einem Debian Router steht, soll _nur_ ins Internet kommen. Zwischen dem Internet und diesem Netzwerk befindet sich ein weiteres Netz (N2). An diesem Netz wiederrum sind per VPN weitere Netzwerke (N3) drangehängt. Nun möchte ich verhindern, dass das man aus N1 ins N2 oder irgendein N3 kommt.

Momentan sieht meine Firewall so aus:
Code:
#!/bin/bash

###################################
# SETUP
###################################
modprobe ip_conntrack
echo 1  >  /proc/sys/net/ipv4/ip_forward
echo 0  >  /proc/sys/net/ipv4/ip_dynaddr
echo 1  >  /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0  >  /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1  >  /proc/sys/net/ipv4/conf/all/rp_filter
echo 61 >  /proc/sys/net/ipv4/ip_default_ttl
echo 1  >  /proc/sys/net/ipv4/tcp_abort_on_overflow
echo 30 >  /proc/sys/net/ipv4/tcp_fin_timeout
echo 3  >  /proc/sys/net/ipv4/tcp_syn_retries
echo 3  >  /proc/sys/net/ipv4/tcp_synack_retries

###################################
# CLEAR ALL AND SET DEFAULTS
###################################
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

###################################
# ALLOW ALL TRAFFIC ON LOOPBACK
###################################
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

###################################
# EXCEPTIONS TO THE INPUT POLICY
###################################
# allow all input through the eth0 device
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT

# allow dns through eth1
iptables -A INPUT -i eth1 -p udp --dport 53 -j ACCEPT

###################################
# EXCEPTIONS TO THE FORWARD POLICY
###################################
iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p icmp -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p icmp -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.1.0/24 -p tcp --dport 80 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.1.0/24 -p tcp --dport 443 -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Ihr seht, dass ich z.B. in

iptables -A FORWARD -i eth1 -o eth0 ! -d 192.168.0.0/24 -p icmp -j ACCEPT

Zugriff gewähre, wenn das Zielnetz nicht ein bestimmtes ist. Wenn ich jetzt für weitere Netzwerke dieselbe Zeile setze, matcht ja trotzdem die obige Zeile zuerst. Somit hat was folgt keine Auswirkungen.

Wie macht man sowas denn?

ciao
serow
 
iptables erlaubt es dir neben den builtin chains (wie z.B. FORWARD oder INPUT) auch selbst chains zu erstellen ... iptables -N <name>

diese chains funktionieren bis auf ein paar ausnahmen so wie die builtin chains ... sie fangen oben bei regel 1 mit der verarbeitung an, und laufen nach unten alle regeln durch, bis eine passt, oder das ende erreicht wurde... am ende gibts allerdings keine default policy die über das schicksal des pakets entscheidet, sondern man kehrt dahin zurück von wo die chain aufgerufen wurde ...

wenn du nun also deine FORWARD chain um etwas erweitern willst, das mehrere ausschluskriterien hat, wie in deinem beispiel die verbotenen netze, dann könntest du für dieses scenario eine entsprechende chain anlegen...


-N UserDefinedChain1
-A UserDefinedChain1 -d 192.168.0.0/24 -j RETURN
-A UserDefinedChain1 -d 192.168.1.0/24 -j RETURN
-A UserDefinedChain1 -j ACCEPT
-I FORWARD -i eth1 -o eth0 -p icmp -j UserDefinedChain1

alles an ICMP traffic was von eth1 nach eth0 soll wird die regel der FORWARD chain erfüllen, und folglich an UserDefinedChain1 weitergereicht ... trifft dort ein ausschlusskriterium zu, gehts zurück in die FORWARD chain ... trifft kein ausschlusskriterium zu, wirds angenommen

alles was mit RETURN zurück gekommen ist, wird an die nächste regel der FORWARD chain weitergereicht
 
Hi,

ah okay, ich hatte das zwar immer im Hinterkopf, dass es diese Custom Chains gibt. Und jetzt weiss ich auch wozu :)

ciao
sero
 
Zurück
Oben