- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF115:DrBrown3
Материал из Linuxformat.
Содержание |
Брандмауэры для нетерпеливых
- Firestarter, Fedora Firewall Tool, Shorewall Вооружившись мастерком, раствором, кирпичами и кое-каким ПО, мы без труда построим брандмауэр.
В студенческие годы у меня был друг, который собирал модели железных дорог. Он покупал металлический профиль для рельсов и полосы пластика, из которых вырезал шпалы, и в результате прилежного труда за целый семестр создавал точную копию, скажем, стрелки запасного пути в Блаэнау Фестиниог, северо-западный Уэльс. Мои постоянные читатели, наверное, смекнули, что при моем обычном стремлении получить все и сразу лично я гораздо охотнее сгонял бы в «Детский мир» за коробкой Lego. [Аналогия здесь приведена достаточно точная, ведь все наверное знают что можно построить из Lego и чего совершенно точно нельзя]
В мире Linux тоже есть люди, обожающие создавать вручную правила для брандмауэра из отдельных правил Iptables. Как любое творчество, этот подход требует умения, терпения и хорошего знания TCP/IP. Но большинство из нас, наверное, предпочтут задать политики безопасности на более высоком уровне с помощью какой-нибудь утилиты, скинув на нее всю грязную работу по записи правил. Здесь мы рассмотрим три таких программы. Это утилита настройки брандмауэра в Fedora 9, Firestarter (графическая программа с открытым исходным кодом, доступная в большинстве дистрибутивов Linux) и текстовая утилита Shorewall.
Существует несколько способов подключения брандмауэра к сети, и одна из классических топологий показана на рисунке внизу. К брандмауэру подходят три сетевых подключения: первое (eth1) соединяет его с доверенной локальной сетью; второе (ppp0) смотрит наружу, в Интернет, а третье (eth0) соединяет брандмауэр с DMZ (ДМЗ, демилитаризованной зоной), представляющей собой периметр, содержащий все доступные извне серверы. Ни одна их описанных здесь программ не позволяет настроить такой брандмауэр [а вот и неправда: Shorewall это по плечу, – прим.ред.]. В основном они защищают только тот компьютер, на котором запущены, не позволяя, к примеру, обрабатывать трафик между внешним интерфейсом и ДМЗ. Однако они умеют отличить внешний интерфейс, который смотрит наружу, от внутреннего, который подключен к доверенной локальной сети.
В LXF87/88 я довольно подробно рассмотрел брандмауэр SUSE и кратко рассказал о его эквиваленте в Fedora, отметив, что «его можно использовать только в качестве персонального брандмауэра на компьютере с одним сетевым подключением». Текущая версия стала лучше – в ней хотя бы разделяются внутренние и внешние соединения. Она позволяет настроить маскарадинг и перенаправление портов и контролировать входящий ICMP-трафик компьютера.
Инструмент можно запустить из меню Система > Администрирование > Межсетевой экран или выполнив команду system-config-firewall. Откроется окно со списком доверенных сервисов [Trusted Services]. Там можно указать, какие сервисы (входящие соединения) разрешены на недоверенных сетевых интерфейсах. В перечне – только самые распространенные службы, и если вашей не оказалось среди них, выберите окно Другие порты [Other Ports], где можно указать номера дополнительных портов (или их диапазон), которые вы хотите открыть. Наконец, в окне Доверенные интерфейсы [Trusted Interfaces] можно выбрать интерфейсы, подключаемые к доверенным сетям. Как следствие, весь трафик через эти интерфейсы будет разрешен. Также стоит упомянуть об окне Фильтрация ICMP [ICMP Filter], в нем можно точно определить типы разрешенного трафика IMCP. Берегитесь – в отличие от окна со списком доверенных сервисов, здесь справедлив подход «презумпции невиновности», поэтому обязательно укажите все типы пакетов, которые нужно отклонять.
Firestarter
Firestarter, брандмауэр для Gnome от Томаса Юннонена [Tomas Junnonen], доступен в большинстве дистрибутивов Linux. В моей Fedora 9 установка была очень простой (Система > Администрирование > Установка/удаление программ). При первом запуске программы несложный мастер поможет выбрать внешний (недоверенный) интерфейс и настроить запуск NAT и/или DHCP на брандмауэре. (DHCP, на мой взгляд, здесь не слишком уместен, учитывая, что это утилита настройки брандмауэра.) Затем вы переключитесь на вкладку Status в главном окне. Здесь можно увидеть общий статус сетевых интерфейсов – включен ли брандмауэр, трафик через каждый интерфейс, число «событий» (пакетов, отклоненных брандмауэром). На вкладке События [Events] приведена подробная информация об отклоненных соединениях. Наконец, на вкладке Политики [Policy] определяются политики входящего и исходящего трафика. Сделать это можно достаточно подробно – задать доверенные хосты или диапазоны IP-адресов (например, локальную сеть), с которых можно принимать любое соединение и/или соединения на заданные порты.
Адское нагромождение!
Какая из этих программ лучше? Fedora Firewall Tool, пожалуй, проще в использовании, хотя я точно не могу сказать, почему. Firestarter более гибок: например, в нем можно разрешить доступ по SSH с заданных диапазонов IP-адресов, тогда как если открыть порт на «недоверенном» интерфейсе в утилите Fedora, он станет доступен для всех. В Firestarter также есть окно События, где можно просмотреть трафик, отклоненный брандмауэром; впрочем, я не уверен, полезно ли это на практике.
Я попытался сравнить подробные наборы правил, сгенерированные каждой программой. (Правила сетевого фильтра, загруженные в данный момент ядром, выводят команды iptables -L или iptables-save. На мой взгляд, формат вывода команды iptables-save проще понять, потому что он весьма похож на серию команд iptables, выполняемую для создания набора правил. И правда, сохранив вывод команды iptables-save в файл, правила потом можно восстановить из него командой iptables-restore.) Оказалось, что Firestarter создает гораздо более подробные правила – в моем случае он сгенерировал почти в 4 раза больше правил, чем утилита из Fedora. Например, он генерирует правила для ограничения частоты ICMP-пакетов и записи отклоненных соединений в файл журнала. Больше – значит, лучше? Это не всегда очевидно. Просмотреть правила, сгенерированные утилитой из Fedora, и убедиться, что они соответствуют желаемой политике, относительно просто. Проделать такое с правилами, созданными Firestarter, гораздо сложнее.
Обе программы различают понятия недоверенных интерфейсов (с них доступен только определенный трафик) и доверенных интефрейсов (с них доступен весь трафик), но враз выдыхаются, если захотеть применить свой набор правил к каждому интерфейсу. Например, нельзя разрешить доступ по портам HTTP и SMTP с внешнего интерфейса и по портам DNS и SSH с внутреннего интерфейса, или управлять трафиком между заданной парой интерфейсов.
Нечто иное
Кому нужно более гибкое средство – взгляните на Shorewall (http://www.shorewall.net). Это не графическая программа: правила брандмауэра описываются в наборе файлов конфигурации. Из них Shorewall генерирует набор команд Iptables для настройки брандмауэра. Shorewall умеет работать с произвольным количеством сетевых интерфейсов, позволяя разделить сеть на зоны и давая полный контроль над соединениями между каждой парой зон.
Настройка Shorewall начинается с определения одной или нескольких зон в файле /etc/shorewall/zones. Зоны могут относиться к внешней сети, внутренней сети и ДМЗ. Зоны распознаются либо по подключенному к ним сетевому интерфейсу (определенному в файле /etc/shorewall/interfaces), либо по IP-адресу подсети (указанному в файле /etc/shorewall/hosts). У одной зоны может быть несколько интерфейсов, а у одного интерфейса – несколько зон.
Определив зоны, нужно задать политику по умолчанию (в файле /etc/shorewall/policy) (например, ACCEPT или DROP), применяемую к трафику между каждой исходной зоной и зоной назначения. Наконец, в файле /etc/shorewall/rules определяются подробности исключений из политики, разрешающие доступ к заданным портам и т.д. Shorewall, несомненно, самая гибкая (и самая сложная) утилита настройки брандмауэра из тех, которые мы рассмотрели.
Каждая из этих программ позволяет определить политику безопасности на достаточно высоком уровне, не заставляя беспокоиться о деталях генерации правил Iptables. Это как описание «бизнес-логики» программы на языке высокого уровня, а его преобразование в машинные коды остается компьютеру. Но это приводит нас к последнему и отчасти очевидному выводу: определяйте политику безопасности до того, как ее реализовывать! LXF