next up previous contents
Nächste Seite: Protokollbeschreibungen Aufwärts: Crashkurs Firewallaufbau unter Linux Vorherige Seite: Wichtige Portnummern   Inhalt

Unterabschnitte


Die Beispiel-Scripts

Das erste Firewallscript

  # Konstantendefinition
  EXTERNAL_INTERFACE=eth0        # Das fremde Netz
  LOOPBACK_INTERFACE=lo          # Local Loopback
  IPADDR=192.168.100.1           # Eigene Adresse
  ANYWHERE=any/0                 # Jede IP-Adresse
  MY_ISP=123.45.67.89/16         # Der Bereich meines Providers
  LOOPBACK=127.0.0.0/8           # Loopback-Adressbereich
  CLASS_A=10.0.0.0/8             # Reservierter Bereich Klasse A
  CLASS_B=172.16.0.0/12          # Reservierter Bereich Klasse B
  CLASS_C=192.168.0.0/16         # Reservierter Bereich Klasse C
  CLASS_D=224.0.0.0/4            # Komplette Klasse D
  CLASS_E=240.0.0.0/5            # Komplette Klasse E
  BROADCAST_SRC=0.0.0.0          # Broadcast Absender
  BROADCAST_DEST=255.255.255.255 # Broadcast Empfänger
  PRIVPORTS=0:1023               # Privilegierte Portnummern
  UNPRIVPORTS=1024:65535         # Unprivilegierte Portnummern

  # Alle bestehenden Regeln löschen
  ipchains -F

  # Voreingestellte Policies setzen
  ipchains -P input    DENY
  ipchains -P output   REJECT
  ipchains -P forward  REJECT 

  # Loopback ohne Einschränkungen
  ipchains -A input  -i $LOOPBACK_INTERFACE -j ACCEPT
  ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT

  # SYN_COOKIES aktivieren
  echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  # SOURCE ADDRESS VERIFICATION aktivieren
  for i in /proc/sys/net/ipv4/conf/*/rp_filter
  do
    echo 1 > $i    
  done

  # Pakete ablehnen, die vorgeben von der eigenen Adresse zu stammen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
 
  # Reservierte A-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY

  # Reservierte B-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY

  # Reservierte C-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY

  # Pakete mit Loopback als Absender verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY

  # Pakete mit illegalen Broadcast Adressen verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY
  
  # Pakete mit Klasse-D Adresse als Absender verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_D -j 

  # Klasse-E Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E -j DENY

  # Von der IANA reservierte Adressen verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY
  # 65 entspricht 01000001 - also würde die Maske /3 leider die 64
  # mit ansprechen. Wir müssen daher 65-79 einzeln angeben
  ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY
  # 80-95 lässt sich mit der Maske /4 ansprechen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY
  # 96-111 lässt sich mit der Maske /4 ansprechen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY
  # 126 entspricht 01111110 - die Maske /3 würde 127 beinhalten
  # daher müssen wir 112 - 126 einzeln angeben
  ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY
  # 217-219 einzeln
  ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY
  # 220-223 -> /6
  ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY

  # ICMP Typ 4 erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 4 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 4 -d $ANYWHERE -j ACCEPT

  # ICMP Typ 12 erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 12 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 12 -d $ANYWHERE -j ACCEPT

  # ICMP-Typ 3 für Providerrechner erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 3 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 3 -d $MY_ISP -j ACCEPT

  # ICMP-Typ 3 Subtyp fragmentation-needed für alle freigeben
  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR fragmentation-needed -d $ANYWHERE -j ACCEPT

  # ICMP-Typ 11 erlauben (ausgehend nur an unseren Provider)
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 11 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 11 -d $MY_ISP -j ACCEPT

  # Ausgehendes Ping erlauben
  ipchain -A output -i $EXTERNAL_INTERFACE -p icmp\
          -s $IPADDR 8 -d $ANYWHERE -j ACCEPT

  ipchain -A input -i $EXTERNAL_INTERFACE -p icmp\
          -s $ANYWHERE 0 -d $IPADDR -j ACCEPT

  # Ankommendes Ping nur für Provider erlauben
  ipchain -A input -i $EXTERNAL_INTERFACE -p icmp\
          -s $MYISP 8 -d $IPADDR -j ACCEPT

  ipchain -A output -i $EXTERNAL_INTERFACE -p icmp\
          -s $IPADDR 0 -d $MYISP -j ACCEPT

  # Open Window Verbindungsaufbau sperren
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -s $IPADDR -d $ANYWHERE 2000 -j REJECT

  # X11 Aufbau zu einem fremden Server verbieten
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -s $IPADDR -d $ANYWHERE 6000:6063 -j REJECT

  # X11 Aufbau von außen zu einem unserer Server verbieten
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $IPADDR 6000:6063 -j DENY -l

  # NFS (2049) über UDP sperren
  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -d $IPADDR 2049 -j DENY -l

  # NFS (2049) über TCP sperren
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $IPADDR 2049 -j DENY -l

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $ANYWHERE 2049 -j DENY -l

  # DNS IP Adresse:
  NAMESERVER=xx.xx.xx.xx

  # UDP-Nameserverzugriff
  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR $UNPRIVPORTS \
           -d $NAMESERVER 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $NAMESERVER 53 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT


  # TCP-Nameserverzugriff
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp\
           -s $IPADDR $UNPRIVPORTS \
           -d $NAMESERVER 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $NAMESERVER 53 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT

  #DNS Forwarding (Server zu Server)
  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR 53 \
           -d $NAMESERVER 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $NAMESERVER 53 \
           -d $IPADDR 53 -j ACCEPT

  # DNS Zugriff fremder Clients
  MYDNSCLIENTS=ww.xx.yy.zz/mm
  
  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $MYDNSCLIENTS $UNPRIVPORTS\
           -d $IPADDR 53 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR 53\
           -d $MYDNSCLIENTS $UNPRIVPORTS -j ACCEPT

  # DNS Forwarding für fremde Clients
  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR 53 \
           -d $MYDNSCLIENTS 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $MYDNSCLIENTS 53 \
           -d $IPADDR 53 -j ACCEPT

  # DNS Zone-Transfer fremder Clients
  MYDNSZONECLIENTS=ww.xx.yy.zz/mm
  
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp\
           -s $MYDNSZONECLIENTS $UNPRIVPORTS\
           -d $IPADDR 53 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $IPADDR 53\
           -d $MYDNSZONECLIENTS $UNPRIVPORTS -j ACCEPT

  # abgehende auth-Anfragen
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp\
           -s $IPADDR $UNPRIVPORTS\
           -d $ANYWHERE 113 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $ANYWHERE 113 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT

  # ankommende auth-Anfragen
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp\
           -s $ANYWHERE $UNPRIVPORTS\
           -d $IPADDR 113 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $IPADDR 113 \
           -d $ANYWHERE $UNPRIVPORTS -j ACCEPT

  # oder statt der letzten zwei Befehle 
  # ankommende auth-Anfragen ablehnen
  # ipchains -A input -i $EXTERNAL_INTERFACE -p tcp\
  #          -s $ANYWHERE\
  #          -d $IPADDR 113 -j REJECT

Das Bastion Firewallscript

  # Konstantendefinition
  EXTERNAL_INTERFACE=eth0        # Das Interface ins Internet
  IPADDR=123.45.67.89            # Adresse des Internetzugangs
  MY_ISP=123.45.67.90/16         # Der Bereich meines Providers

  BASTION_DMZ_INTERFACE=eth1     # internes Interface
  BASTION_DMZ_IPADDR=192.168.1.1 # Adresse dazu

  LOOPBACK_INTERFACE=lo          # Local Loopback
  LOOPBACK=127.0.0.0/8           # Loopback-Adressbereich

  CHOKE_DMZ_IPADDR=192.168.1.2   # ext. Interface der Choke
  DMZ_ADDRESSES=192.168.1.0/24   # IP-Bereich der DMZ
  DMZ_BROADCAST=192.168.1.255    # Broadcastadresse DMZ
  ANYWHERE=any/0                 # Jede IP-Adresse

  CLASS_A=10.0.0.0/8             # Reservierter Bereich Klasse A
  CLASS_B=172.16.0.0/12          # Reservierter Bereich Klasse B
  CLASS_C=192.168.0.0/16         # Reservierter Bereich Klasse C
  CLASS_D=224.0.0.0/4            # Komplette Klasse D
  CLASS_E=240.0.0.0/5            # Komplette Klasse E
  BROADCAST_SRC=0.0.0.0          # Broadcast Absender
  BROADCAST_DEST=255.255.255.255 # Broadcast Empfänger
  PRIVPORTS=0:1023               # Privilegierte Portnummern
  UNPRIVPORTS=1024:65535         # Unprivilegierte Portnummern

  # Alle bestehenden Regeln löschen
  ipchains -F

  # Voreingestellte Policies setzen
  ipchains -P input    DENY
  ipchains -P output   REJECT
  ipchains -P forward  REJECT

  # Loopback ohne Einschränkungen
  ipchains -A input  -i $LOOPBACK_INTERFACE -j ACCEPT
  ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT

  # SYN_COOKIES aktivieren
  echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  # SOURCE ADDRESS VERIFICATION aktivieren
  for i in /proc/sys/net/ipv4/conf/*/rp_filter
  do
    echo 1 > $i    
  done
 
  # Pakete ablehnen, die vorgeben von der eigenen Adresse zu stammen
  ipchains -A input -i $EXTERNAL_INTERFACE \
           -s $IPADDR -j DENY -l
  ipchains -A input -i $BASTION_DMZ_INTERFACE \
           -s $BASTION_DMZ_IPADDR -j DENY -l

 
  # Reservierte A-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY

  # Reservierte B-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY

  # Reservierte C-Klasse Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY

  # Pakete mit Loopback als Absender verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY

  # Pakete mit illegalen Broadcast Adressen verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY
  
  # Pakete mit Klasse-D Adresse als Absender verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D -j DENY
  ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_D -j 

  # Klasse-E Adressen ablehnen
  ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E -j DENY

  # Von der IANA reservierte Adressen verwerfen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY
  # 65 entspricht 01000001 - also würde die Maske /3 leider die 64
  # mit ansprechen. Wir müssen daher 65-79 einzeln angeben
  ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY  
  ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY
  # 80-95 lässt sich mit der Maske /4 ansprechen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY
  # 96-111 lässt sich mit der Maske /4 ansprechen
  ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY
  # 126 entspricht 01111110 - die Maske /3 würde 127 beinhalten
  # daher müssen wir 112 - 126 einzeln angeben
  ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY
  # 217-219 einzeln
  ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY
  ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY
  # 220-223 -> /6
  ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY

  # ICMP Regeln nach außen
  # ICMP Typ 4 erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 4 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 4 -d $ANYWHERE -j ACCEPT

  # ICMP Typ 12 erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 12 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 12 -d $ANYWHERE -j ACCEPT

  # ICMP-Typ 3 für Providerrechner erlauben
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 3 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 3 -d $MY_ISP -j ACCEPT

  # ICMP-Typ 3 Subtyp fragmentation-needed für alle freigeben
  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR fragmentation-needed -d $ANYWHERE -j ACCEPT

  # ICMP-Typ 11 erlauben (ausgehend nur an unseren Provider)
  ipchains -A input -i $EXTERNAL_INTERFACE -p icmp\
           -s $ANYWHERE 11 -d $IPADDR -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p icmp\
           -s $IPADDR 11 -d $MY_ISP -j ACCEPT

  # Ausgehendes Ping erlauben
  ipchain -A output -i $EXTERNAL_INTERFACE -p icmp\
          -s $IPADDR 8 -d $ANYWHERE -j ACCEPT

  ipchain -A input -i $EXTERNAL_INTERFACE -p icmp\
          -s $ANYWHERE 0 -d $IPADDR -j ACCEPT

  # Ankommendes Ping nur für Provider erlauben
  ipchain -A input -i $EXTERNAL_INTERFACE -p icmp\
          -s $MYISP 8 -d $IPADDR -j ACCEPT

  ipchain -A output -i $EXTERNAL_INTERFACE -p icmp\
          -s $IPADDR 0 -d $MYISP -j ACCEPT

  # source-quench zur DMZ
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $BASTION_DMZ_IPADDR 4 -d $DMZ_ADDRESSES -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 4 -d $BASTION_DMZ_IPADDR -j ACCEPT

  # parameter-problem zur DMZ
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 12 -d $DMZ_ADDRESSES -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 12 -d $ANYWHERE -j ACCEPT

  # destination-unreachable zur DMZ
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 3 -d $DMZ_ADDRESSES -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 3 -d $ANYWHERE -j ACCEPT

  # time-exceeded zur DMZ
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $BASTION_DMZ_IPADDR 11 -d $DMZ_ADDRESSES -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 11 -d $BASTION_DMZ_IPADDR -j ACCEPT

  # Ausgehendes Ping aus der DMZ
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 8 -d $ANYWHERE -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 0 -d $DMZ_ADDRESSES -j ACCEPT

  # Ankommendes Ping in die DMZ
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $BASTION_DMZ_IPADDR 8 -d $DMZ_ADDRESSES -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 0 -d $BASTION_DMZ_IPADDR -j ACCEPT

  # Open Window Verbindungsaufbau sperren
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -s $IPADDR -d $ANYWHERE 2000 -j REJECT

  # X11 Aufbau zu einem fremden Server verbieten
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -s $IPADDR -d $ANYWHERE 6000:6063 -j REJECT

  # X11 Aufbau von außen zu einem unserer Server verbieten
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $IPADDR 6000:6063 -j DENY -l

  # NFS (2049) über UDP sperren
  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -d $IPADDR 2049 -j DENY -l

  # NFS (2049) über TCP sperren
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $IPADDR 2049 -j DENY -l

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -y\
           -d $ANYWHERE 2049 -j DENY -l


  # Der DNS-Server der Bastion akzeptiert Anfragen der Choke (UDP 53)
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p udp\
           -s $CHOKE_DMZ_IPADDR 53\
           -d $BASTION_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p udp\
           -s $BASTION_DMZ_IPADDR 53\
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  
  # DNS Anfragen der Bastion an den Server der Choke (UDP/TCP 53)
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p udp\
           -s $BASTION_DMZ_IPADDR $UNPRIVPORTS \
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p udp\
           -s $CHOKE_DMZ_IPADDR 53 \
           -d $BASTION_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p tcp\
           -s $BASTION_DMZ_IPADDR $UNPRIVPORTS \
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p tcp ! -y\
           -s $CHOKE_DMZ_IPADDR 53 \
           -d $BASTION_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT


  # DNS IP Adresse (Nameserver im Internet):
  NAMESERVER=xx.xx.xx.xx

  #DNS Forwarding (Server zu Server)
  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR 53 \
           -d $NAMESERVER 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $NAMESERVER 53 \
           -d $IPADDR 53 -j ACCEPT


  # UDP-Nameserverzugriff
  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR $UNPRIVPORTS \
           -d $ANYWHERE 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $ANYWHERE 53 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT


  # TCP-Nameserverzugriff
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp\
           -s $IPADDR $UNPRIVPORTS \
           -d $ANYWHERE 53 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $ANYWHERE 53 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT


  # DNS Zugriff fremder Clients
  
  ipchains -A input -i $EXTERNAL_INTERFACE -p udp\
           -s $ANYWHERE $UNPRIVPORTS\
           -d $IPADDR 53 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p udp\
           -s $IPADDR 53\
           -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp\
           -s $ANYWHERE $UNPRIVPORTS\
           -d $IPADDR 53 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $IPADDR 53\
           -d $ANYWHERE $UNPRIVPORTS -j ACCEPT

  # abgehende auth-Anfragen ins Internet
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp\
           -s $IPADDR $UNPRIVPORTS\
           -d $ANYWHERE 113 -j ACCEPT

  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $ANYWHERE 113 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT

  # ankommende auth-Anfragen aus dem Internet
  ipchains -A input -i $EXTERNAL_INTERFACE -p tcp\
           -s $ANYWHERE $UNPRIVPORTS\
           -d $IPADDR 113 -j ACCEPT

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $IPADDR 113 \
           -d $ANYWHERE $UNPRIVPORTS -j ACCEPT

  # Bastion als auth-Client nach innen
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p tcp \
           -s $BASTION_DMZ_IPADDR $UNPRIVPORTS \
           -d $DMZ_ADDRESSES 113 -j ACCEPT
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p tcp ! -y\
           -s $DMZ_ADDRESSES 113 \
           -d $BASTION_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT

  # Bastion als Server nach innen
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p tcp \
           -s $DMZ_ADDRESSES $UNPRIVPORTS \
           -d $BASTION_DMZ_IPADDR 113 -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p tcp ! -y\
           -s $BASTION_DMZ_IPADDR 113 \
           -d $DMZ_ADDRESSES $UNPRIVPORTS -j ACCEPT

  # Mail über SMTP 

  # Zuerst der Name des Gateways
  # statt einem Provider kann hier auch "any/0" stehen, um die Bastion
  # selbst zum Mailserver zu ernennen.
  SMTP_GATEWAY=smtp.server.provider.beispiel

  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp\
           -s $IPADDR $UNPRIVPORTS \
           -d $SMTP_GATEWAY 25 -j ACCEPT
  ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y\
           -s $SMTP_GATEWAY 25 \
           -d $IPADDR $UNPRIVPORTS -j ACCEPT

  # Bastion nimmt SMTP Anfragen aus der DMZ entgegen
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p tcp \
           -s $DMZ_ADDRESSES $UNPRIVPORTS \
           -d $BASTION_DMZ_IPADDR 25 -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p tcp ! -y \
           -s $BASTION_DMZ_IPADDR 25 \
           -d $DMZ_ADDRESSES $UNPRIVPORTS -j ACCEPT

  # POP-Server der Bastion nimmt Pakete aus der DMZ entgegen
  ipchains -A input -i $BASTION_DMZ_INTERFACE -p tcp \
           -s $CHOKE_DMZ_IPADDR $UNPRIVPORTS \
           -d $BASTION_DMZ_IPADDR 110 -j ACCEPT
  ipchains -A output -i $BASTION_DMZ_INTERFACE -p tcp ! -y \
           -s $BASTION_DMZ_IPADDR 110 \
           -d $CHOKE_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT

  # Bastion maskiert alle Pakete der Choke
  ipchains -A forward -i $EXTERNAL_INTERFACE \
           -s $CHOKE_DMZ_IPADDRESS -j MASQ

Das Choke Firewallscript

  #Konstantendefinition
  CHOKE_DMZ_INTERFACE=eth0       # externes Interface der Choke
  CHOKE_DMZ_IPADDR=192.168.1.2   # externe Adresse der Choke
  CHOKE_LAN_INTERFACE=eth1       # internes Interface der Choke
  CHOKE_LAN_IPADDR=192.168.5.1   # interne Adresse der Choke
  LOOPBACK_INTERFACE=lo          # Local Loopback
  LOOPBACK=127.0.0.0/8           # Loopback-Adressbereich

  BASTION_DMZ_IPADDR=192.168.1.1 # interne Adresse der Bastion
  DMZ_ADDRESSES=192.168.1.0/24   # IP-Bereich der DMZ
  LAN_ADDRESSES=192.168.5.0/24   # IP-Bereich des LAN
  DMZ_BROADCAST=192.168.1.255    # Broadcastadresse DMZ
  ANYWHERE=any/0                 # Jede IP-Adresse
  
  CLASS_A=10.0.0.0/8             # Reservierter Bereich Klasse A
  CLASS_B=172.16.0.0/12          # Reservierter Bereich Klasse B
  CLASS_C=192.168.0.0/16         # Reservierter Bereich Klasse C
  CLASS_D=224.0.0.0/4            # Komplette Klasse D
  CLASS_E=240.0.0.0/5            # Komplette Klasse E
  BROADCAST_SRC=0.0.0.0          # Broadcast Absender
  BROADCAST_DEST=255.255.255.255 # Broadcast Empfänger
  PRIVPORTS=0:1023               # Privilegierte Portnummern
  UNPRIVPORTS=1024:65535         # Unprivilegierte Portnummern

  # Alle bestehenden Regeln löschen
  ipchains -F

  # Voreingestellte Policies setzen
  ipchains -P input    REJECT
  ipchains -P output   REJECT
  ipchains -P forward  REJECT

  # Loopback ohne Einschränkungen
  ipchains -A input  -i $LOOPBACK_INTERFACE -j ACCEPT
  ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT

  # SYN_COOKIES aktivieren
  echo 1 > /proc/sys/net/ipv4/tcp_syncookies

  # SOURCE ADDRESS VERIFICATION aktivieren
  for i in /proc/sys/net/ipv4/conf/*/rp_filter
  do
    echo 1 > $i    
  done

  # Pakete ablehnen, die vorgeben von der eigenen Adresse zu stammen
  ipchains -A input -i $CHOKE_LAN_INTERFACE\
           -s $CHOKE_LAN_IPADDR -j REJECT -l
  ipchains -A input -i CHOKE_DMZ_INTERFACE \
           -s $CHOKE_DMZ_IPADDR -j REJECT -l

  # Pakete mit privaten A-Klasse Adressen als Sender oder 
  # Empfänger verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -s $CLASS_A -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE -s $CLASS_A -j REJECT -l
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -d $CLASS_A -j REJECT -l
  ipchains -A output -i $CHOKE_LAN_INTERFACE -d $CLASS_A -j REJECT -l         

  # Pakete mit privaten B-Klasse Adressen als Sender oder 
  # Empfänger verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -s $CLASS_B -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE -s $CLASS_B -j REJECT -l
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -d $CLASS_B -j REJECT -l
  ipchains -A output -i $CHOKE_LAN_INTERFACE -d $CLASS_B -j REJECT -l

  # Pakete mit D-Klasse Adressen als Sender verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -s $CLASS_D -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE -s $CLASS_D -j REJECT -l
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -s $CLASS_D -j REJECT -l
  ipchains -A output -i $CHOKE_LAN_INTERFACE -s $CLASS_D -j REJECT -l

  # Pakete mit E-Klasse Adressen verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -s $CLASS_E -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE -s $CLASS_E -j REJECT -l

  # Pakete mit Loopback Adressen als Sender verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -s $LOOPBACK -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE -s $LOOPBACK -j REJECT -l

  # Pakete mit fehlerhaften Broadcast Adressen verwerfen
  ipchains -A input -i $CHOKE_DMZ_INTERFACE \
           -s $BROADCAST_DEST -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE \
           -s $BROADCAST_DEST -j REJECT -l
  ipchains -A input -i $CHOKE_DMZ_INTERFACE \
           -d $BROADCAST_SRC -j REJECT -l
  ipchains -A input -i $CHOKE_LAN_INTERFACE \
           -d $BROADCAST_SRC -j REJECT -l

  # source-quench zur DMZ
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 4 -d $CHOKE_DMZ_IPADDR -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 4 -d $DMZ_ADDRESSES -j ACCEPT

  # parameter-problem zur DMZ
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 12 -d $CHOKE_DMZ_IPADDR -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 12 -d $ANYWHERE -j ACCEPT

  # destination-unreachable zur DMZ
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 3 -d $CHOKE_DMZ_IPADDR -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 3 -d $ANYWHERE -j ACCEPT

  # time-exceeded zur DMZ
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $BASTION_DMZ_IPADDR 11 -d $CHOKE_DMZ_IPADDR -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 11 -d $BASTION_DMZ_IPADDR -j ACCEPT

  # Ausgehendes Ping ins Internet
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 8 -d $ANYWHERE -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $ANYWHERE 0 -d $CHOKE_DMZ_IPADDR -j ACCEPT

  # Ankommende Pings aus der DMZ
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $DMZ_ADDRESSES 8 -d $CHOKE_DMZ_IPADDR -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p icmp\
           -s $CHOKE_DMZ_IPADDR 0 -d $DMZ_ADDRESSES -j ACCEPT

  # Der DNS-Server der Choke gibt Anfragen an die Bastion (UDP 53)
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p udp\
           -s $CHOKE_DMZ_IPADDR 53\
           -d $BASTION_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p udp\
           -s $BASTION_DMZ_IPADDR 53\
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  
  # Der Nameserver der Choke lässt Anfragen aller Clients aus der 
  # DMZ zu (TCP/UDP 53)
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p udp \
           -s $DMZ_ADDRESSES $UNPRIVPORTS \
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p udp \
           -s CHOKE_DMZ_IPADDR 53 \
           -d $DMZ_ADDRESSES $UNPRIVPORTS -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp \
           -s $DMZ_ADDRESSES $UNPRIVPORTS \
           -d $CHOKE_DMZ_IPADDR 53 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp ! -y \
           -s CHOKE_DMZ_IPADDR 53 \
           -d $DMZ_ADDRESSES $UNPRIVPORTS -j ACCEPT

  # Choke als auth Server
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp \
           -s $DMZ_ADDRESSES $UNPRIVPORTS \
           -d $CHOKE_DMZ_IPADDR 113 -j ACCEPT
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p tcp ! -y\
           -s $CHOKE_DMZ_IPADDR 113 \
           -d $DMZ_ADDRESSES $UNPRIVPORTS -j ACCEPT

  # Choke als auth-Client
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p tcp\
           -s $CHOKE_DMZ_IPADDR $UNPRIVPORTS \
           -d $ANYWHERE 113 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp ! -y \
           -s $ANYWHERE 113 \
           -d $CHOKE_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT

  # Choke erlaubt SMTP-Pakete an die Bastion
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p tcp\
           -s CHOKE_DMZ_IPADDR $UNPRIVPORTS \
           -d $BASTION_DMZ_IPADDR 25 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp ! -y\
           -s $BASTION_DMZ_IPADDR 25 \
           -d CHOKE_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT

  # POP3 Pakete an die Bastion werden weitergegeben:
  ipchains -A output -i $CHOKE_DMZ_INTERFACE -p tcp \
           -s $CHOKE_DMZ_IPADDR $UNPRIVPORTS \
           -d $BASTION_DMZ_IPADDR 110 -j ACCEPT
  ipchains -A input -i $CHOKE_DMZ_INTERFACE -p tcp ! -y \
           -s $BASTION_DMZ_IPADDR 110 \
           -d $CHOKE_DMZ_IPADDR $UNPRIVPORTS -j ACCEPT 

  # Vollständige Öffnung der Kommunikation zwischen LAN und Choke
  ipchains -A input -i $CHOKE_LAN_INTERFACE \
           -s $LAN_ADDRESSES -j ACCEPT
  ipchains -A output  -i $CHOKE_LAN_INTERFACE \
           -d $LAN_ADDRESSES -j ACCEPT

  # Choke maskiert alle Pakete des LAN
  ipchains -A forward -i $CHOKE_DMZ_INTERFACE \
           -s $LAN_ADDRESSES -j MASQ



root 2001-08-07