




Вот статья из Microsoft о том, как это сделать.
Настройка безопасности папки по IP-адресу или доменному имени
Apache использует директивы Allow и Deny для определения сайтов, которые могут получить доступ к определенному веб-сайту или папке. Однако Apache обеспечивает дискреционный контроль доступа; вы должны либо запретить все сайты и предоставить определенный список сайтов или IP-адресов, которые могут получить доступ к папке, либо разрешить все сайты и запретить только те сайты, к которым вы не хотите иметь доступ. Например, если вы используете следующую директиву, всем клиентским компьютерам будет отказано в доступе, если они не распознаются как часть домена domain.com:
Запретить всем
Разрешить с .domain.com
IIS работает точно так же. Всем клиентам явно запрещен или предоставлен доступ, за исключением перечисленных.
Определить контроль доступа для конкретной папки или сайта
Если вы хотите ограничить доступ для всего сайта, выберите этот веб-сайт из списка различных обслуживаемых сайтов на левой панели.
Если вы хотите ограничить доступ только для определенной папки, щелкните папку, которой вы хотите управлять.
ПРИМЕЧАНИЕ: Если вы используете ограничения доменного имени, сервер должен выполнять обратный поиск DNS для каждого запроса, чтобы проверить зарегистрированное доменное имя хоста. Microsoft рекомендует по возможности использовать IP-адрес или диапазон сети.
Это удобно и легко, если у вас есть небольшой список статических адресов, которые нужно заблокировать или разрешить. Если вам нужно что-то программное, попробуйте ответ @Mitch Wheat. +1
этот метод также позволяет добавлять диапазоны IP-адресов, что тоже хорошо.
Я бы не стал добавлять «разрешить все с domain.com», так как это вызывает поиск IP для каждого запроса. Лучше было бы использовать определенный диапазон IP.
Один из способов - использовать HttpModule.
По ссылке (на случай, если она когда-нибудь исчезнет):
/// <summary>
/// HTTP module to restrict access by IP address
/// </summary>
public class SecurityHttpModule : IHttpModule
{
public SecurityHttpModule() { }
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Application_BeginRequest);
}
private void Application_BeginRequest(object source, EventArgs e)
{
HttpContext context = ((HttpApplication)source).Context;
string ipAddress = context.Request.UserHostAddress;
if (!IsValidIpAddress(ipAddress))
{
context.Response.StatusCode = 403; // (Forbidden)
}
}
private bool IsValidIpAddress(string ipAddress)
{
return (ipAddress == "127.0.0.1");
}
public void Dispose() { /* clean up */ }
}
После создания класса модуля HTTP вам необходимо зарегистрировать его в разделе httpModules файла web.config, например:
<configuration>
<system.web>
<httpModules>
<add name = "SecurityHttpModule" type = "SecurityHttpModule"/>
</httpModules>
</system.web>
</configuration>
Это добавляет модуль в конвейер запросов ASP.NET для вашего веб-приложения.
Это хороший подход, особенно если вы добавите обработчик раздела конфигурации для разрешенных IP-адресов.
как насчет диапазонов ip?
Написанный вами синтаксис web.config подходит для IIS6 / Cassini. Для IIS 7 и выше он должен находиться в <system.webServer> вместо <system.web> и <modules> вместо <httpModules>.
В IIS 7 лучший способ ограничить IP-адрес - использовать файл конфигурации.
Полная статья:
http://boseca.blogspot.com/2010/12/programmatically-addremove-ip-security.html
На аналогичный вопрос был ответ, который вы ищете ... stackoverflow.com/a/6108168/80161