如何在辅助角色实例上成功编辑代码中的防火墙规则?
How to edit Firewall rules in code successfully on a Worker Role Instance?
我正在尝试一些在本地运行但在我的云实例上不起作用的代码。我认为它可能与权限相关,但我无法修复它。这是我在本地调试我的工作者角色时所拥有的,但在发布时没有任何反应(现在正在暂存)。
string strCmdText = string.Format("advfirewall firewall add rule name=\"BlockU\" protocol=any dir=in action=block remoteip={0}", ip);
ProcessStartInfo psi = new ProcessStartInfo("netsh.exe", strCmdText);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
try
{
Process.Start(psi);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
我也试过使用
psi.Verb = "runas";
但这也无济于事。
最后我像这样尝试了防火墙 api。这在本地也有效,但在最后一行抛出拒绝访问错误。
INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
inboundRule.Enabled = true;
inboundRule.RemoteAddresses = ip;
inboundRule.InterfaceTypes = "All";
inboundRule.Protocol = (int)NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_ANY;
inboundRule.Name = "BlockU Part 2";
//inboundRule.Profiles = currentProfiles;
inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
// Now add the rule
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(inboundRule);
我在 azure forums 上发现我需要以更高的权限启用我的工作者角色 运行。这可以在 ServiceDefinition.csdef
文件中完成,方法是将以下属性添加到 WorkerRole 元素
<WorkerRole name="CloudService.Worker" vmsize="ExtraSmall"
enableNativeCodeExecution="true">
并添加
<Runtime executionContext="elevated" />
WorkerRole 元素内的元素。
两组代码 运行 成功更改了配置。
我在 msdn 博客中发现了一个有趣的 post,它使用了一个简化防火墙规则配置的库,它可能会解决您的问题,
在
我正在尝试一些在本地运行但在我的云实例上不起作用的代码。我认为它可能与权限相关,但我无法修复它。这是我在本地调试我的工作者角色时所拥有的,但在发布时没有任何反应(现在正在暂存)。
string strCmdText = string.Format("advfirewall firewall add rule name=\"BlockU\" protocol=any dir=in action=block remoteip={0}", ip);
ProcessStartInfo psi = new ProcessStartInfo("netsh.exe", strCmdText);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
try
{
Process.Start(psi);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
我也试过使用
psi.Verb = "runas";
但这也无济于事。
最后我像这样尝试了防火墙 api。这在本地也有效,但在最后一行抛出拒绝访问错误。
INetFwRule2 inboundRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));
inboundRule.Enabled = true;
inboundRule.RemoteAddresses = ip;
inboundRule.InterfaceTypes = "All";
inboundRule.Protocol = (int)NetFwTypeLib.NET_FW_IP_PROTOCOL_.NET_FW_IP_PROTOCOL_ANY;
inboundRule.Name = "BlockU Part 2";
//inboundRule.Profiles = currentProfiles;
inboundRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK;
// Now add the rule
INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
firewallPolicy.Rules.Add(inboundRule);
我在 azure forums 上发现我需要以更高的权限启用我的工作者角色 运行。这可以在 ServiceDefinition.csdef
文件中完成,方法是将以下属性添加到 WorkerRole 元素
<WorkerRole name="CloudService.Worker" vmsize="ExtraSmall"
enableNativeCodeExecution="true">
并添加
<Runtime executionContext="elevated" />
WorkerRole 元素内的元素。
两组代码 运行 成功更改了配置。
我在 msdn 博客中发现了一个有趣的 post,它使用了一个简化防火墙规则配置的库,它可能会解决您的问题,
在