this slowpoke moves

Firewall Rule delete

Das ideale Regelwerk einer Firewall ist immer so aufgebaut, dass grundsätzlich jeder Netzwerk-Verkehr verboten ist und die erwünschten Verbindungen erlaubt werden ("Whitelist"-Strategie). Die andere Variante, nur unerwünschten Verkehr zu verbieten und alles andere zu erlauben, kann im schnellen Wandel der IT-Welt niemals als sicher betrachtet werden.

Deshalb ist das Löschen einer Regel .. na ja, so eine Sache.

Man sollte unbedingt wissen, warum die Regel existiert, für welches Programm sie existiert und was sie eigentlich verbieten soll.

Wenn man sich dieser drei Punkte nicht sicher ist, sollte die Regel doch da bleiben, wo sie ist.

Eine Firewall-Regel ist folgendermaßen aufgebaut:
Name: Group: Profil: Aktiviert: Aktion: Programm: Lokale Addresse: Remoteaddress: Protokoll: Lokaler Port: Remoteport: Benutzer: Computer:

Um diese Einträge zu löschen, braucht man den exakten Namen der Regel, der sich nicht immer in der Regelliste als identisch erweist. Deshalb muss ein Doppelklick auf die Regel ausgeführt werden, damit man den richtigen Namen der Regel geliefert bekommt.

Natürlich klappt das alles nur mit Admin Rechte.

uses ActiveX, ComObj

procedure RemoveExceptFromFirewall(const RuleName: String);
const
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC  = 4;
var
  Profile: Integer;
  Policy2: OleVariant;
  RObject: OleVariant;
begin
  Profile := NET_FW_PROFILE2_PRIVATE OR NET_FW_PROFILE2_PUBLIC;
  Policy2 := CreateOleObject('HNetCfg.FwPolicy2');
  RObject := Policy2.Rules;
  RObject.Remove(RuleName);
end;
Beispiel zum löschen :
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit1.Text = '' then begin
  MessageDlg('I Need a "Rule Name" to Delete Rule from Firewall',mtInformation, [mbOK], 0); Exit; end;

  try
    CoInitialize(nil);
    try
      RemoveExceptFromFirewall(Edit1.Text);
      Screen.Cursor := crHourGlass;
      Sleep(1000);
      MessageDlg('Delete Rule "' + Edit1.Text + '" from Firewall done',mtInformation,[mbOK],0);
      Screen.Cursor := crDefault;
    finally
      CoUninitialize;
    end;
 except
    on E:EOleException do
        ShowMessage(Format('EOleException %s %x', [E.Message,E.ErrorCode]));
 end;
end;

Keine Kommentare:

Kommentar veröffentlichen

Beliebte Posts

Translate