| Разыскиваются редактор и журналист >>> |
| Руководство FreeBSD |
|
10.8 Межсетевые экраныПредоставили Gary Palmer and Alex Nash.Интерес к межсетевым экранам (брандмауэр, firewall) со стороны людей, подключенных к интернет, все возрастает и появились даже приложения для локальной сети, предоставляющие повышенный уровень безопасности. В этом разделе мы надеемся изложить что такое межсетевые экраны, как их использовать, и как использовать возможности, предоставляемые ядром FreeBSD для их реализации.
10.8.1 Что такое межсетевой экран?Есть два четко различающихся типа межсетевых экранов, повседневно используемых в современном интернет. Первый тип правильнее называть маршрутизатор с фильтрацией пакетов. Этот тип межсетевого экрана работает на машине, подключенной к нескольким сетям и применяет к каждому пакету набор правил, определяющий переправлять ли этот пакет или блокировать. Второй тип, известный как прокси сервер, реализован в виде даемонов, выполняющих аутентификацию и пересылку пакетов, возможно на машине с несколькими сетевыми подключениями, где пересылка пакетов в ядре отключена. Иногда эти два типа межсетевых экранов используются вместе, так что только определенной машине (известной как защитный хост (bastion host)) позволено отправлять пакеты через фильтрующий маршрутизатор во внутреннюю сеть. Прокси сервисы работают на защитном хосте, что обычно более безопасно, чем обычные механизмы аутентификации. FreeBSD поставляется с встроенным в ядро фильтром пакетом (известным как IPFW), ему будет посвящена оставшаяся часть раздела. Прокси серверы могут быть собраны на FreeBSD из программного обеспечения сторонних разработчиков, но их слишком много и невозможно описать их в этом разделе. 10.8.1.1 Маршрутизаторы с фильтрацией пакетовМаршрутизатор это машина, пересылающая пакеты между двумя или несколькими сетями. Маршрутизатор с фильтрацией пакетов запрограммирован на сравнение каждого пакета со списком правил перед тем как решить, пересылать его или нет. Большинство современного программного обеспечения маршрутизации имеет возможности фильтрации, и по умолчанию пересылаются все пакеты. Для включения фильтров, вам потребуется определить набор правил. Для определения того, должен ли быть пропущен пакет, межсетевой экран ищет в наборе правило, совпадающее с содержимым заголовков пакета. Как только совпадение найдено, выполняется действие, присвоенное данному правилу. Действие может заключаться в отбрасывании пакета, пересылке пакета, или даже в отправлении ICMP сообщения в адрес источника. Учитывается только первое совпадение, поскольку правила просматриваются в определенном порядке. Следовательно, список правил можно назвать ``цепочкой правил''. Критерий отбора пакетов зависит от используемого программного обеспечения, но обычно вы можете определять правила, зависящие от IP адреса источника пакета, IP адреса назначения, номера порта источника пакета, номера порта назначения (для протоколов, поддерживающих порты), или даже от типа пакета (UDP, TCP, ICMP, и т.д.). 10.8.1.2 Прокси серверыПрокси серверы это компьютеры, где обычные системные даемоны (telnetd, ftpd, и т.д.) заменены специальными серверами. Эти серверы называются прокси серверами, поскольку они обычно работают только с входящими соединениями. Это позволяет запускать (например) telnet прокси сервер на межсетевом экране, и делать возможным вход по telnet на межсетевой экран, прохождение механизма аутентификации, и получение доступа к внутренней сети (аналогично, прокси серверы могут быть использованы для выхода во внешнюю сеть). Прокси серверы обычно лучше защищены, чем другие серверы, и зачастую имеют более широкий набор механизмов аутентификации, включая системы ``одноразовых'' паролей, так что даже если кто-то узнает, какой пароль вы использовали, он не сможет использовать его для получения доступа к системе, поскольку срок действия пароля истекает немедленно после его первого использования. Поскольку пароль не дает доступа непосредственно к компьютеру, на котором находится прокси-сервер, становится гораздо сложнее установить в систему backdoor. Прокси серверы обычно имеют способ дополнительного ограничения доступа, так что только определенные хосты могут получить доступ к серверам. Большинство также позволяют администратору указывать, пользователей и компьютеры, к которым они могут обращаться. Опять же доступные возможности в основном зависят от используемого программного обеспечения. 10.8.2 Что позволяет делать IPFW?Программное обеспечение IPFW, поставляемое с FreeBSD, это система фильтрации и учета пакетов, находящаяся в ядре и снабженная пользовательской утилитой настройки, ipfw(8). Вместе они позволяют определять и просматривать правила, используемые ядром при маршрутизации. IPFW состоит из двух связанных частей. Межсетевой экран осуществляет фильтрацию пакетов. Часть, занимающаяся учетом IP пакетов, отслеживает использование маршрутизатора на основе правил подобных тем, что используются в части межсетевого экрана. Это позволяет администратору определять, например, объем трафика, полученного маршрутизатором от определенного компьютера, или объем пересылаемого WWW трафика. Благодаря тому, как реализован IPFW, вы можете использовать его и на компьютерах, не являющихся маршрутизаторами для фильтрации входящих и исходящих соединений. Это особый случай более общего использования IPFW, и в этой ситуации используются те же команды и техника. 10.8.3 Включение IPFW в FreeBSDПоскольку основная часть системы IPFW находится в ядре, вам потребуется добавить один или несколько параметров в файл настройки ядра, в зависимости от требуемых возможностей, и пересобрать ядро. Обратитесь к главе о пересборке ядра (Chapter 9) за подробным описанием этой процедуры.
Существует четыре параметра настройки ядра, относящихся к IPFW:
10.8.4 Настройка IPFWНастройка программного обеспечения IPFW выполняется с помощью утилиты ipfw(8). Синтаксис этой команды выглядит очень сложным, но он становится относительно прост как только вы поймете его структуру. В настоящее время утилита использует четыре различных категории команд: добавление/удаление (addition/deletion), просмотр (listing), сброс (flushing) и очистка (clearing). Добавление/удаление используется для создания правил, определяющих как пакеты принимаются, отбрасываются и протоколируются. Просмотр используется для определения содержимого набора правил (называемого еще цепочкой) и счетчиков пакетов (учет). Сброс используется для удаления всех правил цепочки. Очистка используется для обнуления одного или нескольких счетчиков. 10.8.4.1 Изменение правил IPFWСинтаксис этой формы команды такой: ipfw [-N] команда [номер] действие [log] протокол адреса [параметры] При использовании этой формы команды доступен один флаг:
Задаваемая команда может быть сокращена до более короткой уникальной формы. Существующие команды:
Предыдущие версии IPFW использовали отдельные записи для фильтрации и учета пакетов. Современные версии учитывают пакеты для каждого правила. Если указано значение номер, оно используется для помещения правила на определенную позицию в цепочке. Иначе правило помещается в конец цепочки с номером на 100 больше, чем у предыдущего правила (сюда не включается правило по умолчанию с номером 65535). С параметром log соответствующие правила выводят информацию на системную консоль, если ядро собрано с опцией IPFIREWALL_VERBOSE. Существующие действия:
Каждое действие может быть записано в виде более короткого уникального префикса. Могут быть определены следующие протоколы:
Поле адреса формируется так: источник адрес/маска [порт] цель адрес/маска [порт] [via интерфейс] Вы можете указать port только вместе с протоколами, поддерживающими порты (UDP и TCP). Параметр via опционален и может содержать IP адрес или имя домена локального IP интерфейса, или имя интерфейса (например ed0), он настраивает правило на соответствие только тем пакетам, которые проходят через этот интерфейс. Номера интерфейсов могут быть заменены на опциональную маску. Например, ppp* будет соответствовать PPP интерфейсам ядра. Синтаксис, используемый для указания адреса/маски: адрес
или
адрес/маска-биты
или
адрес:маска-шаблон
Вместо IP адреса возможно указание существующего имени хоста. маска-биты это десятичный номер, указывающий количество бит, которые должны быть установлены в маске адреса. Например, 192.216.222.1/24 создаст маску, соответствующую всем адресам подсети класса C (в данном случае, 192.216.222). A valid hostname may be specified in place of the IP address. маска-шаблон это IP, который будет логически перемножен с заданным адресом. Ключевое слово any может использоваться для обозначения ``любого IP адреса''. Номера портов указываются в следующем формате: порт [,порт [,порт [...]]] для указания одного порта или списка портов, илипорт-порт для указания диапазона портов. Вы можете также комбинировать указание одного диапазона со списком портов, но диапазон всегда должен указываться первым.Доступные параметры:
10.8.4.2 Просмотр правил IPFWСинтаксис этой формы команды такой: ipfw [-a] [-c] [-d] [-e] [-t] [-N] [-S] list Для этой формы команды существует семь флагов:
10.8.4.3 Сброс правил IPFWСинтаксис для сброса правил: ipfw flush Все правила в цепочке будут удалены, за исключением правила по умолчанию, устанавливаемого ядром (номер 65535). Будьте осторожны при сбросе правил; правило, отбрасывающее пакеты по по умолчанию отключит систему от сети, пока разрешающие правила не будут добавлены в цепочку. 10.8.4.4 Очистка счетчиков пакетов IPFWСинтаксис для очистки одного или нескольких счетчиков пакетов: ipfw zero [index] При использовании без аргумента номер будут очищены все счетчики пакетов. Если index указан, операция очистки применяется только к указанному правилу цепочки. 10.8.5 Примеры команд для ipfwСледующая команда запретит все пакеты с хоста evil.crackers.org на telnet порт хоста nice.people.org: # ipfw add deny tcp from evil.crackers.org to nice.people.org 23
Следующий пример запрещает и протоколирует весь TCP трафик из сети crackers.org (класса C) к компьютеру nice.people.org (на любой порт). # ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org
Если вы хотите запретить организацию X сессий в вашу сеть (часть сети класса C), следующая команда осуществит необходимую фильтрацию: # ipfw add deny tcp from any to my.org/28 6000 setup
Для просмотра записей учета: # ipfw -a list
или в краткой форме
# ipfw -a l
Вы можете также просмотреть время последнего срабатывания правил с помощью команды: # ipfw -at l
10.8.6 Создание межсетевого экрана с фильтрацией пакетов
При первоначальной настройке межсетевого экрана, до тестирования производительности и введения сервера в строй, настоятельно рекомендуется использовать версии команд с протоколированием и включить протоколирование в ядре. Это позволит вам быстро выявить проблемные области и исправить настройку без больших усилий. Даже после завершения первоначальной настройки рекомендуется использовать протоколирование для `deny', поскольку это позволяет отслеживать возможные атаки и изменять правила межсетевого экрана, если требования к нему изменятся.
Вам потребуется включить межсетевой экран в /etc/rc.conf.local или /etc/rc.conf. Соответствующая страница справочника разъясняет что именно необходимо сделать и содержит примеры готовых настроек. Если вы не используете предустановленную настройку, команда ipfw list может поместить текущий набор правил в файл, откуда он может быть помещен в стартовые файлы системы. Если вы не используете /etc/rc.conf.local или /etc/rc.conf для включения межсетевого экрана, важно убедиться в том, что он включается после настройки интерфейсов. Далее необходимо определить, что именно делает ваш межсетевой экран! Это в основном зависит от того, насколько широкий доступ вы хотите открыть снаружи к вашей сети. Вот несколько общих правил:
Еще один список для проверки настроек межсетевого экрана доступен на CERT по адресу http://www.cert.org/tech_tips/packet_filtering.html Как сказано выше, все эти правила всего лишь руководство. Вы сами сможете решить, какие правила фильтрации будут использованы в межсетевом экране. Мы не можем нести НИКАКОЙ ответственности в случае взлома вашей сети, даже если вы следовали советам, представленным выше. 10.8.7 Накладные расходы и оптимизация IPFWМногие пользователи хотят знать, как сильно IPFW нагружает систему. Ответ в основном зависит от набора правил и скорости процессора. При небольшом наборе правил для большинства приложений, работающих в Ethernet ответ ``незначительно''. Для тех, кому нужен более точный ответ, и предназначен этот раздел. Последующие измерения были выполнены с 2.2.5-STABLE на 486-66. (Хотя IPFW немного изменился в последующих релизах FreeBSD, скорость осталась приблизительно той же.) IPFW был модифицирован для измерения времени, затраченного ip_fw_chk, с выводом на консоль результата после каждого 1000-го пакета. Были протестированы два набора из 1000 правил. Первый был составлен для демонстрации плохого набора правил путем повторения правила: # ipfw add deny tcp from any to any 55555
Этот набор правил плох, поскольку большая часть правил IPFW не соответствует проверяемым пакетам (из-за номера порта). После 999-й итерации этого правила следует правило allow ip from any to any. Второй набор правил был разработан для быстрейшей проверки каждого правила: # ipfw add deny ip from 1.2.3.4 to 1.2.3.4
Не совпадающий IP адрес источника в правиле выше приведет к очень быстрой проверке этих правил. Как и прежде, 1000-е правило allow ip from any to any. Затраты на проверку пакета в первом случае приблизительно 2.703 мс/пакет, или приблизительно 2.7 микросекунд на правило. Теоретический предел скорости проверки около 370 пакетов в секунду. Предполагая подключение через 10 Mbps Ethernet и размер пакета приблизительно 1500 байт, получаем только 55.5% использования пропускной способности. Во втором случае каждый пакет был проверен приблизительно за 1.172 мс, или приблизительно 1.2 микросекунд на правило. Теоретический предел скорости проверки около 853 пакетов в секунду, что делает возможным полное использование пропускной способности 10 Mbps Ethernet. Чрезмерное количество проверяемых правил и их вид не позволяет составить картину близкую к обычным условиям -- эти правила были использованы только для получения информации о времени проверки. Вот несколько рекомендаций, которые необходимо учесть для создания эффективного набора правил:
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/. По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>. |