Родерик Смит - Сетевые средства Linux
# iptables -F INPUT -t filter
Подобные команды для цепочек, содержащихся в таблице filter и в других таблицах, часто включают в начало сценария брандмауэра. Это гарантирует, что вновь определяемые правила не будут конфликтовать с правилами, созданными ранее.
Создание брандмауэра средствами iptables
Утилита iptables может решать различные задачи. Одной из таких задач является создание брандмауэров. Брандмауэр можно реализовать как на компьютере, выполняющем функции маршрутизатора, так и на рабочих станциях или серверах. При настройке брандмауэра, осуществляющего фильтрацию пакетов, сначала задается политика по умолчанию, а затем определяются исключения. В процессе работы брандмауэр анализирует IP-адреса, номера портов и другие характеристики пакетов.
Что такое брандмауэр
Обычно, когда говорят о брандмауэре, имеют в виду компьютер, расположенный между двумя сетями и управляющий доступом из одной сети в другую. Несмотря на то что маршрутизатор также управляет обменом пакетами между различными сетями, эти инструменты существенно отличаются друг от друга. Брандмауэр может блокировать доступ компьютеров одной сети к некоторым службам другой сети. Например, брандмауэр может запретить обращения по протоколу Telnet из Internet к компьютерам локальной сети. Маршрутизатор не выполняет подобных действий. Брандмауэр, в свою очередь, также осуществляет не все операции, выполняемые маршрутизатором. Так, например, брандмауэры, выступающие в роли proxy-серверов, частично обрабатывают запросы, направленные другим системам, преобразуют их так, что они выглядят как сформированные самим брандмауэром, и перенаправляют ответы системам, от которых были получены запросы. Брандмауэры, выполняющие функции proxy-серверов, представляют собой мощные средства защиты. Они позволяют даже защитить компьютеры от вирусов, встроенных в программы Java и JavaScript.
В данном разделе рассматриваются брандмауэры, выполняющие фильтрацию пакетов. Они действуют на нижнем уровне стека протоколов TCP/IP, контролируют данные, содержащиеся в заголовках отдельных пакетов, и даже проверяют, корректно ли осуществляются транзакции. Часто брандмауэры реализуются на компьютерах, выполняющих роль маршрутизаторов, но они также могут быть установлены на рабочих станциях и серверах. Если брандмауэр расположен на отдельном компьютере, он защищает лишь ресурсы этой машины и не оказывает влияния на работу других узлов сети.
Многие рассматривают брандмауэры как инструменты, предназначенные для защиты локальных сетей от нежелательного воздействия из Internet. Действительно, брандмауэры очень часто используются в подобных целях. (Пример такого брандмауэра показан на рис. 25.2.) Однако брандмауэры часто выполняют и другие функции. Например, вы можете создать брандмауэр, который будет защищать узлы Internet от атаки, предпринимаемой с узлов локальной сети. Брандмауэр может блокировать все протоколы, за исключением некоторых, необходимых вам, и даже запретить обмен с определенными компьютерами посредством ряда протоколов. Например, вы имеете возможность разрешить обращение к порту 25 удаленных компьютеров только почтовому серверу. (Подобную конфигурацию брандмауэра используют некоторые провайдеры для борьбы со спамом.) Контроль обращений к внешним узлам не позволит недобросовестным пользователям локальной сети нанести вред удаленному компьютеру, а также даст возможность выявить вирусы и программы типа "троянский конь", которые тем или иным способом попали на компьютеры локальной сети. Несмотря на то что подобные меры в основном направлены на защиту внешних узлов, они могут оказаться полезными и для вас, так как предотвратят конфликты с администраторами внешних сетей.
Рис. 25.2. Брандмауэры, выполняющие фильтрацию пакетов, позволяют блокировать некоторые типы обращений к локальной сети
В некоторых случаях правила брандмауэра можно использовать для перенаправления обращений. При этом пакет, адресованный одной системе, передается другой системе. Правила перенаправления в сочетании со средствами NAT могут применяться для защиты серверов, работающих в локальной сети. Осуществляя перенаправление пакетов, можно добиться того, что запрос будет обработан неожиданным для клиента способом. Например, вместо того, чтобы блокировать исходящие SMTP-соединения, вы можете перенаправить их на локальный почтовый сервер. Если брандмауэр настроен так, что запросы на установление SMTP-соединений, сгенерированные сервером SMTP, пропускаются беспрепятственно, перенаправление SMTP-запросов от клиентов приведут к тому, что почта будет доставляться адресатам. (Чтобы это произошло, надо также настроить локальный сервер SMTP в качестве ретранслятора для локальных компьютеров.) Следует заметить, что подобный подход применим лишь для отдельных типов серверов.
Как видно на рис. 25.1, для того, чтобы обеспечить фильтрацию пакетов в системе Linux, надо настроить цепочки INPUT, FORWARD и OUTPUT. Назначение каждой из этих цепочек кратко описано ниже.
• Цепочка INPUT защищает локальные процессы. Эту цепочку используют как брандмауэры, совмещенные с маршрутизаторами, так и брандмауэры, установленные на рабочих станциях и серверах.
• Цепочка FORWARD принимает непосредственное участие в маршрутизации пакетов. Если вы хотите превратить маршрутизатор в брандмауэр, осуществляющий фильтрацию пакетов, вам надо сконфигурировать эту цепочку.
• Цепочка OUTPUT блокирует передачу нежелательных выходных данных. Эту цепочку используют как брандмауэры, расположенные на отдельных компьютерах, так и брандмауэры, совмещенные с маршрутизаторами. С ее помощью можно ограничить возможности локальных клиентов по использованию протоколов или запретить им взаимодействие с некоторыми узлами.
Брандмауэры, совмещенные с маршрутизаторами, чаще всего применяют правила, содержащиеся в цепочках INPUT и FORWARD, а брандмауэры на рабочих станциях и серверах в основном работают с правилами в цепочках INPUT и OUTPUT. В некоторых случаях результаты использования правил в различных цепочках совпадают, в особенности это справедливо для цепочек FORWARD и OUTPUT. Различие лишь в том, что цепочка OUTPUT воздействует как на перенаправляемый трафик, так и на трафик, сгенерированный локальным компьютером, в то время как цепочка FORWARD контролирует только перенаправляемый трафик.
Формирование политики по умолчанию
Первым шагом, предпринимаемым при настройке брандмауэра, является формирование политики по умолчанию. Политика по умолчанию — это выражение, определяющее, что должен делать брандмауэр, если пакет не удовлетворяет ни одному из правил. Для создания политики по умолчанию используется опция -P утилиты iptables.
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
В данном примере задается политика по умолчанию для трех стандартных цепочек, содержащихся в таблице filter. В качестве политики по умолчанию может быть указано любое из описанных ранее действий (ACCEPT, DROP, QUEUE, RETURN и т.д.). Наиболее часто используются действия ACCEPT, DROP и REJECT. ACCEPT указывает Linux на то, что все пакеты должны передаваться, a DROP заставляет систему игнорировать все пакеты. REJECT, подобно DROP, также указывает на то, что пакеты должны отвергаться, но при этом Linux оповещает источник о том, что пакет не принят (подобное сообщение источник получает и в том случае, если в системе нет ни одного сервера, ожидающего обращения через порт, указанный в заголовке пакета). Если брандмауэр должен обеспечивать высокую степень защиты, в качестве политики по умолчанию указывается DROP или REJECT, однако при этом все пакеты, передача которых не разрешена явным образом, будут отвергнуты. Если задана политика по умолчанию ACCEPT, то необходимо явно запретить все типы пакетов, которые не должны быть пропущены через брандмауэр. Составление правил, блокирующих все недопустимые типы пакетов, часто представляет собой достаточно сложную задачу, причем всегда остается опасность, что какое-либо условие останется не учтенным. С другой стороны, задавая политику по умолчанию DROP или REJECT, надо лишь разрешить прохождение некоторых типов пакетов через брандмауэр. Обычно при работе системы число типов пакетов ограничено, поэтому данному подходу следуют большинство системных администраторов.
Определение правил
Для создания правил используется опция --append (или -А) программы iptables. После этой опции задается один или несколько критериев, затем указывается опция --jump (или -j), за которой следует действие ACCEPT, DROP или REJECT. Вызов iptables, предназначенный для создания действия, выглядит следующим образом: