Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Компоновка и установка FreeS/WAN
Конфигурирование FreeS/WAN
Расширение сети
Подобный материал:
1   ...   84   85   86   87   88   89   90   91   ...   101

FreeS/WAN


Принцип действия программного механизма FreeS/WAN несколько отличается от пакета SSH. Пакет FreeS/WAN предназначен для формирования защищенного шифруемого туннеля между двумя закрытыми частными сетями, при этом шифруемый туннель пролегает через открытые, публично доступные каналы связи (как правило, Интернет). Набор операций, выполняемых с использованием SSH, ограничен действиями, которые вы можете выполнить при помощи telnet (это не относится к версии 2 пакета SSH). В отличие от SSH, программный механизм FreeS/WAN осуществляет шифровку всего трафика между двумя сегментами WAN.

Компоновка и установка FreeS/WAN

Чтобы установить FreeS/WAN, вы должны встроить его в ядро Linux. Для этой цели вам прежде всего потребуется чистый, никоим образом не модифицированный исходный код ядра. Исходный код ядра, входящий в комплект OpenLinux (включая исходный код, записанный на компакт-диск, прилагаемый к данной книге), для этой цели не подходит: компания Caldera использует модифицированный исходный код ядра, который нельзя скомпоновать вне рабочей среды RPM. Возможно, в дальнейших версиях ситуация изменится, однако если вы в любом случае будете использовать чистый, нетронутый код ядра, у вас будет меньше проблем. Получить такой код можно по адресу rnel.org или вы можете использовать любое зеркало этого web-узла. Создайте каталог (mkdir linux-2.2.14) и убедитесь в том, что ссылка linux указывает на этот каталог. Распакуйте исходный код ядра, перейдите в этот каталог, выполните компоновку и установку ядра в соответствии с требованиями вашей системы. Убедившись в том, что ядро работает (компонуется, устанавливается и загружается), вернитесь в каталог /usr/src.


ПРИМЕЧАНИЕ

Если при загрузке нового ядра у вас возникли проблемы, убедитесь в том, что используемый вами файл /etc/lilo.conf корректен, и вновь запустите lilo. Убедитесь в том, что загрузчик lilo видит ваше ядро.

Находясь в каталоге /usr/src, распакуйте архив FreeS/WAN. После этого перейдите в подкаталог freeswan-1.1 и отдайте одну из следующих команд:

make menugo (соответствует make menuconfig)

make xgo (соответствует make xconfig)

make ogo (соответствует make config)

make oldgo (соответствует make oldconfig)

В результате выполнения одной из этих команд исходный код ядра будет исправлен и начнется компиляция и сборка ядра. Выберите сетевые параметры из категории Networking Options, которые вы намерены установить (не сбрасывайте параметр Kernel/User netlink socket). Если вы намерены использовать данную систему как выделенный маршрутизатор, имеет смысл установить параметр IP: optimize as router not host (оптимизировать как маршрутизатор, а не как обычный узел), благодаря этому ваша система будет работать несколько быстрее. Если же настраиваемая вами система должна совмещать выполнение функций маршрутизатора WAN и рабочей станции, устанавливать данный параметр не следует, так как при этом будут возникать некоторые ошибки пакетов.

Вы можете использовать также IP: advanced router options (дополнительные параметры маршрутизатора) и выбрать некоторые из дополнительных параметров. Если вы выбрали эту возможность, в процессе начальной загрузки вы должны отключить rp_filter. Для этого в файл /etc/rc.d/rc.local необходимо добавить следующую строку:

echo "0" > /proc/sys/net/ipv4/conf/all/rp_filter

Ближе к концу раздела Networking Options вы можете обратить внимание на некоторые новые параметры. Первый параметр имеет отношение к шифрующему протоколу IPSEC и называется IP Security Protocol (FreeS/WAN IPSEC). Соответствующий код может быть либо встроен в ядро, либо скомпилирован как отдельный модуль. Включив этот параметр, вы получите возможность воспользоваться несколькими другими параметрами, имеющими отношение к IPSEC. В большинстве случаев нет необходимости изменять значения по умолчанию. Если вы хорошо представляете себе предназначение и смысл этих параметров, можете настроить их в соответствии с вашими предпочтениями, однако вы ни в коем случае не должны включать параметр IPSEC: Enable Insecure algorithms (IPSEC: разрешение на использование незащищенных алгоритмов). Если вы включите этот параметр, теряется смысл использования зашифрованного канала связи.

Когда вы закончите настройку, сохраните новую конфигурацию ядра. Вы должны сохранить новую конфигурацию ядра вне зависимости от того, внесли ли вы в нее какие-либо изменения, в противном случае необходимые для использования FreeS/WAN изменения не будут внесены в исполняемый код ядра.

После того как вы сохраните конфигурацию и завершите работу с утилитой настройки, автоматически начнется процедура компоновки ядра. Однако в процессе компоновки не будут выполнены все необходимые действия. Поэтому когда компоновка завершится, вы должны выполнить команду cd ../linux, а затем выполнить команду make modules_install. После этого следует переместить ядро, запустить lilo, чтобы загрузчик распознал новое ядро, и, наконец, перезагрузить систему с использованием нового ядра.

В процессе сборки ядра в системе будут установлены также несколько утилит и страницы электронной документации man pages.

Конфигурирование FreeS/WAN

Чтобы рассказать вам о настройке FreeS/WAN, я начну с самой простой конфигурации — требуется обеспечить защищенный канал обмена данными между двумя системами, подключенными к одному и тому же сетевому кабелю. В дальнейшем эта конфигурация будет расширена и усовершенствована. На каждом этапе конфигурирования FreeS/WAN вы должны будете проверять конфигурацию, чтобы убедиться в том, что она работает корректно.

В процессе загрузки ядра и инициализации системы на консоли, скорее всего, появится несколько сообщений, связанных с IPSEC. До тех пор пока вы не настроите IPSEC, вы должны игнорировать эти сообщения. Первое, что вы должны сделать, это отключить IPSEC на всех ваших системах до тех пор, пока вы не будете готовы соединить их.

Для выполнения первого этапа конфигурирования я буду использовать две системы: сетевой узел HostA с IP-адресом 192.168.0.1 и сетевой узел HostB с IP-адресом 192.168.0.2. Обе эти системы подключены к одному сетевому кабелю. Тестовое соединение между ними будет называться HostA2HostB (если бы я хотел быть действительно оригинальным, я назвал бы его foo-test). Каждая из этих систем использует для соединения с сетью Ethernet интерфейс eth0.

На узле HostA уберите файл /etc/ipsec.conf по умолчанию (по умолчанию в этом файле располагаются значения, подразумевающие слишком «мягкую» безопасность) и вместо него используйте следующие значения:

config setup

interfaces="ipsec0=eth0"

#(later you can change the above to interfaces="ipsec0=eth0 ipsec1=ppp0"

klipsdebug=all #(or none if you like)

plutodebug=all #(again, none if you like) conn HostA2HostB

HostA=192.168.0.1

HostB=192.168.0.2

keyingtries=0 # this is actually a very large number

Обратите особое внимание на отступы. Отступы являются важным атрибутом большинства файлов, связанных с ipsec. Скопируйте этот файл на узел HostB. После этого отредактируйте файл ipsec.secrets следующим образом:

192.168.0.1 192.168.0.2 "между кавычками следует разместить 256 случайно выбранных битов, полученных при помощи команды 'ipsec ranbits > tmpfile'"


ВНИМАНИЕ

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


Чтобы случайным образом сгенерировать биты для файла ipsec.secrets, вы можете воспользоваться командой ipsec ranbits. Обе системы (192.168.0.1 и 192.168.0.2), упомянутые в строке файла ipsec.secrets (в эту строку можно добавить дополнительные системы), должны обладать идентичными копиями этого файла (по крайней мере должны совпадать биты 256-битного ключа). Убедитесь в том, что 256 бит размещаются между кавычками.

После того как на обе системы скопированы оба конфигурационных файла ipsec (с корректным набором разрешений на доступ к файлу /etc/ipsec.secrets), воспользуйтесь командой modeprobe для того, чтобы добавить в систему модуль ipsec (если вы скомпоновали ipsec в виде модуля), и выполните команду /etc/rc.d/ init.d/ipsec start на каждой из систем.

Чтобы убедиться в том, что ipsec функционирует, можно проверить несколько признаков. Во-первых, воспользовавшись утилитой ipconfig, вы можете обнаружить, что в системе появился новый интерфейс ipsec0 со всеми соответствующими параметрами. Кроме того, в таблице маршрутизации возникли несколько новых записей, связанных с интерфейсом ipsec0. Наконец, вы можете получить некоторую диагностическую информацию при помощи самой утилиты ipsec. Для этого достаточно использовать команды ipsec look и ipsec tncfg.

Расширение сети

Если взглянуть в файл ipsec.conf по умолчанию, можно обнаружить несколько дополнительных переменных, таких, как, например, переменная nexthop (следующий участок ретрансляции). В нашем конфигурационном файле соответствующие переменные могут обладать именами HostAnexthop или HostBnexthop. Если две системы, обменивающиеся зашифрованной информацией, физически разделены несколькими участками ретрансляции (несколькими хопами) Интернета (или любой другой сети) — иными словами, если адрес шлюза одной системы не совпадает с адресом шлюза другой системы, — тогда переменная nexthop должна содержать IP-адрес шлюза для каждой из этих машин. Если для связи с Интернетом вы используете РРР, у вас в распоряжении будет локальный и удаленный IP-адрес соединения «точка-точка». Локальный адрес будет принадлежать сетевому узлу HostA (надеюсь, вы придумаете более осмысленное имя), а удаленный адрес — это значение переменной HostAnexthop. Ваш узел HostB (а в конфигурационном файле по умолчанию — rightnexthop) содержит IP-адрес nexthop другого узла. И конечно же, IP-адрес каждой из систем должен быть упомянут в файле ipsec.secrets.

На текущий момент мы с вами сформировали туннель, напрямую соединяющий две системы. Это весьма ограниченная конфигурация, однако вместе с тем она самая простая из всех возможных. Если вы хотите расширить туннель таким образом, чтобы включить другие сетевые узлы, расположенные за двумя системами, участвующими в созданном вами соединении, вы должны добавить в конфигурацию еще несколько переменных.

Прежде всего вам потребуется сетевая маска для подсети, расположенной за шлюзом. Эту сетевую маску следует присвоить переменной HostAsubnet= в формате сеть/битовая_маска, например, 192.168.0.0/24. Эта запись указывает на то, что узел HostA выполняет функции шлюза для всех систем с IP-адресами в диапазоне 192.168.0. Соответственно в конфигурации каждой из этих систем узел HostA должен быть указан в качестве шлюза.


ВНИМАНИЕ

Если вы используете переменную subnet, шлюзовая система исключается из указанного вами диапазона. Иными словами, трафик, исходящий от шлюзовой системы или адресованный шлюзовой системе, не будет передаваться через туннель. Чтобы исправить ситуацию, вы должны либо настроить отдельный туннель, в котором не будет переменной subnet, либо указать 192.168.0.1/32.

Также следует определить, выполняет ли шлюз функции брандмауэра (является ли он маскирующим узлом или нет). Если да, вы должны добавить переменную firewall и присвоить ей значение yes: HostAfirewall=yes.

Добавление дополнительных сетей

Чтобы увеличить количество подсетей в вашей защищенной сети WAN (то есть чтобы соединить защищенными каналами три и более подсетей), необходимо расширить файлы ipsec.conf и ipsec.secrets. Наиболее сложной является задача обеспечения уникальности IP-адресов в рамках вашей защищенной сети. Например, если в состав вашей сети WAN входит 50 немаршрутизируемых подсетей (например, из диапазона адресов 192.1б8.х.х), необходимо добиться того, чтобы каждый из узлов, входящих во все эти подсети, обладал бы уникальным IP-адресом. Вторая сложная задача — придумывание пар имен для осмысленного именования виртуальных соединений.

Например, допустим, вы хотите соединить три подсети. Три шлюзовых узла будут именоваться rnoe, larry и curly. Узел mое будет обладать файлом ipsec.conf с двумя разделами conn, содержимое которого может быть таким, как показано в листинге 21.4.


Листинг 21.4. Фрагмент файла ipsec.conf без раздела config setup

conn moe-larry

moe=192.168.0.1

moenexthop=Internetgatewaymaewest

moesubnet=192.168.0.0/24 #remember, moe is not secure to larry

moefirewall=yes

larry=192.168.1.1

larrysubnet=192.168.1.0/24

larrynexthop=Internetgatewaymaeeast

larryfirewall=yes

keyingtries=0

conn moe-curly

moe=192.168.0.1

moenexthop=Internetgatewaymaewest

moesubnet=192.168.0.0/24 #remember, moe is not secure to larry

moefirewall=yes

curly=192.168.2.1

curlysubnet=192.168.2.0/24

curlynexthop=Internetgatewaymaesouth

curlyfirewall=yes

keyingtries=0


На узле larry можно использовать точную копию показанного в листинге раздела conn moe-larry, а на узле curly — точную копию раздела conn moe-curly. При этом каждый из узлов larry и curly должен обладать разделом conn larry-curly, в котором будет описываться соединение между этими двумя узлами.

Файл ipsec.secrets должен содержать два дополнительных набора секретов. Узел тое должен обладать общим ключом с узлом larry и еще одним общим ключом с узлом curly, однако ключ, используемый для обмена данными между узлами larry и curly, узлу тое не требуется (вы, конечно, можете добавить соответствующий ключ на узел тое, однако этот ключ просто не будет использоваться). Подобное правило обмена ключами действует и в отношении двух других серверов IPSEC.

И конечно же, если вы хотите обеспечить защищенную передачу трафика, исходящего от одного из шлюзовых узлов (например, тое) и адресованного другому шлюзовому узлу (например, larry), вам потребуется определить еще одно соединение (например, moe-larry-gates), которое формирует еще один дополнительный простой туннель. Для этого туннеля необходимо либо не определять переменные moesubnet и larrysubnet, либо определить данный туннель специально для соответствующего узла (192.168.0.1/32 и 192.168.1.1/32).