Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi mini Firewall programmieren ?? (https://www.delphipraxis.net/75882-mini-firewall-programmieren.html)

x000x 25. Jun 2008 14:29

Re: mini Firewall programmieren ??
 
Moin moin,

in dem du das Interface mit Parameter PF_ACTION_DROP erstellst. Also
Delphi-Quellcode:
   PfCreateInterface(0, PF_ACTION_DROP, PF_ACTION_DROP, False, False, Handle_Interface);
Jetzt wird von Haus aus alles geblockt, nur die Pakete die deinen Regeln entsprechen, werden durchgelassen.

MorphieX 25. Jun 2008 14:41

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?

Sherlock 25. Jun 2008 14:48

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

x000x 25. Jun 2008 14:54

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).

Morphie 26. Jun 2008 08:33

Re: mini Firewall programmieren ??
 
Hmmm, dann bin ich da wohl zu blööd zu ;-)
Delphi-Quellcode:
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;
Da sollte er doch eigentlich alle Ports blockieren, außer 3389, richtig?
Bin über RDP auf dem Rechner drauf, auf dem ich das Programm ausführe, die Verbindung wird trotzdem unterbrochen...
Gedankenfehler von mir?

x000x 26. Jun 2008 09:34

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: ...

Morphie 26. Jun 2008 09:46

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:
type
  PFFORWARD_ACTION = Integer;
  PPFFORWARD_ACTION = ^PPFFORWARD_ACTION;
bekomme ich folgende Meldung:
Zitat:

[DCC Fehler] DropAllU.pas(24): E2086 Typ 'PPFFORWARD_ACTION' ist nicht vollständig definiert
[DCC Fehler] Project1.dpr(6): F2063 Verwendete Unit '..\..\..\Desktop\DropAllU.pas' kann nicht compiliert werden

Hab das dann mal in
Delphi-Quellcode:
type
  PFFORWARD_ACTION = Integer;
  PPFFORWARD_ACTION = ^PFFORWARD_ACTION;
geändert, dann ist die Meldung weg.

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

x000x 26. Jun 2008 10:35

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:
//..
// 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;
Damit sollte es dann jetzt aber funktionieren.

Morphie 26. Jun 2008 13:47

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

x000x 26. Jun 2008 14:03

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 18:48 Uhr.
Seite 4 von 5   « Erste     234 5      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz