Сервис блокировки ip адресов.

Экспериментируя с разными видами хостинга я запустил виртуальную машину на Amazon Cloud, чтобы сравнить производительность собственно хостинга с имеющимся, а также - сравнить настройку Друпала под Юниксом и под Windows. Привычная среда (Windows) порадовала лёгкостью конфигурации, но по прошествии некоторого времени неприятно удивила скоростью работы сервера. Почистив место на диске и снеся все лишние приложения, я решил заглянуть в Event Viewer и обнаружил там многочисленные попытки взлома (идентификатор события 4625), выглядящие например так:

An account failed to log on.

Subject:
	Security ID:		SYSTEM
	Account Name:		IP-0AE0771F$
	Account Domain:		WORKGROUP
	Logon ID:		0x3e7

Logon Type:			10

Account For Which Logon Failed:
	Security ID:		NULL SID
	Account Name:		david
	Account Domain:		IP-0AE0771F

Failure Information:
	Failure Reason:		Unknown user name or bad password.
	Status:			0xc000006d
	Sub Status:		0xc0000064

Process Information:
	Caller Process ID:	0x580
	Caller Process Name:	C:\Windows\System32\winlogon.exe

Network Information:
	Workstation Name:	IP-0AE0771F
	Source Network Address:	50.97.3.27
	Source Port:		1293

Detailed Authentication Information:
	Logon Process:		User32 
	Authentication Package:	Negotiate
	Transited Services:	-
	Package Name (NTLM only):	-
	Key Length:		0

This event is generated when a logon request fails. It is generated on the computer where access was attempted.
...

С разных ip-адресов несколько раз в секунду пытались подобрать пароль администратора (или других важных пользователей, например, david-а, как в примере выше), что резко негативно сказывалось на отклике веб-сервера. Не найдя никакого лёгкого и бесплатного способа борьбы с такими атаками, я решил написать простенький сервис, работающий по следующему алгоритму:

  1. Отслеживание события 4625 в Security Event Log;
  2. Вытаскивание ip-адреса атакующей машины из этого события;
  3. Проверка лога безопасности на предмет многочисленных попыток логина с этого адреса в течение короткого промежутка времени;
  4. Добавление инструкции в Windows Firewall для блокировки этого ip-адреса;
  5. Разблокировка адреса по прошествии некоторого времени (чтобы исключить постоянную блокировку прокси-серверов провайдеров)

Испытания сервиса показали отличные результаты - снижения производительности сервера в результате атак замечено не было вообще. Если вам такая утилита может пригодиться, то пользуйтесь на здоровье - бесплатно в любых целях, бытовых, коммерческих или иных (ссылка на этот сайт требуется при распространении приложения), но не забудьте дать администратору сложный пароль. Для работы потребуется .Net Framework 4. Инсталляция сервиса занимает два шага:

  1. Распакуйте прилагаемый архив в директорию на жёстком диске (например в "C:\Program Files (x86)\IpBlock\");
  2. Запустите из командной строки "C:\Program Files (x86)\IpBlock\ipblock.exe - install"

Деинсталляция - один:

C:\Program Files (x86)\IpBlock\ipblock.exe - uninstall

Наблюдать за происходящим можно в Event Log:
IpBlock EventViewer log entries

Любители исходного кода могут посмотреть на реализацию в https://bitbucket.org/ssshuler/ipblock. Замечания, предложения и похвалы всегда и с удовольствием будут выслушаны, и выброшены намазаны на хлеб и съедены.

Оценка: 
Attachment: