Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Firewall Meldung erzwingen (https://www.delphipraxis.net/172644-firewall-meldung-erzwingen.html)

QuickAndDirty 15. Jan 2013 12:25

Firewall Meldung erzwingen
 
Hallo,
die Frage ist vermutlich sehr naiv aber ich glaube an das Gute in den Programmierern von Microsoft und in den Sicherheitssoftwareentwicklern.

Gibt es eine Möglichkeit aufpoppen eines Erlaubungs/Verbots Dialog von der Firewall anzufordern um einem Dienst zu erlauben "Server" auf besagtem Port spielen zu dürfen?

Ich habe leider festgestellt das es auf manchen System nicht trivial ist einen Netzwerk Server-Dienst in betrieb zu nehmen.
-Auf manchen einfachen Systemen kommt die Windows-Firewall und fragt und auf manchen nicht.
-Auf manchen Systemen fragt eine Sicherheitssoftware z.B. ESET nach und auf einem anderen wiederum nicht.
-Auf manchen W2008 Server R2 Systemen fragt die Firewall und der Port ist dann nur für Anwendungen geöffnet, als Dienst ist man von außen nicht verfügbar. Irgendwelche Systemrichtlinien sind dafür verantwortlich die ich nicht kenne...nur ein Admin hat das mal gelöst(hat 2 Tage Recherche erfordert), der ist aber nicht mehr bei dem Kunden beschäftigt.
-Auf manchen W2008 Server R2 Systemen geht es einfach wenn man den Port in der Firewall freigibt...


Gibt es eine Möglichkeit das öffnen der Ports für "Admins"/"User in kleinen Organisationen" leicht zu machen?

Vielleicht eine zentrale API Nachfrage so nach dem Motto
Show_Security_Center_Port_Open_Dialog(Port,sscpodA pplication or sscpoService)

Bernhard Geyer 15. Jan 2013 12:29

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1199131)
Vielleicht eine zentrale API Nachfrage so nach dem Motto
Show_Security_Center_Port_Open_Dialog(Port,sscpodA pplication or sscpoService)

Gibts doch: http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

QuickAndDirty 15. Jan 2013 13:27

AW: Firewall Meldung erzwingen
 
hm...cool. Ich wusste doch das Programmierer gute Menschen sind.

Welche von den API Funktionen passt oder wo es brauchbare Beispiele gibt weiß du nicht oder?(ja ich weiß, aber ich dachte vielleicht lässt sich das Recherchieren verkürzen wenn du es eh schon weißt).

Bernhard Geyer 15. Jan 2013 14:46

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1199142)
Welche von den API Funktionen passt oder wo es brauchbare Beispiele gibt weiß du nicht oder?(

Neee. Hatte nur gewusst das es ne API gibt. Hatte sie aber bisher nicht benötigt.

QuickAndDirty 15. Jan 2013 17:16

AW: Firewall Meldung erzwingen
 
Reagieren Sicherheitstools(Kaspersky,ESET &c.) auch auf diese API-Aufrufe?

hathor 15. Jan 2013 17:27

AW: Firewall Meldung erzwingen
 
Nicht getestet:

http://code.google.com/p/ryulib4delp...all.pas?edit=1

Delphi-Quellcode:
unit FireWall;

interface

uses
  ActiveX, ComObj,
  Classes, SysUtils;

const
  NET_FW_PROFILE2_DOMAIN = 1;
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC = 4;

  NET_FW_SCOPE_ALL = 0;
  NET_FW_IP_VERSION_ANY = 2;

  NET_FW_IP_PROTOCOL_TCP = 6;
  NET_FW_ACTION_ALLOW = 1;

procedure AddPortToFirewall(Caption:string; PortNumber:Cardinal);
procedure AddExceptionToFirewall(Caption, Executable: string);

implementation

procedure AddPortToFirewall(Caption:string; PortNumber:Cardinal);
var
  fwMgr,port:OleVariant;
  profile:OleVariant;
begin
  fwMgr := CreateOLEObject('HNetCfg.FwMgr');
  profile := fwMgr.LocalPolicy.CurrentProfile;
  port := CreateOLEObject('HNetCfg.FWOpenPort');
  port.Name := Caption;
  port.Protocol := NET_FW_IP_PROTOCOL_TCP;
  port.Port := PortNumber;
  port.Scope := NET_FW_SCOPE_ALL;
  port.Enabled := true;
  profile.GloballyOpenPorts.Add(port);
end;

procedure AddExceptionToFirewall(Caption, Executable: string);
var
  FirewallMsg: OleVariant;
  Application: OleVariant;
  CurrentProfile: OleVariant;
begin
  CoInitialize(nil);
  try
    FirewallMsg := CreateOLEObject('HNetCfg.FwMgr');
    CurrentProfile := FirewallMsg.LocalPolicy.CurrentProfile;
    Application := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
    Application.ProcessImageFileName := Executable;
    Application.Name := Caption;
    Application.Scope := NET_FW_SCOPE_ALL;
    Application.IpVersion := NET_FW_IP_VERSION_ANY;
    Application.Enabled := True;
    CurrentProfile.AuthorizedApplications.Add(Application);
  finally
    CoUninitialize;
  end;
end;

end.
Mehr Infos:
http://www.activexperts.com/activmon...ndowsfirewall/
http://www.sevenforums.com/tutorials...exception.html
http://www.sevenforums.com/tutorials...-settings.html
.
.

QuickAndDirty 15. Jan 2013 17:33

AW: Firewall Meldung erzwingen
 
@Hathor:
Danke!
Ich habe auch hier etwas gefunden
http://stackoverflow.com/questions/5...ll-rule-for-xp
falls es jemanden interessiert

Jetzt steht noch im Raum.
Was ist mit 3rd Party Firewalls,
sagt denen das Security Center bescheid das ich gerne eine Ausnahme hätte?

Bernhard Geyer 15. Jan 2013 20:06

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1199183)
Jetzt steht noch im Raum.
Was ist mit 3rd Party Firewalls,
sagt denen das Security Center bescheid das ich gerne eine Ausnahme hätte?

Moderne Firewalls müssten sich alle an der Windows-API anmelden so das sie benachrichtig werden. Kein Firewall-Hersteller will haben das die Windows-Meldung kommt das der Rechner nicht geschützt wäre weil er sich nicht korrekt registriert.

musicman56 15. Jan 2013 22:34

AW: Firewall Meldung erzwingen
 
Hallo,

was ich vom Sicherheitsprinzip her nicht ganz verstehe: Darf den Code wie in der "Unit Firewall" überhaupt so funktionieren? Das wäre ja für Schadprogramme quasi ein Selbstbedienungsladen :shock:

Klaus01 16. Jan 2013 07:47

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von musicman56 (Beitrag 1199202)
Hallo,

was ich vom Sicherheitsprinzip her nicht ganz verstehe: Darf den Code wie in der "Unit Firewall" überhaupt so funktionieren? Das wäre ja für Schadprogramme quasi ein Selbstbedienungsladen :shock:

Es wird ja nicht automatische die Firewall freigegeben.
Der Benutzer muss das erst in einem Dialog bestätigen.


Grüße
Klaus

Codehunter 16. Jan 2013 08:21

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von Klaus01 (Beitrag 1199217)
Es wird ja nicht automatische die Firewall freigegeben.
Der Benutzer muss das erst in einem Dialog bestätigen.

Es sei denn, der Benutzer wurschtelt in alter Windows-Manier mit Adminrechten. Dann kommt i.d.R. überhaupt keine Nachfrage. Und schaut man dann mal in die Ausnahmenliste der Windows-Firewall, dann wundert man sich wie viel Drittsoftware da drin steht von der man noch nie was gehört hat.

Ebenso fordern ja die meisten Installer Adminrechte an und schieben die FW-Ausnahmen dann mit den einmal erteilten Rechten in die Liste. Ja sogar der Treiber von meinem Monitor hat einen Eintrag hinterlegt.

Ganz ehrlich: Das Vorhandensein einer Desktop-Firewall wiegt die User in einem falschen Gefühl der Sicherheit. Welcher Ottonormal-Mausschubser schaut denn schon nach jeder Software-Installation in die Ausnahmenliste?

Dazu kommt ein etwas seltsames Verhalten von Windows: Schreibe ich ein eigenes Programmchen das z.B. die Indy-Komponenten verwendet und über Port 80 (HTTP) mit einem beliebigen Server im Internet kommuniziert. Dann kann ich das Programm auf jedem Windows-Rechner ausführen (einfach die EXE rüberkopieren, keine Installation mit erhöhten Rechten) und Windows lässt das ohne Weiteres zu. Da kommt von der Windows-Firewall nicht der geringste Kommentar. Es sei denn man hat die FW-Standardeinstellungen händisch verschärft.

QuickAndDirty 18. Jan 2013 15:06

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von hathor (Beitrag 1199181)
Nicht getestet:

http://code.google.com/p/ryulib4delp...all.pas?edit=1

Delphi-Quellcode:
unit FireWall;

interface

uses
  ActiveX, ComObj,
  Classes, SysUtils;

const
  NET_FW_PROFILE2_DOMAIN = 1;
  NET_FW_PROFILE2_PRIVATE = 2;
  NET_FW_PROFILE2_PUBLIC = 4;

  NET_FW_SCOPE_ALL = 0;
  NET_FW_IP_VERSION_ANY = 2;

  NET_FW_IP_PROTOCOL_TCP = 6;
  NET_FW_ACTION_ALLOW = 1;

procedure AddPortToFirewall(Caption:string; PortNumber:Cardinal);
procedure AddExceptionToFirewall(Caption, Executable: string);

implementation

procedure AddPortToFirewall(Caption:string; PortNumber:Cardinal);
var
  fwMgr,port:OleVariant;
  profile:OleVariant;
begin
  fwMgr := CreateOLEObject('HNetCfg.FwMgr');
  profile := fwMgr.LocalPolicy.CurrentProfile;
  port := CreateOLEObject('HNetCfg.FWOpenPort');
  port.Name := Caption;
  port.Protocol := NET_FW_IP_PROTOCOL_TCP;
  port.Port := PortNumber;
  port.Scope := NET_FW_SCOPE_ALL;
  port.Enabled := true;
  profile.GloballyOpenPorts.Add(port);
end;

procedure AddExceptionToFirewall(Caption, Executable: string);
var
  FirewallMsg: OleVariant;
  Application: OleVariant;
  CurrentProfile: OleVariant;
begin
  CoInitialize(nil);
  try
    FirewallMsg := CreateOLEObject('HNetCfg.FwMgr');
    CurrentProfile := FirewallMsg.LocalPolicy.CurrentProfile;
    Application := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
    Application.ProcessImageFileName := Executable;
    Application.Name := Caption;
    Application.Scope := NET_FW_SCOPE_ALL;
    Application.IpVersion := NET_FW_IP_VERSION_ANY;
    Application.Enabled := True;
    CurrentProfile.AuthorizedApplications.Add(Application);
  finally
    CoUninitialize;
  end;
end;

end.
Mehr Infos:
http://www.activexperts.com/activmon...ndowsfirewall/
http://www.sevenforums.com/tutorials...exception.html
http://www.sevenforums.com/tutorials...-settings.html
.
.

Warum ist die eine Prozedur mit CoInitialize und das andere ohne?

musicman56 18. Jan 2013 18:02

AW: Firewall Meldung erzwingen
 
Zitat:

Warum ist die eine Prozedur mit CoInitialize und das andere ohne?
Das würde mich auch interessieren.

Andere Frage/Problem: Weil bei Server 2012 standardmäßig die Benachrichtigung ausgeschaltet ist, wollte ich sie mal damit einschalten:

Delphi-Quellcode:
procedure SetNotificationDisabled(Value: boolean);
var
  FirewallMsg: OleVariant;
  FirewallApp: OleVariant;
  CurrentProfile: OleVariant;
begin
  CoInitialize(nil);
  try
    FirewallMsg := CreateOLEObject('HNetCfg.FwMgr');
    CurrentProfile := FirewallMsg.LocalPolicy.CurrentProfile;
    FirewallApp := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
    FirewallApp.NotificationsDisabled := Value;
    CurrentProfile.AuthorizedApplications.Add(FirewallApp);
  finally
    CoUninitialize;
  end;
end;
Es folgt eine Exception: Die Methode 'NotificationsDisabled' wird vom Automatisierungsobjekt nicht unterstützt.

Hab mir die Beispiele unter activexperts.com angesehen. Es müsste das doch eigentlich gehen. Hat jemand dazu eine Idee?

QuickAndDirty 19. Jan 2013 10:33

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von musicman56 (Beitrag 1199690)
Zitat:

Warum ist die eine Prozedur mit CoInitialize und das andere ohne?
Das würde mich auch interessieren.

Andere Frage/Problem: Weil bei Server 2012 standardmäßig die Benachrichtigung ausgeschaltet ist, wollte ich sie mal damit einschalten:

Delphi-Quellcode:
procedure SetNotificationDisabled(Value: boolean);
var
  FirewallMsg: OleVariant;
  FirewallApp: OleVariant;
  CurrentProfile: OleVariant;
begin
  CoInitialize(nil);
  try
    FirewallMsg := CreateOLEObject('HNetCfg.FwMgr');
    CurrentProfile := FirewallMsg.LocalPolicy.CurrentProfile;
    FirewallApp := CreateOLEObject('HNetCfg.FwAuthorizedApplication');
    FirewallApp.NotificationsDisabled := Value;
    CurrentProfile.AuthorizedApplications.Add(FirewallApp);
  finally
    CoUninitialize;
  end;
end;
Es folgt eine Exception: Die Methode 'NotificationsDisabled' wird vom Automatisierungsobjekt nicht unterstützt.

Hab mir die Beispiele unter activexperts.com angesehen. Es müsste das doch eigentlich gehen. Hat jemand dazu eine Idee?

ne!
Aber CoUninitialize findet sich nicht in ComObj da wo CoInitialize und CoInitialzeEx zu finden sind...
seltsam.

Außerdem ne frage mal so neben bei. Wenn ein Setup euch Firewall Ausnahmen einrichtet, erwartet ihr das die Deinstallation diese zurücknimmt?

Zacherl 19. Jan 2013 14:38

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1199735)
Außerdem ne frage mal so neben bei. Wenn ein Setup euch Firewall Ausnahmen einrichtet, erwartet ihr das die Deinstallation diese zurücknimmt?

Würde ich intuitiv schon erwarten. Am besten wäre aber eine kurze Sicherheitsabfrage am Ende der Deinstallation. So machen es viele Spiele z.b., um sich nach der Deinstallation zu versichern, ob neben den Programmdateien auch die Spielstände des Benutzers gelöscht werden sollen.

musicman56 19. Jan 2013 16:05

AW: Firewall Meldung erzwingen
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1199735)
Außerdem ne frage mal so neben bei. Wenn ein Setup euch Firewall Ausnahmen einrichtet, erwartet ihr das die Deinstallation diese zurücknimmt?

ich benutze mein eigenes Installationsprogramm, werde ab jetzt diese Unit verwenden um die Ausnahmen eintragen, und selbstverständlich bei der Deinstallation auch wieder austragen. Das denke ich gehört zum guten Stil. Ein Anwender hat denke ich auch ein Recht darauf, dass eine Installation + Deinstallation keine Spuren im System hinterlässt.

Wenn die Ausnahme "nur" eine App ist, dann passiert prinzipiell zwar nichs, aber wenn ein Port freigegeben wird, dann denke ich ist das Zurücknehmen Pflicht.

Mit etwas mehr Arbeit verbunden wird die Angelegenheit nur, wenn man in ein Setup-Programm eigene DLL's einbindet. Dann muss man selber dafür sorgen, dass die Ausnahmen ausgetragen werden.

QuickAndDirty 21. Jan 2013 09:32

AW: Firewall Meldung erzwingen
 
Wieso wusste ich das ich die Deinstallation jetzt auch noch in ordnung bringen muss...

Warum hättet ihr nicht sowas Antworten können wie: "Die lässt doch jedes Programm offen, kümmere dich nicht drumm!" ?

Na allerdings profitieren wir firmenintern sowieso am meisten von einer sauberen Deinstallation (brauchen wir ja um Installations tests durchführen zu können).


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr.

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