С выходом Windows 2000 появилась новая возможность –IP Security, позволяющая более детально контролировать IP-трафик, чем TCP/IP фильтрация (TCP/IP Filtering) его предшественника – Windows NT4. При включении TCP/IP фильтрация действовала сразу на все сетевые адаптеры в системе, и поменять можно было только используемый протокол. Например, не было возможности разрешить NetBIOS соединения только с избранных хостов, а HTTP с любых.
С выходом Windows 2000 появилась новая возможность –IP Security, позволяющая более детально контролировать IP-трафик, чем TCP/IP фильтрация (TCP/IP Filtering) его предшественника – Windows NT4. При включении TCP/IP фильтрация действовала сразу на все сетевые адаптеры в системе, и поменять можно было только используемый протокол. Например, не было возможности разрешить NetBIOS соединения только с избранных хостов, а HTTP с любых.
Главная задача TCP/IP фильтров – избавить сервер от ненужного трафика. Так как нельзя просто отключить NetBIOS на Windows NT4 Server, следует использовать TCP/IP фильтрацию в IIS и разрешить только HTTP соединения с сервером, заблокировав все остальные. Изначальная реализация TCP/IP фильтрации анализировала только входящий трафик, оставляя исходящий без внимания.
Появившаяся в Windows 2000 IP Security значительно расширяет возможности TCP/IP фильтрации, хотя унаследованный старый фильтр пакетов все еще может использоваться в Windows 2000. IP Security включает в себя возможность создавать специфические фильтры трафика, указывать источник и адресат данных, специфицировать протокол и сервис, анализировать как входящий, так и исходящий трафики и шифровать потоки данных с использованием IPSEC. Изначально цель IP Security в Windows 2000 состояла в обеспечении безопасного обмена информацией между хостами и сервисами с использованием IPSEC. Политика IP Security содержит различные фильтры и необязательные схемы аутентификации и шифрования. Фильтры IP безопасности также позволяют создавать “туннель” между двумя определенными точками.
Уже вскоре после выпуска бета-версии Windows 2000, бета-тестеры нашли способ использовать IP Security как гибкую систему пакетной фильтрации. Это позволяет серверу выборочно пропускать, либо блокировать трафик, т.е. действовать как персональный firewall. Вскоре Microsoft выпустил документацию по такому использованию IP Security. Однако, до сих пор не существует средств для управления и отладки такой реализации.
Эта статья – первая из двух частей, в которых описаны различные способы использования IP фильтров безопасности Windows 2000, объединенных с IPSEC. Из них вы узнаете предназначение имеющихся возможностей, как установить их и как сконфигурировать. Эта статья содержит обзор политик IP безопасности, включая их создание, тестирование и расширение.
Фильтры IP безопасности Windows 2000 задаются (см. рис. 1) в "IP Security Policies on Local Machine", которые расположены в "Computer Configuration Security Settings" в редакторе Group Policy приложения Microsoft Management Console (MMC). Вы можете открыть его проще – запустите приложение GPEDIT.MSC.
Рис. 1: Окно стандартных политик IP безопасности
По умолчанию определены три политики:
Client (Respond Only)
Эта политика обычно используется рабочими станциями для ответа на запрос авторизации от Windows 2000 Server, который требует защищенной аутентификации.
Secure Server (Require Security)
Эта политика используется серверами Windows 2000 для того, чтобы гарантировать, что запрещен неавторизованный и не зашифрованный трафик. Работает только в окружении Windows 2000.
Server (Request Security)
Эта политика используется в Windows 2000 так же, как и политика Secure Server (Require Security), с той лишь разницей, что она пытается реализовать максимально возможный для клиента уровень аутентификации и шифрования. Эти установки применимы в смешанном окружении (кроме Windows 2000 присутствуют другие ОС). Как было сказано выше, существует также возможность создавать индивидуальные политики.
При нажатии правой кнопки мыши в окне политик "Group Policy", вы увидите меню, позволяющее создавать новую политику IP безопасности и управлять списками IP-фильтров и действиями фильтров. Мы начнем с создания действия фильтра BLOCK, затем создадим список фильтров, который разрешает использование Windows Terminal Services с заданного набора IP-адресов и запрещает со всех остальных.
Выбрав "Manage IP Filter Lists" из меню правой кнопки мыши, вы увидите окно для создания новых фильтров и действий фильтров (рис. 2).
Рис. 2: Управление списками IP фильтров и действиями фильтров
Выберите страницу "Manage Filter Actions" и нажмите кнопку "Add". В окне "Security Methods" вы увидите три селективных кнопки (рис. 3): "Permit", "Block" и "Negotiate Security". Поскольку мы создаем действие фильтра “DENY”, выберите кнопку "Block". Теперь задайте имя этой операции такое, чтобы потом легко было указать его в фильтре. Для этого перейдите в окно "General" и введите в поле имени “DENY”. При желании можно также дать описание действия фильтра. Когда закончите, нажмите "OK". В списке окна "Filter Actions" появится новое действие с именем “DENY”.
Рис. 3: Свойства нового действия фильтра
Нажмите на “Manage IP Filter Lists" и затем кнопку "Add". Появится окно "New IP Filter List". Назовите его "Allow Terminal Services" и дайте краткое описание этого фильтра. Убедитесь, что переключатель "Use Add Wizard" выбран и нажмите кнопку "Add". Перед вами должен появиться "Filter Properties Wizard". После нажатия на кнопку "Next", вам будет предложено ввести адрес IP Traffic Source. Вы можете выбрать из пяти возможных вариантов:
Поскольку мы задаем фильтр, который ограничит допуск к Terminal Services только из определенной подсети, выберите "Specific IP Subnet". Введите IP-адрес сети и соответствующую сетевую маску, и нажмите кнопку "Next". Мы предположим в наших примерах, что подсеть нашей компании - 10.0.0.0 с сетевой маской 255.0.0.0. Чтобы разрешить "Terminal Services" от всей нашей сети, введите 10.0.0.0 в качестве IP-адреса и 255.0.0.0 в качестве маски подсети.
Затем появится диалоговое окно "IP Traffic Destination". Параметры для выбора те же, что и в окне "IP Traffic Source". Так как мы создаем фильтр, который ограничит Terminal Services на локальном сервере, выберите "My IP Address" и нажмите "Next".
Затем, вам будет предложено выбрать тип протокола, используемого в этом фильтре. Выбор довольно велик. Так как Terminal Services используют связь по TCP, выберите "TCP" и нажмите кнопку "Next".
Теперь вы должны выбрать порт, который будет контролироваться в этом фильтре. Так как Terminal Services используют порт 3389, и мы задаем правило, разрешающее Terminal Services на локальную машину, выберите "To This Port" ", введите "3389" в текстовое поле, и нажмите кнопку "Next". Когда закончите, нажмите кнопку "Finished".
Фильтр, который был только что создан, разрешит Terminal Services с указанной подсети на локальный компьютер; но так как это - просто фильтр пакета, нужно также создать обратное правило. У Microsoft есть опция Mirror Rule, но опыт показывает, что при использовании IP-фильтров для управления трафиком, эта опция не всегда делает то, что хочется. Чтобы избежать возможных проблем, мы вручную создадим обратное правило. Еще раз нажмите кнопку "Add", и введите следующее в соответствующие диалоговые окна "IP Filter Wizards":
Убедитесь, что Вы вводите их там, где надо, особенно в пункте "From This Port". Это важно, потому что все ответы от Terminal Server локального компьютера будут посланы назад клиентам с исходным портом 3389. На рисунке 4 для сравнения показаны готовые IP-фильтры.
Рис. 4: Готовые IP-фильтры, разрешающие Terminal Services
Теперь нам нужно задать фильтр, который заблокирует Terminal Services от остальных компьютеров. В соответствии с тем, что описано выше, создайте новый список IP фильтров, с именем "Deny Terminal Services" со следующим фильтром. На рисунке 5 показан этот новый IP фильтр.
Рис. 5: Созданный фильтр Deny Terminal Services
Прежде, чем продолжить, обратите внимание, что эти фильтры перекрываются. Политика IP безопасности не имеет определяемого пользователем упорядочения для заданных фильтров. Вместо этого, фильтры могут задаваться более и менее детальными. Так как мы создали фильтр "Allow Terminal Services", который определяет и исходную подсеть и явного адресата, он будет применен до более общего фильтра любого исходного адреса к явному IP-адресу. Как правило, фильтры применяются в следующем порядке:
Далее, протоколы и сервисы также упорядочены подобным способом:
В данный момент, все, что мы должны сделать, это поместить все это в политику IP безопасности. Для этого проделаем следующие шаги:
На следующем экране, Вы увидите созданные фильтры (рис. 6). Далее мы свяжем действие фильтра с соответствующим фильтром.
Рис. 6: Заданный список IP-фильтров
Рис. 7: Список действий IP-фильтров
Далее вам нужно связать фильтр "DENY" с действием фильтра "Deny Terminal Services". Проделайте те же шаги, что и выше, и выберите кнопку "Deny Terminal Services" в окне "IP Filter List" и кнопку "DENY" в окне действий фильтра. На рис. 8 показан завершенный список IP Security Rules.
Рис. 8: Завершенный список IP Security Rules
Галочки около фильтров указывают, что это правило активно. Вы видите, что правило
фильтра
В данный момент мы готовы активизировать новую политику IP безопасности на нашей машине. Нажмите кнопку "Close" и вернитесь к окну редактора Group Policy. В появившемся списке вы должны увидеть новую политику. Щелкните правой кнопкой мыши на этой новой политике, и выберите пункт меню "Assign". Если вы все сделали правильно, у иконки папки рядом с вашей политикой должен появиться маленький зеленый знак плюса (+) (рис. 9), а в столбце "Policy Assigned", примечание что политика включена.
Рис. 9: Включенная новая политика IP безопасности
Новая политика, которая разрешает Terminal Services только от определенной подсети, теперь активна. Все другие сервисы к и от этого компьютера незатронуты этой политикой, поскольку в ней весь трафик по умолчанию разрешен, с ограничениями на некоторые сервисы. Потребуется еще кое-какое конфигурирование (с некоторыми предостережениями), чтобы сделать эту политику запрещающей по умолчанию, в которой разрешены только определенные услуги и определенные адреса/подсети, с которых можно связаться с этим компьютером. Чтобы перейти на запрещающую по умолчанию схему, необходимо сначала разработать план, гарантирующий, что вы случайно не запретите какой-нибудь сервис на локальном компьютере.
После того, как Вы создаете фильтры для ваших сервисов, создаете еще один фильтр со следующими параметрами, чтобы запретить весь трафик, который предварительно не разрешен.
Так как этот фильтр наименее детальный из всех в списке, он будет применяться, только если трафик не соответствует никакому другому заданному фильтру.
Так как фильтры IP безопасности - просто фильтры пакетов, они не следят за подключениями и автоматически не позволяют обратные подключения. Например, если вы задаете фильтр, который разрешает HTTP трафик с вашей локальной подсети на ваш компьютер, но также желаете позволить этой машине просматривать Web-узлы за пределами вашей подсети, нужно очень осторожно задавать правила так, чтобы порты источника и адресата были правильно определены для каждого случая. Вот почему часто проще создать индивидуальные фильтры для каждого случая, которые вы хотите учесть. В этом случае, создайте один фильтр, который имеет определенную подсеть как источник, "My IP Address" как адресат и TCP/80 как Protocol/Port адресата (не забудьте создать также обратное правило). Затем создайте второй фильтр с источником "My IP Address", адресатом "Any" и TCP/80 как Protocol/Port адресата.
Не пренебрегайте также ICMP. Поскольку ICMP, помимо других извещений, широко используется для проверки доступности машины, позаботьтесь при задании ваших фильтров о включении поддержки ICMP. Так как фильтры IP безопасности объединяют все ICMP коды вместе, вы не можете создавать правила, которые позволяют только ICMP echo/echo-reply запросы. Например, вы не можете создавать фильтр, который позволяет PING с местной подсети на ваш компьютер, и позволить PING с вашего компьютера в Internet. Создавая такое правило, вы разрешили бы ICMP связь и от местной подсети и из Internet. Одно из решений этой проблемы состоит в том, чтобы определить фильтр, который "PERMIT" ICMP от определенной подсети и второй фильтр, который "BLOCK" ICMP от "Any". Такое правило не позволило бы компьютерам из Internet пинговать ваш компьютер, но и вы также не сможете пинговать их!
Действие фильтра "BLOCK" не производит никаких сообщений Windows Event, так что вы не сможете регистрировать отклоненные попытки. Рекомендуется проверять фильтры IP безопасности на отдельных машинах перед установкой на системные компьютеры, чтобы убедиться, что они работают так, как ожидалось. Чтобы проверить фильтры, просто проведите заданные вами попытки подключения к заданным сервисам, и из разрешенных подсетей и из мест, откуда подключения должны быть отклонены. Если что-то работает неправильно, просто дважды щелкните на политике безопасности в редакторе Group Policy, и уберите галочку рядом с рассматриваемым правилом. Включение и выключение правил осуществляется немедленно, так что нет никакой необходимости выходить и повторно применять политику IP безопасности. Если вы желаете отключить политику IP безопасности целиком, просто щелкните правой кнопкой мыши на политике в редакторе Group Policy и выберите пункт меню "Un-Assign". Политика будет удалена, и появится полный доступ к компьютеру, без каких-либо ограничений.
Установка фильтров IP безопасности на многочисленных компьютерах может быть утомительна, особенно это касается тех случаев, когда все фильтры задаются одинаково. К счастью, Windows 2000 Resource Kit содержит утилиту командной строки IPSECPOL.EXE, которая позволяет вам создавать и применять политику IP безопасности и фильтры из командной строки и командных файлов.
Есть несколько предостережений при использовании утилиты IPSECPOL.EXE, одно из которых состоит в том, что она не будет использовать заданное вами действие фильтра DENY, но добавит явный BLOCK для каждого фильтра, что задается параметром "-n БЛОК". Я не буду углубляться в опции командной строки к утилите IPSECPOL.EXE, для этого есть подробная помощь, доступная по IPSECPOL.EXE -?, но я включил типовой командный файл с комментариями, который может быть адаптирован для ваших нужд. Вследствие переноса строк, перед использованием необходимо сделать некоторую подчистку, а также задать ваши подсети:
@ECHO OFF
REM I make no warranty or claim against errors contained within this batch file
cls
if "%1"=="" goto noparam
echo **** This batch file relies on the IPSECPOL.EXE ****
echo **** Located in the Windows 2000 Resource Kit ****
echo.
echo This batch file will install a default IPSEC policy on Windows 2000 machines
echo This default policy allows the following:
echo - Allow Terminal Services from 10.1.1.0 Subnet only
echo - Deny Terminal Services from everywhere else
echo - Allow all IP traffic from local 10.2.2.0 subnet
echo - Allow Netbios to entire 10.0.0.0 Class A subnet
echo - Allow HTTP/HTTPS to entire 10.0.0.0 Class A subnet and the Internet
echo - Allow ICMP entire 10.0.0.0 Class A subnet
echo - Deny ICMP to/from Internet
echo - Deny all other traffic not defined above
echo.
echo If you need special access to this server from other subnets
echo other than the user-defined networks, or for other serivces not
echo listed above, please add the appropriate filters to the
echo My-Host-Filters IP Security policy
echo.
if "%2"=="/s" echo You have chosen to allow NetBios connections to be established from
the entire 10.0.0.0 CLass A subnet
if "%2"=="/s" echo to this server from the entire user-defined network
echo This is your last chance to cancel this operation.
echo Press Ctrl-C to exit this batch file, or
pause
REM Allow Terminal Services from the local 10.1.1.0 network
ipsecpol -w REG -p "My-Host-Filters" -r "Allow Terminal Services from the local subnet" -
f 10.1.1.0/255.255.255.0+%1:3389 -f %1:3389+10.1.1.0/255.255.255.0 -n PASS
REM Deny Terminal Services from anywhere else
ipsecpol -w REG -p "My-Host-Filters" -r "Deny Terminal Services from ANY" -f *+%1:3389 -f
%1:3389+* -n BLOCK
REM Allow all IP from 10.2.2.0 network
ipsecpol -w REG -p "My-Host-Filters" -r "Allow all IP from 10.2.2.0 network" -f
10.2.2.0/255.255.255.0+%1 -n PASS
REM Allow Netbios/CIF to/from entire 10.0.0.0 Class A network (build forward and reverse
rules) if /s flag is used on command-line
if "%2"=="/s" ipsecpol -w REG -p "My-Host-Filters" -r "Allow NetBios to/from entire
10.0.0.0 Class A network" -f 10.0.0.0/255.0.0.0+%1:135:TCP -f
10.0.0.0/255.0.0.0+%1:135:UDP -f 10.0.0.0/255.0.0.0+%1:137:UDP -f
10.0.0.0/255.0.0.0+%1:139:TCP -f 10.0.0.0/255.0.0.0+%1:445:TCP -f
%1:135+10.0.0.0/255.0.0.0:*:TCP -f %1:135+10.0.0.0/255.0.0.0:*:UDP -f
%1:137+10.0.0.0/255.0.0.0:*:UDP -f %1:139+10.0.0.0/255.0.0.0:*:TCP -f
%1:445+10.0.0.0/255.0.0.0:*:TCP -f 10.0.0.0/255.0.0.0:135+%1:*:TCP -f
10.0.0.0/255.0.0.0:135+%1:*:UDP -f 10.0.0.0/255.255.0.0:137+%1:*:UDP -f
10.0.0.0/255.0.0.0:139+%1:*:TCP -f 10.0.0.0/255.0.0.0:445+%1:*:TCP -f
%1+10.0.0.0/255.0.0.0:135:TCP -f %1+10.0.0.0/255.0.0.0:135:UDP -f
%1+10.0.0.0/255.0.0.0:137:UDP -f %1+10.0.0.0/255.0.0.0:139:TCP -f
%1+10.0.0.0/255.0.0.0:445:TCP -n PASS
REM If /s is not used on command line, only allow Netbios/CIF to the 10.0.0.0 Class A
network, but don't let NetBios in to my host
if not "%2"=="/s" ipsecpol -w REG -p "My-Host-Filters" -r "Allow NetBios to entire
network only" -f %1+10.0.0.0/255.0.0.0:135:TCP -f %1+10.0.0.0/255.0.0.0:135:UDP -f
%1+10.0.0.0/255.0.0.0:137:UDP -f %1+10.0.0.0/255.0.0.0:139:TCP -f
%1+10.0.0.0/255.0.0.0:445:TCP -f 10.0.0.0/255.0.0.0:135+%1:*:TCP -f
10.0.0.0/255.0.0.0:135+%1:*:UDP -f 10.0.0.0/255.0.0.0:137+%1:*:UDP -f
10.0.0.0/255.0.0.0:139+%1:*:TCP -f 10.0.0.0/255.0.0.0:445+%1:*:TCP -n PASS
REM Allow HTTP/HTTPS to entire 10.0.0.0 Class A network
ipsecpol -w REG -p "My-Host-Filters" -r "Allow HTTP/HTTPS to entire 10.0.0.0 Class A
network" -f %1+110.0.0.0/255.0.0.0:80:TCP -f %1+10.0.0.0/255.0.0.0:443:TCP -n PASS
REM Allow DNS Lookups to entire 10.0.0.0 CLass A network
ipsecpol -w REG -p "My-Host-Filters" -r "Allow DNS Lookups" -f
%1+10.0.0.0/255.0.0.0:53:UDP -f %1+10.0.0.0/255.0.0.0:53:TCP -f
10.0.0.0/255.0.0.0:53+%1:*:TCP -f 10.0.0.0/255.0.0.0:53+%1:*:UDP -n PASS
REM Allow HTTP/HTTPS to Internet
ipsecpol -w REG -p "My-Host-Filters" -r "Allow HTTP/HTTPS to Internet" -f %1+*:80:TCP -f
%1+*:443:TCP -n PASS
REM Allow ICMP to/from entire 10.0.0.0 Class A network
ipsecpol -w REG -p "My-Host-Filters" -r "Allow ICMP to/from entire 10.0.0.0 Class A
network" -f %1+10.0.0.0/255.0.0.0:*:ICMP -n PASS
REM Block all other access from anywhere
ipsecpol -w REG -p "My-Host-Filters" -r "Deny all other traffic" -f *+%1 -n BLOCK
REM Activate Policy
ipsecpol -w REG -p "My-Host-Filters" -x
echo.
echo The My-Host-Filters IPSEC policy has been applied and activated
echo.
goto end
:noparam
echo **** This batch file relies on the IPSECPOL.EXE ****
echo **** Located in the Windows 2000 Resource Kit ****
echo.
echo IPSEC.BAT v1.0
echo USAGE: ipsec.bat YOUR HOST IP ADDRESS [/s]
echo.
echo To enable the default IPSEC filters:
echo ipsec.bat 10.2.2.1
echo To enable the default IPSEC filters AND to serve NetBios to the 10.0.0.0 Class A
subnet
echo ipsec.bat 10.2.2.1 /s
echo.
goto end
:end
На этом мы закончим первую часть обзора. Во второй части будет обсуждено шифрование в Windows-системах и применение фильтров IP безопасности.