В данной статье речь пойдет об управлении Windows Firewall (брандмауэр Windows) из окна консоли. Рассматривать будем на примере обеспечения доступа к компьютеру по RDP (порт 3389).
Условия: Имеется сервер с операционной системой Windows Server 2008R2, используется бухгалтерией в качестве терминального сервера
Задача: Запретить доступ к серверу со стороны всех пользователей в нерабочие часы, обеспечить доступ техподдержке всегда.
Принято решение использовать возможности Windows Firewall с Windows Scheduler (планировщик задач), а также написать батник, который это реализует, для того, чтобы на других серверах эту процедуру можно было бы провести намного быстрее. Разберемся с управлением самого Windows Firewall:
Управление Windows Firewall
Включить Windows Firewall:
netsh advfirewall set <Profile> state on
Выключить Windows Firewall:
netsh advfirewall set <Profile> state off
Вместо <Profile> необходимо вставить требуемый профиль. Они бывают: Domainprofile, Privateprofile, Publicprofile, а если вам необходимо управлять сразу всеми профилями, то вставьте Allprofiles.
Перед включением Windows Firewall на удаленном сервере, убедитесь, что вы не потеряете к нему доступ, лучше сначала сделать все правила, и только потом включать Windows Firewall. Управление правилами довольно простое:
Создать новое правило:
netsh advfirewall firewall add rule name="RuleName" [Параметры]
Возможных параметров довольно много, вот некоторые из них (востребованные чаще всего):
dir=in — указывает направление трафика, в данном случае — входящее подключение
action=allow — указывает действие при срабатывании правила, в данном случае «Разрешить». Возможен вариант «block»
protocol=TCP — указывает протоколы, для которых будет работать правило. Если нужно разрешить все протоколы, то пишем «any»
localport=3389 — указывает локальный порт для подключения
remoteip=111.22.33.44 — указывает ip-адреса удаленных компьютеров, которые могут подключиться. Если адресов несколько, то их можно указать через запятую, для добавления подсети адресов напишите сеть/маска, например 192.168.11.0/24
enable=yes — указывает, включено ли правило
Удалить правило:
netsh advfirewall firewall delete rule name="RuleName"
Для изменения существующего правила необходимо указать его имя, далее ключевое слово new, и следом указать связки <Параметр>=<Значение>, которые требуется изменить. В качестве примера я отключу существующее правило:
netsh advfirewall firewall set rule name="RuleName" new enable=no
Теперь переходим конкретно к нашей задаче. Нам потребуется 2 правила: одно будет разрешать доступ по порту 3389 всем, второе будет разрешать доступ только для указанных ip-адресов (адреса техподдержки). В конце рабочего дня первое правило будет отключаться, в начале рабочего дня — включаться. Ниже приведу код батника для создания этих двух правил.
@echo off echo Creating Windows Firewall rule "RDP Day"... netsh advfirewall firewall add rule name="RDP Day" dir=in action=allow protocol=TCP localport=3389 enable=yes echo Creating Windows Firewall rule "RDP Night"... netsh advfirewall firewall add rule name="RDP Night" dir=in action=allow protocol=TCP localport=3389 enable=yes remoteip=111.222.33.44 timeout 30
Вместо ip-адреса 111.222.33.44 подставьте свой. Как включать/отключать (не удалять!) правила вы уже знаете из примера, поэтому пишем еще 2 батника: в одном правило RDP Day включается, в другом — отключается. Далее займемся Windows Scheduler. Параметров в командах множество, я покажу на примере необходимые параметры:
schtasks /create /TN "Starting a work day" /SC Daily /ST 09:00 /TR C:\Scripts\StartDay.bat schtasks /create /TN "Ending a work day" /SC Daily /ST 18:00 /TR C:\Scripts\EndDay.bat
schtasks — команда Windows Scheduler
/create — ключ, сообщающий, что мы хотим создать задачу
/TN — имя создаваемой задачи
/SC — расписание, с какой периодичностью выполняется задача, в данном случае ежедневно
/ST — время начала выполнения задачи. Формат времени: hh:mm
/TR — путь до исполняемого файла, в нашем случае — путь до батников
После выполнения данных команд, вы можете наблюдать в планировщике задач 2 новые ежедневные задачи. Одна будет отключать правило доступа для всех, вторая будет его, наоборот, включать.
Задача решена, теперь можно в подобных случаях использовать написанные батники на других серверах.