ipfw blockt icmp-reply - warum?

xcvb

Well-Known Member
Hallo Leute,

vielleicht hab ich Tomaten auf den Augen, aber ich finde den Fehler nicht. Wie der Titel schon verrät blockt mein ipfw icmp-reply. Hier mal das Regelwerk:
Code:
# ipfw list                                                                                                                                    
00100 allow ip from any to any via lo0
00200 check-state
00300 allow tcp from me to any established
00400 allow tcp from me to any setup keep-state
00500 allow udp from me to any keep-state
00600 allow tcp from table(1) to any dst-port 22 in setup keep-state
00700 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 2049 in setup keep-state
00800 allow udp from 10.0.0.0/8 to 10.0.0.12 dst-port 2049 in
00900 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 879 in
01000 allow udp from 10.0.0.0/8 to 10.0.0.12 dst-port 879 in
01100 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 111 in
01200 allow udp from 10.0.0.0/8 to 10.0.0.12 dst-port 111 in
01300 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 8118 in setup keep-state
01400 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 9050 in setup keep-state
01500 allow tcp from any to 10.0.0.81 dst-port 80 in setup limit src-addr 4
01600 allow tcp from any to 10.0.0.81 dst-port 443 in setup limit src-addr 4
01700 allow tcp from 10.0.0.0/8 to 10.0.0.82 dst-port 80 in setup keep-state
01800 allow tcp from 10.0.0.0/8 to 10.0.0.12 dst-port 9091 in setup keep-state
01900 allow tcp from any to 10.0.0.12 dst-port 51413 in
02000 allow udp from any to 10.0.0.12 dst-port 51413 in
02100 allow icmp from 10.0.0.0/8 to any icmptypes 0,3,4,8,11
02200 allow icmp from me to any keep-state
02300 unreach host-unknown log tcp from any to any
02400 deny log ip from any to any
65535 deny ip from any to any
Wenn ich einen Host pinge dann werden die Antworten von Regel 2400 geblockt. In 2200 hab ich ein keep-state, m. E. müsste dann doch eine State erstellt werden und auch die Antwortpakete müssten durch gehen.

Wenn ich Regel 2200 aber auf 550 setzte, dann klappt der Ping komplett.

???
 
Hi, hab wirklich keine Ahnung, aber nur mal so die Idee: Könnte es sein, dass Regel 02100 auf "me" zutrifft und daher keep-state (02200) nicht in Kraft tritt?
 
Natürlich! Du hast Recht. Danke Lateralus.
Wenn ich die Regel 2100 entferne klappt ping-request/reply.

Aber so ganz verstehe ich das immer noch nicht. Ein ping beginnt mit einen icmp-request. Der wird von Regel 2200 abgedeckt und sollte einen STATE erstellen. Wenn dann der icmp-reply reinkommt sollte doch zuerst der 200 check-state greifen, und somit durchgelassen werden.

Oder nicht?
 
Wie gesagt: Ich rekonstruiere nur eine innere Logik, ich habe keine Ahnung von ipfw (hab momentan nicht mal ein BSD installiert - schande auf mein Haupt).

Das ausgehende Paket muss als eines registriert werden, das zu einer Verbindung gehört, deren State erhalten werden soll.

Du schickst den Ping raus, Regel 02100 trifft zu -> Paket / "Verbindung" kommt in die Schublade "allow icmp from 10.0.0.0/8 to any icmptypes 0,3,4,8,11" (ohne keep-state). Jetzt kommt irgendein ICMP-Paket zurück, und die Firewall prüft, ob es in irgendeiner Schublade "keep-state" ist -> ist es aber nicht, also wird es abgelehnt. Welche Regel auch immer zuerst zutrifft, wird anscheinend angewendet. Trifft eine spätere auch zu wird diese trotzdem nicht angewendet:

Paket 01-OUT ----- 02100 ----> Schublade A
Schublade B (keep-state)

Paket 01-IN ----- 01-OUT ist in Schublade A ----> kein keep-state -----> 2400 -----> DENY

statt:
Paket 01-OUT ----- 02200 ---> Schublade B (keep-state)

Paket 01-IN ----- 01-OUT ist in Schublade B ----> keep-state -----> 00200 ----> ALLOW

Echt schöne Syntax hat ipfw muss ich sagen.
 
Zuletzt bearbeitet:
Aber müsste das "icmp is stateless" nicht genauso für udp gelten? Ich hatte es mir eher so gedacht, dass ipfw intern eine Liste verwaltet, indem es sich irgendwelche Zahlen aus dem ip/icmp-Header merkt.

Wäre das zitierte das Problem, so sollte eine Beseitigung der Regel 02100 eigentlich nichts ändern, weil die Regel 02200 so oder so nicht funktionierte.
 
Zurück
Oben