# iptables problem



## STEagleEye (18. April 2005)

ich bin gerade dabei mir einen kleinen router einzurichten nur leider hab ich ein problem mit den iptables
der router selbst kommt nur raus wenn ich die output polices auf accept stelle
und die clienten kommen garnicht raus
und auch das schreiben der 1 in /proc/sys/net/ipv4/ip_forward geht nicht vi sagt mir "file truncated"
ich hab debian 3.0 mit kernel 2.4
hier mal meine tables script

```
#!/bin/bash
###########################
# iptables fr den router
###########################
# 192.168.0.1 EagleRouter
# 192.168.0.2 EagleServer
# 192.168.0.3 EagleEye
# 192.168.0.4 EagleSchleppi
###########################
#
#
###########################
# dienstname  tcp    udp
###########################
## EagleRouter
###########################
# von auen erreichbar
##
# ftp          20
# cvs          22
# ssh          22
# apache       81
# apache ssl  444
# mysql      3607
# joneserver 5866
# dnsupdater
##
# ausgang erlauben
##
###########################
###########################
## EagleServer
###########################
# von auen erreichbar
##
# ftp          21
# ssh          23
# apache       80
# apache ssl  443
# tomcat     8080
# mysql      3606
# vnc        5901
##
# ausgang erlauben
##
###########################
###########################
## EagleEye
###########################
# von auen erreichbar
##
# ftp          19
# vnc        5900
# overnet    4663   4662
##
# ausgang erlauben
##
# overnet    4663   4662
###########################
###########################
# EagleSchleppi
# von auen erreichbar
##
##
# ausgang erlauben
##
###########################
###########################
# Global
###########################
# von auen erreichbar
##
# uptime
# irc
# icq
# msn
##
# ausgang erlauben
##
# ftp           21
# mail smtp     25
# apache        80
# mail pop     110
# apache ssl   443
# mysql       3600
# vnc         5900
# jone        5866
# tomcat      8080
# uptime
# icq
# irc
# msn
# cvs
###########################

###########################
## hilfe
###########################
# -t tabelle ?
# -A am ender der tabelle anhngen
# -o ausgehende schnittstelle
# -i eingangs schnittstelle
# -j (jump) aktion die ausgelst werden soll oder neue tabelle die durchlaufen werden soll
# -P policies setzen fr die tabelle = was passiert wenn die tabelle durchlaufen ist und das paket 

# variablen
EXTIF="ppp0"
INTIF="eth0"
IPTABLES=/sbin/iptables

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

echo "Alle bestehenden Regeln löschen: "
$IPTABLES -F
$IPTABLES -t nat -F
echo "gelöscht"
        
echo "Default auf DROP stellen:"
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -A INPUT -i $EXTIF -p icmp -j ACCEPT
echo "done"

# Aufm loopback will ich keine Firewall
echo "Loopback freischalten:"
$IPTABLES -A INPUT -i lo -j ACCEPT
echo "done"
                   
# ebensowenig im LAN (sollte ja im privaten LAN kaum ntig sein)
echo "LAN Interface freischalten:"
$IPTABLES -A INPUT -i $INTIF -j ACCEPT
echo "done"
       

######################################
# eingang
######################################
# mysql server
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 3606  -j ACCEPT # haupt mysql server auf eagleserver
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 3607  -j ACCEPT # ersatz mysql server auf dem router
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 3606 -j DNAT --to-dest 192.168.0.2:3606
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 3607 -j DNAT --to-dest 192.168.0.1:3606

# apache
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 81  -j ACCEPT # haupt apache auf dem router
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 443 -j ACCEPT # hautp apache ssl auf dem router
#$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 81 -j DNAT --to-dest 192.168.0.2:80
#$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 444 -j DNAT --to-dest 192.168.0.2:443
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 81  -j ACCEPT # ersatz apache auf dem server
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 444 -j ACCEPT # ersatz apache ssl auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 80 -j DNAT --to-dest 192.168.0.2:80 # ersatz apache auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 443 -j DNAT --to-dest 192.168.0.2:442 # ersatz apache ssl auf dem server

# tomcat
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 8080  -j ACCEPT # tomcat auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 8080 -j DNAT --to-dest 192.168.0.2:8080 # tomcat auf dem server

# ftp server
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 19  -j ACCEPT # ftp auf eagleeye
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 20  -j ACCEPT # ftp auf dem router
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 21  -j ACCEPT # ftp auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 19 -j DNAT --to-dest 192.168.0.3:21 # eagleeye
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 20 -j DNAT --to-dest 192.168.0.2:21 # eaglerouter
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 21 -j DNAT --to-dest 192.168.0.1:21 # eagleserver

# ssh
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 22  -j ACCEPT # ssh auf dem router
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 23  -j ACCEPT # ssh auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 23 -j DNAT --to-dest 192.168.0.2:22 # eagleserver

# cvs
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 22  -j ACCEPT # cvs auf dem router luft ber ssh

# jone server
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5866  -j ACCEPT # server fr jone auf router

# vnc server
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5900  -j ACCEPT # vnc auf eagleeye
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5901  -j ACCEPT # vonc auf dem server
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 5900 -j DNAT --to-dest 192.168.0.3:5900 # eagleeye
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 5901 -j DNAT --to-dest 192.168.0.2:5900 # eagleserver

# overnet
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 4663  -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p UDP --dport 4662  -j ACCEPT
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p TCP --dport 4663 -j DNAT --to-dest 192.168.0.3:4663 # eagleeye
$IPTABLES -t nat -A PREROUTING -i $EXTIF -p UDP --dport 4662 -j DNAT --to-dest 192.168.0.3:4662 # eagleeye

# icq
#$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5010  -j ACCEPT
#$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5011  -j ACCEPT
#$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5012  -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 5190  -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p UDP --dport 5190  -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p UDP --dport 5200  -j ACCEPT

# msn
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 6891  -j ACCEPT

# irc
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 6667  -j ACCEPT


iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Um eventuelles Spoofing zu verhindern sperren wir die betroffenen Gebiete einfach aus.
echo "Spoofed IPs blocken:"
$IPTABLES -A INPUT -i $EXTIF -p TCP -s 255.255.255.255 -j REJECT
$IPTABLES -A INPUT -i $EXTIF -p UDP -s 255.255.255.255 -j REJECT 

$IPTABLES -A INPUT -i $EXTIF -p TCP -s 0.0.0.0 -j REJECT
$IPTABLES -A INPUT -i $EXTIF -p UDP -s 0.0.0.0 -j REJECT

$IPTABLES -A INPUT -i $EXTIF -p TCP -s 192.168.0.0/24 -j REJECT
$IPTABLES -A INPUT -i $EXTIF -p UDP -s 192.168.0.0/24 -j REJECT
echo "done"

echo "Regeln fr NAT:"
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF --source 192.168.0.0/24 -j ACCEPT
echo "done"
                
# Für aktives FTP brauchst du diesen Port offen und das entsprechende Kernelmodul!
echo "Aktives FTP freischalten:"
$IPTABLES -A INPUT -d $LNET -p TCP -i $EXTIF --sport 20 -j ACCEPT
echo "done"

# Das gesamte forwarding und die statematches.
echo "TCP Pakte aus dem Inet fr bereits bestehenden Verbindungen durchlassen"
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 19 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 20 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 21 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 22 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 23 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 80 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 81 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 443 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 444 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 3306 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 3307 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 4663 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p UDP --dport 4662 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 5900 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 5901 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 5866 -j ACCEPT
$IPTABLES -A FORWARD -i $EXTIF -p TCP --dport 8080 -j ACCEPT
echo "done"

echo "Paketfilter set"
```


----------



## tuxx (18. April 2005)

Also die 1 schreibt man mit
echo "1" > /proc/sys/net/ipv4/ip_forward


----------



## STEagleEye (18. April 2005)

mach ich doch auch steht doch im script auch drin 
nur da passiert nix deshalb hatte ich es mit dem vi mal versucht und da hab ich das mit der fehler meldung bemerkt


----------



## JohannesR (18. April 2005)

tuxx hat gesagt.:
			
		

> Also die 1 schreibt man mit
> echo "1" > /proc/sys/net/ipv4/ip_forward


Nein, die Quotes müssen nicht. Was passiert denn, wenn du als root per echo eine 1 in ip_forward schreibst?
Ausserdem faende ich es prima, wenn du dich an die Netiquette halten wuerdest. In deinem Post fehlen einige Punkt, Kommas und Großbuchstaben!


----------



## tuxx (18. April 2005)

Die Interfaces sind so richtig?
EXTIF="ppp0" und INTIF="eth0"?
Ich frag nur, weil bei mir standardmaessig ppp0 auf eth0 liegt und INTIF eth1 waere.


----------



## STEagleEye (18. April 2005)

ja weil wie gesagt der rechner selbst kommt ja raus
nur die anderen nicht


----------



## STEagleEye (18. April 2005)

arg das modul ip_tables hab ich vergessen
jetzt klappt das schreiben in die datei auch und der rechner selbst kommt auch raus
nur die clienten noch nich


----------



## Dennis Wronka (19. April 2005)

Dein Script ist etwas komisch.

Du hast 2 mal diese Zeile drin:
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 81  -j ACCEPT

Die ist auch doppelt:
$IPTABLES -A INPUT -i $EXTIF -p TCP --dport 22  -j ACCEPT

Allgemein find ich das Script recht unuebersichtlich. Weiterhin bin ich kein Freund davon direkt in die Chains INPUT, FORWARD und OUTPUT zu schreiben.
Ich bastle lieber eigene Chains und verweise aus den Standard-Chains dann in meine.
Der Vorteil daran ist, dass man Module fuer einzelne Dienste schreiben kann und diese bei Bedarf aktivieren und deaktivieren kann.
Gluecklicherweise hab ich mal mein Script mit in's Buero genommen sodass ich Dir jetzt mal ein ein Beispiel zeigen kann.

```
case "$1" in
    start)
	$0 enablelogging
	$0 enablerouting
	$0 enablenat
	$0 enablefirewall
	;;
    stop)
	$0 disablefirewall
	$0 disablenat
	$0 disablerouting
	$0 disablelogging
	/usr/local/sbin/iptables -F
	/usr/local/sbin/iptables -t nat -F
	/usr/local/sbin/iptables -t mangle -F
	/usr/local/sbin/iptables -X
	/usr/local/sbin/iptables -t nat -X
	/usr/local/sbin/iptables -t mangle -X
	;;
    enablelogging)
    	echo "Enabling Logging"
	/usr/local/sbin/ulogd
	/usr/local/sbin/iptables -N logging
	/usr/local/sbin/iptables -A logging -i ppp0 -m state --state INVALID -j ULOG
	/usr/local/sbin/iptables -I INPUT 1 -j logging
	/usr/local/sbin/iptables -I FORWARD 1 -j logging
	;;
    disablelogging)
    	echo "Disabling Logging"
	/usr/local/sbin/iptables -D INPUT -j logging
	/usr/local/sbin/iptables -D FORWARD -j logging
	/usr/local/sbin/iptables -F logging
	/usr/local/sbin/iptables -X logging
	killall ulogd
	;;
    enablerouting)
    	echo "Enabling Routing"
	echo "1" > /proc/sys/net/ipv4/ip_forward
	;;
    disablerouting)
    	echo "Disabling Routing"
	echo "0" > /proc/sys/net/ipv4/ip_forward
	;;
    enablefirewall)
    	echo "Enabling Firewall"
	/usr/local/sbin/iptables -N firewall
	/usr/local/sbin/iptables -A firewall -m state --state INVALID -j DROP
	/usr/local/sbin/iptables -A firewall -m state --state ESTABLISHED,RELATED -j ACCEPT
	/usr/local/sbin/iptables -A firewall -i ppp0 -p tcp --dport smtp -j ACCEPT
	/usr/local/sbin/iptables -A firewall -i ppp0 -p tcp --dport ftp -j ACCEPT
	/usr/local/sbin/iptables -A firewall -i ppp0 -p tcp --dport http -j ACCEPT
	/usr/local/sbin/iptables -A firewall -i ppp0 -p tcp --dport https -j ACCEPT
	/usr/local/sbin/iptables -A firewall -m state --state NEW -i ! ppp0 -j ACCEPT
	/usr/local/sbin/iptables -A firewall -j DROP
	/usr/local/sbin/iptables -A INPUT -j firewall
	/usr/local/sbin/iptables -A FORWARD -j firewall
    	;;
    disablefirewall)
    	echo "Disabling Firewall"
	/usr/local/sbin/iptables -D INPUT -j firewall
	/usr/local/sbin/iptables -D FORWARD -j firewall
	/usr/local/sbin/iptables -F firewall
	/usr/local/sbin/iptables -X firewall
    	;;
    enablenat)
    	echo "Enabling NAT"
	/usr/local/sbin/iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
    	;;
    disablenat)
    	echo "Disabling NAT"
	/usr/local/sbin/iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE
    	;;
    restart)
	$0 stop  &&  $0 start  ||  return=$rc_failed
	;;
    *)
	echo "Usage: $0
{start|stop||restart|enablelogging|disablelogging|enablerouting|disablerouting|enablefirewall|disablefirewall|enablenat|disablenat}"
	exit 1
	;;
esac
```


----------



## STEagleEye (19. April 2005)

ok danke ich werds mir heute mal ansehn


----------



## Dennis Wronka (19. April 2005)

Viel Erfolg.
Und bitte gewoehn Dir eine vernuenftige Gross- und Kleinschreibung an. Das kann das Lesen eines Beitrages durchaus vereinfachen.
Danke.


----------



## STEagleEye (19. April 2005)

ok werd ich machen


----------



## STEagleEye (19. April 2005)

ah habs hinbekommen, ich mußte nur das hier einfügen dann gings

```
# Connection-Tracking aktivieren
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i ! $EXTIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
```
jetzt muß ich mich nurnoch mit einem DNS Server rumschlagen dann kann ich genauer nachsehn ob der Rest auch geht.
Danke für die Hilfe


----------



## STEagleEye (19. April 2005)

so der DNS Server läuft jetzt auch.
Ich hab jetzt aber bei meinen tests festgestellt das alle offenen Ports beim Router landen.
Hat einer eine Idee woran das liegt?
Hab ich vieleicht Irgedwas vergessen Irgendwo einzutragen?
Oder muß ich noch irgend ein Modul laden ich lade derzeit nur ip_tables.


----------

