Утилита Netsh пополняет командную строку фундаментальной силой IPsec

В прошлом номере в статье «Трюки с Netsh» я представил три интересных способа использования весьма полезной утилиты Netsh и упомянул, что этот инструмент способен еще на многое. В частности, можно рассказать о том, как Netsh решает проблему функциональности IPsec в сервере Windows Server 2003. Это вопрос, который, по мнению любого администратора, нужно бы знать лучше, да все никак не находится времени его как следует изучить. Настало время исправить положение. Начнем с небольшого обзора стандарта IPsec, а затем рассмотрим пример использования Netsh и IPsec для блокировки конкретных портов TCP или UDP.

Знакомство с IPsec

Стандарт IPsec существует с момента выпуска Windows 2000, но для утилиты Netsh это новая сфера деятельности. Очевидно, что у компании Microsoft были некоторые трудности, связанные с выбором интерфейса для IPsec, особенно в командной строке. Версия Windows 2000 предлагает утилиту IPsecpol (доступна в Microsoft Windows 2000 Resourse Kit). 32-разрядная Windows XP — Ipsecmd (утилита из XP Support Tools), а теперь Windows 2003 и XP Professional x64 Edition передали контроль из командной строки утилите Netsh — в набор команд Netsh-IPsec.

Принимая во внимание, что в силу своей сложности IPsec может выходить за рамки тех задач, которые большинство администраторов выполняют ежедневно, начнем с основных функций. Как следует из названия, IPsec служит для обеспечения дополнительной защиты на сравнительно низком уровне протокола IP. С помощью IPsec можно не только изменять настройки протокола IP, чтобы передавать блоки информации из одной системы в другую (типичная функция IP), но и осуществлять передачу пакетов только в том случае, если отправитель и получатель зашифруют эти пакеты; также можно запретить передачу пакетов. Большое достоинство IPsec состоит в том, что мы снова говорим об IP, а не о протоколах более высокого уровня. С IPsec можно защитить коммуникации в сети Internet так же легко, как обезопасить электронную почту или транзакции сервера Microsoft SQL Server, потому что эти приложения выполняются на верхних уровнях IP.

Надо сказать, что IPsec — среда, работа в которой требует знания специальных понятий. Компетентность в IPsec предполагает понимание таких терминов, как политика, правила, список фильтров, фильтр, действие фильтра и аутентификация.

Политика и правила. Администратор защищает все или некоторые IP-соединения в данной системе (или множестве систем) путем создания так называемой политики IPsec. Политика — это контейнер для одного или нескольких правил, и ничего более, поэтому она гораздо эффективнее, чем описание параметра, такое как Protect my SQL Server System или Block port 80. Например, на сервере SQL Server политика может состоять из двух правил, таких как: Allow encrypted communications only on port TCP 1433 with local subnet («Разрешить зашифрованные коммуникации только через порт TCP1433 с локальной подсетью») и Block any communications to TCP 1433 from anywhere else («Заблокировать любые входящие соединения TCP на порт 1433 из других мест»). TCP — это сетевой интерфейс для сервера SQL Server по умолчанию. Каждое правило состоит из двух обязательных частей и одной факультативной. К обязательным компонентам относятся список фильтров и действие фильтра, к дополнительным — аутентификация.

Список фильтров. Список фильтров представляет собой контейнер для одного и более фильтров. Эти фильтры определяют момент активации правил IPsec. Комбинация адресов IP, протоколов и портов, соответствующих фильтру, задается до начала действия фильтра. Например, в правиле Allow encrypted communications only on port TCP 1433 with the local subnet («Разрешить шифрованные соединения только через порт TCP1433 и локальную подсеть») фильтру предписывается запустить правило, когда исходный адрес — это любой адрес в локальной подсети, адрес назначения — адрес сервера, исходный порт — любой порт, порт назначения — 1433 и протокол — это TCP. Обратите внимание, что список фильтров содержит только один фильтр — типичный сценарий для списков фильтров IPsec.

Действие фильтра. Когда фильтр определен, появляется этап действия фильтра. Действие фильтра IPsec может разрешать соединение и пропускать пакеты (линия поведения по умолчанию, что происходит сейчас в большинстве сетей), блокировать соединения (просто отбрасывать пакеты IP), шифровать или подписывать поток информации. Например, второе правило в нашей политике, Block any incoming communications to port 1433 («Блокировать любые входящие соединения на порт 1433»), устанавливает действие фильтра с функцией блокирования.

Аутентификация. Если действие фильтра не блокирует и не разрешает, а шифрует или ставит цифровую подпись, то необходим третий компонент правила: шифрование или алгоритм цифровой подписи и средство для обмена криптографическими кодами для такого шифрования и подписи — другими словами, механизм аутентификации. Стандарт IPsec позволяет двум сторонам аутентифицироваться, если они знают общий пароль, обмениваются сертификатами или же являются членами одного и того же леса Active Directory — вариант, который в IPsec реализуется Kerberos.

Пример блокирования порта

Простая задача, которую можно выполнить с помощью IPsec, — заблокировать отдельный порт TCP или UDP. Хотя блокирование портов и не выглядит особенно полезным, я применял IPsec таким образом, чтобы использовать простой пакетный файл для создания брандмауэра в данном случае, даже после дебюта брандмауэра Windows Firewall. В отличие от брандмауэра Windows Firewall, IPsec может блокировать исходящие пакеты.

Предположим, выяснилось, что некоторые сотрудники втайне пользуются Web-серверами сомнительного содержания. Следует прекратить такую деятельность путем создания набора команд, не допускающих отправку и получение любого пакета через порт 80. Для этого создадим политику, которая содержит одно правило. Если пакет направляется в определенную систему по протоколу TCP на порт 80 или же находится на пути из порта 80 этой системы, протоколу IPsec необходимо заблокировать данный пакет.

Если захочется опробовать этот пример, просто установите систему Windows 2003 с Microsoft IIS и используйте текстовый редактор Notepad, чтобы создать простой файл (например, Hello from Windows 2003!) в C:inetpubwwwroot; назовите этот файл default.htm. Чтобы убедиться в правильности установки Web-сервера, попробуйте получить доступ к этой Web-странице из другой системы. Затем вернитесь к новому серверу и откройте приглашение на ввод команды.

Создание политики

Начнем процесс с создания политики IPsec, которую можно назвать Block Web serving. Синтаксис команды Netsh достаточно прост:

netsh ipsec static add policy


name="Block Web serving"

description="Stops people from running

a Web server on their system"

Все наши команды, относящиеся к IPsec, следует начинать с Netsh Ipsec Static. Затем появятся варианты Add, Delete, Set или Show, сопровождаемые одним из пяти ключей: policy, rule, filterlist, filter или filteraction. Обязательные для большинства из этих пяти параметры — name= и description=. Если все-таки остались неясности по поводу синтаксиса — обычная проблема с Netsh,достаточно просто набрать команду без параметров, например

netsh ipsec static add policy

Разработка фильтра

Фильтр, который мы собираемся создавать, даст команду IP активизировать определенное правило в случае, если информация поступает или уходит через протокол TCP на порт 80. В нашем примере нужно определить IP-адрес источника (т. е. любой в сети Internet), порт источника (т. е. любой порт), IP-адрес назначения (т. е. me, что является значимой величиной в IPsec), а также порт и протокол назначения (TCP 80), как показано далее:

netsh ipsec static add filter


filterlist="80 in or out"

srcaddr=any srcport=0

dstaddr=me dstport=80

protocol=tcp mirrored=yes

Параметр filterlist=name определяет в IPsec, в какой из списков фильтров поместить фильтр. Но когда же был создан этот список фильтров? В Netsh есть команда для создания списка фильтров, но в нашем примере, когда компонент Add Filter замечает, что новый фильтр является частью несуществующего списка фильтров, команда приступает к созданию этого списка фильтров. Слова any и me являются встроенными ключевыми словами со значениями, не требующими объяснения. Значение параметра dstport также понятно (номер порта назначения), а параметр srcport=0 означает any source port (любой порт источника).

Параметр mirrored=yes подтверждает наше намерение, чтобы этот фильтр стал правилом, действующим как для пакетов, поступающих в порт 80 данной системы, так и, наоборот, исходящих из порта 80. Можно было бы создать два отдельных фильтра в списке фильтров, но многие фильтры IPsec просто требуют себе пару так же, как приведенная выше пара, которую можно назвать «зеркальной».

Задание действия фильтра

Теперь разработаем действие фильтра. Все, что необходимо сделать, — это определить действие, которое заблокирует информацию, как показано ниже:

netsh ipsec static add


filteraction name=blockit

action=block

Эта команда создает действие фильтра с именем blockit, и понятно, что суть его в блокировании информации.

Компоновка политики

Теперь у нас есть политика, список фильтров и действие фильтра, осталось связать список фильтров и действие фильтра в одно правило, как в следующей команде:

netsh ipsec static add rule


name="Block 80"

policy="Block Web serving"

filterlist="80 in or out"

filteraction=blockit

desc="Makes Web servers on this system

effectively impossible"

Это длинная команда, но она достаточно понятна. Напомню, что правило состоит, по крайней мере, из двух частей — списка фильтров и действия фильтра — и является компонентом политики. Параметры команды дают правилу имя (Block 80), список фильтров для использования (80 in or out), действие для осуществления (blockit) и описание. Итак, политика скомпонована.

Реализация политики

Теперь остается нашу политику реализовать. Для этого можно использовать команду

netsh ipsec static set


policy name="Block Web serving"

assign=y

Далее, перейдя на другую систему, следует запустить Microsoft Internet Explorer (IE) и попытаться открыть на своем Web-сервере домашнюю страницу. Internet Explorer несколько раз попробует осуществить операцию и в конечном счете откажется. Попробуйте снова, вернитесь в Wеb-сервер и наберите

netsh ipsec static set


policy name="Block Web Serving"

assign=n

и вы увидите домашнюю страницу.

Дальше — больше

Пример с IPsec, приведенный в статье, — это самое простое, что можно попробовать, однако более сложные операции не намного более трудоемки и способны решать очень важные задачи. Блокировка и разрешение трафика — два самых простых, но не единственных способа использования стандарта IPsec. С помощью IPsec можно также подписывать или шифровать трафик, и эти процедуры требуют ненамного больше знаний. Поэтому сейчас нам предстоит модифицировать задачу, рассмотренную выше: создадим правило IPsec, позволяющее Web-серверу пропускать трафик через TCP на порт 80, но только в том случае, если он зашифрован тройным DES (3DES) и подписан с помощью алгоритма Secure Hash Algoritm-1 (SHA-1).

Создание политики. Так же как и раньше, мы создадим политику IPsec, которая используется на Web-сервере или в группе Web-серверов. Эта политика будет состоять из одного-единственного правила, в котором должен быть список фильтров и действие фильтра (как и метод аутентификации, но об этом позже). Действие фильтра активирует правило, если информация поступает в определенную систему через TCP на порт 80 или если информация уходит из этой системы в каком-либо направлении через TCP-порт 80. Чтобы активировать список фильтров, действие, которое выполняет данное правило, — запросить шифрование 3DEC и подпись SHA-1.

Используя команды сервера Windows Server 2003, мы создадим политику, затем список фильтров, далее — действие фильтра и, наконец, правило IPsec. Вот как выглядит такая политика:

netsh ipsec static add policy name="Require encryption


on Web" description="Force any Web visitors to

encrypt communications and Kerberos to

authenticate" activatedefaultrule=no

Все команды, относящиеся к стандарту IPsec, начинаются с Netsh IPsec Static. Ключ Add Policy создает политику, и команда переходит к именованию и описанию политики.

Создание фильтра и списка фильтров. Фильтр, который мы хотим разработать, будет давать IP-команду активировать определенное правило, если информация поступает или уходит через TCP-порт 80, поэтому такой фильтр напоминает тот, что был создан выше:

netsh ipsec static add filter filterlist="8o in or


out" scraddr=anysrcport=o dstaddr=me dstport=8o

protocol=tcp mirrored=yes

В ситуациях, когда в работе участвует только один фильтр, утилита Netsh позволяет создать фильтр и список фильтров, просто указывая список фильтров после ключа add filter. Когда Netsh пытается добавить этот фильтр в список фильтров под названием «80 in or out» и не может найти списка с таким названием, он создает этот список. Команда означает, что правило применяется, когда пакет поступает с какого-либо адреса (scraddr=any) и из любого порта (srcport=0) и направлен в систему, в которой используется эта политика (dstaddr=me) через TCP-порт 80 (dstport=80 protocol=tcp). Параметр mirrored=yes определяет, что в действительности присутствуют два фильтра: один — на получение с любого адреса в эту систему через TCP на порт 80, а другой — на отправку из этой системы на любой адрес через TCP-порт 80.

Задание действия фильтра. Вместо действия фильтра, описанного в прошлый раз и заключавшегося в блокировании передачи информации при соответствии условия фильтра, теперь это действие будет представлять собой шифрование и подпись передачи в том случае, если условие фильтра удовлетворено. Эта запись выглядит следующим образом:

netsh ipsec static add filteraction name="force


encryption="Forces communications using

encryption" action=negotiate

qmsecmethods="ESP[3DES,

SHA1]" inpass=no soft=no qmpfs=yes

Ключ Add Filtration добавляет действие фильтра, и команда переходит к наименованию и описанию этого действия. Следует обратить внимание на включение параметра action=negotiate вместо action=block или action=permit. Этот параметр используется как при цифровой подписи, так и при шифровании и подписи. Но что здесь получится?

На этот вопрос отвечает следующий параметр qmsecmethods=»ESP[3DES,SHA1]. Данный параметр имеет множество возможных вариантов, но, по существу, вы определяете режим ESP[] или AH[] и задаете выбранный алгоритм шифрования или алгоритм хеш-функций внутри квадратных скобок. Например, «AH[SHA1] будет использовать хеш-функцию SHA-1 для цифровой подписи трафика. Режим ESP требует имена двух криптографических алгоритмов — для шифрования и хеширования, потому что он и шифрует, и подписывает трафик. Таким образом, режим «ESP[3DES,SHA1]» шифрует с помощью тройного алгоритма DES и подписывает с хеш-функцией SHA-1.

Последние три параметра относятся к трем флажкам в графическом интерфейсе пользователя при настройке фильтра IPsec. Первый флажок — Accept unsecured communication, but always respond using Ipsec («Принять незащищенное соединение, но всегда отвечать с использованием Ipsec»). Предположим, имеется компьютер с установленной системой Windows XP с существующим базовым правилом Ipsec. Этот компьютер посылает шифрованные ответы, когда поступает запрос, но никогда не инициирует шифрование. Если данная система XP пытается получить содержимое защищенного Web-сервера, этот Web-сервер примет запрос HTTP, но ответит с помощью зашифрованного IPsec.

На данном этапе клиент либо не поймет IPsec и просто прекратит соединение либо сумеет понять и приступит к передаче посредством IPsec. Выбор этого флажка — не обязательно ошибка, и если нужно оборудовать системы клиента только встроенной политикой IPsec в режиме Client (Respond Only), придется выбрать именно ее, но лично мне она не нравится.

Многие из Web-приложений помещают детали аутентификации в исходный запрос HTTP, но весьма неприятно сознавать, что даже первая передача пакета на защищенный Web-сервер может идти открытым текстом.

Параметр inpass=no убирает этот флажок и исключает возможность проникновения открытого текста в предварительные соединения.

Установить флажок Allow unsecured communications with non-IPsec-aware computers («Разрешить незащищенные коммуникации с компьютерами, не поддерживающими стандарт Ipsec») — крайне неудачная идея. По существу, она требует от клиентов зашифрованных коммуникаций, но в случае, если они не в состоянии выполнить эти требования, незащищенные коммуникации в любом случае разрешаются. Важно помнить, однако, что злоумышленникам не понадобятся все пароли, достаточно и одного. Параметр soft=no убирает этот флажок.

Наконец, параметр qmpfs=yes определяет, как именно стандарт IPsec меняет свои коды шифрования/подписи. Чтобы расстроить планы злоумышленников, IPsec регулярно меняет криптографические коды. Можно настраивать IPsec на изменение кодов так часто, как это необходимо.

Новые коды математически связаны с предшествующими; следовательно, если какой-то код скомпрометирован, злоумышленник может вычислить последующие.

Что такое правило?

Чтобы создать правило, следует объединить список фильтров, действие фильтра и третью составляющую, которая не потребовалась нам в прошлый раз: аутентификацию. Стандарт IPsec поддерживает следующие подходы: общий пароль (неприемлемый вариант, возможный разве что в тестовых ситуациях), встроенную инфраструктуру Kerberos, которая присоединяет каждую систему к лесу Active Directory (AD) или осуществляет обмен сертификатом X.509. Стандарт Windows IPsec использует Kerberos по умолчанию, и это показано далее в примере. Команда Netsh для создания правила выглядит следующим образом:

netsh ipsec static add rule name="Encrypt


8o" policy="Require encryption on Web

"filterlist="8o in or out" filteraction="

force triple DES" Kerberos=yes

desc="Secures Web traffic"

Ключ Add Rule присутствует, поскольку мы добавляем правило. Далее команда называет правило и политику, которая содержит это правило. Нельзя использовать правила в более чем одной политике. Затем команда указывает список фильтров и действие фильтра. Параметр Kerberos=yes определяет аутентификацию Kerberos, и команда заканчивается описанием. Теперь необходимо лишь осуществить политику, как мы делали в прошлый раз, или реализовать ее с помощью графического интерфейса пользователя.

Марк Минаси - Редактоp Windows NT Magazine MCSE и автор книги Mastering Windows NT Server 4.0 (издательство Sybex). mark@minasi.com