![]() |
Re: mini Firewall programmieren ??
Moin moin,
in dem du das Interface mit Parameter PF_ACTION_DROP erstellst. Also
Delphi-Quellcode:
Jetzt wird von Haus aus alles geblockt, nur die Pakete die deinen Regeln entsprechen, werden durchgelassen.
PfCreateInterface(0, PF_ACTION_DROP, PF_ACTION_DROP, False, False, Handle_Interface);
|
Re: mini Firewall programmieren ??
Okay, wie ich alle Ports blockiere, wusste ich schon, nur haperts bei mir daran, spezielle Ports wieder freizugeben.
Wie sieht denn so ein "Filter" aus, der spezielle Ports durchlässt? In deinem Beispiel auf Seite 2 war der Filter ja dafür verantwortlich, dass die Ports zu einer bestimmten IP "geforwardet" *g* werden, das kann ich hier sicher so nicht verwenden, oder? |
Re: mini Firewall programmieren ??
Edit: OMG...da hingen ja noch ein paar Seiten hinten dran...sorry...Bis ebens tand hier noch obsoleter, überflüssiger Quatsch.
Sherlock |
Re: mini Firewall programmieren ??
Doch kannst du. Wenn du genau das Beispiel nimmst und nur PF_ACTION_FORWARD durch PF_ACTION_DROP ersetzt,
werden alle Pakete die von irgendeiner IP mit QuellPort 80 kommen durchgelassen. Und alle Pakete die deinen Rechner verlassen wollen und als Zielport 80 haben, werden ebenfalls durchgelassen. Wenn du genau dieses Beispiel testen willst, solltest du auch noch den Port 53 dazunehmen, da sonst die Namensauflösung nicht funktioniert (ist ja ebenfalls geblockt). |
Re: mini Firewall programmieren ??
Hmmm, dann bin ich da wohl zu blööd zu ;-)
Delphi-Quellcode:
Da sollte er doch eigentlich alle Ports blockieren, außer 3389, richtig?
procedure netzsperren(MyIP: String);
var IpLocal : TIpBytes; ipOther : TIpBytes; ipOtherMask : TIpBytes; ipMy : TIpBytes; ipMyMask : TIpBytes; begin if (MyIP <> '') and Not Assigned(Handle_Interface) then begin FillChar(IpLocal, 4, #0); IpLocal := StrToIpBytes(MyIP); PfCreateInterface(0, PF_ACTION_DROP, PF_ACTION_DROP, False, False, Handle_Interface); PfBindInterfaceToIPAddress(Handle_Interface, PF_IPV4, @ipLocal); ipMy := StrToIpBytes(PChar(MyIP)); ipMyMask := StrToIpBytes('255.255.255.255'); // ipOther := StrToIpBytes('0.0.0.0'); ipOtherMask := StrToIpBytes('0.0.0.0'); // Eingehende Pakete ZeroMemory(@ipFltIn, SizeOf(ipFltIn)); ipFltIn.dwFilterFlags := 0; ipFltIn.dwRule := 0; ipFltIn.pfatType := PF_IPV4; ipFltIn.fLateBound := 0; ipFltIn.dwProtocol := FILTER_PROTO_TCP; ipFltIn.wDstPort := FILTER_TCPUDP_PORT_ANY; ipFltIn.wDstPortHighRange := FILTER_TCPUDP_PORT_ANY; ipFltIn.DstAddr := @ipMy; ipFltIn.DstMask := @ipMyMask; ipFltIn.wSrcPort := 3389; ipFltIn.wSrcPortHighRange := 3389; ipFltIn.SrcAddr := @ipOther; ipFltIn.SrcMask := @ipOtherMask; // Ausgehende Pakete ZeroMemory(@ipFltOut, SizeOf(ipFltOut)); ipFltOut.dwFilterFlags := 0; ipFltOut.dwRule := 0; ipFltOut.pfatType := PF_IPV4; ipFltOut.fLateBound := 0; ipFltOut.dwProtocol := FILTER_PROTO_TCP; ipFltOut.wDstPort := 3389; ipFltOut.wDstPortHighRange := 3389; ipFltOut.DstAddr := @ipOther; ipFltOut.DstMask := @ipOtherMask; ipFltOut.wSrcPort := FILTER_TCPUDP_PORT_ANY; ipFltOut.wSrcPortHighRange := FILTER_TCPUDP_PORT_ANY; ipFltOut.SrcAddr := @ipMy; ipFltOut.SrcMask := @ipMyMask; PfAddFiltersToInterface(Handle_Interface, 1, @ipFltIn, 1, @ipFltOut, nil); //portfreigeben(3389,MyIP); //RDP {portfreigeben(137,MyIP); //NetBIOS Name Service portfreigeben(139,MyIP); //NetBIOS File and Printer Sharing portfreigeben(445,MyIP); //NetBIOS File and Printer Sharing portfreigeben(135,MyIP); //RPC portfreigeben(1025,MyIP); //RPC portfreigeben(2049,MyIP); //NFS portfreigeben(1080,MyIP); //SOCKS portfreigeben(7,MyIP); //PING Request portfreigeben(8700,MyIP); //DER SERVER!!!} end; end; Bin über RDP auf dem Rechner drauf, auf dem ich das Programm ausführe, die Verbindung wird trotzdem unterbrochen... Gedankenfehler von mir? |
Re: mini Firewall programmieren ??
Liste der Anhänge anzeigen (Anzahl: 1)
Moin moin,
ja sollte es und macht es bestimmt auch. Ich kenne mich mit dem RDP Protokoll nicht wirklich aus, evtl. wird aber der Port 3389 nur zur Verbindung genutzt und die Session läuft über einen anderen Port? Ich habe dir die DropAllU.pas mal so angepasst, das nur noch Namensauflösung und Port 80 funktionieren. Wenn das auch nicht bei dir funktionieren sollte, dann liegts an :gruebel: ... |
Re: mini Firewall programmieren ??
Vielen Dank für deine Mühe,
hat allerdings ebenfalls nicht funktioniert, komme, sobald ich InstallFW aufrufe, nicht über Port 80 raus. Was mir aber aufgefallen ist (wurde glaub ich auch schon ne Seite vorher besprochen)... bei
Delphi-Quellcode:
bekomme ich folgende Meldung:
type
PFFORWARD_ACTION = Integer; PPFFORWARD_ACTION = ^PPFFORWARD_ACTION; Zitat:
Hab das dann mal in
Delphi-Quellcode:
geändert, dann ist die Meldung weg.
type
PFFORWARD_ACTION = Integer; PPFFORWARD_ACTION = ^PFFORWARD_ACTION; hat das vielleicht damit etwas zutun? Ich habe bestimmt irgendwas übersehen... IP: 192.168.44.241 Subnetzsmaske: 255.255.255.0 ist da etwas entscheidend? Gruß Morphie |
Re: mini Firewall programmieren ??
Moin moin,
jo, da haste nen Fehler entdeckt. Hatte die Teile aus einer Fltdefs.pas kopiert, und da ist es auch schon falsch drinne. Ändere mal folgendes ab:
Delphi-Quellcode:
Damit sollte es dann jetzt aber funktionieren.
//..
// rausnehmen und dafür... // PFFORWARD_ACTION = Integer; // PPFFORWARD_ACTION = ^PFFORWARD_ACTION; // dies rein _PfForwardAction = ( PF_ACTION_FORWARD, PF_ACTION_DROP ); PFFORWARD_ACTION = _PfForwardAction; PPFFORWARD_ACTION = ^_PfForwardAction; //.. // und das jetzt ganz weg //const // PF_ACTION_FORWARD = 0; // PF_ACTION_DROP = 1; |
Re: mini Firewall programmieren ??
Okay, großen Schritt weiter...
Das öffnen der Ports funzt! Besten Dank ;) Allerdings hab ich immer noch nicht raus, warum RDP bei mir abbricht, wenn ich Port 3389 öffne... Habe im Netz nichts darüber gefunden, dass irgendein anderer Port ebenfalls genutzt wird... :( Wenn da nun noch jemand ne Lösung für hat, wär ich unglaublich dankbar ;) Morphie |
Re: mini Firewall programmieren ??
Hm, dann schau doch mal mit netstat welche Ports/IPs/Protokolle bei dir belegt/benutzt werden, wenn du eine aktive RDP Session hast.
Evtl. weisst du dann mehr?! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz