Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#24

Re: mini Firewall programmieren ??

  Alt 7. Feb 2008, 20:34
Moin moin,

ich hab die Unit von oben mal so angepasst, dass eben nur ein Port geblockt wird.
In meinem Fall:
Alle ausgehenden Pakete, die als Ziel eine beliebige IP haben und dort auf Port 80 wollen
Alle eingehenden Pakete, die von einer beliebigen IP kommen und deren Quellport eben 80 ist.

Ansonsten wird nix geblockt.

Das Beispiel ist ohne Fehlerbehandlung - ich denke das kann jeder selber einbauen und anpassen...
Delphi-Quellcode:
procedure InstallFW(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_FORWARD, PF_ACTION_FORWARD, 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 := 80;
      ipFltIn.wSrcPortHighRange := 80;
      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 := 80;
      ipFltOut.wDstPortHighRange := 80;
      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);
   end;
end;
PS: Es handelt sich hier NICHT um eine Firewall, sondern lediglich nur um einen Paketfilter!
Angehängte Dateien
Dateityp: zip filterexample_135.zip (2,9 KB, 86x aufgerufen)
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat