Hallo Zusammen
Ich habe eine Machine mit drei Dual-Port Netzwerkkarten (3com) und den PF (OpenBSD 3.6) eingerichtet. Bis jetzt habe ich den PF immer nur als Stealth-Firewall benutzt, also 'up' in hostname.xyz und bridge erstellt. Dies hat auch immer gut funktioniert.
Nun habe ich das Problem, dass drei Server die gleiche IP benutzen sollen (redirection/nat). Um die Firewall noch sicherer zu machen, habe ich folgendes unternommen:
em0: Kabel mit externer IP (keine IP zugewiesen)
em1->em2: crossover Kabel
em2: IP des externen Netzes <externe_ip>
em3: Server1
em4: Server2
em5: Server3
Die Ports em0 und em1 sind im bridging Modus. Zusammengefasst habe ich folgende Regeln:
nat on em2 from <ip Server1> to any <externe_ip>
nat on em2 from <ip Server2> to any <externe_ip>
nat on em2 from <ip Server3> to any <externe_ip>
rdr on em2 proto udp from any to <externe_ip> port 5101 -> <ip Server1>
rdr on em2 proto udp from any to <externe_ip> port 5201 -> <ip Server2>
rdr on em2 proto udp from any to <externe_ip> port 5301 -> <ip Server3>
block log all
block quick inet6
pass in on em0 proto udp from any to <externe_ip> port 5101
pass in on em0 proto udp from any to <externe_ip> port 5201
pass in on em0 proto udp from any to <externe_ip> port 5301
pass out on em0 all (*1)
pass on em1 all
pass on em2 all
pass on em3 all (*2)
pass on em4 all (*2)
pass on em5 all (*2)
Folgende Probleme ergeben sich:
*1: Wenn ich 'keep state' einfüge kann von der Firewall aus pingen, jedoch von den Servern nicht. Wenn ich es weglasse, trifft der umgekehrte Fall ein. Wenn ich das externe Kabel direkt an em2 (ohne Bridge) anhänge, funktioniert es bei beiden. So viel ich erfahren konnte wird bei NAT sowieso ein 'state' zwischengespeichert. Kann es sein, dass zwei mal 'keep state' nach dem Motto 'minus mal minus' wiederum kein 'state' ergeben?
*2: Die restlichen Ports lassen sich nicht einschränken (z.B. pass out on em3 all), da 'keep state' nicht funktioniert. Es sollten hier weitere Filter-Regeln eingesetzt werden können, damit die Server untereinander keine Verbindung haben.
Hat jemand schon einmal eine solche Lösung realisiert? Erfahrungen? Meinungen? Hat jemand einen guten Draht zu den PF-Entwicklern?
Vielen Dank für Euere Hilfe.
Gruss Dom
Ich habe eine Machine mit drei Dual-Port Netzwerkkarten (3com) und den PF (OpenBSD 3.6) eingerichtet. Bis jetzt habe ich den PF immer nur als Stealth-Firewall benutzt, also 'up' in hostname.xyz und bridge erstellt. Dies hat auch immer gut funktioniert.
Nun habe ich das Problem, dass drei Server die gleiche IP benutzen sollen (redirection/nat). Um die Firewall noch sicherer zu machen, habe ich folgendes unternommen:
em0: Kabel mit externer IP (keine IP zugewiesen)
em1->em2: crossover Kabel
em2: IP des externen Netzes <externe_ip>
em3: Server1
em4: Server2
em5: Server3
Die Ports em0 und em1 sind im bridging Modus. Zusammengefasst habe ich folgende Regeln:
nat on em2 from <ip Server1> to any <externe_ip>
nat on em2 from <ip Server2> to any <externe_ip>
nat on em2 from <ip Server3> to any <externe_ip>
rdr on em2 proto udp from any to <externe_ip> port 5101 -> <ip Server1>
rdr on em2 proto udp from any to <externe_ip> port 5201 -> <ip Server2>
rdr on em2 proto udp from any to <externe_ip> port 5301 -> <ip Server3>
block log all
block quick inet6
pass in on em0 proto udp from any to <externe_ip> port 5101
pass in on em0 proto udp from any to <externe_ip> port 5201
pass in on em0 proto udp from any to <externe_ip> port 5301
pass out on em0 all (*1)
pass on em1 all
pass on em2 all
pass on em3 all (*2)
pass on em4 all (*2)
pass on em5 all (*2)
Folgende Probleme ergeben sich:
*1: Wenn ich 'keep state' einfüge kann von der Firewall aus pingen, jedoch von den Servern nicht. Wenn ich es weglasse, trifft der umgekehrte Fall ein. Wenn ich das externe Kabel direkt an em2 (ohne Bridge) anhänge, funktioniert es bei beiden. So viel ich erfahren konnte wird bei NAT sowieso ein 'state' zwischengespeichert. Kann es sein, dass zwei mal 'keep state' nach dem Motto 'minus mal minus' wiederum kein 'state' ergeben?
*2: Die restlichen Ports lassen sich nicht einschränken (z.B. pass out on em3 all), da 'keep state' nicht funktioniert. Es sollten hier weitere Filter-Regeln eingesetzt werden können, damit die Server untereinander keine Verbindung haben.
Hat jemand schon einmal eine solche Lösung realisiert? Erfahrungen? Meinungen? Hat jemand einen guten Draht zu den PF-Entwicklern?
Vielen Dank für Euere Hilfe.
Gruss Dom