Многие компании используют ограничения на доступ к ресурсам для превентивной защиты важных серверов Windows и сетей. Одним из распространенных методов защиты является использование IPsec для изоляции серверов и доменов, Server and Domain Isolation (SDI). В среде Windows защита SDI реализуется легко. Но во многих организациях развернуты гетерогенные сети, включающие, наряду с Windows, также системы UNIX и Linux. К счастью, защиту SDI можно распространить и на них.
SDI легко реализуется в системах Windows благодаря применению Kerberos в качестве механизма аутентификации. А вот в мире UNIX и Linux поддержка Kerberos доступна не для всех клиентов. Большинство клиентов UNIX и Linux в качестве механизма аутентификации поддерживают технологию предварительного обмена ключами, preshared keys (PSK), и сертификаты X.509v3. Обмен ключами PSK наиболее прост в реализации, но этот метод считается менее безопасным. Использование сертификатов обеспечивает лучшую защиту, но требует развернутой инфраструктуры открытых ключей Public Key Infrastructure (PKI).
Далее я опишу использование ключей PSK и настройку трех популярных систем UNIX и Linux для реализации IPsec. Таким образом обеспечивается поддержка изоляции SDI для входящих и исходящих соединений. В статье будут представлены настройки, необходимые для обеспечения совместной работы систем Windows, UNIX и Linux.
Но перед тем как продолжить, я обязан предупредить вас, что некорректные настройки и ошибки при внедрении IPsec в среде Windows, особенно при использовании групповых политик, могут полностью разрушить коммуникации между компьютерами и нарушить связь систем с контроллерами домена DC. Перед внедрением IPsec в корпоративной сети и на серверах необходимо выполнить всестороннее лабораторное тестирование!
Настройка систем Windows
Перед началом настройки систем UNIX и Linux я рекомендую настроить SDI в среде Windows. По умолчанию в качестве метода аутентификации для IPsec Windows использует протокол Kerberos. Если ваши системы UNIX и Linux не поддерживают аутентификацию Kerberos, это не означает, что вам придется отказаться от Kerberos при аутентификации IPsec для систем Windows. Протокол IPsec предусматривает автоматический выбор взаимоприемлемого метода аутентификации. Просто необходимо убедиться, что системы Windows, UNIX и Linux поддерживают один и тот же метод аутентификации.
Большинство вариантов реализации SDI в среде Windows подразделяют системы на надежные серверы и клиенты.
Защищенные серверы. Защищенные серверы настроены на постоянное использование IPsec во всех коммуникациях между системами; обычно допускается исключение для связи с контроллерами домена и шлюзами по умолчанию. Если защищенный сервер принимает запрос на подключение, которое не защищено IPsec, и это подключение не от контроллера домена, или шлюза, или другой системы из защищенной группы, сервер сообщит, что требуется использование IPsec. Эти сообщения можно увидеть в оснастке IPsec Security Monitor консоли управления Microsoft Management Console (MMC) или в программе Network Monitor.
Обратите внимание, что контроллеры домена являются исключением, поскольку по умолчанию в Windows для аутентификации используется Kerberos, а аутентификацию пользователей и компьютеров обеспечивают контроллеры домена. Если вы не можете обратиться к контроллеру домена без протокола IPsec, который требует аутентификации, вы не сможете аутентифицироваться. Кроме того, часто контроллер домена выполняет дополнительные функции, например DHCP и DNS. Служба DHCP обеспечивает динамическое выделение IP-адресов, а это означает, что IPsec невозможно использовать до тех пор, пока компьютер не получит IP-адрес и не будет аутентифицирован в домене. DNS используется для обнаружения контроллеров домена, обеспечивающих аутентификацию. Поэтому связь IPsec не может быть установлена до завершения процесса аутентификации.
Клиенты. Стандартная настройка клиентов подразумевает, что при всех коммуникациях IPsec использоваться не будет. При попытке обращения к защищенному серверу тот возвращает ответ о необходимости использования IPsec. После этого клиент начинает аутентификацию по IPsec. При успешной аутентификации соединение будет установлено и коммуникация станет возможна.
Самым простым способом настройки и управления политик IPsec для клиентов и защищенных серверов является использование объектов групповых политик Group Policy Object (GPO). С этого момента я исхожу из предположения, что у вас уже имеются объекты GPO с политиками IPsec для клиентов и защищенных серверов.
С помощью редактора объектов групповых политик для каждого объекта GPO требуется выполнить следующие шаги:
-
Откройте GPO, выберите Computer ConfigurationWindows SettingsSecurity Setting и щелкните IP Security Policies. В правой панели дважды щелкните на политике IPsec клиента, чтобы открыть диалоговое окно IP Security Policy Properties.
-
Предполагается, что у вас будет использоваться одно и то же правило IPsec по умолчанию для всех клиентов, — выберите это правило и щелкните Edit.
-
Выберите закладку Authentication Methods и щелкните Add.
-
В диалоговом окне New Authentication Method Properties выберите Use this string (preshared key) и нажмите Enter. На экране показано добавление метода аутентификации с ключом PSK.
-
Нажмите OK, чтобы закрыть диалоговое окно IP Security Policy Properties.
Изменения в политиках будут распространены на системы Windows при следующем обновлении политик в соответствии с настроенным интервалом времени или при следующей перезагрузке системы, в зависимости от того, какое из событий произойдет раньше. Для клиентов, имеющих более одного правила IPsec и для защищенных серверов необходимо указать метод аутентификации для каждого из правил IPsec.
Подготовка систем UNIX и Linux для использования IPsec
Набор шагов, необходимых для подготовки систем UNIX и Linux для работы с IPsec, для разных дистрибутивов различен. Sun Solaris 10 изначально включает полную поддержку IPsec, так что система в дополнительной настройке не нуждается. Большинство дистрибутивов Linux по умолчанию не включают в себя полную реализацию IPsec, так что, скорее всего, вам потребуется добавить дополнительную поддержку в ядро системы. Проверьте наличие в дистрибутиве средств IPsec (например, ipsec-tools.rpm). Если используется дистрибутив без поддержки средств IPsec, можно загрузить и скомпилировать набор средств IPsec для Linux Kernel 2.6 с сайта IPsec-Tools (http://ipsec-tools.sourceforge.net/).
Для семейства UNIX BSD необходимо убедиться, что поддержка IPsec включена в состав ядра. Существует несколько реализаций IPsec. В данной статье я рассматриваю одну из наиболее распространенных реализаций, которая доступна для FreeBSD.
Чтобы проверить, включена ли поддержка IPsec в ядро, достаточно заглянуть в раздел параметров файла конфигурации ядра системы, расположенный в каталоге /sys/
uname –p
Обратите внимание, что команды FreeBSD чувствительны к регистру символов.
Для определения имени файла конфигурации ядра выполните команду
uname –I
Текущий файл конфигурации ядра будет иметь имя, соответствующее имени, сообщенному командой uname в разделе ident. Определив имя файла конфигурации ядра, выполните команду
grep IPSEC <файлКонфигурации>
указав в качестве параметра <файлКонфигурации> имя файла. Результат выполнения этой команды должен содержать два элемента:
options IPSEC
options IPSEC_ESP
Если хотя бы один из этих элементов отсутствует, необходимо добавить его в секцию параметров. После редактирования файла конфигурации потребуется собрать ядро заново, для чего следует выполнить команды:
config
cd../conf/
make cleandepend; make depend
make
После того как сборка ядра будет закончена, выполните команду
make install
и перезагрузите систему. Также потребуется установить демон Internet Key Exchange (IKE). В дистрибутиве FreeBSD имеется такой демон, называемый racoon, он размещается в каталоге/usr/ports/security/ipsec-tools. Для загрузки racoon введите
make
в каталоге ports. В появившемся меню выбора параметров нажмите OK, чтобы принять предложенные по умолчанию параметры для загрузки порта на этот компьютер.
Планирование
После того как необходимое программное обеспечение установлено на системы UNIX или Linux, необходимо спланировать настройку этих систем. Например, требуется определить:
-
компьютеры Windows, с которыми будут взаимодействовать все системы UNIX или Linux;
-
будет ли IPsec использоваться для всех коммуникаций или только для части;
-
будут ли использоваться шифрование, аутентификация или и то и другое;
-
алгоритмы, которые будут применяться.
Процесс настройки каждого типа систем UNIX и Linux в вашей среде может иметь свои особенности. Однако некоторые элементы процессов настройки будут общими для всех систем. В рассматриваемом примере конфигурации я предполагаю, что используется настройка Encapsulating Security Payload (ESP) NULL, что означает аутентификацию пакетов без шифрования. ESP NULL часто используется в реализациях SDI для аутентификации взаимодействующих между собой систем. Если планируется использование ESP и/или заголовков аутентификации Authentication Header (AH), приведенные примеры помогут вам начать работу.
Настройка Solaris 10
Для настройки Solaris 10 для использования правил IPsec требуется создать конфигурационный файл IKE, добавить предварительно распределенные ключи PSK в файл ike.preshared и запустить демон IKE.
Настройка правил IPsec. В первую очередь следует настроить правила IPsec, как и на системах Windows. Обычно для этого требуется добавить правила в файл ipsecinit.conf, расположенный в /etc/inet. Правила из этого файла загружаются системой при каждой перезагрузке. Для описания правил используется следующий формат:
{шаблон} действие {свойства}
Здесь {шаблон} описывает условия, при которых правило должно быть исполнено, действие описывает действие, выполняемое данным правилом, а {свойства} представляют собой набор аргументов для данного правила. В качестве действия используются ipsec (необходимо использование IPsec) или bypass (использование IPsec не требуется). Существуют и другие действия — drop, permit и pass. Описание для этих и других действий можно найти в документации man в разделе ipsecconf (1M).
Например, если все защищенные серверы Windows размещаются в подсети 172.21.23.0/24 и для доступа к ним требуется ESP NULL с SHA-1 (Secure Hash Algorithm-1, алгоритм хеширования безопасности 1), соответствующее правило будет иметь следующий вид:
{raddr 172.21.23.0/24 dir both} ipsec {encr_algs null encr_auth_algs sha1}
В качестве образца можно указать множество условий — это позволяет более точно ограничить соответствие, можно задать адреса источников и получателей, порты и протоколы. Если указана группа условий, то к ним применяется операция логического «И», т. е. все условия должны быть выполнены, чтобы данное правило было применено. Как правило, если защищаемые серверы находятся в разных подсетях, потребуется создать правила для каждой из них. Правила позволяют ограничить открытые порты для служб или создать исключения, например для протокола Internet Control Message Protocol (ICMP). Правила обрабатываются в том порядке, в каком они перечислены в файле, за исключением правил обхода (bypass rules), которые всегда обрабатываются в первую очередь. Порядок применения правил играет важную роль, и о нем следует всегда помнить. Рекомендуется специализированные, «узконаправленные» правила указывать перед общими правилами, причем логически группировать правила по подсетям. Более подробные сведения о добавлении правил в файл ipsecinit.conf можно найти в разделе ipsecconf (1M) документации man. В каталоге /etc/inet имеется конфигурационный файл ipsecinit.sample.
После добавления правил IPsec в конфигурационный файл для загрузки правил в систему выполните команду
ipsecconf –a/etc/inet/ipsecinit.conf
Обратите внимание: команды в Solaris чувствительны к регистру. Для просмотра действующих правил IPsec достаточно выполнить команду
ipsecconf
Создание конфигурационного файла IKE. Следующим шагом настройки Solaris является создание конфигурационного файла IKE. По умолчанию он носит имя config и размещается в каталоге /etc/inet/ike. Если такой файл существует, демон IKE загружает его на этапе загрузки системы. В том же каталоге находится простой пример файла настройки — config.sample, но я бы не советовал брать его за основу, так как там предполагается использование сертификатов. Вместо этого нужно создать файл config таким образом, чтобы первые строки были аналогичны показанным в листинге 1.
Это настройки по умолчанию, используемые системами Solaris при коммуникациях с другими системами по протоколу IPsec. Эти же настройки будут работать с обычными политиками Windows IPsec. При необходимости конфигурацию по умолчанию можно изменить. Подробные сведения об этом содержатся в руководстве системного администратора Solaris System Administration Guide: IP Services в главе 23 Configuring IKE (Tasks), посвященной настройке IKE.
Помимо четырех приведенных в листинге 1 строк, в конфигурационный файл IKE необходимо добавить по одной строке для каждой удаленной системы, с которой Solaris будет обмениваться данными по протоколу IPsec. Каждая из этих строк будет иметь вид:
{label "<метка>" local_addr <локальныйIP> remote_addr <удаленныйIP>}
Где <метка> представляет собой уникальное текстовое описание, <локальныйIP> — адрес самой системы Solaris, <удаленныйIP> — адрес системы, с которой будет осуществляться обмен данными.
Добавление ключей в файл ike.preshared. Теперь необходимо добавить ключи в файл ike.preshared, который размещается в каталоге /etc/inet/secret. Требуется добавить по строке для каждой системы, с которой будет осуществляться обмен данными. Каждая строка имеет формат:
{localidtype IP localid
remoteidtype IP remoteid key <16-й Ключ>}
Где <16-й Ключ> является ключом PSK, указанным в виде шестнадцатеричного значения. Имейте в виду, что в Windows ключ PSK задается в виде обычной текстовой строки ASCII. Поэтому, например, ключу PSK 1234567890ABCD0987654321 для Windows в Solaris будет соответствовать значение 313233343536373839304142434430393837363534333231.
Запуск демона IKE. Наконец, надо запустить демон IKE. Для этого выполним команду:
/usr/lib/inet/in.iked
После запуска демона система Solaris сможет обмениваться данными с каждой из удаленных систем, настроенных в файлах /etc/inet/ike/config и /etc/inet/secret/ike.preshared, если соответствующее правило содержится в файле ipsecinit.conf. Запуск демона будет выполняться при следующих запусках системы по причине существования файла /etc/inet/ike/config.
Настройка FreeBSD
Настройка IPsec для FreeBSD происходит примерно так же, как для Solaris, в том смысле, что все делается с помощью конфигурационных файлов и политик управления IPsec, но в FreeBSD это осуществить проще. Для начала требуется создать файлы racoon.conf, racoon.presharedkey, создать и загрузить политики безопасности, после чего запустить демон racoon и загрузить политики безопасности.
Создание файла racoon.conf. Первым шагом при настройке IPsec на системе FreeBSD является создание файла racoon.conf, который должен находиться в каталоге /usr/local/etc/racoon. Создайте этот файл, как в листинге 2. Он подойдет для большинства политик Windows IPsec, использующих ESP NULL.
Создание файла racoon.presharedkey. Далее следует создать файл racoon.presharedkey в каталоге /usr/local/etc/racoon. Как видно из листинга 2 (фрагмент А), путь и имя файла /usr/local/etc/racoon/racon.presharedkey определены в файле racoon.conf.
В файле racoon.presharedkey требуется добавить по одной строке для каждой удаленной системы, с которой будет взаимодействовать данная система FreeBSD. В этой строке содержится IP-адрес удаленной системы и ключ PSK, используемый для соединения IPsec в приведенном ниже формате:
<удаленныйIP> <ключPSK>
Ключ PSK может представляться как в алфавитно-цифровом, так и в шестнадцатеричном формате. Алфавитно-цифровой ключ может содержать пробелы и не заключается в двойные кавычки. Шестнадцатеричный ключ должен начинаться с 0x. Ниже приведены примеры ключей PSK в обоих форматах для подключения к двум разным удаленным системам:
172.21.23.128 1234567890ABCD0987654321
172.21.23.129 0x3132333435363738393041424344303938373
63534333231
Владельцем файла является пользователь root, он должен иметь права только на чтение файла racoon.conf. Никакой другой пользователь не должен обладать правами доступа к данному файлу.
Создание и загрузка политик безопасности. Далее требуется создать политики безопасности, в соответствии с которыми IPsec будет выполнять фильтрование входящих и исходящих пакетов, а также определять, когда следует устанавливать соединения IPsec. Политики состоят из правил для входящих и исходящих пакетов, правила позволяют определять как отдельные хосты, так и подсети, при этом одно и то же правило не может применяться одновременно ко входящим и исходящим пакетам. Политики хранятся в ядре системы и могут загружаться с помощью команды setkey (8) в интерактивном режиме или из файла.
Поскольку политики после перезагрузки компьютера не сохраняются, для автоматической загрузки политик в ядро следует создать файл, который будет считываться программой setkey при выполнении сценария автозапуска. Для этого создайте файл /usr/local/etc/setkey/setkey.conf и добавьте в него следующие политики для каждого хоста и подсети, с которыми вы хотите использовать IPsec:
spdadd 0.0.0.0/0
any –P out ipsec esp/ transport//require;
spdadd0.0.0.0/0 any –P in ipsec esp/transport// require;
Эти политики подразумевают применение только ESP NULL. Чтобы политика начала действовать, выполните команду
setkey –f/usr/local/etc/setkey/setkey.conf
Запуск демона racoon. После загрузки политик следует запустить демона racoon и проверить работу соединений IPsec. Для запуска демона выполните команду
/usr/local/sbin/racoon
после чего выполните проверку корректной работы созданных политик. Чтобы демон racoon запускался при перезапуске системы, добавьте в файл /etc/rc/conf следующую строку:
racoon_enable="YES"
Загрузка политик безопасности. Последним шагом в настройке FreeBSD для использования IPsec является загрузка политик безопасности в ядро системы во время перезапуска. Проще всего этого добиться, если создать файл /usr/local/etc/rc/d/setkey, содержащий приведенный в листинге 3 сценарий.
После создания данного файла добавьте в файл
/etc/rc.conf следующую строку: setkey_enable="YES"
Созданные политики безопасности будут загружены при следующем запуске системы FreeBSD.
Настройка систем Linux
Настройка систем Linux очень похожа на настройку FreeBSD, основные различия заключаются в размещении конфигурационных файлов. В Linux оба файла racoon.conf и setkey.conf размещаются в каталоге /etc/racoon. Там же находятся примеры файлов racoon.conf и setkey.conf, создаваемые при установке средств IPsec. Измените эти файлы в соответствии с указаниями, приведенными для систем FreeBSD. При этом следует выполнить два изменения в файле racoon.conf по сравнению с листингом 2.
-
В системах Linux файл pre_shared_key размещается в другом месте, так что фрагмент А должен указывать на файл /etc/racoon/psk.txt.
-
При применении ESP NULL для систем Linux следует использовать значение null_enc, а не null_sec для элемента encryption_algorithm в разделе sainfo. В приведенном листинге (фрагмент B) значение null_sec надо заменить на null_enc.
Для настройки автоматического запуска демона racoon и загрузки политик следует создать привязки с /etc/rc.d/racoon в каталогах /etc/rc.d/rc3.d и /etc/rc.d/rc5.d для запуска и завершения работы. Команды для создания связей могут быть, например, такие:
cd/etc/rc.d/rc3.d
ln –s../racoon S15 racoon
ln –s../racoon K15 racoon
cd../rc5.d
ln –s../racoon S15 racoon
ln –s../racoon K15 racoon
Следует помнить, что команды Linux чувствительны к регистру символов.
Сценарии запуска и завершения работы racoon обеспечивают управление политиками безопасности, что избавляет от необходимости создания отдельных команд setkey для запуска и завершения работы. Вы можете изменить порядок, в котором выполняются запуск и остановка racoon, изменив число, следующее за символами S и K.
Устранение неисправностей
Настройка IPsec — задача нетривиальная. Прежде чем пара систем начнет взаимодействовать через IPsec, возможны проблемы, связанные с конфигурациями, ключами PSK и политиками. Вероятность возникновения проблем повышается, если в добавление к ESP NULL используются AH и ESP.
Для облегчения обнаружения причин и устранения неполадок можно воспользоваться инструментом Microsoft Network Monitor 3.2, который может работать под Windows Server 2008, Windows Server 2003, Windows Vista или Windows XP. Network Monitor позволяет отслеживать пакеты IKE, которыми обмениваются системы Windows, UNIX и Linux. Кроме того, Network Monitor позволяет просматривать пакеты предложений инициации коммуникации, создаваемые системами, — таким образом вы можете убедиться, что передаваемые предложения соответствуют сделанным в GPO настройкам. Network Monitor распространяется свободно и доступен в центре загрузки Microsoft по адресу http://www.microsoft.com/downloads/details.aspx? FamilyID=f4db40af-1 e08–4a21-a26 b-ec2f4dc4190d&DisplayLang=en.
В Solaris можно запустить in.iked в отладочном режиме, указав ключ -d в командной строке. В отладочном режиме демон не будет закрывать окна терминала и будет выводить все сообщения. Вы получите всю подробную информацию, которая поможет обнаружить источник проблем с IPsec.
Аналогично системы FreeBSD и Linux тоже позволяют запустить racoon в режиме вывода журнала в окно терминала с помощью команды
racoon -F
Если в эту команду добавить ключи -d и -v, в окно терминала будет выдаваться большой объем отладочной информации, которая позволит легко обнаружить возможные несоответствия. С помощью флажка -l и указания имени файла вся отладочная информация может быть сохранена в журнале. Надо отметить, что ключи -d, -v и -l можно использовать при запуске racoon и в терминальном, и в фоновом режиме. Выдаваемая информация, помимо прочего, содержит подробные сведения обо всех производимых сопоставлениях предложений на соединение удаленной системы с предложениями, определенными в локальной системе, — это помогает убедиться, что для пары систем определены соответствующие предложения. Для проверки загруженных в ядро политик можно воспользоваться командой
setkey -DP
Для проверки установленных защищенных связей, т. е. успешных ассоциаций IPsec, выполните команду:
setkey -D
Используйте IPsec для изоляции серверов
Настройка коммуникаций IPsec с ключами PSK между системами Windows, UNIX и Linux — дело несложное и полезное. Хотя по сравнению с сертификатами Kerberos ключи PSK не считаются достаточно надежным средством защиты, зато поддержка ключей PSK имеется в большинстве используемых систем. Благодаря использованию IPsec с ключами PSK вы можете обеспечить изоляцию SDI для серверов UNIX и Linux, что существенно усилит общую защиту сети.
Джон Хоуи (jhowie@microsoft.com) — руководитель подразделения World Wide Services and IT Technical Community for Security компании Microsoft. Имеет сертификаты CISSP, CISM и CISA