Hallo Leute!
Nachdem ich mich mit unserem Router beschäftigen musste,
weil er veraltet und mir nicht mehr update fähig schien,
ein Buch über Firewalls, hier im Form fündig geworden bin,
habe ich mir ein Skript gebastelt.
Jetzt bin ich mir aber alles andere als sicher, dass ich alles richtig gemacht habe.
Wärt ihr so freundlich und würdet mal drüber schauen.
Ich hoffe es ist soweit kommentiert das ich es nicht weiter erklären
muss.
Den schlechten Zeilenumbruch bitte ich zu entschuldigen ...
danke im Voraus
Grüße Beppo
#!/bin/sh
# ------------------------------------------------------------------------
# Grundeinstellungen
# ------------------------------------------------------------------------
if test -x /sbin/iptables
then
R=/sbin/iptables
if test -x /usr/sbin/iptables
then
echo -en "${C_RED}${0}: ERROR: Es gibt 2 Programme iptables. "
echo -e "Breche ab! ${C_RESET}"
exit 1
fi
else
if test -x /usr/sbin/iptables
then
R=/usr/sbin/iptables
else
echo -en "${C_RED}${0}: ERROR: iptables nicht gefunden. "
echo -e "Breche ab! ${C_RESET}"
exit 1
fi
fi
# Ein paar grundsätzliche Daten
# - Externes Interface
EXTIP="192.168.2.2"
EXTIF="ppp0"
# - Internes Interface
INTIP="192.168.22.13"
INTIF="eth1"
INTBITS=24
INTNET="$INTIP"/"$INTBITS"
# - DNS Server
DNSSERVER=`cat /etc/resolv.conf | grep '^nameserver' | sed 's/nameserver//'`
# - Hohe Ports, die aus dem Internet nicht zugreifbar sein sollen
# - - TCP
TCPPROTECTED='3128 8000 8080'
# - - UDP
UDPPROTECTED=''
# ---------------------------------------------------------------------------
# Falls das Skript mit falschen Parametern aufgerufen wurde
# ---------------------------------------------------------------------------
case "$1" in
start)
echo "Starte die Firewall ..."
;;
stop)
echo "Beende die Vermittlung von Paketen ..."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
# ---------------------------------------------------------------------------
# Regeln, die immer gelten
# ---------------------------------------------------------------------------
# Alle Regeln löschen
$R -F INPUT
$R -F FORWARD
$R -F OUTPUT
# Alle Pakete, die nicht explizit erlaubt sind, sind verboten
$R -P INPUT DROP
$R -P FORWARD DROP
$R -P OUTPUT DROP
# Protokollierung gespoofter Pakete
$R -A INPUT -i ! "$INTIF" -s "$INTNET" -j LOG --log-level warning \
--log-prefix "$INTIF gespooft: "
$R -A INPUT -i ! "$INTIF" -s "$INTNET" -j DROP
$R -A INPUT -i ! lo -s 127.0.0.1 -j LOG --log-level warning \
--log-prefix "loopback gespooft: "
$R -A INPUT -i ! lo -s 127.0.0.1 -j DROP
$R -A FORWARD -i ! "$INTIF" -s "$INTNET" -j LOG --log-level warning \
--log-prefix "$INTIF gespooft: "
$R -A FORWARD -i ! "$INTIF" -s "$INTNET" -j DROP
$R -A FORWARD -i ! lo -s 127.0.0.1 -j LOG --log-level warning \
--log-prefix "loopback gespooft: "
$R -A FORWARD -i ! lo -s 127.0.0.1 -j DROP
# Ident
#$R -A INPUT -i "$EXTIF" -p tcp --dport 113 -j LOG --log-level info \
#--log-prefix "ident probe: "
$R -A INPUT -i "$EXTIF" -p tcp --dport 113 -j REJECT
# Unaufgeforderte Verbindungsaufbauten (NEW) und ungültige Pakete
# (INVALID) des externen Interfaces.
# - eine eigene Chain f"ur diese Tests
$R -N states
$R -F states
# - dorthin verzweigen
$R -A INPUT -i "$EXTIF" -j states
$R -A FORWARD -i "$EXTIF" -j states
# - die Regeln
$R -A states -m state --state NEW,INVALID -j LOG \
--log-prefix "Unerwuenschte Verbindung:"
$R -A states -m state --state NEW,INVALID -j DROP
# - Ruecksprung, falls noch nicht verworfen
# $R -A states -j RETURN
# lokale Pakete sind erlaubt
$R -A INPUT -i lo -j ACCEPT
$R -A OUTPUT -o lo -j ACCEPT
# NetBIOS über TCP/IP
$R -A INPUT -p UDP -s "$INTNET" --sport 137:139 -j DROP
$R -A INPUT -p UDP -s "$INTNET" --dport 137:139 -j DROP
$R -A INPUT -p TCP -s "$INTNET" --sport 137:139 -j DROP
$R -A INPUT -p TCP -s "$INTNET" --dport 137:139 -j DROP
$R -A FORWARD -p UDP -s "$INTNET" --sport 137:139 -j DROP
$R -A FORWARD -p UDP -s "$INTNET" --dport 137:139 -j DROP
$R -A FORWARD -p TCP -s "$INTNET" --sport 137:139 -j DROP
$R -A FORWARD -p TCP -s "$INTNET" --dport 137:139 -j DROP
case $1 in
# ---------------------------------------------------------------------------
# Die Firewall soll heruntergefahren werden
# ---------------------------------------------------------------------------
stop)
# Löschen der eigenen Chains
$R -F ext-in
$R -X ext-in
$R -F ext-fw
$R -X ext-fw
$R -F ext-out
$R -X ext-out
$R -F int-in
$R -X int-in
$R -F int-fw
$R -X int-fw
$R -F int-out
$R -X int-out
# Protokollierung ungewöhnlicher Pakete
$R -A INPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "INPUT (default): "
$R -A INPUT -s 0.0.0.0/0 -j DROP
$R -A OUTPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "OUTPUT (default): "
$R -A OUTPUT -s 0.0.0.0/0 -j DROP
$R -A FORWARD -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "FORWARD (default): "
$R -A FORWARD -s 0.0.0.0/0 -j DROP
;;
# ---------------------------------------------------------------------------
# Die Firewall soll ihre Arbeit aufnehmen
# ---------------------------------------------------------------------------
start)
# ICMP
$R -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 12 -j ACCEPT
$R -A OUTPUT -p icmp -j ACCEPT
$R -I states -p icmp --icmp-type 8 -j RETURN
# Eigene Chains
# - Externes Interface
$R -N ext-in
$R -N ext-fw
$R -N ext-out
# - Internes Interface
$R -N int-in
$R -N int-fw
$R -N int-out
# - Verteilung der Pakete auf die Chains
$R -A INPUT -i "$INTIF" -s "$INTNET" -j int-in
$R -A INPUT -i "$EXTIF" -j ext-in
$R -A FORWARD -i "$INTIF" -o "$EXTIF" -s "$INTNET" -j int-fw
$R -A FORWARD -i "$EXTIF" -o "$INTIF" -j ext-fw
$R -A OUTPUT -o "$INTIF" -j int-out
$R -A OUTPUT -o "$EXTIF" -j ext-out
# Zugriffe auf Server der Firewall
# - TCP
for port in $TCPPROTECTED
do
$R -A ext-in -p tcp --dport $port -j LOG \
--log-prefix "Zugriff auf Port $port TCP"
$R -A ext-in -p tcp --dport $port -j DROP
done
# - UDP
for port in $UDPPROTECTED
do
$R -A ext-in -p udp --dport $port -j LOG \
--log-prefix "Zugriff auf Port $port UDP"
$R -A ext-in -p udp --dport $port -j DROP
done
# DNS
# - Server auf der Firewall
$R -A int-in -p udp -d "$INTIP" --dport 53 -j ACCEPT
$R -A int-out -p udp -s "$INTIP" --sport 53 -j ACCEPT
$R -A int-in -p tcp -d "$INTIP" --dport 53 -j ACCEPT
$R -A int-out -p tcp -s "$INTIP" --sport 53 ! --syn -j ACCEPT
# HTTP-Proxie Squid
# - Zugriff auf den Squid
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 3128 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 3128 \ ! --syn -j ACCEPT
# VPN IPsec
# - Zugriff auf den Server
# IKE negotiations
$R -I ext-in -p udp --sport 500 --dport 500 -j ACCEPT
$R -I int-out -p udp --sport 500 --dport 500 -j ACCEPT
# ESP encryption and authentication
$R -I ext-in -p 50 -j ACCEPT
$R -I int-out -p 50 -j ACCEPT
# HTTPS
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 443 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 443 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 443 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 443 -j ACCEPT
# SMTP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 25 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 25 -j ACCEPT
# POP3
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 110 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 110 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 110 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 110 -j ACCEPT
# POP3S
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 995 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 995 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 995 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 995 -j ACCEPT
# IMAP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 143 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 143 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 143 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 143 -j ACCEPT
# IMAPS
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 993 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 993 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 993 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 993 -j ACCEPT
# NNTP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 119 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 119 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 119 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 119 -j ACCEPT
# FTP
# - Zugriff auf den Server --------------------------------
# - - Kontrollverbindung
$R -A ext-in -p tcp --dport 1024:65535 --sport 21 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
# - - aktives FTP
$R -A ext-in -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 20 ! --syn \
-j ACCEPT
# - - passives FTP
$R -A ext-in -p tcp --dport 1024:65535 --sport 1024:65535 \
! --syn -j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 1024:65535 \
-j ACCEPT
# - Forwarding durch die Firewall -------------------------
# - - Kontrollverbindung
$R -A int-fw -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 21 ! --syn \
-j ACCEPT
# - - aktives FTP
$R -A int-fw -p tcp --sport 1024:65535 --dport 20 ! --syn \
-j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
# - - passives FTP
$R -A int-fw -p tcp --sport 1024:65535 --dport 1024:65535 \
-j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 1024:65535 \
! --syn -j ACCEPT
# - Proxy auf der Firewall --------------------------------
# - - Kontrollverbindung
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 21 \
#-j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 21 \
#! --syn -j ACCEPT
# - - aktives FTP
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 20 \
#! --syn -j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 20 \
#-j ACCEPT
# - - passives FTP
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 1024:65535 \
#-j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 1024:65535 \
#! --syn -j ACCEPT
# Webmin Port 9999
# - Zugriff auf den Webmin httpd
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 9999 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 9999 \ ! --syn -j ACCEPT
# - Zugriff auf den ssh demon
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 22 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 22 \ ! --syn -j ACCEPT
# Protokollierung ungewöhnlicher Pakete
$R -A INPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "INPUT (default): "
$R -A OUTPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "OUTPUT (default): "
$R -A FORWARD -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "FORWARD (default): "
$R -A int-in -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-in (default): "
$R -A int-out -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-out (default): "
$R -A int-fw -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-fw (default): "
$R -A ext-in -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-in (default): "
$R -A ext-fw -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-fw (default): "
$R -A ext-out -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-out (default): "
$R -A INPUT -s 0.0.0.0/0 -j DROP
$R -A OUTPUT -s 0.0.0.0/0 -j DROP
$R -A FORWARD -s 0.0.0.0/0 -j DROP
$R -A int-in -s 0.0.0.0/0 -j DROP
$R -A int-out -s 0.0.0.0/0 -j DROP
$R -A int-fw -s 0.0.0.0/0 -j DROP
$R -A ext-in -s 0.0.0.0/0 -j DROP
$R -A ext-fw -s 0.0.0.0/0 -j DROP
$R -A ext-out -s 0.0.0.0/0 -j DROP
# Network Address Translation
# - Masquerading
$R -t nat -A POSTROUTING -o "$EXTIF" -j MASQUERADE
# - Umleitung von Webserverzugriffen (TCP 80) auf den lokalen squid
$R -t nat -A PREROUTING -i "$INTIF" -p tcp --dport 80 -j REDIRECT \
--to-port 3128
;;
esac
Nachdem ich mich mit unserem Router beschäftigen musste,
weil er veraltet und mir nicht mehr update fähig schien,
ein Buch über Firewalls, hier im Form fündig geworden bin,
habe ich mir ein Skript gebastelt.
Jetzt bin ich mir aber alles andere als sicher, dass ich alles richtig gemacht habe.
Wärt ihr so freundlich und würdet mal drüber schauen.
Ich hoffe es ist soweit kommentiert das ich es nicht weiter erklären
muss.
Den schlechten Zeilenumbruch bitte ich zu entschuldigen ...
danke im Voraus
Grüße Beppo
#!/bin/sh
# ------------------------------------------------------------------------
# Grundeinstellungen
# ------------------------------------------------------------------------
if test -x /sbin/iptables
then
R=/sbin/iptables
if test -x /usr/sbin/iptables
then
echo -en "${C_RED}${0}: ERROR: Es gibt 2 Programme iptables. "
echo -e "Breche ab! ${C_RESET}"
exit 1
fi
else
if test -x /usr/sbin/iptables
then
R=/usr/sbin/iptables
else
echo -en "${C_RED}${0}: ERROR: iptables nicht gefunden. "
echo -e "Breche ab! ${C_RESET}"
exit 1
fi
fi
# Ein paar grundsätzliche Daten
# - Externes Interface
EXTIP="192.168.2.2"
EXTIF="ppp0"
# - Internes Interface
INTIP="192.168.22.13"
INTIF="eth1"
INTBITS=24
INTNET="$INTIP"/"$INTBITS"
# - DNS Server
DNSSERVER=`cat /etc/resolv.conf | grep '^nameserver' | sed 's/nameserver//'`
# - Hohe Ports, die aus dem Internet nicht zugreifbar sein sollen
# - - TCP
TCPPROTECTED='3128 8000 8080'
# - - UDP
UDPPROTECTED=''
# ---------------------------------------------------------------------------
# Falls das Skript mit falschen Parametern aufgerufen wurde
# ---------------------------------------------------------------------------
case "$1" in
start)
echo "Starte die Firewall ..."
;;
stop)
echo "Beende die Vermittlung von Paketen ..."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
# ---------------------------------------------------------------------------
# Regeln, die immer gelten
# ---------------------------------------------------------------------------
# Alle Regeln löschen
$R -F INPUT
$R -F FORWARD
$R -F OUTPUT
# Alle Pakete, die nicht explizit erlaubt sind, sind verboten
$R -P INPUT DROP
$R -P FORWARD DROP
$R -P OUTPUT DROP
# Protokollierung gespoofter Pakete
$R -A INPUT -i ! "$INTIF" -s "$INTNET" -j LOG --log-level warning \
--log-prefix "$INTIF gespooft: "
$R -A INPUT -i ! "$INTIF" -s "$INTNET" -j DROP
$R -A INPUT -i ! lo -s 127.0.0.1 -j LOG --log-level warning \
--log-prefix "loopback gespooft: "
$R -A INPUT -i ! lo -s 127.0.0.1 -j DROP
$R -A FORWARD -i ! "$INTIF" -s "$INTNET" -j LOG --log-level warning \
--log-prefix "$INTIF gespooft: "
$R -A FORWARD -i ! "$INTIF" -s "$INTNET" -j DROP
$R -A FORWARD -i ! lo -s 127.0.0.1 -j LOG --log-level warning \
--log-prefix "loopback gespooft: "
$R -A FORWARD -i ! lo -s 127.0.0.1 -j DROP
# Ident
#$R -A INPUT -i "$EXTIF" -p tcp --dport 113 -j LOG --log-level info \
#--log-prefix "ident probe: "
$R -A INPUT -i "$EXTIF" -p tcp --dport 113 -j REJECT
# Unaufgeforderte Verbindungsaufbauten (NEW) und ungültige Pakete
# (INVALID) des externen Interfaces.
# - eine eigene Chain f"ur diese Tests
$R -N states
$R -F states
# - dorthin verzweigen
$R -A INPUT -i "$EXTIF" -j states
$R -A FORWARD -i "$EXTIF" -j states
# - die Regeln
$R -A states -m state --state NEW,INVALID -j LOG \
--log-prefix "Unerwuenschte Verbindung:"
$R -A states -m state --state NEW,INVALID -j DROP
# - Ruecksprung, falls noch nicht verworfen
# $R -A states -j RETURN
# lokale Pakete sind erlaubt
$R -A INPUT -i lo -j ACCEPT
$R -A OUTPUT -o lo -j ACCEPT
# NetBIOS über TCP/IP
$R -A INPUT -p UDP -s "$INTNET" --sport 137:139 -j DROP
$R -A INPUT -p UDP -s "$INTNET" --dport 137:139 -j DROP
$R -A INPUT -p TCP -s "$INTNET" --sport 137:139 -j DROP
$R -A INPUT -p TCP -s "$INTNET" --dport 137:139 -j DROP
$R -A FORWARD -p UDP -s "$INTNET" --sport 137:139 -j DROP
$R -A FORWARD -p UDP -s "$INTNET" --dport 137:139 -j DROP
$R -A FORWARD -p TCP -s "$INTNET" --sport 137:139 -j DROP
$R -A FORWARD -p TCP -s "$INTNET" --dport 137:139 -j DROP
case $1 in
# ---------------------------------------------------------------------------
# Die Firewall soll heruntergefahren werden
# ---------------------------------------------------------------------------
stop)
# Löschen der eigenen Chains
$R -F ext-in
$R -X ext-in
$R -F ext-fw
$R -X ext-fw
$R -F ext-out
$R -X ext-out
$R -F int-in
$R -X int-in
$R -F int-fw
$R -X int-fw
$R -F int-out
$R -X int-out
# Protokollierung ungewöhnlicher Pakete
$R -A INPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "INPUT (default): "
$R -A INPUT -s 0.0.0.0/0 -j DROP
$R -A OUTPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "OUTPUT (default): "
$R -A OUTPUT -s 0.0.0.0/0 -j DROP
$R -A FORWARD -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "FORWARD (default): "
$R -A FORWARD -s 0.0.0.0/0 -j DROP
;;
# ---------------------------------------------------------------------------
# Die Firewall soll ihre Arbeit aufnehmen
# ---------------------------------------------------------------------------
start)
# ICMP
$R -A INPUT -p icmp --icmp-type 0 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 3 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 8 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 11 -j ACCEPT
$R -A INPUT -p icmp --icmp-type 12 -j ACCEPT
$R -A OUTPUT -p icmp -j ACCEPT
$R -I states -p icmp --icmp-type 8 -j RETURN
# Eigene Chains
# - Externes Interface
$R -N ext-in
$R -N ext-fw
$R -N ext-out
# - Internes Interface
$R -N int-in
$R -N int-fw
$R -N int-out
# - Verteilung der Pakete auf die Chains
$R -A INPUT -i "$INTIF" -s "$INTNET" -j int-in
$R -A INPUT -i "$EXTIF" -j ext-in
$R -A FORWARD -i "$INTIF" -o "$EXTIF" -s "$INTNET" -j int-fw
$R -A FORWARD -i "$EXTIF" -o "$INTIF" -j ext-fw
$R -A OUTPUT -o "$INTIF" -j int-out
$R -A OUTPUT -o "$EXTIF" -j ext-out
# Zugriffe auf Server der Firewall
# - TCP
for port in $TCPPROTECTED
do
$R -A ext-in -p tcp --dport $port -j LOG \
--log-prefix "Zugriff auf Port $port TCP"
$R -A ext-in -p tcp --dport $port -j DROP
done
# - UDP
for port in $UDPPROTECTED
do
$R -A ext-in -p udp --dport $port -j LOG \
--log-prefix "Zugriff auf Port $port UDP"
$R -A ext-in -p udp --dport $port -j DROP
done
# DNS
# - Server auf der Firewall
$R -A int-in -p udp -d "$INTIP" --dport 53 -j ACCEPT
$R -A int-out -p udp -s "$INTIP" --sport 53 -j ACCEPT
$R -A int-in -p tcp -d "$INTIP" --dport 53 -j ACCEPT
$R -A int-out -p tcp -s "$INTIP" --sport 53 ! --syn -j ACCEPT
# HTTP-Proxie Squid
# - Zugriff auf den Squid
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 3128 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 3128 \ ! --syn -j ACCEPT
# VPN IPsec
# - Zugriff auf den Server
# IKE negotiations
$R -I ext-in -p udp --sport 500 --dport 500 -j ACCEPT
$R -I int-out -p udp --sport 500 --dport 500 -j ACCEPT
# ESP encryption and authentication
$R -I ext-in -p 50 -j ACCEPT
$R -I int-out -p 50 -j ACCEPT
# HTTPS
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 443 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 443 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 443 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 443 -j ACCEPT
# SMTP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 25 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 25 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 25 -j ACCEPT
# POP3
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 110 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 110 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 110 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 110 -j ACCEPT
# POP3S
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 995 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 995 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 995 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 995 -j ACCEPT
# IMAP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 143 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 143 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 143 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 143 -j ACCEPT
# IMAPS
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 993 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 993 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 993 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 993 -j ACCEPT
# NNTP
# - Zugriff auf den Server
$R -A ext-in -p tcp --dport 1024:65535 --sport 119 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 119 -j ACCEPT
# - Forwarding durch die Firewall
$R -A int-fw -p tcp --sport 1024:65535 --dport 119 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 119 -j ACCEPT
# FTP
# - Zugriff auf den Server --------------------------------
# - - Kontrollverbindung
$R -A ext-in -p tcp --dport 1024:65535 --sport 21 ! --syn \
-j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
# - - aktives FTP
$R -A ext-in -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 20 ! --syn \
-j ACCEPT
# - - passives FTP
$R -A ext-in -p tcp --dport 1024:65535 --sport 1024:65535 \
! --syn -j ACCEPT
$R -A ext-out -p tcp --sport 1024:65535 --dport 1024:65535 \
-j ACCEPT
# - Forwarding durch die Firewall -------------------------
# - - Kontrollverbindung
$R -A int-fw -p tcp --sport 1024:65535 --dport 21 -j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 21 ! --syn \
-j ACCEPT
# - - aktives FTP
$R -A int-fw -p tcp --sport 1024:65535 --dport 20 ! --syn \
-j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 20 -j ACCEPT
# - - passives FTP
$R -A int-fw -p tcp --sport 1024:65535 --dport 1024:65535 \
-j ACCEPT
$R -A ext-fw -p tcp --dport 1024:65535 --sport 1024:65535 \
! --syn -j ACCEPT
# - Proxy auf der Firewall --------------------------------
# - - Kontrollverbindung
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 21 \
#-j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 21 \
#! --syn -j ACCEPT
# - - aktives FTP
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 20 \
#! --syn -j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 20 \
#-j ACCEPT
# - - passives FTP
# $R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 1024:65535 \
#-j ACCEPT
# $R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 1024:65535 \
#! --syn -j ACCEPT
# Webmin Port 9999
# - Zugriff auf den Webmin httpd
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 9999 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 9999 \ ! --syn -j ACCEPT
# - Zugriff auf den ssh demon
$R -A int-in -p tcp --sport 1024:65535 -d "$INTIP" --dport 22 \ -j ACCEPT
$R -A int-out -p tcp --dport 1024:65535 -s "$INTIP" --sport 22 \ ! --syn -j ACCEPT
# Protokollierung ungewöhnlicher Pakete
$R -A INPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "INPUT (default): "
$R -A OUTPUT -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "OUTPUT (default): "
$R -A FORWARD -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "FORWARD (default): "
$R -A int-in -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-in (default): "
$R -A int-out -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-out (default): "
$R -A int-fw -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "int-fw (default): "
$R -A ext-in -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-in (default): "
$R -A ext-fw -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-fw (default): "
$R -A ext-out -s 0.0.0.0/0 -j LOG --log-level notice \
--log-prefix "ext-out (default): "
$R -A INPUT -s 0.0.0.0/0 -j DROP
$R -A OUTPUT -s 0.0.0.0/0 -j DROP
$R -A FORWARD -s 0.0.0.0/0 -j DROP
$R -A int-in -s 0.0.0.0/0 -j DROP
$R -A int-out -s 0.0.0.0/0 -j DROP
$R -A int-fw -s 0.0.0.0/0 -j DROP
$R -A ext-in -s 0.0.0.0/0 -j DROP
$R -A ext-fw -s 0.0.0.0/0 -j DROP
$R -A ext-out -s 0.0.0.0/0 -j DROP
# Network Address Translation
# - Masquerading
$R -t nat -A POSTROUTING -o "$EXTIF" -j MASQUERADE
# - Umleitung von Webserverzugriffen (TCP 80) auf den lokalen squid
$R -t nat -A PREROUTING -i "$INTIF" -p tcp --dport 80 -j REDIRECT \
--to-port 3128
;;
esac