WrSpy: Анализатор логов WinRoute и не только




О бедном WR 4.X замолвите слово... (часть 2)

Все далее сказанное можно сделать из WrAdmin'а, но изложенные методики позволяют автоматизировать процесс управления функционированием WR. Но для реализации не обойтись без какого-никакого программирования...

Блокировка пользователей
Пользователи в понятии WR это их логины. Логины фигурируют в доступе прокси. Там же имеют быть группы пользователей. Вот ими и займемся.
Поставим задачу пускать или не пускать пользователей в Интернет согласно какого-либо критерия.
Для начала настроим WR. Создадим группы пользователей. Включим пользователей в группы. Создадим еще одну, служебную группу, назовем ее например local. В правилах доступа прокси раздадим права ТОЛЬКО на группы. Группа local не должна фигурировать ни в одном правиле.
1. Смотрим ветки \Group и находим там ключик name со значением "local"
2. Запоминаем значение ключика id
3. В ветках \User ищем ключик name со значением равным логину пользователя, которого необходимо заблокировать.
4. Запоминаем значение ключика groups, для дальнейшего разблокирования этого пользователя, и заменяем его запомненным значением ключика id для группы local
Таким образом, этот пользователь оказался перенесенным из всех своих групп, в которые он входил, в группу local, для которой нет правил в доступе прокси. Значит любой запрошенный этим пользователем URL оказывается запрещенным правилами доступа прокси. Что собственно и требовалось.
Снятие блокировки заключается в восстановлении ключика groups для этого пользователя запомненным при блокировке значением.

Блокировка URL
Необходимо заблокировать по какому-либо критерию тот или иной URL. Сначала настроим WR. Создадим в правилах доступа прокси соответствующее правило и в нем дадим доступ необходимым группам (можно и пользователям, но я считаю это менее удобным для работы).
1. Просматриваем ветки \Urlac и ищем ключик url с требуемым значением.
2. Запоминаем значение ключика id_list для дальнейшего востановления.
3. Присваиваем ключику id_list пустое значение ("").
Теперь в правилах доступа прокси этот URL не будет разрешен никому. Для разблокирования необходимо просто восстановить соответствующее значения ключика id_list.

Блокировка внутреннего IP
IP адреса фигурируют в правилах пакетного фильтра, там же фигурируют группы адресов. Вот ими и займемся.
Сначала настроим WR. Включим антиспуффинг. Создадим адресный диапазон blocked_ip и включим в него такое количество адресов, какое имеется у пользователей локалки. Причем адреса эти будут отличаться от истинных на фиксированное значение в старшем байте IP адреса.
Во внутренних входящих создадим правила (это пример, они могут быть и другими):

TCP blocked_ip any port => Any host any port deny
UDP blocked_ip any port => Any host any port deny


1. Просматриваем ветки \Sacl и ищем ветку, для которой значение ключиков Name равно "blocked_ip", а sAddr1 равно блокируемому IP с измененным старшим байтом.
2. Заменяем значение sAddr1 на истинное значение блокируемого IP
Теперь все пакеты с этого адреса будут блокироваться приведенными выше правилами.
Процедура восстановления выглядит аналогично, только искать нужно истинное значение адреса, а записывать с изменением старшего байта адреса.