![]() |
|
|
|
#1 |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
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.ISO...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. Geändert von asg (14.03.2003 um 19:02 Uhr). |
|
|
|
|
|
#2 |
|
Bodybuilder
|
Super Howto!
Wollte so eins auch immer mal schreiben, aber hab irgendwie noch nie die Zeit und Lust dazu gefunden ![]() Danke! |
|
|
|
|
|
#3 |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
Um mal ein paat Anglizismen zu nutzen, wo diese mal wieder nicht angebracht wären:
You are welcome. Falls jemandem etwas fehlt, falls man Fehler findet, das eine oder andere nicht klar ist, oder sonstwas verbessert werden sollte, bitte mir schreiben. Danke. |
|
|
|
|
|
#4 |
|
Registered User
Registrierungsdatum: Mar 2003
Ort: Bayern
Beiträge: 38
|
noch eins was hier evtl. mit rein kann
ich bin nämlich auch grad auf der suche wie ich das realisieren soll.... hab ne dsl-flatrate und krieg ja alle 24h ne neue ip - um dyndns zu aktualisieren hab ich den ddclient. nun muss ich den aber immer dann anstarten wenn ich ne neue ip bekommen habe.... was ich bisher gefunden habe müsste das eigentlich mit den entsprechendem aufruf in /etc/ppp/ip-up bzw. /etc/ppp/ip-down funktionieren. da diese files standardmässig nicht existieren bin ich mir etz aber au nit so sicher darüber.... bitte um verbesserung falls das so nit stimmt - habs ansatzweise so im netz gefunden |
|
|
|
|
|
#5 |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
Moin.
ddclient nutze ich zwar nicht, sondern ddup, aber das Prinzip sollte das gleiche sein wie Du das Problem lösen könntest. Hmm, könnte ja mal ein Howto schreiben von wegen dyndns und ddup. Ja, werde ich beizeiten mal machen. Aber zu Deinem Problem. Schreibe doch ein Script, welches via cronjob alle X Minuten aufgerufen wird, und überprüft ob die IP gleich geblieben ist, oder nicht. Wenn nicht, rufe ddclient auf und aktualisere dyndns, wenn doch, mache nichts. Beispiel (für ddup, sollte aber bei ddclient nicht grossartig anders sein): Legt unter /usr/local/etc/rc.d ein Skript mit dem Namen "020.ddup_start.sh" und dem Inhalt an: #!/bin/sh case "$1" in start) [ -x /etc/periodic/ddup_update.sh ] && /bin/sh /etc/periodic/ddup_update .sh && echo -n ' dyndns_update_complete' ;; *) echo "Usage: `basename $0` {start|stop}" >&2 ;; esac exit 0 Pack das Script mit dem Namen "ddup_udate.sh" nach /etc/periodic/ #!/bin/sh #Variablen host_net="deine.dynadresse.net" host_com="deine.dynadresse.com" host_org="deine.dynandresse.org" interface="tun0" email="deinemail@adresse.de" oldfile="/var/log/dyndns/ddclient_OLD" newfile="/var/log/dyndns/dddclient_NEW_temp" # die nachfolgenden 2 anpassen an ddclient ddclient_cmd="/usr/local/sbin/ddup" ddclient_flags="--wildcard" #bestehende Konfiguration in newfile packen /sbin/ifconfig $interface | /usr/bin/grep inet > $newfile if [ -r "$oldfile" ]; then # wenn oldfile vorhanden haben wir infos # wenn oldfile und newfile identisch, dann loesche newfile /usr/bin/cmp -s $oldfile $newfile && /bin/rm -f $newfile date # wenn dem nicht so ist dann: # -starte ddclient # -sende eine email # -yberschreibe oldfile mit newfile if [ -r "$newfile" ]; then $ddclient_cmd $ddclient_flags --host $host_net $ddclient_cmd $ddclient_flags --host $host_com $ddclient_cmd $ddclient_flags --host $host_org /usr/bin/mail -s "$host_net $host_com $host_org update" $email < $newfile /bin/mv -f $newfile $oldfile fi else # der erste Lauf oder keinerlei Info $ddclient_cmd $ddclient_flags --host $host_net $ddclient_cmd $ddclient_flags --host $host_com $ddclient_cmd $ddclient_flags --host $host_org /usr/bin/mail -s "$host_net $host_com $host_org update" $email < $newfile /bin/mv -f $newfile $oldfile fi Füge in Deine /etc/crontab folgendes ein: */5 * * * * root /etc/periodic/ddup_update.sh >> /var/log/dyndns/dyndns.log Und lege unter das Verzeichnis "dyndns/" unter /var/log an (schreibrechte für root). Dort werden Deine logs gelagert, wie ich sie oben im script angegeben hatte. |
|
|
|
|
|
#6 |
|
Meteorist
|
Mannomann, Grunix!
Sauberes Tut, Respekt! p.s.: ich schäm mich ja fast, aber auf den link http://www.freebsd-howto.com/HOWTO/Ipfw-HOWTO bin ich bei meiner Suche bisher nicht gekommen
__________________
lockeres peace Code:
Geändert von moonlook (17.03.2003 um 23:41 Uhr). |
|
|
|
|
|
#7 |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
Servus.
Moonlook, man kann ja nicht alles kennen .Aber nach jahrelangen Recherchen, in denen ich weder Kosten und Mühe gescheut habe, findet man so einiges :-) |
|
|
|
|
|
#8 |
|
gedankenverbrecher
|
sooo, habe das script von grunix ein wenig angepasst und "dynamisiert". funktioniert bei mir hier primstens.
die xxx - Einträge müssen natürlich von euch angepasst werden! viel spass damit. ++ SNIP /etc/firewall/fwrules #!/bin/sh # # Mach "Quiet" fwcmd="/sbin/ipfw -q" # Erstmal alles saubermachen bevor wir anfangen ${fwcmd} -f flush # Das setzen unserer eigenen Variabeln int_interface="dc0" # ${int_interface} Internes Interface natd_interface="dc3" # ${natd_interface} Externes Interface dns_server="80.69.98.110" # ${dns_server} DNS-Server open_ports="20,21,22,25,80,49152-65535" # ${open_ports} Offene Ports # Hiermit dürfen alle ins Internet ${fwcmd} add 50 divert natd all from any to any via ${natd_interface} # Erlaubt Loopbackverbindungen ${fwcmd} add allow ip from any to any via lo0 #${fwcmd} add 100 pass all from any to any via lo0 #${fwcmd} add 200 deny all from any to 127.0.0.0/8 #${fwcmd} add 300 deny ip from 127.0.0.0/8 to any # Erlaubt internen Verkehr ${fwcmd} add allow ip from any to any via ${int_interface} # Erlaubt alle Verbindungen welche von hier initiiert wurden ${fwcmd} add allow tcp from any to any out xmit ${natd_interface} setup # Wenn die Verbindung einmal hergestellt wurde, erlaube dieser offen zu stehen ${fwcmd} add allow tcp from any to any via ${natd_interface} established # Erlaubte Dienste die ausm Internet erreicht werden dürfen ${fwcmd} add allow tcp from any to any ${open_ports} setup # This sends a RESET to all ident packets. ${fwcmd} add reset tcp from any to any 113 in recv ${natd_interface} # Erlaubt ausgehende DNS queries NUR auf angegebenem DNS-Server ${fwcmd} add allow udp from any to ${dns_server} 53 out xmit ${natd_interface} ${fwcmd} add allow tcp from any to ${dns_server} 53 out xmit ${natd_interface} ${fwcmd} add allow udp from ${dns_server} 53 to any in recv ${natd_interface} ${fwcmd} add allow tcp from ${dns_server} 53 to any in recv ${natd_interface} # Loggt ICMP Anfragen (echo und dest. unreachable) == script kiddies ${fwcmd} add allow log icmp from any to any in recv ${natd_interface} icmptype 3 ${fwcmd} add allow log icmp from any to any in recv ${natd_interface} icmptype 8 # ICMP erlauben ${fwcmd} add allow icmp from any to any # Alles andere verbieten (Wird nicht geloggt) ${fwcmd} add deny ip from any to any Geändert von marzl (29.07.2003 um 21:23 Uhr). |
|
|
|
|
|
#9 | |
|
foo
Registrierungsdatum: May 2003
Ort: Siegen
Beiträge: 2.361
|
Zitat:
bzw. /etc/ppp/ppp.linkdown ![]() |
|
|
|
|
|
|
#10 |
|
Registered User
|
ich steig da nicht richtig durch. wenn ich mich an das howto vom anfang halte und das nette dynamisierte script benutze ist meine netz-kommunikation voellig tot.
gibts das was was ich noch beachten muss? ich hab hier nur ein notebook das ins i-net ueber ein router geht, demnach keine gatewayfunktion o.ae braucht. gruss eeknay edit: muss ich die sachen ins kernel packen UND die anpassungen in der rc.conf machen? ich hab ausserdem noch eine /etc/rc.firewall was ist das?
__________________
Shit happens when you party naked! Geändert von eeknay (06.10.2003 um 19:31 Uhr). |
|
|
|
|
|
#11 | |
|
volksoperator on duty
Registrierungsdatum: May 2003
Beiträge: 3.281
|
Zitat:
|
|
|
|
|
|
|
#12 |
|
Kampfmaschine
Registrierungsdatum: Nov 2003
Ort: Stuttgart
Beiträge: 458
|
Hallo?
Ich habe zu der ganze Geschichte 3 kleine Bemerkungen: 1) Respekt - nach sowas hatte ich frueher immer gesucht.... 2) Warum sollte man denn RESET zu alle ident packeten schicken. Kann man die nicht auch einfach verschwinden lassen und gar nix antworten? 3) Hab so ein aehnliches Setup bei mir auch laufen. Aber der DNS Teil geht bei mir auch ohne das ich irgentwelche TCP optionen festlege. Fuer was speziell sind die denn gut? zB: ipfw add allow tcp from any to 195.20.224.234 53 out xmit tun0 DANKE
__________________
__ q[-_-]p __ |
|
|
|
|
|
#13 |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
@eeknay
Was ist wenn Du nicht die dynamiche Rules von marzl nimmst, sondern die die ganz oben mit dabei stehen? Was heisst tot? Ping geht nicht mehr? Was sagt "ifconfig"? Gibts tun0? Was sagt das log? Die Anpassung in der rc.conf musst Du machen. Das einzige wo Du aufpassen musst ist, das Du ENTWEDER Module lädst, oder aber das genannte in den kernel kompilierst. Mach es so wie beschrieben, dann sollte das wunderbar funktionieren, so ist dies hier zumindest der Fall. |
|
|
|
|
|
#14 | |
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
Zitat:
Wir nehmen unser eigenes FW Script: firewall_script (str) If you want to run a firewall script other than /etc/rc.firewall, set this variable to the full path to that script. |
|
|
|
|
|
|
#15 | ||
|
push it, don´t hype
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
|
Zitat:
Wenn es sich um ein TCP Paket handelt wird ein RST versendet, ansonsten wird das Paket verworfen. Du kannst sicher auch "reject" nehmen... Zitat:
|
||
|
|
|
![]() |
| Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste) | |
| Themen-Optionen | |
| Ansicht | Thema bewerten |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| FreeBSD Samba PDC Howto | Highfish | Howtos | 103 | 25.09.2006 21:14 |
| Die Geschichte von BSD (bzw. UNIX) | asg | News | 31 | 11.05.2006 20:20 |
| NATD und IPFW eingerichtet, trotzdem kein Gamevoice, Mule und co | PatTheMav | FreeBSD - Netzwerk | 6 | 30.04.2004 21:27 |
| mal wieder natd und ipfw prob. | Marco | FreeBSD - Netzwerk | 14 | 11.04.2003 10:00 |
| ipfw probleme (permission denied) | AndreasG | FreeBSD - Netzwerk | 3 | 17.03.2003 14:08 |