簡體   English   中英

使用Windows防火牆API創建適用於服務運行的所有應用程序的規則

[英]Creating a rule with the Windows Firewall API that applies to all applications run by a service

我正在嘗試為Windows服務設置防火牆規則,以使用Windows Service Hardening API拒絕除主機和端口白名單之外的所有入站和出站TCP和UDP連接,請遵循此處的VBScript示例。

現在,此服務可能會生成新進程(因為它是一個持續集成的構建和測試代理),因此僅像示例腳本中那樣設置NewOutboundRule.ApplicationName = "%systemDrive%\\WINDOWS\\system32\\svchost.exe"還是NewOutboundRule.ApplicationName = "%systemDrive%\\WINDOWS\\system32\\svchost.exe"上面-我需要一個規則來應用於該服務運行的所有應用程序。

但是,如果我嘗試設置一個新的入站規則,其中未在INetFw接口上指定所謂的可選ApplicationName屬性,則添加新規則的調用將失敗(在上述腳本的wshRules.Add NewOutboundRule行)。 其他一切都正確,就像我指定了ApplicationName ,調用成功。

是否有某種方法可以創建適用於ApplicationName所有可能值的規則,或者有其他替代方法?

經過一些試驗,事實證明WSH規則的工作方式如下:調用INetFwServiceRestriction::RestrictService (帶有INetFwServiceRestriction::RestrictService restrictService=TRUE )僅需要包含被稱為啟動服務的主要可執行文件的名稱。 如果該進程使用任何其他可執行文件生成新進程,則默認情況下,該新進程將阻止所有入站和出站網絡連接。 即使通過INetFwServiceRestriction::Rules為主要可執行文件添加了例外,也是如此。

因此,如果服務運行的輔助可執行文件需要網絡訪問,則也必須為這些可執行文件添加顯式的INetFwRule異常。 這很有意義-對RestrictService的調用會阻止所有內容,然后可以添加包含應用程序名稱的例外白名單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM