#!/bin/sh
# 1. Beispiel fuer Paketfiler-Firewall-Regeln
#
######## Variablen werden definiert ###########################################
netdev="fxp0"          # Netzwerk-Device auf der Internet-Seite (nach draussen)
###############################################################################
#
######## Alle Rgeln werden geloescht (RESET) ##################################
ipfw -f flush
###############################################################################
#
######## Nicht-Routingfaehige IP's werden verboten (Faelschung) ###############
ipfw add 1 deny  all from 127.0.0.0/8 to any in via "${netdev}"
ipfw add 2 deny  all from 192.168.0.0/16 to any in via "${netdev}"
ipfw add 3 deny  all from 172.16.0.0/12 to any in via "${netdev}"
ipfw add 4 deny  all from 10.0.0.0/8 to any in via "${netdev}"
###############################################################################
#
######## Loopback erlauben #################################################### 
ipfw add 5 allow all from any to any via lo0
ipfw add 6 deny all from any to 127.0.0.0/8
###############################################################################
#
######## "state-full-Paketfilter-Regeln" werden ermoeglicht ###################
ipfw add 7 check-state
###############################################################################
#
######## ermoeglicht die Einwahl per SSH von ueberall #########################
ipfw add 10 allow tcp from any to any 22 keep-state
###############################################################################
#
######## unterdrueckt jeden Ping von draussen. ################################
ipfw add 20 deny icmp from any to any icmptypes 8 in via "${netdev}"
###############################################################################
#
######## unterdruecken bestimmten ICMP-Typen. #################################
ipfw add 40 deny icmp from any to any icmptypes 3   out via "${netdev}"
ipfw add 41 deny log icmp from any to any icmptypes 5 
ipfw add 42 deny icmp from any to any icmptypes 15 
ipfw add 43 deny log icmp from any to any icmptypes 30 
###############################################################################
#
######## restlichen icmp-Verkehr wird erlaubt #################################
ipfw add 100 allow log icmp from any to any
###############################################################################
#
######## NAMESERVER-Anfragen - erlauben #######################################
######## Alle Rechner im Netz muessen die selben DNS eingetragen haben! #######
ipfw add 1100 allow tcp from any to any 53 keep-state 
ipfw add 1150 allow udp from any to any 53 keep-state 
ipfw add 1200 allow tcp from any to any 53 keep-state 
ipfw add 1250 allow udp from any to any 53 keep-state 
###############################################################################
#
###############################################################################
# Alle Ports, die zum serven wichtig sein koennten. #
# Port   20 (tcp)     FTP   # FTP - Datenkanal
# Port   21 (tcp)     FTP   # FTP - Verbindungsaufbau
# Port   22 (tcp)     SSH   # SSH ist oben general frei gemacht # 
# Port   25 (tcp)     SMTP  # Server fuer raus gehende Mails
# Port   53 (tcp/udp) DNS   # Domain-Name-Services 
# Port   67     (udp) DHCPS # Server
# Port   68     (udp) DHCPC # Client
# Port   80 (tcp)     HTTP  # unverschluesselte Verbindung ins Web
# Port  110 (tcp)     POP   # Server fuer rein kommende Mails
# Port  123     (udp) NTP   # NTP-Server siehe Regeln 11 und 12 # 
# Port  443 (tcp)     HTTPS # verschluesselte Verbindung ins Web
# Port 8080 (tcp/udp) Proxy # 
###############################################################################
#
######## DHCP - Zugriffe werden hier erlaubt ################################## 
ipfw add 1302 allow log udp from any to any 67,68 keep-state
###############################################################################
#
######## aktualisieren der Uhrzeit mittels Network-Time-Protocol ##############
ipfw add 1303 allow udp from any to any 123 keep-state via "${netdev}"
###############################################################################
#
######## fuer HTTPS erforderlich ##############################################
ipfw add 1304 allow tcp from any to any 443 keep-state via "${netdev}"
###############################################################################
#
#
#
#
#
# Von den folgenden beiden Regelbloecken sollte, je nach dem Anwendungsgebiet,
# nur der obere oder untere Regelblock aktiv sein!
#
######## Der Zugriff in das Internet wird erlaubt #############################
######## Ist fuer einen Desktop-Rechner gedacht. ##############################
ipfw add 3000 allow  tcp from any to any 21,25,80,110 keep-state out via "${netdev}"
ipfw add 3500 allow  tcp from any to any 25 keep-state in via "${netdev}"
###############################################################################
#
######## Der Zugriff aus dem Internet wird erlaubt ############################
######## Ist fuer einen Web-Server gedacht. ###################################
#ipfw add 5000 allow tcp from any to any 21,25,80,110 keep-state in via "${netdev}"
#ipfw add 5500 allow tcp from any to any 25 keep-state out via "${netdev}"
###############################################################################
#
#
#
#
#
######## Der Rest wird verboten ###############################################
ipfw add 40000 deny  all from any to any 
###############################################################################