IPFW2-Firewall-Probleme

PatTheMav

Well-Known Member
[size=+2]UPDATE : Bitte meinen letzten Post lesen ![/size]

Also mein IPFW-Ruleset sieht momentan so aus :
Code:
#!/bin/sh
# Keine Ausgaben
fwcmd="/sbin/ipfw -q"

# Bisherige Rules saeubern
${fwcmd} -f flush
#${fwcmd} pipe flush
#${fwcmd} queue flush

# Variablen setzen
#natd_interface="rl0"
natd_interface="tun0"
lan_interface="sis0"
dns_servers="194.25.2.129 194.25.2.130 194.25.2.131 194.25.2.132 192.25.2.133 \
194.25.0.69 194.25.0.70 194.25.0.61 194.25.0.62 194.25.0.53 194.25.0.54 \
217.237.150.225 217.237.149.161 217.237.149.225"

#############################################
# Workaround for timeout on first five minutes
#############################################
closed_ports="22,135-140,445,901,1243,1720,1999,2049,5000,6000,6776,7789,12345,20034,31337,54320,54321"
#closed_ports="0-1056,1243,1720,1999,2049,5000,6000,6776,7789,12345,20034,31337,54320,54321"

#############################################
##  Traffic Shaping                        ##
#############################################

# One-pass disabled due to firewall-management
# ${fwcmd} enable one_pass

# Upload-pipe for 22 kbyte/s
${fwcmd} pipe 1 config bw 192Kbit/s

# High-Priority queue for ACK-Packets
${fwcmd} queue 1 config pipe 1 weight 100 gred 0.05/35/45/0.4

# Medium-Priority queue for DNS/Gaming/SSH
${fwcmd} queue 2 config pipe 1 weight 80 gred 0.05/35/45/0.4

# Low-Priority for the dirty rest ;)
${fwcmd} queue 3 config pipe 1 weight 40 gred 0.05/35/45/0.4

# Outgoing ACK packets go thru the hp-queue
${fwcmd} 00100 add queue 1 tcp from any to any out via ${natd_interface} tcpflags ack iplen 0-80
${fwcmd} 00110 add skipto 00200 tcp from any to any out via ${natd_interface} tcpflags ack iplen 0-80

# Outgoing DNS/Gaming/SSH traffic go thru the mp-queue
${fwcmd} 00140 add queue 2 udp from any to any out via ${natd_interface}
${fwcmd} 00150 add skipto 00200 udp from any to any out via ${natd_interface}

# The dirty rest goes thru the lp-queue
${fwcmd} 00160 add queue 3 all from any to any out via ${natd_interface}
${fwcmd} 00170 add skipto 00200 all from any to any out via ${natd_interface}

#############################################
##  Traffic Shaping                        ##
#############################################

# Localhost-Traffic erlauben
${fwcmd} add 00200 allow ip from any to any via lo0

# Network-Adress-Translation ermoeglichen
# ${fwcmd} add divert natd all from any to any via ${natd_interface}

# Stateful-Firewall verwenden
${fwcmd} add check-state
${fwcmd} add allow tcp from any to any out setup keep-state
${fwcmd} add allow ip from any to any out keep-state

# Fragmentierte Pakete verwerfen
${fwcmd} add deny all from any to any in via ${natd_interface} frag

# Anti-Spoofing Rules
${fwcmd} add unreach host-unknown log ip from 10.0.0.0/8 to any in via ${natd_interface}
${fwcmd} add unreach host-unknown log ip from 172.16.0.0/12 to any in via ${natd_interface}
${fwcmd} add unreach host-unknown log ip from 192.68.0.0/16 to any in via ${natd_interface}

# ICMP Types 3 und 8 mal mitprotokollieren
${fwcmd} add allow log icmp from any to any in via ${natd_interface} icmptype 3
${fwcmd} add allow log icmp from any to any in via ${natd_interface} icmptype 8

# Allen DNS-Servern (auch Backup-Servern) Antwortpakete erlauben
for i in ${dns_servers}
do
        ${fwcmd} add allow ip from $i 53 to any in via ${natd_interface}
done

# Sonstige Anfragen auf den ersten 1056 Ports ohne vorigen Request abweisen
${fwcmd} add unreach host-unknown all from any to any ${closed_ports} in via ${natd_interface}

# Alles erlauben
${fwcmd} add allow all from any to any
Das Ruleset funktioniert so auch ganz problemfrei - alles was ich an Programmen wie ICQ oder IRC laufen lasse funktioniert einwandfrei, auch zocken funktioniert ohne Probleme, aber manchmal scheint überhaupt nichts zu funktionieren.

Wenn ich mein Windows-Rechner hochgefahren hab, sendet Samurize z.B. Anfragen ins Netz bezüglich Wettervorschau, Anzahl ungelesener eMails und aktueller externer IP. Manchmal funktioniert das einwandfrei, manchmal scheint Samurize keine Netz-Verbindung zu bekommen. Ein Ping und Surfen funktioniert aber problemlos und ich finde ums Verrecken nicht heraus, warum die Firewall manchmal erst nen kleinen "Anstoss" per Hand braucht, bevor sie so die Pakete verwaltet, wie sie soll ...

Habe nun nach einigem Testen herausgefunden, dass die Windows 98-Rechner im Netz z.b. die ersten fünf Minuten ausser PING garnichts machen können - Surfen geht nicht, FTP nicht, Mails abrufen auch nicht, pingen können sie aber alles und jeden, woraus ich folgere, dass DNS zu funktionieren scheint, aber irgendwelche anderen Ports scheinen wohl stress zu machen. Nach fünf bis zehn Minuten funktioniert dann aber alles und ich komm ums Verrecken nicht drauf, woran das liegen könnte ...

Zumal ich mich eh wundere, warum DNS-Anfragen nicht von der Stateful-Firewall erkannt werden, also eine auf Port 53 aufgebaute Anfrage nicht beantwortet werden kann und ich dafür extra Port 53-Antworten erlauben muss.

Also habe ich mal die Closed-Ports-Regel komplett auskommentiert und siehe da - alles funktioniert sofort. Sobald ich aber wieder die Ports abschotte, brauchen alle Windows-Rechner nach dem Neustart ne halbe Ewigkeit, um überhaupt irgendetwas anderes ausser Ping zu nutzen und irgendwie ist das ja nicht Sinn der Sache, die Ports wieder alle offen zu haben...

Desweiteren sollte ja die Stateful-Firewall automatisch Verbindungen rauslassen, die meine Windows-Rechner ins Netz senden, nur komischerweise scheint dies nicht zu funktionieren ...

PS : Ich bin mir des inflationären Gebrauchs des Wortes "Verrecken" durchaus bewusst, aber ich raufe mir hier seit ner Woche die Haare und komm nich auf eine probate Lösung !
 
Last edited:
Ach Mensch Leute .. will mir keiner helfen, oder KANN mir keiner helfen :)

Ich bin echt am verzweifeln, weil die Firewall die ersten Minuten ausser Ping scheinbar keine Pakete durchlässt und ich nicht drauf komme, welcher der ersten 1056 Ports wohl offen oder entsprechend versorgt werden muss, damit das schneller geht ...
 
PatTheMav said:
Ach Mensch Leute .. will mir keiner helfen, oder KANN mir keiner helfen :)

Ich bin echt am verzweifeln, weil die Firewall die ersten Minuten ausser Ping scheinbar keine Pakete durchlässt und ich nicht drauf komme, welcher der ersten 1056 Ports wohl offen oder entsprechend versorgt werden muss, damit das schneller geht ...

Ist ja auch ganz schön verschnörkelt dein script und auf den ersten schnellen Blick sind mir einige Ungereimtheiten aufgefallen.
Versuche doch ersteinmal ein minimales setup und probiere dann der Reihe nach alle deine Regeln einzufügen. Naja viell. nicht alle da einige überflüssig sind.
Und lese bitte eingehend die man page z. B. was stateful bedeutet.

-MadMax
 
Also ich weiss inzwischen durchaus was stateful heisst, hab die MAN-Page nicht nur einmal durchgelesen ;)

Es scheint auch nur an der closed-ports Regel zu liegen, denn ich hab nun mal die Variable etwas gelockert (Statt 0-1056 hab ich nur bestimmte Ports angegeben) und siehe da - es funktioniert alles wieder wie erwartet.

D.h. es wird da wohl unter den ersten 1056 Ports irgendeiner blockiert, der nicht blockiert werden darf - nur weiss ich halt nicht, welcher das sein könnte.

BTW : Hab mal die Regeln im ersten Post aktualisiert, so sieht das Regelset momentan aus, mit dem wieder alles geht - gelöscht hab ich eigentlich nichts, hab nur z.B. divert NAT auskommentiert, da PPP NAT übernimmt und hab die Keep-State Regeln angepasst, da es z.B. für UDP ja kein Tcpflag für "Setup" gibt.
 
Last edited:
also ich würd mal als erstes die firewall auf default deny stellen und nur ports zulassen die du brauchst
dann eben setup rule mit established und besondere ports loggen oder wasauchimmer cu


lirum, larum, löffelstiel
wer nicht fragt der weiss nicht viel
 
frostfirn said:
also ich würd mal als erstes die firewall auf default deny stellen und nur ports zulassen die du brauchst
dann eben setup rule mit established und besondere ports loggen oder wasauchimmer cu


lirum, larum, löffelstiel
wer nicht fragt der weiss nicht viel
Ich probier's mal aus, aber ich bin mir nicht sicher, wie dann die Kompatibilität mit den Games aussieht, bei denen ich ja für jede Regeln aufstellen müsste ...
 
ja da hast du recht aber wie zb WC 3 braucht nur einen tcp port zum gamen ...
C&C zb braucht so ca 10 ports udp und tcp zum gamen ... bei egoschootern weis ichs nicht aber meist findest eh die info auf der seite der spielehersteller welche ports offen sein müssen

naja musst selber wissen was besser für dich ist

cu
 
Last edited:
So Mädels, ich hab nun mit Ethereal mal ein bisschen geforscht und habe mein Problem gefunden :

Anfragen werden immer erst ab Port 1024 gesendet, da die ersten 1023 für eingehende Pakete reserviert sind, da aber standardgemäss alle Pakete auf den ersten 1056 Ports geblockt wurden, scheiterte da irgendetwas. Also habe ich testweise mal meine Regel dahingehend umgeändert, dass nur die ersten 1020 Ports komplett blockiert werden und siehe da : Die Windows Rechner bekommen wieder unmittelbar nach dem Boot ins Netz.

Der Grund dafür liegt wohl daran, dass Windows nicht nur auf Port 1024 und allen folgenden Ports bis 1030 DCOM-Services anbietet, sondern auch sämtliche "erste" Anfragen durchführt, weshalb ein komplettes Blockieren halt diese Probleme verursacht.

Was ich daran nun nicht verstehe : Eigentlich sollte die Stateful-Firewall doch auch Anfragen auf Port 1024 von meinem Rechner ins Netz durchlassen und die Antwortpakete durchlassen, da zu einer von mir aufgebauten Verbindung gehörend - wieso scheint dies aber für die erst später im Script blockierten Ports 0-1056 Ports nicht gegolten zu haben.

Könnte es an dem kleinen Wörtchen "out" liegen :
Code:
# Stateful-Firewall verwenden
${fwcmd} add check-state
${fwcmd} add allow tcp from any to any out setup keep-state
${fwcmd} add allow all from any to any out keep-state
Damit wollte ich ja bewirken, dass nur Pakete durchgehen dürfen, welche zu von mir aus aufgebauten Verbindungen gehören. Denn ohne das Out müsste ja nur von aussen jemand per SETUP ne Verbindung aufbauen und die Firewall würde diese offen halten.

So wie ich die MAN-Pages verstanden hab checkt die stateful Firewall nur, ob ein Paket zu einer dynamischen Verbindung gehört, weshalb die beiden IPFW-Regeln auch beide nur für "out" gelten können.

Nun hab ich aber mal das Wörtchen "out" in der dritten Regel entfernt, so dass "allow all from any to any keep-state" übrigbleibt. Damit funktioniert auch weiterhin alles, nur werden damit zwar Setup-Pakete abgewiesen, aber alles andere wird zugelassen, es wirkt quasi wie ein "allow all from any to any" und das soll ja nicht der Sinn sein.
 
Last edited:
Back
Top