################################################################################
# LINUX FIREWALL
# Nico Schottelius <Nico@Schottelius.Org>
# Dec 2001
################################################################################

########## TEST #### #DEV_OUT="eth1"
DEV_OUT="eth0"
DEV_INT="eth1"
NET_INT="192.168.1.0/255.255.255.0"

# Das NAT-Modul laden (dies zieht all die andern mit).
modprobe iptable_nat

# erstmal aufraeumen:
# benutzerdefinierte chains von filter loeschen
iptables -X

# filter aufraeumen. loescht alle chains
iptables -F

# auch in nat
iptables -t nat -F


##################
#
# NAT/Masquarading
# 

# In der NAT-Tabelle (-t nat) eine Regel fuer alle an ppp0 (-o ppp0)
# ausgehenden Pakete hinter dem Routing (POSTROUTING), die maskiert
# werden sollen, anhaengen (-A).
iptables -t nat -A POSTROUTING -o $DEV_OUT  -j MASQUERADE

# IP-Forwarding aktivieren
echo 1 > /proc/sys/net/ipv4/ip_forward

# auch dynamische Adresse
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

#################
#
# INPUT Pakete an diesen Rechner
#

# von intranet alles erlauben
iptables -A INPUT -s $NET_INT -j ACCEPT

# erlaube SSH von ueberall (auch inet)
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

# civ
iptables -A INPUT -p tcp --dport 5555 -j ACCEPT

# UDP Pakete aus lokalem Netz passieren lassen
# iptables -A INPUT -p udp -s $NET_INT -j ACCEPT

# UDP-Pakete von Name-Servern durchlassen
iptables -A INPUT -p udp --sport 53 -j ACCEPT

# ICMP-Pakete (z.B. Ping) aus lokalem Netz erlauben
iptables -A INPUT -p icmp -s $NET_INT -j ACCEPT

# ICMP-Pakete (z.B. Ping) generell verbieten
#iptables -A INPUT -p icmp -j DROP

# lokale arbeit zulassen (loopback)
iptables -A INPUT -i lo -j ACCEPT

# sonst nur packete aus vorhandenen verbindungen
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Policy (Standardverhalten am Regelende): Paket verwerfen
iptables -P INPUT DROP

###############
#
# FORWARD Geroutete Packete
# 

# Policy (Standardverhalten am Regelende): Paket verwerfen
iptables -P FORWARD DROP

# Pakete aus lokalem Netz erlauben und routen
iptables -A FORWARD -s $NET_INT -j ACCEPT

# man koennte es auch nur auf ftp beschraenken: 
##iptables -A FORWARD -o $DEV_OUT -p tcp --sport 1024:65535 --dport ftp -m state --state NEW -j ACCEPT

# zu routende Pakete nur durchlassen, wenn von innen oder zu einer
# bestehenden Verbindung geh�rig
#
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


##################
#
# OUTPUI von uns (lokal)
#

# Policy (Standardverhalten am Regelende): Paket durchlassen
iptables -P OUTPUT ACCEPT