====== Allgemein ======
Ein Computer ohne Internet- oder gar Netzwerkanschluss ist in der heutigen Zeit kaum noch denkbar. Doch die Vernertzung mehrerer Computer bringt neben den vielen Vorteilen auch Gefahren mit sich.
Eine Firewall bietet einige Hilfmittel um sich einigen dieser Probleme zu stellen. Folgend wird eine Firewall mittels IPFW eingerichtet, welches sich bereits im Basissystem von FreeBSD findet. Neben IPFW gibt es noch andere Firewalllösungen die für FreeBSD zur Verfügung stehen.
**Warnung:** Mit einer Firewall kann man nicht nur Fremde, sondern auch sich selbst aus einem Rechner aussperren. Das ist spätestens bei einem Remoteserver mehr als ärgerlich. Diese Seite stellt nur eine Gedankenstütze da. Jeder handelt auf eigene Verantwortung!
====== Aktivieren der Firewall ======
Um die IPFW beim Systemstart zu laden wird die ///etc/rc.conf// wie folgt erweitert.
firewall_enable="YES"
firewall_script="/etc/ipfw.rules"
firewall_logging="YES"
Anschließend muss das in der ///etc/rc.conf// angegebene IPFW-Script erstellt werden.
====== Firewallscript erstellen ======
Das Firewallscript setzt die Regeln nach welchen IPFW mit Paketen umgehen soll. Die Datei ///etc/ipfw.rules// wird erstellt. (Der Dateiname muss dem der Variable **firewall_script** in der ///etc/rc.conf// entsprechen).
Die hier verwendeten Scripte halten sich an die Vorlage aus dem FreeBSD-Handbook und sind lediglich an die entsprechenden Bedürfnisse angepasst.
===== Ein Firewallscript eines Notebooks =====
Das folgende Script ist für ein Notebook welches per WLan (**wlan0**) mit dem Netzwek verbunden ist. Das Notebook stellt selbst keine Diesten zur Verfügung.
#!/bin/sh
################ Start of IPFW rules file ###############################
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
pif="wlan0" # public interface name of NIC
# facing the public Internet
#################################################################
# No restrictions on Inside LAN Interface for private network
# Not needed unless you have LAN.
# Change xl0 to your LAN NIC interface name
#################################################################
#$cmd 00005 allow all from any to any via xl0
#################################################################
# No restrictions on Loopback Interface
#################################################################
$cmd 00010 allow all from any to any via lo0
#################################################################
# Allow the packet through if it has previous been added to the
# the "dynamic" rules table by a allow keep-state statement.
#################################################################
$cmd 00015 check-state
#################################################################
# Interface facing Public Internet (Outbound Section)
# Interrogate session start requests originating from behind the
# firewall on the private network or from this gateway server
# destined for the public Internet.
#################################################################
# Allow out access to my ISP's Domain name server.
# x.x.x.x must be the IP address of your ISP.s DNS
# Dup these lines if your ISP has more than one DNS server
# Get the IP addresses from /etc/resolv.conf file
$cmd 00110 allow tcp from any to 192.168.2.1 53 out via $pif setup keep-state
$cmd 00111 allow udp from any to 192.168.2.1 53 out via $pif keep-state
# Allow out access to my ISP's DHCP server for cable/DSL configurations.
# This rule is not needed for .user ppp. connection to the public Internet.
# so you can delete this whole group.
# Use the following rule and check log for IP address.
# Then put IP address in commented out rule & delete first rule
#$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
$cmd 00120 allow udp from any to 192.168.2.1 67 out via $pif keep-state
# Allow out non-secure standard www function
$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
# Allow out secure www function https over TLS SSL
$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
# Allow out send & get email function
#$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
#$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
# Allow out FBSD (make install & CVSUP) functions
# Basically give user root "GOD" privileges.
$cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root
# Allow out ping
$cmd 00250 allow icmp from any to any out via $pif keep-state
# Allow out Time
$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
# Allow out secure FTP, Telnet, and SCP
# This function is using SSH (secure shell)
$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
# Allow out whois
$cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state
# deny and log everything else that.s trying to get out.
# This rule enforces the block all by default logic.
$cmd 00299 deny log all from any to any out via $pif
#################################################################
# Interface facing Public Internet (Inbound Section)
# Check packets originating from the public Internet
# destined for this gateway server or the private network.
#################################################################
# Deny all inbound traffic from non-routable reserved address spaces
$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
# Deny public pings
$cmd 00310 deny icmp from any to any in via $pif
# Deny ident
$cmd 00315 deny tcp from any to any 113 in via $pif
# Deny all Netbios service. 137=name, 138=datagram, 139=session
# Netbios is MS/Windows sharing services.
# Block MS/Windows hosts2 name server requests 81
$cmd 00320 deny tcp from any to any 137 in via $pif
$cmd 00321 deny tcp from any to any 138 in via $pif
$cmd 00322 deny tcp from any to any 139 in via $pif
$cmd 00323 deny tcp from any to any 81 in via $pif
# Deny any late arriving packets
$cmd 00330 deny all from any to any frag in via $pif
# Deny ACK packets that did not match the dynamic rule table
$cmd 00332 deny tcp from any to any established in via $pif
# Allow in secure FTP, Telnet, and SCP from public Internet
#$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
# Reject & Log all incoming connections from the outside
$cmd 00499 deny log all from any to any in via $pif
# Everything else is denied by default
# deny and log all packets that fell through to see what they are
$cmd 00999 deny log all from any to any
################ End of IPFW rules file ###############################
====== Script ausführbar machen ======
Anschließend wird das Script noch ausführbar gemacht um es auch zwischendurch ohne Neustart des Systems ausführen zu können.
# chmod 744 /etc/ipfw.rules
====== Logging eindämmen ======
Damit eine Flut von Abgelehnten Paketen nicht die Logs überflutet sollte die ///etc/sysctl.conf// um die folgenden Zeilen ergänzt werden.
#Firewallgespraechigkeit bremsen
net.inet.ip.fw.verbose_limit=5
====== Neustart ======
Nach einem Neustart des Systems ist die neue Firewall geladen und aktiv. Die aktiven Regeln können wie folgt angezeigt werden.
# ipfw list