2009-02-26 5 views
5

Je crée un site basé sur des forums et je veux bloquer les membres qui publient du spam ou des abus. Je pensais utiliser un HTTPModule pour le faire mais je suis tombé sur l'extension Dynamic IP Restrictions à IIS7. Je me demande s'il est possible d'ajouter dynamiquement des adresses IP de mon application à l'extension?Puis-je ajouter par programme une adresse IP à l'extension Dynamic IP Restrictions dans IIS7 à partir de mon application ASP.NET?

Aussi, si vous avez de l'expérience avec cette extension ce sera génial. Je suis esp. intéressé de savoir s'il peut affecter les performances dans un site Web à fort trafic.

Merci

Répondre

3

Je suis également intéressé. Au début, j'utilisais l'interface utilisateur dans IIS7 pour blacklister les adresses IP.

enter image description here

J'ai pris un coup d'œil sur le lien Rick Strahl mentionné ci-dessus, mais a trouvé une grande ressource ici:

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

L'exemple de code sur cette page vous montre comment effectuer l'action en utilisant C#. Voici le snip de ce site

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(); 
     } 
    } 
} 

Pour obtenir le package Microsoft.Web.Administration, en studio visuel goto Outils -> Nuget Package Manager -> Package Manager Console.

Puis tapez:

Install-Package Microsoft.Web.Administration 

Une autre façon d'effectuer la même tâche est d'utiliser la ligne de commande et la commande appcmd.

La commande suivante fait la même chose:

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

et pourrait être appelé à partir du code en utilisant:

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); 

Les travaux de commande ci-dessus, mais il se trouve si vous l'appelez de C# il se plaint dire "Le système ne peut pas trouver l'exception spécifiée par le fichier". Pour contourner cela, vous devez fournir un nom d'utilisateur/mot de passe administrateur.

Voici la fonction:

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 voilà!

Questions connexes