Простая программная защита от DDoS-атаки

Блог 24 сентября 2014

DDoS (сокр. от англ. Distributed Denial of Service, Распределённый отказ от обслуживания) — изначально тип сетевой атаки, основанной на небезграничности ресурсов атакуемой службы, к которой организуется масса запросов, с которыми она заведомо не сможет справиться, и будет вынуждена отказать в обслуживании (либо заставить ждать неприемлемо долго), собственно, отсюда и название.
DDoS может быть организована по заказу конкурентов или "в учебных целях" начинающим хакером. Заносить вручную в "черный список" атакующие ip-адреса обычно неэффективно, так как они передают "эстафетную палочку". Атака может длиться несколько суток и вестись тысячами компьютеров, превращенных в "зомби". Многие компании предлагают аппаратные методы защиты за немаленькие деньги. Однако имеется простое (но не всегда эффективное) программное решение, позволяющее снять остроту проблему. Суть - игнорировать "назойливые" запросы. Ниже пример на C#.

Код программы.

  1. <%@ Page Language="C#"%>
  2. <script runat="server">
  3. //класс
  4.  
  5. для статистики по Ip-адресам
  6. public class Xvisit
  7. {
  8. public long cnt = 1; //количество вызовов
  9. public long dt = 0; //время
  10.  
  11. последнего незаблокированного вызова
  12. }
  13. //объект для безопасной многопоточной работы
  14. static private readonly Object theLock = new Object();
  15.  
  16. //словарь - в качестве ключа Ip-адреса
  17. static protected Dictionary<string, Xvisit> dict = new Dictionary<string, Xvisit>();
  18.  
  19. void
  20.  
  21. AnalyzeIp()
  22. {
  23. bool bReject = false;
  24. string ipa = Request.UserHostAddress;
  25. lock (theLock)
  26. {
  27. if
  28.  
  29. (dict.Count == 0 || dict.Count > 10000)
  30. { //проинициировать словарь
  31. if (dict.Count > 10000)
  32. { //добавить
  33.  
  34. больше функциональности
  35. //...
  36. dict.Clear();
  37. }
  38. Xvisit x = new
  39.  
  40. Xvisit();
  41. x.dt = DateTime.Now.Ticks; //запомнить время инициации
  42. dict.Add("me", x);
  43. }
  44. else
  45.  
  46.  
  47.  
  48. {
  49. Xvisit vis = null;
  50. if (dict.TryGetValue(ipa, out vis))
  51. { //адрес уже встречался
  52.  
  53. long dt = DateTime.Now.Ticks;
  54. TimeSpan ts = TimeSpan.FromTicks(dt - vis.dt);
  55. double msec =
  56.  
  57. ts.TotalMilliseconds;
  58. if (msec < 3000)
  59. { //зачастили!
  60. bReject = true;
  61.  
  62. }
  63. else vis.dt = dt;
  64. vis.cnt++;
  65. }
  66. else
  67. { //добавить новый
  68.  
  69. адрес в словарь
  70. Xvisit x = new Xvisit();
  71. x.dt = DateTime.Now.Ticks;
  72. dict.Add(ipa, x);
  73.  
  74. }
  75. }
  76. }
  77.  
  78. if( bReject )
  79. { //сервер перегружен
  80. Response.Write("Server is busy." + ipa);
  81.  
  82.  
  83. Response.End();
  84. }
  85. }
  86.  
  87. protected void Page_PreInit(object sender, EventArgs e)
  88. {
  89. AnalyzeIp();
  90.  
  91. }
  92. protected void Page_Load(object sender, EventArgs e)
  93. {
  94. //код
  95. }
  96. </script>

Пояснения к коду программы.

Определяем ip-адрес, откуда идет запрос. Если запрос повторился в течении короткого времени, игнорируем его. Для этого создаем словарь входящих запросов и ведем статистику.
if (dict.Count > 10000)
{ //добавить больше функциональности
//...
}
вместо количества наколенных адресов можно использовать и время прошедшее после инициализации словаря (используем ключ "me"). Затем можно определить адреса, участвующие в атаке и послать письмо администратору сайта. Можно автоматически добавить эти адреса в черный список.
Например, для iis выполнить в консоли команду типа appcmd set config /section:ipsecurity /+"[ipaddress='10.0.0.1',allowed='false']"

Теги: криминал,компьютеры,ASP.Net,создание интернет сайта


Комментарии

gliba: 19-10-2014 23:27

http://lurkmore.to/DDoS - полезно знать)

Добавить комментарий могут только авторизованные пользователи. Авторизоваться




Авторизоваться через https://www.pvobr.ru
Логин
Пароль
Регистрация

Авторизоваться через соцсети
Наверх

создание интернет сайта

технологии дистанционного обучения   дистанционное обучение в москве   быстрое создание интернет магазина   обучающие курсы центры   обучающие курсы для детей   разработка учебных программ   дистанционные курсы повышения   разработка сайтов ru   электронное дистанционное обучение   курсы повышения   создание и разработка сайтов   дистанционные курсы в школе