2012-03-15 23 views
7

Puedo agregar reglas individuales al Firewall de Windows (Servidor 2008 R2), pero estoy tratando de evitar múltiples reglas por dirección IP y me gustaría actualizar la regla existente RemoteAddresses . A continuación se muestra el código que estoy usando para agregar reglas, estoy haciendo todo lo posible para investigar cómo actualizar las reglas existentes Direcciones remotas, pero sin suerte.Actualizando reglas de firewall existentes usando API

¡Se agradece cualquier ayuda!

string ip = "x.x.x.x"; 

INetFwRule2 firewallRule = (INetFwRule2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); 

firewallRule.Name = "Block Bad IP Addresses"; 
firewallRule.Description = "Block Nasty Incoming Connections from IP Address."; 
firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_BLOCK; 
firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN; 
firewallRule.Enabled = true; 
firewallRule.InterfaceTypes = "All"; 
firewallRule.RemoteAddresses = ip; 

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 
firewallPolicy.Rules.Add(firewallRule); 
+0

por favor, evite anteponiendo a sus preguntas con C# o similares, eso es lo que las etiquetas son para. –

Respuesta

10

El siguiente código funciona para mí:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2) Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 

var rule = firewallPolicy.Rules.Item("Block Bad IP Addresses"); // Name of your rule here 
rule.Name = "Block Block Block"; // Update the rule here. Nothing else needed to persist the changes 
+0

hay alguna manera de desbloquear el IP bloqueado, me refiero a actualizar la regla – Arshad

+0

Puede cambiar la regla.RemoteAddresses (separados por comas) –

+2

Sugerencia para quienes prueban este código: Los cambios se mantienen como se describe, pero es posible que no aparezcan en el _Windows Firewall con la aplicación Advanced Security_ hasta que se actualice la pantalla. – HABO

4

Además de amdmax respuesta (lo siento, no puedo añadir un comentario) me encontré con que no existe una simple llamada a un método para comprobar para ver si existe una regla por lo que se le ocurrió esto para asegurarse de que se crea una regla de si existe o no:

INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
     Type.GetTypeFromProgID("HNetCfg.FwPolicy2")); 

    INetFwRule firewallRule = firewallPolicy.Rules.OfType<INetFwRule>().Where(x => x.Name == RULE_NAME).FirstOrDefault(); 

    if (firewallRule == null) 
    { 
    firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule")); 
    firewallRule.Name = RULE_NAME; 
    firewallPolicy.Rules.Add(firewallRule); 
    } 
Cuestiones relacionadas