BSDForen.de  

Zurück   BSDForen.de > OpenBSD > OpenBSD - Allgemein

Antwort
 
Themen-Optionen Thema bewerten Ansicht
Alt 19.08.2011, 22:03   #1
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Frage bzgl Portweiterleitungen mit PF

Hallo!
Ich habe bereits zwei Abende mit googlen und lesen verbracht ohne dass das Problem behoben werden konnte und bitte um Hilfe.
Ich möchte mir einen NAT Router mit OpenBSD 4.9 einrichten und scheiter momentan an PF. Das NAT funktioniert einwandfrei, jedoch kriege ich keine Portweiterleitungen ans laufen, obwohl das normalerweise recht simpel sein soll....


Code:
# macros int_if="rl0" ext_if="tun0" int_net="192.168.0.0/24" tcp_services="{ 22, 113 }" icmp_types="echoreq" #server="192.168.0.20" # options set block-policy return set loginterface $ext_if set skip on lo # match rules match out on egress inet from !(egress) to any nat-to (egress:0) # filter rules block in log antispoof quick for { lo $int_if } pass in on egress inet proto tcp from any to (egress) \ port $tcp_services #pass in on $ext_if proto tcp from !$int_net to any port 80 rdr-to 192.168.0.20 port 80 #pass in quick on $ext_if proto tcp from any to $ext_if port 80 rdr-to 192.168.0.20 port 80 #pass out log on $ext_if proto tcp to any port 80 #pass in on egress inet proto tcp from any to egress port 80 rdr-to 192.168.0.20 port 80 #pass out on egress inet proto tcp from any to 192.168.0.20 port 80 #match in on egress inet proto tcp from any to any port 80 \ # rdr-to 192.168.0.20 #pass in on egress inet proto tcp from any to 192.168.0.20 port 80 #pass out on $int_if inet proto tcp from any to 192.168.0.20 port 80 pass in inet proto icmp all icmp-type $icmp_types pass in on $int_if pass out quick
Die Auskommentieren PASS Anweisungen zeigen meine bisherigen Versuche. Ich habe von Firewalls bisher keine Ahnung und daher auch kein nennenswertes Verständnis. Ich möchte doch nur das Port 80 an den Server mit der IP 192.168.0.20 weitergeleitet wird. Als interne Schnittstelle dient rl0. An fxp0 hängt das DSL Modem, dessen DSL Verbindung per ppp -ddial pppoe aufgebaut wird. PF wird mit pfctl -e /etc/pf.conf gestartet. Als Quelle für oben stehende Konfiguration diente http://www.openbsd.org/faq/pf/example1.html

Warum funktioniert das nicht?
Sebbo86 ist offline   Mit Zitat antworten
Alt 19.08.2011, 22:43   #2
Bummibaer
Registered Schwarzbär
 
Benutzerbild von Bummibaer
 
Registrierungsdatum: Jan 2004
Ort: RZ Bärenhöhle Raum Stuttgart grob
Beiträge: 941
Hoi,

guggsu hier http://www.openbsd.org/faq/pf/rdr.html

Gruß Bummibär
__________________
- Bärenmitglied des Ordens des Heiligen Huthes _/\_

Running FreeBSD 8.x, FreeBSD 9.x, Bummi-OS 9.1-PRERELEASE
Bummibaer ist offline   Mit Zitat antworten
Alt 19.08.2011, 23:40   #3
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Da habe ich bereits geguckt und es auch schon mit
Code:
pass in on tl0 proto tcp from any to any port 80 rdr-to 192.168.0.20
in allen denkbaren Varianten was Interfaces etc angeht versucht, es funktioniert jedoch nicht.

Geändert von Sebbo86 (19.08.2011 um 23:52 Uhr).
Sebbo86 ist offline   Mit Zitat antworten
Alt 20.08.2011, 08:33   #4
Azazyel
Registered User
 
Registrierungsdatum: Jun 2005
Beiträge: 388
Ich mal habe deine Konfiguration mit meiner verglichen, der einzige Unterschied zu der meinigen sind ist in dieser Zeile:
Code:
pass in on egress inet proto tcp to (egress) port 80 rdr-to 192.168.0.20 port 80 synproxy state
Ich kann vor dem ersten Kaffee aber nicht beurteilen, inwieweit die runden Klammern signifikant sind.

Hast du denn z.B. mit tcpdump probiert, ob die Pakete an deinem externen Interface (hier z.B. vr1) ankommen?
Code:
tcpdump -i vr1 tcp and dst port 80
Was sagt denn das Logging beim Verbindungsaufbau an deine externe IP?

Geändert von Azazyel (20.08.2011 um 08:35 Uhr). Grund: Ein paar Sachen verständlicher gemacht
Azazyel ist offline   Mit Zitat antworten
Alt 20.08.2011, 09:13   #5
mark05
Registered User
 
Registrierungsdatum: Nov 2003
Ort: Bergisch Gladbach
Beiträge: 569
moin

de runden klammern um das interface besagt das pf die ip vom interface selber ausliest

hat gerade bei dynamischen ips vorteile

also ein

Code:
match in on wan_if proto tcp from any to (wan_if) port 80 rdr-to 192.168.0.20 port 80
sollte gehen

holger
mark05 ist offline   Mit Zitat antworten
Alt 20.08.2011, 09:56   #6
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Es funktioniert leider immer noch nicht. Trotzdem schonmal danke für die Hilfe.

Mit tcpdump kann ich feststellen, dass die Pakete ankommen, allerdings nur an der tun0, nicht an der Netzwerkkarte fxp0 wo das Modem dranhängt.
Sebbo86 ist offline   Mit Zitat antworten
Alt 20.08.2011, 12:36   #7
Bummibaer
Registered Schwarzbär
 
Benutzerbild von Bummibaer
 
Registrierungsdatum: Jan 2004
Ort: RZ Bärenhöhle Raum Stuttgart grob
Beiträge: 941
Hi,

ich würde mal auf ne falsche Rule Reihenfolge tippen.
Prüf mal ob die Reihenfolge der Rulearten passt. Pi mal Bärenpfote müsste die rdr pass Konstruktion eigentlich vor de Filter kommen bzw. aufgeteilt der rdr davor und das pass bei de Filter.

Also wenn ich das recht im Bärenkopf han:
- Macros, Tabellen, Optionen, Scrub, Queueing, Translation, Filterregeln
(NAT vor Filter)


Gruß Bär
__________________
- Bärenmitglied des Ordens des Heiligen Huthes _/\_

Running FreeBSD 8.x, FreeBSD 9.x, Bummi-OS 9.1-PRERELEASE

Geändert von Bummibaer (20.08.2011 um 12:42 Uhr).
Bummibaer ist offline   Mit Zitat antworten
Alt 20.08.2011, 14:53   #8
mark05
Registered User
 
Registrierungsdatum: Nov 2003
Ort: Bergisch Gladbach
Beiträge: 569
wenn tun0 verwendet wird muss natuerlich auch dieses als interface fuer pf verwendet werden

ich gehe dann davon mal aus das du pppoe mit dem pppd machst ?

wenn ja gebe ich mal als tip den kernel pppoe zu verwenden.( man 4 pppoe )


Code:
deny on tun0 all match in on tun0 proto tcp from any to (tun0) port 80 rdr-to 192.168.0.20 port 80
man beachte auch die unterscheide bei match und pass

kurz gesagt match vereint die rdr und die allow regel in einem ( bis obsd 4.6 waren das 2 regeln ) oder man verwendet pass da funktioniert das aehnlich .



holger
mark05 ist offline   Mit Zitat antworten
Alt 21.08.2011, 12:06   #9
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Das mit dem Kernel pppoe habe ich auch schon probiert, was ebenfalls nicht funktioniert. Die ifconfig sagt immer nur "no carrier", muß pppd hingegen funktioniet die Verbindung einwandfrei.

Mit PF gibts es immernoch nichts neues.

Habe es mit
Code:
deny on tun0 all match in on tun0 proto tcp from any to (tun0) port 80 rdr-to 192.168.0.20 port 80
portbiert, aber es geht nicht. Bei deny on sagt er Syntax Fehler. Das match in nimmt er ohne Fehlermeldung, funktionieren tut es aber nicht
Bzgl der Reihenfolge:
Ich habe das match u.A. direkt unter die nat Anweiung gesetzt ohne Erfolg.
Sebbo86 ist offline   Mit Zitat antworten
Alt 21.08.2011, 12:33   #10
mark05
Registered User
 
Registrierungsdatum: Nov 2003
Ort: Bergisch Gladbach
Beiträge: 569
beim kernel pppoe muss zuert ein
ifconfig ethernet interface up gemacht werden.
z.b. ifconfig em0 up

in /etc eine datei hostname.em0 inhalt up angelegt werden
danachtr klappt das auch mit mit den pppoe0 interface

das macht der pppd automatisch
das deny war nur als beispiel.

ist net.inet.ip.forwaring gesetzt ?
wenn tun0 up ist ( sprich verbindung hergestellt )
und dann pfctl -f /etc/pf.conf

geht es dann

normalerweise muss man die regeln , beim pppd, laden wenn die pppoe verbindung hergestellt ist.

das kann man per hand machen oder via ip-up und ip-down siehe man pppd

wie testest du den rdr ?

holger
mark05 ist offline   Mit Zitat antworten
Alt 21.08.2011, 13:27   #11
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Also bei mir hängt das DSL Modem an der fxp0.
im /etc Odner habe ich bereits eine hostname.fxp0 mit dem Inhalt up angelegt.

Für das pppoe habe ich im selben Ordner eine Datei namens hostname.pppoe0 mit dem Inhalt aus der man page. Selbstverständlich mit den richtigen Zugangsdaten^^
Stelle ich dann erst fpx0 up und dann pppoe0 zeigt ifconfig "no carrier" bei pppoe0.

Den rdr habe ich getestet indem ich kurzer Hand die zugewiesene IP im Browser eingegeben habe. So wie ich das verstehe sollte dann die Seite von 192.168.0.20 kommen.

Code:
192.168.0.20 <-------> 192.168.0.21 <-------> INTERNET Webserver OpenBSD Router
IP forwaring ist aktiviert in der /etc/sysctl.conf
net.inet.ip.forwarding=1

Was mir gerade aufgefallen ist:
In der rc.conf.local hab ich pf=NO drin stehen. PF startet aber in Verbindung mit der Anweisung
Code:
! sh -c "/sbin/pfctl -e -f /etc/pf.conf"
in der /etc/ppp/ppp.linkup automatisch.
Sonst würde das NAT warscheinlich gar nicht funktionieren.

Nachtrag:
In dem Rechner gibt es noch eine dritte Netzwerkkarte, stge0, diese ist jedoch nicht konfiguriert, also es gibt keine hostname.stge0.
Kann das vielleicht ursächlich sein?
Zumal die beiden Netzwerkkarten sich per pci riser karte einen pci slot teilen.

Geändert von Sebbo86 (21.08.2011 um 13:33 Uhr).
Sebbo86 ist offline   Mit Zitat antworten
Alt 22.08.2011, 05:21   #12
mark05
Registered User
 
Registrierungsdatum: Nov 2003
Ort: Bergisch Gladbach
Beiträge: 569
das was von pf startet ist das default ruleset nicht dein rule set ...
du musst schon pf via pf.conf.local starten und dort ggf deine eigene datei angeben.

sonst wird das nix.
nat kann , scheinbar wird, vom pppd gemacht.

mal mit pfctl -vvsr pruefen ob der eigne ruleset geladen ist.

holger
mark05 ist offline   Mit Zitat antworten
Alt 22.08.2011, 22:11   #13
Sebbo86
Registered User
 
Registrierungsdatum: Aug 2011
Beiträge: 6
Eine pf.conf.local gibt es hier nicht. Ich denke schon das die Regeln richtig geladen worden sind. Zumal wenn ich die NAT Zeile in der pf.conf auskommentiere, funktioniert das NAT nicht mehr.

pfctl -vvsr gibts u.A folgendes aus:
Code:
@13 pass in on tun0 inet proto tcp from any to 77.5.71.194 port = www flags S/SA keep state rdr-to 192.168.0.20 port 80 [ Evaluations: 192 Packets: 3 Bytes: 192 States: 0 ] [ Inserted: uid 0 pid 29444 State Creations: 1 ] @14 pass in on tun0 inet proto tcp from any to 77.5.71.194 port = https flags S/SA keep state rdr-to 192.168.0.20 port 443 [ Evaluations: 6 Packets: 3 Bytes: 192 States: 1 ]
Ich habe über eine andere Internet Leitung auf die IP zugegriffen, mittlerweile kriege ich timeouts vom Browser ausgegeben.

Die pf.conf sieht indes so aus:
Code:
# macros int_if="rl0" ext_if="tun0" tcp_services="{ 22, 113 }" icmp_types="echoreq" lspro="192.168.0.10" server="192.168.0.20" # options set block-policy return set loginterface fxp0 set skip on lo # match rules match out on egress inet from !(egress) to any nat-to (egress:0) #match in on tun0 proto tcp from any to (tun0) port 80 rdr-to 192.168.0.10 port 80 # filter rules block in log pass out quick antispoof quick for { lo $int_if } pass in on egress inet proto tcp from any to (egress) \ port $tcp_services pass in on $ext_if proto tcp from any to $ext_if port 80 \ rdr-to $server port 80 pass in on $ext_if proto tcp from any to $ext_if port 443 \ rdr-to $server port 443 pass in inet proto icmp all icmp-type $icmp_types pass in on $int_if
Ist die Reihenfolge der Regeln denn soweit in Ordnung?
Kann die Problematik am pppd liegen?
Hat bzgl des Kernel pppoe jemand Ideen warum die scheiße nicht funktioniert?

Geändert von Sebbo86 (22.08.2011 um 22:17 Uhr).
Sebbo86 ist offline   Mit Zitat antworten
Alt 23.08.2011, 08:30   #14
mark05
Registered User
 
Registrierungsdatum: Nov 2003
Ort: Bergisch Gladbach
Beiträge: 569
hi

reihenfolge spielt keine grosse rolle mehr.

das mit der rc.conf.local solltest du dir schnell angewoehnen da bei einen
update die rc.conf ueberschrieben wird.

siehe man rc.conf

hat du in der hostname.pppoe0 auch ein up gemacht ?

bei deinem auszug der regeln sieht man das die rdr matchen d.h.
es sollte am internen 192.er interface der fw auch die packete zu sehen sein
wenn sie zum ziel gehen ,sowie auf dem interface der maschine selber.


ist bei dem ziel ( 192.168.0.20 ) auch die default route richtig gesetzt ?
spirch gw firewall interne addr ?

wobei ich gerade sehe
Code:
match out on egress inet from !(egress) to any nat-to (egress:0)
versuch das mal ohne das !

holger
mark05 ist offline   Mit Zitat antworten
Alt 23.08.2011, 09:45   #15
oenone
Programmierer
 
Benutzerbild von oenone
 
Registrierungsdatum: Nov 2002
Ort: Bremen
Beiträge: 2.551
Zitat:
Zitat von mark05 Beitrag anzeigen
Code:
match out on egress inet from !(egress) to any nat-to (egress:0)
versuch das mal ohne das !
bloß nicht!

Gibts Log-Einträge? Wie sieht der Traffic in tcpdump aus?
__________________
if you don't remember something, it never happened.
if you aren't remembered, you never existed.
oenone 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
grundsätliche Frage zu pf und einfache Regeln zum Blockieren des Internetzugangs pbtraveller FreeBSD - Netzwerk 8 13.12.2010 23:34
PF Regel Frage vertex OpenBSD - Allgemein 3 29.03.2009 14:28
Rechtliche Frage bzgl. Ports Lateralus FreeBSD - Allgemein 1 11.08.2005 20:44
Neues Release von PF für FreeBSD asg News 0 25.04.2003 07:53
kleine Frage bzgl. des Findens von Dateien gilioner FreeBSD - Allgemein 19 15.04.2003 13:39


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.


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