#
# Einfaches Firewall-Skript aus dem Postfix-Buch
# http:/www.postfixbuch.de - Version 3.2 / 1.4.09
#
# Zur Vereinfachung legen wir unsere Server-IP-Nummer in
# eine Variable. Die 192.168.0.100 ist hier natürlich nur 
# ein Beispiel, setzen Sie die IP Ihres Servers ein.

ip_nr=192.168.0.100

IPT=/sbin/iptables

# Module laden
modprobe ip_conntrack

# Erstmal aufräumen.
$IPT -F

# Alle userdefinierten Chains löschen.
$IPT -X

# Durch unsere default-Regel (P=policy) machen wir alles zu.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP


# Wir erlauben nun pauschal alle Verbindungen, die zu bereits 
# aufgebauten Verbindungen gehören. WELCHE Verbindungen aufgebaut  
# werden dürfen, regeln wir anschließend. 
# Wir ziehen diesen Regelsatz vor, da wir Rechenpower sparen: Ein 
# Großteil der Pakete wird durch diese Regel durchgelassen, und so  
# können wir recht früh die Prüfung beenden.

$IPT -A INPUT  -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT  -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT


#
# Benötigte Dienste müssen wir nun einzeln freischalten:
#

# Mailempfang SMTP weltweit
$IPT -A INPUT  -p TCP -d $ip_nr --sport 1024: --dport 25 \
         -m state --state NEW -j ACCEPT

# Alternativ-Beispiel: Mailempfang nur von den IPs 91.198.250.0/24
# zulassen -- beispielsweise einem externen Spamfilterservice:
#$IPT -A INPUT  -p TCP -d $ip_nr --sport 1024: --dport 25 \
#         -s 91.198.250.0/24 -m state --state NEW -j ACCEPT


# Mailversand weltweit
$IPT -A OUTPUT -p TCP -s $ip_nr --sport 1024: --dport 25 \
         -m state --state NEW -j ACCEPT

# POP3, POP3s, IMAP, IMAPs aus dem LAN erlauben
$IPT -A INPUT  -p TCP -d $ip_nr -s 192.168.0.0/24 \
         --sport 1024: -m multiport --dport 110,143,993,995  \
         -m state --state NEW -j ACCEPT


# Die Server dürfen NTP-Server abfragen:
$IPT -A OUTPUT -p UDP -s $ip_nr --sport ntp \
        --dport ntp -m state --state NEW -j ACCEPT


# Anfragen an den DNS-Server unseres LANs (TCP und UDP) erlauben
# (angenommen, unser Mailserver nutzt ausgehend einen Port >1024)
$IPT -A OUTPUT -p TCP -s $ip_nr -d 192.168.0.50/32 \
         --sport 1024: --dport 53 \
         -m state --state NEW -j ACCEPT

$IPT -A OUTPUT -p UDP -s $ip_nr -d 192.168.0.50/32 \
         --sport 1024: --dport 53 \
         -m state --state NEW -j ACCEPT


## Alternativ, wenn wir DNS-Server sind:
## ein/ausgehende DNS-Anfragen weltweit erlauben
## (im Zweifel Sourceports 53 und >1024).
#$IPT -A INPUT  -p TCP --sport 53 --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A INPUT  -p UDP --sport 53 --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A INPUT  -p TCP --sport 1024: --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A INPUT  -p UDP --sport 1024: --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A OUTPUT  -p TCP --sport 53 --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A OUTPUT  -p UDP --sport 53 --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A OUTPUT  -p TCP --sport 1024: --dport 53 \
#         -m state --state NEW -j ACCEPT
#$IPT -A OUTPUT  -p UDP --sport 1024: --dport 53 \
#         -m state --state NEW -j ACCEPT


# Sofern SSH tatsächlich eingesetzt wird, schalten wir es
# noch für einige IP-Nummern/Netze frei:
# Unser LAN:
$IPT -A INPUT  -p TCP -d $ip_nr -s 192.168.0.0/24 \
         --sport 1024: --dport 22 \
         -m state --state NEW -j ACCEPT


# Als Beispiel noch eine andere externe IP-Nummer:
# $IPT -A INPUT  -p TCP -d $ip_nr -s 62.8.206.64/32 \
#          --sport 1024: --dport 22 \
#          -m state --state NEW -j ACCEPT
#
# Ggf. müssen Sie statt 1024: auch 1000:1023, bzw. für 
# Windows-Clients auch 500:1023 einsetzen!


