BSDForen.de  

Zurück   BSDForen.de > FreeBSD > FreeBSD - Netzwerk

Antwort
 
Themen-Optionen Thema bewerten Ansicht
Alt 13.07.2004, 23:48   #1
_jo
Registered User
 
Benutzerbild von _jo
 
Registrierungsdatum: Apr 2004
Ort: Tübingen
Beiträge: 73
Question natd und ipfw - Bitte um Hilfe

Hallo,

nach der Einleitung von asg hier im Forum und von marzl
(http://www.bsdbox.de/firewall.html)
hab ich den Versuch gestartet meinen Router auf FreeBSD umzustellen.
An dieser Stelle vielen Dank an euch beiden für die Anleitungen, sie
waren mir sehr hilfreich.

Ein Problem trat jedoch auf, was ich versucht hab in den letzten Tagen
zu lösen und um das ich euch um Hilfe bitte:

Ich habe nat mittels IPDIVERT im KERNEL ermöglicht und in der rc.conf
starten lassen, aber trotzdem deutet alles darauf hin, dass es nicht richtig
aktiviert wird... :/

Das erste Mal beunruhigt wurde ich, als bei mir im LAN auf keinem Klienten
mehr der Internetzugriff ging, sobald ich die Zeile
Code:
ppp_nat="NO"
in die rc.conf hinzufügte.
Zusätzlich kam es in den letzten Tagen zu vielen Fehlfunktionen mit ipfw,
so dass ich weitere Nachforschungen angestellt hab.

1. Dmesg liefert mir folgende Fehlermeldungen:
Code:
IP packet filtering initialized, divert disabled, rule-based forwarding enabled, default to deny, logging disabled ip_fw_ctl: invalid command
2. Starte ich das Regelset (ist identisch mit dem dynamischen von marzl)
so bekomme ich folgendes zu sehen:
Code:
fileserver# /etc/ipfwrules ip_fw_ctl: invalid command ipfw: getsockopt(IP_FW_ADD): Invalid argument ipfw: unknown argument ``established''
Der Stand ist, dass wenn ich ppp_nat="NO" auskommentiere aus der rc.conf,
dann funktioniert das Internet im LAN, jedoch gibt es dann viele Probleme
mit ipfw zum Beispiele werden Dienste nicht abgeschirmt oder portforwading
geht nicht.
Auf dem Server läuft FreeBSD 4.10-RELEASE-p2, welches ich von einem 4.8
geupgraded hab (mittels make build&installworld).

Weiter unten hab ich ein paar Debug-Informationen angehängt, die vielleicht
hilfreich sein können.
Ich bin hier echt schon ein wenig verzweifelt und freue mich über jede Hilfe!
mfg
jo



Code:
fileserver# cat /etc/rc.conf # -- sysinstall generated deltas -- # Sat Jul 12 23:35:57 2003 # Created: Sat Jul 12 23:35:57 2003 # Enable network daemons for user convenience. # Please make all changes to this file, not to /etc/defaults/rc.conf. # This file now contains just the overrides from /etc/defaults/rc.conf. hostname="fileserver.jotech.lan" gateway_enable="YES" ifconfig_txp0="inet 192.168.10.1 netmask 255.255.255.0" ifconfig_xl0="up" # kern_securelevel_enable="NO" firewall_enable="YES" #firewall_type="OPEN" firewall_script="/etc/ipfwrules" firewall_logging="YES" linux_enable="YES" nfs_client_enable="YES" nfs_reserved_port_only="YES" nfs_server_enable="YES" portmap_enable="YES" mountd_flags="-r" sendmail_enable="NO" usbd_enable="NO" inetd_enable="NO" ppp_enable="YES" ppp_mode="ddial" ppp_profile="default" ppp_nat="NO" natd_program="/sbin/natd" natd_enable="YES" natd_interface="tun0" natd_flags="-dynamic -f /etc/natd.conf" named_enable="YES" named_flags="-u bind -g bind" syslogd_enable="YES" syslogd_flags="-ss" tcp_extensions="NO" # disables RFC 1323 tcp_drop_synfin="YES" # ignore TCP frames that have both the SYN and FIN flags set tcp_keepalive="NO" # disable probing idle TCP connections icmp_drop_redirect="YES" # ignore ICMP REDIRECT packets. icmp_bmcastecho="NO" # disable respond to broadcast ping packets


Code:
fileserver# sysctl -a net.inet.ip net.inet.ip.portrange.lowfirst: 1023 net.inet.ip.portrange.lowlast: 600 net.inet.ip.portrange.first: 1024 net.inet.ip.portrange.last: 5000 net.inet.ip.portrange.hifirst: 49152 net.inet.ip.portrange.hilast: 65535 net.inet.ip.portrange.randomized: 1 net.inet.ip.forwarding: 1 net.inet.ip.redirect: 1 net.inet.ip.ttl: 64 net.inet.ip.rtexpire: 3600 net.inet.ip.rtminexpire: 10 net.inet.ip.rtmaxcache: 128 net.inet.ip.sourceroute: 0 net.inet.ip.intr_queue_maxlen: 50 net.inet.ip.intr_queue_drops: 0 net.inet.ip.accept_sourceroute: 0 net.inet.ip.fastforwarding: 0 net.inet.ip.keepfaith: 0 net.inet.ip.gifttl: 30 net.inet.ip.subnets_are_local: 0 net.inet.ip.maxfragpackets: 78 net.inet.ip.maxfragsperpacket: 16 net.inet.ip.sendsourcequench: 0 net.inet.ip.check_interface: 0 net.inet.ip.fw.enable: 1 net.inet.ip.fw.one_pass: 1 net.inet.ip.fw.debug: 1 net.inet.ip.fw.verbose: 1 net.inet.ip.fw.verbose_limit: 0 net.inet.ip.fw.dyn_buckets: 256 net.inet.ip.fw.curr_dyn_buckets: 256 net.inet.ip.fw.dyn_count: 197 net.inet.ip.fw.dyn_max: 1000 net.inet.ip.fw.static_count: 23 net.inet.ip.fw.dyn_ack_lifetime: 300 net.inet.ip.fw.dyn_syn_lifetime: 20 net.inet.ip.fw.dyn_fin_lifetime: 1 net.inet.ip.fw.dyn_rst_lifetime: 1 net.inet.ip.fw.dyn_udp_lifetime: 10 net.inet.ip.fw.dyn_short_lifetime: 5 net.inet.ip.fw.dyn_grace_time: 10


Code:
fileserver# cat /etc/ipfwrules #!/bin/sh # # Erstmal alles saubermachen bevor wir anfangen # Also die Regeln auf "Null" stellen /sbin/ipfw -q -f flush # IPFW-Kommando "Quiet" fwcmd="/sbin/ipfw -q add" # Das setzen unserer eigenen Variabeln int_interface="txp0" # ${int_interface} Internes Interface natd_interface="tun0" # ${natd_interface} Externes Interface dns_server2="194.25.2.130" # ${dns_server1} 1. DNS-Server des ISP dns_server1="194.25.2.129" # ${dns_server2} 2. DNS-Server des ISP open_tcpports="" # 22,80,21,22,25,80,443,465,993,49152-65535" ${open_tcpports} Offene Ports open_udpports="" # 7777,7778,7787,28902" ${open_udpports} Offene Ports # Erlaubt Loopbackverbindungen ${fwcmd} 00100 allow ip from any to any via lo0 # Hiermit dürfen alle ins Internet ${fwcmd} 00150 divert natd all from any to any via ${natd_interface} # Stateful Packet Inspection ${fwcmd} 00200 check-state # Erlaubt internen Verkehr ${fwcmd} 00210 allow ip from any to any via ${int_interface} keep-state # Anti-Spoofing ${fwcmd} 00220 deny log ip from 10.0.0.0/8 to any in via ${natd_interface} ${fwcmd} 00230 deny log ip from 172.16.0.0/12 to any in via ${natd_interface} ${fwcmd} 00240 deny log ip from 192.68.0.0/16 to any in via ${natd_interface} # Fragmentiert Packete werden verworfen ${fwcmd} 00250 deny all from any to any frag in via ${natd_interface} # Ack Packete ohne vorheriges Req werden geblockt ${fwcmd} 00260 deny tcp from any to any established in via ${natd_interface} # Erlaubt alle Verbindungen welche von hier initiiert wurden ${fwcmd} 00300 allow tcp from any to any out via ${natd_interface} setup keep-state ${fwcmd} 00310 allow udp from any to any out via ${natd_interface} keep-state # Wenn die Verbindung einmal hergestellt wurde, erlaube dieser offen zu stehen ${fwcmd} 00320 allow tcp from any to any via ${natd_interface} established ${fwcmd} 00330 allow udp from any to any via ${natd_interface} established # Erlaubte Dienste die ausm Internet erreicht werden dürfen ${fwcmd} 00400 allow tcp from any to any ${open_tcpports} setup keep-state ${fwcmd} 00410 allow udp from any to any ${open_udpports} keep-state # This sends a RESET to all ident packets. ${fwcmd} 00500 reset log tcp from any to me 113 in via ${natd_interface} # Erlaubt ausgehende DNS queries NUR auf angegebenem DNS-Server ${fwcmd} 00600 allow udp from any to ${dns_server1} 53 out via ${natd_interface} keep-state ${fwcmd} 00610 allow tcp from any to ${dns_server1} 53 out via ${natd_interface} setup keep-state ${fwcmd} 00620 allow udp from any to ${dns_server2} 53 out via ${natd_interface} keep-state ${fwcmd} 00630 allow tcp from any to ${dns_server2} 53 out via ${natd_interface} setup keep-state # Loggt ICMP Anfragen (echo und dest. unreachable) == script kiddies ${fwcmd} 00700 allow log icmp from any to any in recv ${natd_interface} icmptype 3 ${fwcmd} 00710 allow log icmp from any to any in recv ${natd_interface} icmptype 8 # ICMP erlauben ${fwcmd} 00750 allow icmp from any to any # Alles andere verbieten (Wird nicht geloggt) ${fwcmd} deny ip from any to any
__________________
Whenever a theory appears to you as the only possible one, take this as a sign that you have neither understood the theory nor the problem which it was intended to solve.
(KRP)
_jo ist offline   Mit Zitat antworten
Alt 14.07.2004, 02:58   #2
Maledictus
foo
 
Registrierungsdatum: May 2003
Ort: Siegen
Beiträge: 2.361
Wieso nimmst du nicht das interne NAT von ppp?

Und kann es sein, dass du im Kernel IPFW2 hast, aber dein Userland nicht für IPFW2 gebaut hast?
__________________
Bruce Schneier's tears can burn holes through an OpenBSD firewall. Lucky for us, Bruce Schneier never cries.
Maledictus ist offline   Mit Zitat antworten
Alt 14.07.2004, 06:54   #3
asg
push it, don´t hype
 
Benutzerbild von asg
 
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
Setze Deine "divert rule", die als zweites gesetzt wird (150) an die erste Stelle (sprich es soll die erste rule sein die in Deiner IPFW Configuration gesetzt ist und auch aufgerufen wird).
asg ist offline   Mit Zitat antworten
Alt 14.07.2004, 09:00   #4
_jo
Registered User
 
Benutzerbild von _jo
 
Registrierungsdatum: Apr 2004
Ort: Tübingen
Beiträge: 73
Hi,
danke für eure Antworten.

Ich hab in der rc.conf ppp_nat="YES" und natd_enable="NO" gesetzt und die
divert-Regel mit dem Index 100 versehen, so dass sie zuerst ausgeführt wird.

Das Internet funktioniert so im LAN, bloß mit ipfw gibt es wieder die Probleme...
Wenn ich mich z.B. von außen scanne (http://scan.sygate.com/quickscan.html),
dann ist der ssh-Port auf, bzw. udp 53 für den Nameserver. Eigentlich sollten
die doch deaktiviert sein?! (laut der Regeldatei für ipfw)

Die Fehlermeldung ist im übrigen immer noch:
Code:
IP packet filtering initialized, divert disabled, rule-based forwarding enabled, default to deny, logging disabled ip_fw_ctl: invalid command
Interessant ist auch, dass ein ipfw list folgendes anzeigt:
Code:
00150 allow ip from any to any via lo0 00200 check-state 00210 allow ip from any to any keep-state via txp0 00220 deny log ip from 10.0.0.0/8 to any in recv tun0 00230 deny log ip from 172.16.0.0/12 to any in recv tun0 00240 deny log ip from 192.68.0.0/16 to any in recv tun0 00250 deny ip from any to any in recv tun0 frag 00260 deny tcp from any to any in recv tun0 established 00300 allow tcp from any to any keep-state out xmit tun0 setup 00310 allow udp from any to any keep-state out xmit tun0 00320 allow tcp from any to any via tun0 established 00400 allow tcp from any to any keep-state setup 00410 allow udp from any to any keep-state 00500 reset log tcp from any to me 113 in recv tun0 00600 allow udp from any to 194.25.2.129 53 keep-state out xmit tun0 00610 allow tcp from any to 194.25.2.129 53 keep-state out xmit tun0 setup 00620 allow udp from any to 194.25.2.130 53 keep-state out xmit tun0 00630 allow tcp from any to 194.25.2.130 53 keep-state out xmit tun0 setup 00700 allow log icmp from any to any in recv tun0 icmptype 3 00710 allow log icmp from any to any in recv tun0 icmptype 8 00750 allow icmp from any to any 00850 deny ip from any to any 65535 deny ip from any to any
Die nat-Regel (divert) scheint komplett ausgesetzt zu werden, oder?

Im Kernel habe ich eigentlich ipfw1 eingestellt:

Code:
options IPDIVERT # nat options IPFIREWALL # ipfw options IPFIREWALL_VERBOSE # loggen von Paketen mit syslog options IPFIREWALL_VERBOSE_LIMIT=100 # loggen begrenzen (dos) options NETGRAPH # dsl options NETGRAPH_SOCKET # " options NETGRAPH_PPPOE # " options NETGRAPH_ETHER # " options IPSTEALTH # hide firewall from traceroute options DUMMYNET # dummy bandwidth limiter

Kann es sein, dass durch das "make world"-Update von 4.8 auf 4.10p2
irgendwas total durcheinander gekommen ist?
mfg
johannes
__________________
Whenever a theory appears to you as the only possible one, take this as a sign that you have neither understood the theory nor the problem which it was intended to solve.
(KRP)
_jo ist offline   Mit Zitat antworten
Alt 14.07.2004, 09:46   #5
asg
push it, don´t hype
 
Benutzerbild von asg
 
Registrierungsdatum: Dec 2002
Ort: Lat 49' 11` Nord - Long 9' 13` Ost
Beiträge: 6.075
@_jo
Ok, das irgendwas nicht stimmt ist klar ;-).
Lädst Du evtl. ipfw als Modul nochmals?

Deine divert Regel muss als erstes kommen, und wird dann auch mit "ipfw list" angezeigt:
Code:
nummer1# ipfw list 00010 divert 8668 ip from any to any via tun0 [...]
ipfw code dazu:
Code:
ipfw add 10 divert natd all from any to any via tun0
Muss also die erste rule sein die geladen wird.

Schalte das "ppp_nat" mal wieder aus, und lasse nur den "natd" rennen (wie in der rc.conf angegeben).
Stimmen denn die Pfade der natd.conf und Deiner Firewall Config?
asg ist offline   Mit Zitat antworten
Alt 14.07.2004, 21:45   #6
_jo
Registered User
 
Benutzerbild von _jo
 
Registrierungsdatum: Apr 2004
Ort: Tübingen
Beiträge: 73
Hallo asg,

füge ich die divert-Regel hinzu, dann kommt ja gerade die Fehlermeldung, die
ich gepostet hatte. Daraus schloss ich ja, dass nat die Fehlerursache ist:

Code:
fileserver# ipfw add 10 divert natd all from any to any via tun0 ipfw: getsockopt(IP_FW_ADD): Invalid argument
In den Regeln von ipfw taucht es dadurch auch nicht auf.

In der /boot/loader.conf ist nur userconfig_script_load aktiviert mehr
nicht.

mfg
jo
__________________
Whenever a theory appears to you as the only possible one, take this as a sign that you have neither understood the theory nor the problem which it was intended to solve.
(KRP)
_jo ist offline   Mit Zitat antworten
Alt 15.07.2004, 17:17   #7
_jo
Registered User
 
Benutzerbild von _jo
 
Registrierungsdatum: Apr 2004
Ort: Tübingen
Beiträge: 73
Ich hab das Problem jetzt in den Griff bekommen, bloß komisch bleibt das
Ganze allemal...
Ich hab mir den Generic-Kernel genommen und sämtliche Änderungen, die
ich vorher auch gemacht hab dort eingetragen und mit der alten Methode
den Kernel dann erstellt.
Und siehe da nach einem Neustart kam aufeinmal:
Code:
IP packet filtering initialized, divert enabled, rule-based forwarding enabled, default to deny, logging limited to 100 packets/entry by default
Ipfw läuft und reagiert jetzt, wie in den Anleitungen beschrieben, Danke


Zwei kleine Fragen hab ich dann allerdings noch:

a) Beim Starten von ipfw erhalte ich noch immer die Meldung
Code:
ipfw: unknown argument ``established''
Das betrifft die beiden Zeilen in den ipfw-Regeln, die ich so von
marzl übernommen habe:
Code:
${fwcmd} 00320 allow tcp from any to any via ${natd_interface} established ${fwcmd} 00330 allow udp from any to any via ${natd_interface} established
Wie kann ich das beseitigen bzw. wie lautet das richtige Argument?


b) Auf der Suche nach dem Unterschied zwischen dem tun0-Interface und der
wan-Karte hab ich mal tcpdump laufen lassen und den Verkehr über beide
mitgeschnitten und verglichen. Dabei ist mir aufgefallen, dass fast alles
identisch war bis auf die Echo-Request-Anfragen, welche nur von der
wan-Karte aufgezeichnet wurden:
Code:
18:36:59.656959 PPPoE [ses 0x6e0] Echo-Req(21), Magic-Num=0141f87d 18:36:59.657313 PPPoE [ses 0x6e0] Echo-Rep(21), Magic-Num=08c49b5b
Kann mir einer erklären, wieso die nur über die wan-Karte aber nicht auch über
tun laufen?

Vielen Dank,
jo
__________________
Whenever a theory appears to you as the only possible one, take this as a sign that you have neither understood the theory nor the problem which it was intended to solve.
(KRP)
_jo ist offline   Mit Zitat antworten
Antwort


Dieses Thema betrachten zurzeit 1 Personen. (0 registrierte Benutzer und 1 Gäste)
 
Themen-Optionen
Ansicht Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus
Gehe zu

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
IPFW und NATD asg Howtos 38 21.03.2006 21:00
NATD und IPFW eingerichtet, trotzdem kein Gamevoice, Mule und co PatTheMav FreeBSD - Netzwerk 6 30.04.2004 21:27
ipfw und natd - wieder mal juedan FreeBSD - Netzwerk 17 15.08.2003 13:10
ipfw probleme (permission denied) AndreasG FreeBSD - Netzwerk 3 17.03.2003 14:08
Router -Firewall Problem Andreas-iz FreeBSD - Netzwerk 30 01.03.2003 18:58


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:01 Uhr.


Powered by vBulletin (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.