Настройка службы брандмауэра всегда была нетривиальной задачей, но в начальных версиях брандмауэра Windows Firewall (вышедших до появления Windows Vista) процесс настройки стал немного проще. Идея такова: сетевой экран блокирует весь входящий трафик, кроме запросов, внесенных в список исключений. Список исключений (фильтр) определяет те элементы сетевого трафика, которые не нужно блокировать: приложение или порт, трафик для которых должен пропускать сетевой фильтр. При добавлении записи в список исключений брандмауэр разрешает весь трафик для данного приложения или порта. Оптимальным вариантом долгосрочного использования сетевого экрана является блокировка всего трафика с минимальным количеством исключений. Для каждого исключения необходимо задействовать настройки с максимально жесткими ограничениями доступа.
В данной статье не рассматривается брандмауэр системы Windows Vista, обладающий возможностями, недоступными сетевому экрану системы Windows XP Service Pack 2 (SP2). Информацию об особенностях системы Vista можно найти в статье Джефа Феллинга «Брандмауэр Windows Vista», опубликованной в Windows IT Pro/RE № 8 за 2006 г.
Многие организации используют политику Group Policy для применения определенных настроек, в том числе настроек брандмауэра. Однако в некоторых случаях использование политики Group Policy может не подходить для окружения, а также возможен вариант, когда придется разрешить пользователям самостоятельно управлять настройками сетевого экрана. Для большинства пользователей настройка сетевого экрана вполне понятна — она не требует особенных размышлений. Через некоторое время, однако, могут возникнуть ошибки в настройках, нарушающие работу сетевого экрана и ставящие под удар безопасность системы. Из-за возможности появления ошибок в конфигурации необходимо регулярно проводить аудит настроек брандмауэра систем. Можно легко автоматизировать создание отчетов аудита с помощью короткого сценария, который будет опрашивать любое количество систем в сети. После обзора наиболее распространенных ошибок в настройках я расскажу о самых удачных вариантах использования списка исключений и представлю сценарий, приведенный в листинге, с помощью которого можно проводить аудит брандмауэров.
Наиболее распространенные ошибки
Ошибки в настройке брандмауэра могут иметь серьезные последствия и подвергают системы существенному риску. Например, ошибки в настройке для мобильного компьютера могут привести к появлению вредоносного программного обеспечения в корпоративной сети, несмотря на все защитные механизмы сетевого шлюза. Таким образом, крайне важно уметь распознавать и исправлять наиболее распространенные ошибки в настройке сетевого экрана.
Первая и наиболее часто встречающаяся ошибка заключается в том, что кто-то ради «определенной цели» или «ненароком» выключает брандмауэр и забывает потом его включить. Такие оплошности случаются гораздо чаще, чем хотелось бы. Я часто сталкивался с ситуациями, в которых кто-либо:
-
отключает брандмауэр для проведения тестирования — и не включает его снова;
-
отключает брандмауэр ради сиюминутной цели (вместо того, чтобы создать исключение) — и не включает его обратно;
-
отключает брандмауэр в свойствах одного сетевого адаптера, предполагая, что отключает сетевой экран только для данного адаптера (но по невнимательности отключая остальные брандмауэры системы) — и не включает его обратно.
В зависимости от версии и настройки службы система Windows не всегда предупреждает о том, что брандмауэр отключен. Конечно, можно использовать другие методы управления сетевым экраном (например, задействовать объект Group Policy, который запрещает отключение брандмауэра), но с помощью сценария HNetCfg.FwMgr, приведенного в листинге, можно легко проверить все свои сетевые экраны.
У службы Windows Firewall есть два профиля: профиль домена, применяемый, когда пользователи входят в домен, и стандартный, действующий, когда пользователи отключаются от домена Windows (либо вообще не входят в него). Например, стандартный профиль используется при соединении мобильного компьютера с небезопасной сетью (например, дома, в отеле, в Internet-кафе). Нужно иметь в виду, что, когда пользователи подключаются к домену Windows, система всегда задействует профиль домена, даже если сетевой экран для домена не был специально настроен через политику Group Policy.
Так как у сетевого экрана существует два профиля, код сценария сначала определяет, для какого профиля будет проводиться аудит. Если сценарий запускается без указания профиля, он проведет аудит профиля, загруженного в данный момент. Код фрагмента A листинга обращается к политике сетевого экрана, настраивая объект objPol на соответствующий профиль. Далее сценарий определяет тип политики и выводит глобальные настройки брандмауэра.
Помимо глобальных настроек, можно включить или отключить сетевой экран для каждого отдельного сетевого интерфейса, как показано на экране 1. В диалоговом окне службы Windows Firewall видно, что сетевой экран для интерфейса LAN3 отключен. Так как важно знать настройки для каждого интерфейса, сценарий считывает все эти настройки (см. код фрагмента B листинга).
Для обеспечения безопасности сетевого интерфейса сетевой экран должен быть включен как для конкретного интерфейса, так и глобально. Если брандмауэр отключен в одном из двух вариантов, он не будет фильтровать трафик для этого интерфейса.
Настройка исключений
Еще одна распространенная ошибка может возникнуть при настройке исключений сетевого экрана. Однако, прежде чем перейти к описанию проблемных исключений, позвольте сделать небольшое отступление. Списки исключений в принципе могут создавать проблемы и должны постоянно проверяться. Необходимо регулярно их просматривать. Часто правила фильтрации получаются слишком мягкими из-за большого числа исключений и широкой области применения. Например, недопустимо широкую область имеет исключение, разрешающее весь трафик для указанного приложения, так как оно разрешает любое соединение с любым портом, используемым данным приложением. Такая ситуация нежелательна, ведь некоторые приложения открывают множество портов, включая те, которые никогда не применяются, но ими могут воспользоваться хакеры.
Один из моих клиентов недавно обнаружил нежелательные соединения на своем мобильном компьютере во время командировки. Он тестировал новое приложение для почтового сервера на мобильном компьютере и добавил исключение для этого приложения, разрешающее входящие соединения. Однако при этом он также разрешил соединения по всем портам, используемым приложением, — всего 12 портов. Правильнее было бы создать исключение, разрешающее соединение только с определенными портами TCP, необходимыми для работы.
Однако открытие определенного порта не всегда является лучшим решением, чем создание исключения для приложения. Преимущество использования исключения для приложения заключается в том, что сетевой экран разрешает программе принимать входящий трафик только в то время, когда она запущена. С другой стороны, исключение для порта продолжает принимать трафик на данный порт вне зависимости от активности программы. Решение о том, какие исключения использовать, зависит в основном от того, какие действия выполняет приложение, и от того, насколько вы уверены в данном приложении.
Вне зависимости от выбранного типа исключений, необходимо постоянно просматривать их. По истечении времени в списке будут накапливаться не используемые более исключения. У вас могут остаться исключения для программ, удаленных из системы, или для одной службы могут существовать исключения как для порта, так и для приложения. Приведу наиболее удачные варианты настроек.
Наиболее удачные варианты использования списка исключений
При редактировании исключения сетевого экрана у вас есть возможность указать, какие IP-адреса могут получить доступ к программе или к порту. Эта возможность важна, так как может возникнуть ситуация, когда файл или принтер должны быть доступны для других компьютеров сети, но недоступны из Internet. Указав IP-адреса, вы сможете надежнее закрыть сеть от угроз из внешней сети, при этом оставляя открытым полный доступ для членов локальной сети.
Область применения сетевого экрана играет важную роль в эффективности списка исключений, и следует использовать наиболее ограничивающую из возможных настроек. Ниже описаны возможные области применения сетевого экрана (см. экран 2):
-
любой компьютер — разрешает трафик ото всех IP-адресов;
-
только моя сеть (подсеть) — разрешает трафик от непосредственно доступной сети;
-
пользовательский список — позволяет указать список IP-адресов, для которых будет разрешен доступ.
Выбор первого варианта, который разрешает соединения от любой системы, очевидно является опасным, если только вы не администрируете общественный сервер или не хотите, чтобы к порту мог подключиться любой абонент. Второй вариант на первый взгляд может показаться безопасным, ведь он разрешает подключения только из локальной сети. Однако, даже если вы доверяете всей своей подсети, выбор данной схемы может привести к проблемам — особенно если в сеть включены мобильные компьютеры. Проблема в том, что пользователи мобильных компьютеров часто подключаются к небезопасным сетям (например, в отелях, через точки доступа к беспроводным сетям). В таких случаях служба Windows Firewall может пропускать вредоносный трафик в сеть, так как подключения из подсети разрешены. Важно помнить, что вы не всегда представляете себе точный размер сети, в которую входят мобильные компьютеры. Лучшим решением является использование третьего варианта, списка для указания точного множества IP-адресов и сетей, которым вы хотите разрешить доступ. Код сценария из фрагмента C листинга показывает, как можно добавить в список все исключения сетевого экрана для служб, приложений и портов, вместе со свойствами каждого исключения. Код фрагмента C покажет все исключения в системе. На экране 3 приведен пример экрана вывода. После тщательного изучения списка стоит удалить все ненужные исключения. Нужно иметь в виду, что при выводе исключений для приложений сценарий также должен убедиться в существовании соответствующего файла. Если файл отсутствует (например, файл iTunes), сценарий отмечает это в отчете.
Создание исключений для интерфейса
Помимо глобальных исключений, можно создать списки исключений для определенного интерфейса. Исключения для интерфейсов часто называют назначением портов, так как они позволяют разрешать внешние соединения к порту и направлять эти соединения на любой другой порт данной системы и даже на порт другого компьютера. Из-за того, что форматы соединений к каждому интерфейсу сильно различаются, для отображения фильтров исключений для интерфейсов необходимо создать отдельный код. Так как в фильтрах интерфейсов реализованы возможности технологии Internet Connection Sharing (ICS), необходимо использовать объект HnetCfg.HNetShare (см. фрагмент D листинга). В этом случае из-за того, что в системе существует множество встроенных исключений для интерфейсов, отображаются только исключения, активные для данного соединения. Также следует иметь в виду, что эти исключения не имеют настроек области применения — по возможности нужно использовать глобальные настройки.
Как можно заметить, ошибки в настройке службы Windows Firewall могут со временем накапливаться и понижать защищенность системы. Поэтому важно регулярно проводить аудит настроек брандмауэра. Вы удивитесь, увидев, какой беспорядок может быть в списке исключений. К сожалению, ограничения интерфейса СОМ для службы Windows Firewall, используемого в сценарии, показанном в листинге, не позволяют запускать сценарий для удаленных систем. Однако не так сложно разместить сценарий на каждом отдельном сервере и запускать его при включении или авторизации пользователя. Для своих автономных серверов я настроил запуск сценария с частотой раз в неделю, при этом отчеты приходят мне по электронной почте. Немного изменив сценарий, все желающие могут внедрить его в своей организации.
Марк Барнетт (mburnett@xato.net ) — независимый консультант по безопасности и автор, специализирующийся на проблемах безопасности Windows. Обладатель сертификата IIS MVP