Блокировка доступа к сайту по заблокированным IP-адресам - PullRequest
2 голосов
/ 23 декабря 2009

У меня есть список IP-адресов ботов / хакеров, которые постоянно атакуют один из моих сайтов. Я хочу заблокировать этих посетителей по IP и пытаюсь выработать «лучший» подход для этого. Мой сайт использует C # ASP.NET MVC.

У меня есть List<int> IP-адресов.

Где лучше всего поставить код чека? Я подумываю об использовании события Page_Load главной страницы, но также могу поместить его в фильтр для каждого контроллера ...

Какой HTML вы возвращаете на забаненный IP? Я не хочу возвращать «сайт заблокирован, потому что ваш IP заблокирован», потому что это даст хакерам информацию, необходимую им для обхода блока. Преимущество этого состоит в том, что это даст невинным пользователям, попавшим под перекрестный огонь, причину, по которой они не могут получить доступ к сайту. В настоящее время я чувствую, что должен вернуть уведомление «Сайт находится на обслуживании».

Какой код статуса HTTP я должен вернуть с поддельным уведомлением «Сайт находится на обслуживании»? Я думаю 200.

Сайт работает на Server 2003.

Ответы [ 4 ]

12 голосов
/ 23 декабря 2009

Если вы чувствуете, что ваш сайт «взломан» с определенного IP-адреса, вам не следует блокировать этот IP-адрес в программном обеспечении - то самое, что они намерены поставить под угрозу. Заблокированные IP-адреса должны быть заблокированы на брандмауэре.

3 голосов
/ 23 декабря 2009

Я должен был бы согласиться с Дэвидом по этому поводу по нескольким причинам.

  1. Блокируя с помощью программного обеспечения, хакеры / боты все равно смогут злоупотреблять вашими ресурсами (пропускной способностью, временем процессора и т. Д.).

  2. Программное обеспечение не может защитить ваш сайт от DOS-атак.

  3. Если хакер хорош, они найдут способ обойти программные блоки.

  4. Обновление кода блокировки потребует перекомпиляции вашего приложения.

Ваш ответ в брандмауэре. Установите правила для блокировки пользователей, и они не смогут подключаться.

Отправка страницы "в процессе обслуживания" - ужасная идея, потому что она смущает обычных пользователей и не удерживает хорошего хакера ...

2 голосов
/ 23 декабря 2009

Я бы поместил код в место, где он будет работать как можно скорее, прежде чем сервер потребит слишком много ресурсов.

Я бы сказал, что вы должны отсылать как можно меньше информации, в идеале HTTP-статус 503 (временно недоступен) с коротким сообщением, ссылающимся на страницу приемлемого использования, или страницей, объясняющей людям некоторые причины, по которым они МОГУТ быть заблокированы. и что делать, если они чувствуют, что они заблокированы несправедливо. Возможно, вы захотите сделать это в текстовом / обычном формате вместо HTML, так как он будет использовать меньше байтов:)

Использование списка заблокированных IP-адресов в памяти также прерывается, когда у вас есть большое количество заблокированных адресов (скажем, 1 миллион), поскольку сканирование становится запретительным (помните, что вы должны делать это для каждого запроса к соответствующему ресурсу).

В конечном итоге вы захотите распространить списки заблокированных IP-адресов на все ваши веб-серверы и / или сохранить их централизованность - в зависимости от того, какие именно злоупотребления вы получаете или ожидаете.

Сказав это, вы обязательно должны применить принцип ЯГНИ . Если вы не испытываете реальных проблем с пропускной способностью, не пытайтесь вообще блокировать нарушителей. На самом деле очень немногие сайты делают это, и большинство из них связаны с существенными затратами на его обслуживание (например, поиск в Google)

2 голосов
/ 23 декабря 2009

Хотя вы можете заблокировать IP-адреса на своих серверах, обращенных наружу (очевидно, на ваших веб-серверах, но у вас могут быть другие), этот список необходимо будет реплицировать по всем. Блокируя сервер, вы не только усложняете решение, но и предоставляете метод, который не является полностью безопасным.

Надлежащая точка блокирования сетевого трафика, будь то список портов или IP-адреса, находится в вашей сети как можно дальше. Обычно это брандмауэр / маршрутизатор в вашей точке входа. Эти сетевые устройства оптимизированы как для этой цели, так и далеко за ее пределами. В зависимости от производителя вашего сетевого оборудования набор функций будет широко варьироваться.

Я предлагаю вам:

  • Определите все маршрутизаторы / брандмауэры на внешняя граница. Это возможно у вас есть только один, если вы не загружены балансировка.
  • Узнайте, как настроить ACL (список контроля доступа) для тех, устройства.
  • Изменить ACL на основе вашего IP список адресов для блокировки.
  • Всегда сохраняйте резервную копию вашей сети Конфигурация устройства в другом месте.

Очевидно, это лишь вершина айсберга в сфере безопасности. Возможно, в какой-то момент вам придется бороться с DOS (атаками типа «отказ в обслуживании»), а затем - о, самое интересное.

Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...