2009-02-26 8 views
5

Estoy creando un sitio basado en foros y quiero bloquear a los miembros que publican spam o abuso. Estaba pensando en usar un HTTPModule para hacer esto, pero encontré la extensión de Restricciones de IP Dinámica a IIS7. Me pregunto si es posible agregar direcciones IP dinámicamente desde mi aplicación a la extensión.¿Puedo agregar mediante programación una dirección IP a la extensión de Restricciones de IP Dinámicas en IIS7 desde mi aplicación ASP.NET?

Además, si tiene experiencia con esa extensión, será genial. Estoy especialmente interesado en saber si puede afectar el rendimiento en un sitio web de alto tráfico.

Gracias

Respuesta

3

Yo también estaba interesado en esto.

Al principio estaba usando la interfaz de usuario en IIS7 para poner en la lista negra las direcciones IP.

enter image description here

me hizo tomar un vistazo en el enlace de Rick Strahl ha mencionado anteriormente, pero encontró un gran recurso aquí:

http://www.iis.net/configreference/system.webserver/security/ipsecurity/add

El ejemplo de código en la página que muestra cómo realizar la acción usando C#. Aquí está el recorte de ese sitio

using System; 
using System.Text; 
using Microsoft.Web.Administration; 

internal static class Sample 
{ 
    private static void Main() 
    { 
     using (ServerManager serverManager = new ServerManager()) 
     { 
     Configuration config = serverManager.GetApplicationHostConfiguration(); 
     ConfigurationSection ipSecuritySection = config.GetSection("system.webServer/security/ipSecurity", "Default Web Site"); 
     ConfigurationElementCollection ipSecurityCollection = ipSecuritySection.GetCollection(); 

     ConfigurationElement addElement = ipSecurityCollection.CreateElement("add"); 
     addElement["ipAddress"] = @"192.168.100.1"; 
     addElement["allowed"] = false; 
     ipSecurityCollection.Add(addElement); 

     ConfigurationElement addElement1 = ipSecurityCollection.CreateElement("add"); 
     addElement1["ipAddress"] = @"169.254.0.0"; 
     addElement1["subnetMask"] = @"255.255.0.0"; 
     addElement1["allowed"] = false; 
     ipSecurityCollection.Add(addElement1); 

     serverManager.CommitChanges(); 
     } 
    } 
} 

Para obtener el paquete Microsoft.Web.Administration, en Herramientas de Visual Studio Goto -> Gestor de paquetes Nuget -> Gestor de paquetes de consola.

a continuación, escriba:

Install-Package Microsoft.Web.Administration 

Otra forma de realizar la misma tarea consiste en utilizar la línea de comandos y el comando appcmd.

El siguiente comando hace lo mismo:

appcmd.exe set config "Default Web Site/SSM" -section:system.webServer/security/ipSecurity /+"[ipAddress='192.168.100.1',allowed='False']" /commit:apphost 

y podría ser llamado desde el código usando:

string website = "Default Web Site/SSM"; 
string ipAddress = "192.168.100.1"; 
string allowDeny = "False"; 

string cmd = string.Format("%systemroot%\\system32\\inetsrv\\appcmd.exe set config \"{0}\" -section:system.webServer/security/ipSecurity /+\"[ipAddress='{1}',allowed='{2}']\" /commit:apphost", website, ipAddress, allowDeny); 
Process.Start(cmd); 

El comando anteriores, pero resulta que si se llama desde C# se queja diciendo "El sistema no puede encontrar el archivo especificado Excepción". Para evitarlo, debe proporcionar un nombre de usuario/contraseña de administrador.

Aquí es la función:

void BlacklistIP(string ipAddress) 
{ 
    string website = "Default Web Site/SSM"; 
    string allowDeny = "False"; 
    string domain = ""; 

    string args = string.Format(" set config \"{0}\" -section:system.webServer/security/ipSecurity /+\"[ipAddress='{1}',allowed='{2}']\" /commit:apphost", website, ipAddress, allowDeny); 

    System.Security.SecureString password = new System.Security.SecureString(); 
    password.AppendChar('y'); 
    password.AppendChar('o'); 
    password.AppendChar('u'); 
    password.AppendChar('r'); 
    password.AppendChar('p'); 
    password.AppendChar('a'); 
    password.AppendChar('s'); 
    password.AppendChar('s'); 
    password.AppendChar('w'); 
    password.AppendChar('o'); 
    password.AppendChar('r'); 
    password.AppendChar('d'); 

    Process.Start(@"C:\windows\System32\inetsrv\appcmd.exe", args, "Administrator", password, domain); 
} 

Et Voila!

Cuestiones relacionadas