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!