### VARIABLEN ###
Ext = "tun0" # Device an dem das Internet angeschlossen ist
Int = "ne3" # Device an dem das interne Netz haengt
IntNet = "192.168.0.0/24" # Adressraum des internen Netzes
RouterIP = "192.168.0.1" # IP Adresse des Routers
Loop = "lo0" # Loopback Device
# Adressen die auf dem externen Device nicht geroutet werden
# (Adressbereich des internen Netzes muss man wegen der Weiterleitungen zulassen)
table <NoRoute> { 127.0.0.1/8, 172.16.0.0/12, 192.168.0.0/16, !$IntNet, 10.0.0.0/8, 255.255.255.255/32 }
# Ports die geoeffnet werden sollen
InServicesTCP = "{ ssh, ftp, auth }"
### OPTIONS ###
# Macht Statistiken fuer die DSL-Verbindung (pfctl -s info)
set loginterface $Ext
# Beendet inaktive Verbindungen schneller - geringerer Speicherverbrauch.
set optimization aggressive
# Fragmentierte Pakete saeubern
scrub on $Ext all fragment reassemble random-id
# Queueing
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# !! Achtung: Der unten stehende Wert von 100Kb (Kilobit) macht natuerlich
# !! nur fuer den Standard DSL Anschluss mit 128kb upstream Sinn. Hat man
# !! eine Verbindung mit groesserer Bandbreite beim upload, dann muss
# !! dieser Wert entsprechend angepasst werden.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
altq on $Ext priq bandwidth 100Kb queue { q_pri, q_def }
queue q_pri priority 7
queue q_def priority 1 priq(default)
### NAT & FORWARD ###
# NAT aktivieren (unter Linux als Masquerading bekannt)
nat on $Ext from $IntNet to any -> $Ext static-port
# Active FTP - Umleitung zu unserem ftp-proxy
rdr on $Int proto tcp from !$RouterIP to !$IntNet port 21 -> 127.0.0.1 port 8021
rdr-anchor redirect
### FILTER ###
# Zum Debuggen....
# pass quick all # Alles durchlassen
# Generelle Block Regel
block on $Ext
# Freiwillig machen wir keinen mucks ;)
block return log on $Ext
# Wir wollen kein IPv6.0
block quick inet6
# Loopback Device darf alles
pass quick on $Loop
# Erschwert scannen mit nmap und co.
block in log quick on $Ext inet proto tcp from any to any flags FUP/FUP
block in log quick on $Ext inet proto tcp from any to any flags SF/SFRA
block in log quick on $Ext inet proto tcp from any to any flags /SFRA
block in log quick on $Ext os NMAP
# IP Spoofing verhindern
block in log quick on $Ext inet from <NoRoute> to any
block in log quick on $Ext inet from any to <NoRoute>
# Active FTP erlauben
pass in quick on $Ext inet proto tcp from any to any port > 49151 user proxy flags S/SAFR keep state
# Ping akzeptieren (ablehnen ist uebrigends wenig sinnvoll)
pass in quick on $Ext inet proto icmp all icmp-type 8 code 0 keep state
# Ports nach aussen oeffnen
pass in quick on $Ext inet proto tcp from any to any port $InServicesTCP flags S/SAFR keep state label ServicesTCP
# Edonkey Ports:
# TCP: 3756 UDP: 3760
# Overnet Ports:
# TCP: 3898 UDP: 3902
mldonkeyTCPports="{ 3756, 6881, 6882, 4594 }"
mldonkeyUDPports="{ 3760, 4672, 4598 }"
pass in quick on $Ext inet proto tcp from any to any port $mldonkeyTCPports flags S/SAFR keep state label mldonkeyTCP
pass in quick on $Ext inet proto udp from any to any port $mldonkeyUDPports keep state label mldonkeyUDP
# anchor passin
# Raus darf (fast) alles
pass out quick on $Ext keep state queue (q_def,q_pri)