asg
push it, don´t hype
IPFW und NATD (FORWARD bei IPFW2)
Hallo.
Da das Thema "Sicherheit" kaum ohne das geflügelte Wort "Firewall" daherkommt und immer mehr User eine solche haben wollen, aber nicht wissen wie dies anzustellen ist, hier mal eine Vorgehensweise für IPFW und NATD.
1. KERNEL
Die hier angegebenen options bitte in den Kernel übernehmen und diesen neu bauen.
1.1 PPPoE (bei Benutzung von DSL)
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPPOE
1.2 IPFW und NATD
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT
NETGRAPH kann, wenn es gebraucht wird (bei DSL), auch als Modul geladen werden. Dazu muss in der /boot/loader.conf folgender Eintrag gemacht werden:
ng_pppoe_load="YES"
ACHTUNG!
Entweder oder heisst es hier. Entweder als Modul laden oder in den Kernel eincompilieren. Wenn man beides macht kann keine Verbindung mit DSL aufgebaut werden. Mehr zu "DSL" steht in anderen anderen howto.
2. VOR dem reboot nach Kernel-Bau
ACHTUNG!
Wenn Du obiges in den Kernel eingebaut wird, dann wird auch eine Regel aktiviert, ohne das man eigene IPFW Rulesets angelegt hat. Diese Regel lautet:
65534 add deny ip from any to any
Sollte man den Rechner einfach rebooten, so wird diese Regel aktiviert.
Das geringste Übel dabei wäre, dass man nicht mehr nach aussen kommt (Intranet/ Internet), da viel schlimmere aber ist, das auch niemand mehr auf den Rechner zugreifen kann, da JEDER Zugriff durch diese Regel untersagt wird.
Schön blöd wenn man die Box nicht physikalisch bei sich stehen hat.
Daher, um sich nicht selbst ins Knie zu schiessen, setze auch folgendes ind die /etc/rc.conf ein:
firewall_type="OPEN"
Sind erstmal eigene Rules geschrieben worden, MUSS dieser Eintrag wieder gelöscht werden, da die Regeln sonst nicht greifen, die Firewall bliebe offen.
3. Einträge in die /etc/rc.conf
3.1 IPFW
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
firewall_logging="YES"
Die zweite Zeile kann entsprechend angepasst werden, hier wird der Pfad und die Datei angegeben in der die Firewall Rules liegen.
3.2 NATD
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic -f /etc/firewall/natd.conf"
In der letzten Zeile wird die Datei angegeben die die NAT Rules beinhaltet.
3.3 Gateway
Dient der Rechner als Gateway, so muss noch
gateway_enable="YES"
in die /etc/rc.conf aufgenommen werden.
So ist es den Clients möglich über diesen Rechner in das Internet zu gelangen.
Ich lege die firewall rules Datei und die für NAT immer in ein Verzeichnis, das macht das configurieren einfacher.
4. IPFW Rules schreiben
Ich gehe davon aus das die Datei für die IPFW Rules /etc/firewall/fwrules ist. Diese Datei sollte auch nur von root lesbar, schreibbar und ausführbar sein.
WICHTIG! Die hier angegebenen interfaces sind meine. Ihr müsst diese also entsprechend ändern, da ich diese statisch eingetragen habe. Irgendwann werde ich diese auch dynamisch einbinden.
xl0 ist mein internes Interface welches zum HUB geht und welches das Gateway vom internen Netz zum Internet darstellt.
#!/bin/sh
# Damit NATD auch funktioniert
ipfw add 10 divert natd all from any to any via tun0
# Blockiert den port 6000 (X)
ipfw add deny log tcp from any to any 6000 in recv tun0
ipfw add allow ip from any to any via lo0
ipfw add allow ip from any to any via xl0
# Erlaubt alle Verbindungen welche von hier initiiert wurden
ipfw add allow tcp from any to any out xmit tun0 setup
# Wenn die Verbindung einmal hergestellt wurde, erlaube dieser offen zu stehen
ipfw add allow tcp from any to any via tun0 established
ipfw add allow log tcp from any to any 80 setup
ipfw add allow log tcp from any to any 22 setup
ipfw add allow log tcp from any to any 25 setup
ipfw add allow log tcp from any to any 21 setup
ipfw add allow log tcp from any to any 1022 setup
# This sends a RESET to all ident packets.
ipfw add reset log tcp from any to any 113 in recv tun0
# Erlaubt ausgehende DNS queries NUR auf die beiden angegebenen Server
ipfw add allow udp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow udp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow udp from any to 217.5.99.105 53 out xmit tun0
ipfw add allow tcp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow tcp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow tcp from any to 217.5.99.105 53 out xmit tun0
# Erlaubt die Antwort der DNS Nachfragen
ipfw add allow udp from 195.20.224.234 53 to any in recv tun0
ipfw add allow udp from 194.25.2.129 53 to any in recv tun0
ipfw add allow udp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 194.25.2.129 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
# Loggt ICMP Anfragen (echo und dest. unreachable) == script kiddies
ipfw add allow log icmp from any to any in recv tun0 icmptype 3
ipfw add allow log icmp from any to any in recv tun0 icmptype 8
# ICMP erlauben
ipfw add allow icmp from any to any
# Blockiert alle Anfragen auf ports unter 1000
ipfw add deny log tcp from any to any 0-1000 in recv tun0 setup
# 2049 == NFS
ipfw add deny log tcp from any to any 2049 in recv tun0 setup
# Loggt netbux connections
ipfw add deny log tcp from any to any 12345 in recv tun0
ipfw add deny log tcp from any to any 20034 in recv tun0
# Alles andere verbieten
ipfw add deny ip from any to any
Geloggt werden alle Rules in denen das Wort "log" vorkommt (wohin diese geloggt werden, dazu gleich mehr...).
Falls Ihr mal alle rules geflushed habt, oder eine neue hinzugefügt, so könnt Ihr einfach mit:
./fwrules
diese rules neu einlesen.
5. Loggen von IPFW
Es wurde in der /etc/rc.conf angegeben das IPFW geloggt werden soll. Ebenso wurde in den Rules angegeben welche von diesen geloggt werden sollen, nur wohin?
Ganz einfach.
Dazu bitte folgendes in die /etc/syslog.conf übernehmen:
# IPFW
!ipfw
*.* /var/log/firewall.log
Hier wird gesagt, das alles in die Datei "firewall.log" geloggt werden soll.
6. NATD Rules
NATD ist wirklich sehr einfach zu bedienen. In /etc/rc.conf wurde schon gesagt wo die natd.conf zu finden ist, in diese trägt man Rules wie die folgenden ein:
redirect_port tcp 192.168.0.203:80 80
redirect_port udp 192.168.0.203:80 80
redirect_port tcp 192.168.0.202:22 22
redirect_port udp 192.168.0.202:22 22
redirect_port tcp 192.168.0.203:21 21
redirect_port udp 192.168.0.203:21 21
Hier werden Anfragen an den Port 80 (HTTP) auf die interne IP 192.168.0.203 (eine jail bei mir) weitergeleitet.
Bei den anderen Einträgen verhält es sich dementsprechend.
NEU:
Wenn IPFW2 genutzt wird, kann man das forwarding direkt in den Rules machen. Damit wird NATD obsolet.
Folgendes ist dabei zu beachten:
a) Kernel neu bauen
Um IPFW2 zu nutzen sollte der Kernel mit folgender Option neu gebaut werden:
options IPFW2
b) /etc/make.conf ändern
Damit bei einem make world Lauf auch IPFW2 gebaut wird muss folgendes in die angegeben Datei eingetragen werden:
IPFW2=TRUE
c) IPFW FORWARD Rules schreiben
Diese können direkt zu den anderen Rules geschrieben werden.
Beispiel:
add 1200 fwd 127.0.0.1,26 tcp from any to mail-server 25 out
Mehr erfährt man unter "man ipfw"
Links
Hier einige links die einem das Erstellen von IPFW Rules erleichtern können:
http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html
Da diese howto "aus der Hüfte heraus" entstanden ist, könnte dies evtl. die einen oder anderen Fehler beinhalten. Was ich selbstverständlich nicht hoffe.
Für Anregungen was man noch aufnehmen könnte, was Verbesserungswürdig erscheint, bin ich offen.
Ansonsten, viel Spass.
Hallo.
Da das Thema "Sicherheit" kaum ohne das geflügelte Wort "Firewall" daherkommt und immer mehr User eine solche haben wollen, aber nicht wissen wie dies anzustellen ist, hier mal eine Vorgehensweise für IPFW und NATD.
1. KERNEL
Die hier angegebenen options bitte in den Kernel übernehmen und diesen neu bauen.
1.1 PPPoE (bei Benutzung von DSL)
options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_PPPOE
1.2 IPFW und NATD
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPDIVERT
NETGRAPH kann, wenn es gebraucht wird (bei DSL), auch als Modul geladen werden. Dazu muss in der /boot/loader.conf folgender Eintrag gemacht werden:
ng_pppoe_load="YES"
ACHTUNG!
Entweder oder heisst es hier. Entweder als Modul laden oder in den Kernel eincompilieren. Wenn man beides macht kann keine Verbindung mit DSL aufgebaut werden. Mehr zu "DSL" steht in anderen anderen howto.
2. VOR dem reboot nach Kernel-Bau
ACHTUNG!
Wenn Du obiges in den Kernel eingebaut wird, dann wird auch eine Regel aktiviert, ohne das man eigene IPFW Rulesets angelegt hat. Diese Regel lautet:
65534 add deny ip from any to any
Sollte man den Rechner einfach rebooten, so wird diese Regel aktiviert.
Das geringste Übel dabei wäre, dass man nicht mehr nach aussen kommt (Intranet/ Internet), da viel schlimmere aber ist, das auch niemand mehr auf den Rechner zugreifen kann, da JEDER Zugriff durch diese Regel untersagt wird.
Schön blöd wenn man die Box nicht physikalisch bei sich stehen hat.
Daher, um sich nicht selbst ins Knie zu schiessen, setze auch folgendes ind die /etc/rc.conf ein:
firewall_type="OPEN"
Sind erstmal eigene Rules geschrieben worden, MUSS dieser Eintrag wieder gelöscht werden, da die Regeln sonst nicht greifen, die Firewall bliebe offen.
3. Einträge in die /etc/rc.conf
3.1 IPFW
firewall_enable="YES"
firewall_script="/etc/firewall/fwrules"
firewall_logging="YES"
Die zweite Zeile kann entsprechend angepasst werden, hier wird der Pfad und die Datei angegeben in der die Firewall Rules liegen.
3.2 NATD
natd_program="/sbin/natd"
natd_enable="YES"
natd_interface="tun0"
natd_flags="-dynamic -f /etc/firewall/natd.conf"
In der letzten Zeile wird die Datei angegeben die die NAT Rules beinhaltet.
3.3 Gateway
Dient der Rechner als Gateway, so muss noch
gateway_enable="YES"
in die /etc/rc.conf aufgenommen werden.
So ist es den Clients möglich über diesen Rechner in das Internet zu gelangen.
Ich lege die firewall rules Datei und die für NAT immer in ein Verzeichnis, das macht das configurieren einfacher.
4. IPFW Rules schreiben
Ich gehe davon aus das die Datei für die IPFW Rules /etc/firewall/fwrules ist. Diese Datei sollte auch nur von root lesbar, schreibbar und ausführbar sein.
WICHTIG! Die hier angegebenen interfaces sind meine. Ihr müsst diese also entsprechend ändern, da ich diese statisch eingetragen habe. Irgendwann werde ich diese auch dynamisch einbinden.
xl0 ist mein internes Interface welches zum HUB geht und welches das Gateway vom internen Netz zum Internet darstellt.
#!/bin/sh
# Damit NATD auch funktioniert
ipfw add 10 divert natd all from any to any via tun0
# Blockiert den port 6000 (X)
ipfw add deny log tcp from any to any 6000 in recv tun0
ipfw add allow ip from any to any via lo0
ipfw add allow ip from any to any via xl0
# Erlaubt alle Verbindungen welche von hier initiiert wurden
ipfw add allow tcp from any to any out xmit tun0 setup
# Wenn die Verbindung einmal hergestellt wurde, erlaube dieser offen zu stehen
ipfw add allow tcp from any to any via tun0 established
ipfw add allow log tcp from any to any 80 setup
ipfw add allow log tcp from any to any 22 setup
ipfw add allow log tcp from any to any 25 setup
ipfw add allow log tcp from any to any 21 setup
ipfw add allow log tcp from any to any 1022 setup
# This sends a RESET to all ident packets.
ipfw add reset log tcp from any to any 113 in recv tun0
# Erlaubt ausgehende DNS queries NUR auf die beiden angegebenen Server
ipfw add allow udp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow udp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow udp from any to 217.5.99.105 53 out xmit tun0
ipfw add allow tcp from any to 195.20.224.234 53 out xmit tun0
ipfw add allow tcp from any to 194.25.2.129 53 out xmit tun0
ipfw add allow tcp from any to 217.5.99.105 53 out xmit tun0
# Erlaubt die Antwort der DNS Nachfragen
ipfw add allow udp from 195.20.224.234 53 to any in recv tun0
ipfw add allow udp from 194.25.2.129 53 to any in recv tun0
ipfw add allow udp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
ipfw add allow tcp from 194.25.2.129 53 to any in recv tun0
ipfw add allow tcp from 217.5.99.105 53 to any in recv tun0
# Loggt ICMP Anfragen (echo und dest. unreachable) == script kiddies
ipfw add allow log icmp from any to any in recv tun0 icmptype 3
ipfw add allow log icmp from any to any in recv tun0 icmptype 8
# ICMP erlauben
ipfw add allow icmp from any to any
# Blockiert alle Anfragen auf ports unter 1000
ipfw add deny log tcp from any to any 0-1000 in recv tun0 setup
# 2049 == NFS
ipfw add deny log tcp from any to any 2049 in recv tun0 setup
# Loggt netbux connections
ipfw add deny log tcp from any to any 12345 in recv tun0
ipfw add deny log tcp from any to any 20034 in recv tun0
# Alles andere verbieten
ipfw add deny ip from any to any
Geloggt werden alle Rules in denen das Wort "log" vorkommt (wohin diese geloggt werden, dazu gleich mehr...).
Falls Ihr mal alle rules geflushed habt, oder eine neue hinzugefügt, so könnt Ihr einfach mit:
./fwrules
diese rules neu einlesen.
5. Loggen von IPFW
Es wurde in der /etc/rc.conf angegeben das IPFW geloggt werden soll. Ebenso wurde in den Rules angegeben welche von diesen geloggt werden sollen, nur wohin?
Ganz einfach.
Dazu bitte folgendes in die /etc/syslog.conf übernehmen:
# IPFW
!ipfw
*.* /var/log/firewall.log
Hier wird gesagt, das alles in die Datei "firewall.log" geloggt werden soll.
6. NATD Rules
NATD ist wirklich sehr einfach zu bedienen. In /etc/rc.conf wurde schon gesagt wo die natd.conf zu finden ist, in diese trägt man Rules wie die folgenden ein:
redirect_port tcp 192.168.0.203:80 80
redirect_port udp 192.168.0.203:80 80
redirect_port tcp 192.168.0.202:22 22
redirect_port udp 192.168.0.202:22 22
redirect_port tcp 192.168.0.203:21 21
redirect_port udp 192.168.0.203:21 21
Hier werden Anfragen an den Port 80 (HTTP) auf die interne IP 192.168.0.203 (eine jail bei mir) weitergeleitet.
Bei den anderen Einträgen verhält es sich dementsprechend.
NEU:
Wenn IPFW2 genutzt wird, kann man das forwarding direkt in den Rules machen. Damit wird NATD obsolet.
Folgendes ist dabei zu beachten:
a) Kernel neu bauen
Um IPFW2 zu nutzen sollte der Kernel mit folgender Option neu gebaut werden:
options IPFW2
b) /etc/make.conf ändern
Damit bei einem make world Lauf auch IPFW2 gebaut wird muss folgendes in die angegeben Datei eingetragen werden:
IPFW2=TRUE
c) IPFW FORWARD Rules schreiben
Diese können direkt zu den anderen Rules geschrieben werden.
Beispiel:
add 1200 fwd 127.0.0.1,26 tcp from any to mail-server 25 out
Mehr erfährt man unter "man ipfw"
Links
Hier einige links die einem das Erstellen von IPFW Rules erleichtern können:
http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls.html
Da diese howto "aus der Hüfte heraus" entstanden ist, könnte dies evtl. die einen oder anderen Fehler beinhalten. Was ich selbstverständlich nicht hoffe.
Für Anregungen was man noch aufnehmen könnte, was Verbesserungswürdig erscheint, bin ich offen.
Ansonsten, viel Spass.
Zuletzt bearbeitet: