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

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

Содержание


Перенаправление портов
ССЫЛКА Более подробная информация об этом содержится в главе 18 «Защита Samba — маскировка IP и перенаправление портов».
Ядра Linux семейства 2.4.x и netfilter
Packet Socket
Network Firewalls
Kernel Httpd Acceleration
Asynchronous Transfer Mode
Classical IP Over ATM
LAN Emulation (LANE) support
Multi-Protocol Over ATM (MPOA) support
DECnet Support
Некоторые базовые правила netfilter
Подобный материал:
1   ...   60   61   62   63   64   65   66   67   ...   101

Перенаправление портов


Перенаправление портов (port forwarding) — это перенаправление соединения с одного узла на другой узел. С задачей перенаправления портов хорошо справляются брандмауэры proxy. Например, если вы подсоединяетесь с узла foo к узлу bar через порт 80 и при помощи программного механизма этот порт перенаправляется в порт 80 на узле baz, узел foo будет думать, что он подключился к узлу bar через порт 80, в то время как на самом деле он взаимодействует с узлом baz через порт 80. В то же время узел baz будет полагать, что к нему напрямую подключается узел foo. Эта схема может работать в обоих направлениях, поддерживая исходящие соединения внутренних клиентов и входящие соединения внешних клиентов, однако при этом вы получаете возможность контролировать потоки данных.

Программа ipchains не позволяет выполнять перенаправление портов. Одним из целевых действий этой программы является REDIRECT (перенаправление), однако это целевое действие предназначено только для локальных перенаправлений и не позволяет перенаправлять данные на другой сетевой узел. Если вы используете ipchains и желаете организовать перенаправление портов, вы должны использовать модуль ipportfw и программу ipmasqadm. Программа ipmasqadm является полезной оболочкой программы ipportfw. Перенаправление внешних входящих соединений может потребоваться, в особенности если во внутренней (доверенной) сети используется технология маскировки IP (IP masquerading).


ССЫЛКА

Более подробная информация об этом содержится в главе 18 «Защита Samba — маскировка IP и перенаправление портов».

После того как вы настроили набор правил так, как вы этого желаете, и после того, как вы убедились в том, что брандмауэр работает так, как это планировалось изначально, вы можете воспользоваться одной из двух утилит: ipchains-save и ipchains-restore. Название каждой из этих утилит хорошо отражает их основное предназначение: первая сохраняет размещенный в оперативной памяти набор правил в файле на жестком диске, вторая — считывает набор данных из файла в оператив- ную память. Запустив ipchains-save, вы увидите на экране используемые в данный момент цепочки правил. Если содержимое и конфигурация этих цепочек вас устраивают, вы можете запустить утилиту вновь и перенаправить ее вывод в файл. Этот файл в дальнейшем можно использовать для восстановления правил в памяти. Процедуру сохранения правил в файле удобно использовать каждый раз перед тем, как вы внесете в набор правил какие-либо модификации. Благодаря этому в случае необходимости вы сможете восстановить набор правил в его прежнем виде. Кроме того, вы можете скопировать созданный таким образом файл для того, чтобы в дальнейшем добавить в него новые правила, изменить или удалить некоторые из существующих.

Ядра Linux семейства 2.4.x и netfilter


В данном разделе я кратко расскажу об изменениях, которые ожидаются в семействе 2.4.x ядер Linux. Эти сведения основаны на текущем (на момент написания данной книги) состоянии экспериментального ядра 2.3.x. Код netfilter может претерпеть существенные изменения, однако конфигурация ядра 2.3.x, скорее всего, значительно не изменится.

Конфигурационные изменения по сравнению с ядрами 2.2.x

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

- Первым новым параметром является параметр Packet Socket (пакетный сокет). Этот параметр имеет отношение к mmap I/O, и его использование не обязательно.

CONFIG_PACKET_MMAP=y не обязателен


- Параметр Network Packet Filtering (фильтрация сетевых пакетов) — это то же самое, что и параметр Network Firewalls в ядре серии 2.2.x. Если вы формируете ядро для брандмауэра, вы обязаны использовать этот параметр. Параметр Network Packet Filtering Debugging (отладка фильтрации сетевых пакетов) может оказаться полезным в случае, если при работе netfilter возникают проблемы. В будущем этот второй параметр может исчезнуть из ядра.

CONFIG_NETFILTER=y необходим

CONFIGJETFI LTER_DEBUG рекомендуется

- Параметр Kernel Httpd Acceleration (акселерация httpd на уровне ядра) обеспечивает работу процесса httpd в режиме ядра. Этот процесс является службой, и он не должен быть запущен на брандмауэре.

CONFIG_KHTTPD=n не рекомендуется

- Параметр Asynchronous Transfer Mode (ATM) обеспечивает поддержку ATM на уровне ядра и позволяет воспользоваться четырьмя дополнительными параметрами.

CONFIG_ATM=y не обязателен

- Параметр Classical IP Over ATM (классический IP через ATM) позволяет передавать данные IPv4 через линию ATM.

CONFIG_ATM_CLIP=y не обязателен

- Параметр Do NOT send ICMP if no neighbor (не передавать ICMP, если нет соседа) позволяет обойти проблему исчезающих соседей. Соответствующие сообщения ICMP просто отбрасываются.

CONFIG_ATM_CLIP_NO_ICMP=y не обязателен

- Параметр LAN Emulation (LANE) support (поддержка эмуляции LAN) обеспечивает передачу протоколов LAN через ATM. Этот механизм не относится к конкретному протоколу и поэтому может стать причиной того, что пакеты, не являющиеся пакетами IP, смогут проходить сквозь ваш брандмауэр.

CONFIG_ATM_LANE=n не рекомендуется

- Протокол Multi-Protocol Over ATM (MPOA) support (Поддержка МРОА) также не относится к конкретному протоколу и может стать причиной проникновения в защищаемую брандмауэром сеть пакетов, не являющихся пакетами IP.

CONFIG_ATM_MPOA=n не рекомендуется

- Параметр DECnet Support (поддержка DECnet) включает поддержку еще одного протокола, не входящего в семейство IP. Включать его не следует.

CONFIG_DECNET=n не рекомендуется

Новые модули netfilter

Программа netfilter — эта программа, которая частично работает в режиме ядра. По сравнению с более старым программным средством ipchains программа netfilter более плотно взаимодействует с ядром, поэтому код netfilter работает быстрее. Однако код netfilter еще не интегрирован в ядро и доступен только в виде модулей ядра. Логика работы программы также отличается от ipchains. В отличие от ipchains в netfilter пакеты не проходят через все три цепочки. Если пакет предназначен для локального процесса, он проходит через цепочку input Если пакет предназначен или исходит от сетевого узла, расположенного за брандмауэром, он проходит через цепочку forward. Наконец, если пакет исходит от локального процесса и направляется к удаленной системе, он проходит через цепочку output. Благодаря этим нововведениям скорость работы пакетного фильтра существенно увеличивается.

Относительно большое количество модулей обеспечивает высокую степень настраиваемости. По мере завершения работы над новыми модулями набор модулей будет расширяться.

На момент написания данной книги доступными для использования были следующие модули netfilter:

- forward-fragment.o: поддерживает работу с фрагментами (ключ -f);

- ip_conntrack.o: поддерживает отслеживание соединения TCP/IP для того, чтобы следовать вдоль соединения TCP;

- ip_conntrack_ftp.o: поддерживает отслеживание соединения FTP через IP и обеспечивает работу активных сеансов FTP;

- ip_defrag.o: форсирует дефрагментацию;

- ip_nat.o: включает маскировку IP; является основным модулем маскировки IP (эта технология называется IP masquerading или NAT, Network Address Translation);

- ip_nat_ftp.o: поддерживает активный сеанс FTP в рабочей среде с маскировкой IP;

- ip_nat_map_masquerade.o: отображает маскированный IP-адрес за брандмауэром на IP-адрес, доступный из Интернета;

- ip_nat_map_redirect.o: поддерживает перенаправление;

- ip_nat_map_static.o: осуществляет статическое отображение (статическую маршрутизацию);

- ipt_LOG.o: включает документирование сведений в журнале для netfilter;

- ipt_QUEUE.o: разрешает iptables передавать пакеты в пользовательское адресное пространство;

- ipt_REJECT.o: разрешает отклонение пакетов;

- iptjcmp.o: разрешает программе netfilter работать с ICMP;

- ipt_limit.o: разрешает указывать в составе правил пределы; используется в основном для документирования сведений в журнале;

- ipt_mac.o: поддерживает в составе правил соответствие МАС-адресов;

- ipt_multiport.o: обеспечивает корректное функционирование программ, которые используют множественные порты UDP (например RealPlayer).

- ipt_state.o: поддерживает обработку соответствия состоянию соединения (-m state);

- ipt_tcp.o: разрешает программе netfilter работать с TCP; - ipt_UDP.o: разрешает программе netfilter работать с UDP; - ipt_unclean.o: выполняет некоторые базовые проверки корректности пакетов (-m unclean);

- iptables.o: поддерживает функционирование iptables; является основным модулем iptables;

- netfilter_dev.o: разрешает использование устройства netlink (старший номер 36, младший номер 3).

Перечисляемые далее модули используются для обеспечения обратной совместимости. В некоторый момент времени допускается использование только одного из модулей: iptables, ipchains или ipfwadm. Если вы используете один из них, значит, вы не можете использовать остальные. Кроме того, если вы используете любой из модулей, упоминаемых далее, значит, вы не можете использовать модули, перечисленные ранее.

- ip_fw_compat.o: используется для обеспечения общей совместимости с ipchains/ ipfwadm;

- ip_fw_compat_masq.o: используется для совместимости с ipchains/ipfwadm в отношении IP-маскировки;

- ip_fw_compat_redir.o: используется для совместимости с ipchains/ipfwadm в отношении перенаправления;

- ipchains.о: требуется для того, чтобы разрешить использование ipchains (исключает использование iptables);

- ipchains_core.o: необходимый основной модуль, который используется совместно с ipchains.о;

- ipfwadm.о: требуется для того, чтобы разрешить использование ipfwadm (исключает использование iptables);

- ipfwadm_core.o: необходимый основной модуль, который используется совместно с ipfwadm.о;

Система спроектирована так, чтобы ее можно было легко расширить за счет добавления новых модулей. На самом деле один из упомянутых модулей, ip_nat_ map_null.o, еще не существует, однако его использование планируется в будущих версиях системы.

Некоторые базовые правила netfilter

В среде iphains политикой по умолчанию для всех трех встроенных цепочек была политика DENY (запретить). В netfilter ситуация другая. Целевыми действиями теперь являются ACCEPT (принять), REJECT (отклонить), QUEUE (поставить в очередь), RETURN (вернуться из цепочки), LOG (внести в журнал) и DROP (отбросить). Если вы создали цепочку, определенную пользователем, вы также можете использовать ее в качестве цели. Действия ACCEPT и DROP являются встроенными; REJECT, LOG и QUEUE загружаются в виде модулей перед началом функционирования. Целевое действие RETURN используется для того, чтобы завершить выполнение цепочки. Как уже упоминалось, обработка цепочек теперь выполняется также по-иному. Цепочки INPUT и OUTPUT предназначены для локальных процессов. Политикой по умолчанию для них является политика ACCEPT. Цепочка FORWARD предназначена для пакетов, которые просто передаются через брандмауэр из одной сети в другую. Для цепочки FORWARD политикой по умолчанию является политика DROP. Если вы хотите, чтобы политикой по умолчанию для цепочки FORWARD была политика ACCEPT, при запуске iptables запустите модуль iptables с параметром forward=l. Чтобы сделать политикой по умолчанию REJECT, вы должны уже после запуска iptables добавить специальное правило (вы также можете вручную загрузить модуль ipt_REJECT.o). Обработка цепочек теперь выполняется иначе, поэтому правила приема пакетов следует добавить как в цепочку INPUT, так и в цепочку FORWARD, так как теперь пакеты, передаваемые через брандмауэр, не передаются по цепочке INPUT. Благодаря этому вы можете гибко запретить (DROP) все пакеты, предназначенные или исходящие от локального узла localhost, и при этом никак не повлиять на передачу пакетов через брандмауэр.

Предположим, что у вас есть домашняя сеть, состоящая из двух сетевых узлов, один из которых связан с Интернетом с использованием телефонной линии связи. Представим также, что (для простоты) каждая система обладает собственным IP и ни одна из них не предлагает каких-либо служб внешним пользователям. Чтобы обеспечить работу такой конфигурации с минимальным количеством проблем, достаточно выполнить следующие несколько действий (предполагается, что команда depmod -а уже отдана).

1. Загружаем модули ipt_state и iptables.

modprobe ipt_state

Загружаем модуль ip_conntrack и разрешаем использование активного режима FTP. modprobe ip_conntrack_ftp

Создаем политику по умолчанию DROP для всех входящих пакетов, iptables -P INPUT DROP

Явным образом вводим в действие политику по умолчанию для перенаправ ления пакетов на случай, если она будет изменена в будущем.

iptables -P FORWARD DROP

5. Создаем определенную пользователем цепочку, для того чтобы не дублировать правила, общие для цепочек INPUT и FORWARD.

iptables -N pass

6. Вставляем в цепочку INPUT команду перехода к цепочке pass, которая является цепочкой, определенной пользователем.

iptables -A INPUT -j pass

7. Вставляем в цепочку FORWARD команду перехода к цепочке pass, которая явля ется цепочкой, определенной пользователем.

iptables -A FORWARD -j pass

8. Принимаем все входящие пакеты, имеющие отношение к установленному со единению.

iptables -A pass -m state --state ESTABLISHED,RELATED -j ACCEPT

9. Принимаем все новые соединения, исходящие отовсюду, кроме любой теле фонной линии.

iptables -A pass -m state --state NEW -i ! ppp+ -j ACCEPT

Можно использовать и другое правило:

Iptables -A pass -p icmp --icmp-type echo-reply -j DROP

Обе версии последнего правила действуют только в отношении TCP, так как UDP не устанавливает соединения.

10. Отбрасываем входящие пакеты ping.

iptables -A pass -p icmp --icmp --icmp-type echo-reply -j DROP

Если ранее вы когда-либо уже работали с ipchains, формат перечисленных здесь команд будет хотя бы приблизительно вам понятен. Однако можно заметить, что в netfilter добавлены также некоторые новые возможности.

Далее приводится перечень некоторых отличий (в основном добавлений в netfilter) между ipchains и netfilter. Этот перечень составлен исходя из текущего состояния разработки netfilter. Некоторые возможности, присутствовавшие в ipchains, отсутствуют в netfilter (например, -С или check). Следует отметить, что автор программного средства netfilter работает над созданием утилит iptables-save и iptables-restore, которые служат для сохранения на диске и загрузки с диска набора правил netfilter (аналогично утилитам ipchains-save и ipchains-restore). Те отличия, о которых уже было упомянуто, в данный перечень не включаются.

- В netfilter аналогом флага -i программы ipchains являются два флага: -i и -о. Первый из них (-i) применяется в отношении цепочки INPUT или входной части цепочки FORWARD. Второй флаг (-о) применяется в отношении цепочки OUTPUT и выходной части цепочки FORWARD. Использование флага -i в отношении OUTPUT или флага -о в отношении INPUT запрещено.

- При указании портов необходимо использовать флаг протокола (-р) и использовать формат —sport для порта-источника и —dport для порта-приемника.

- Параметр —tcp-flag (перед которым должен стоять флаг протокола) позволяет тестировать состояние флагов TCP (SYN, ACK, RST, FIN, URG, PSH, ALL, NONE) и действовать в соответствии с этим состоянием. Некоторые правила допускается записывать в сокращенной форме. Например, часть вашего правила может быть записана следующим образом:

--tcp-flags SYN.RST.ACK SYN

Здесь анализируется состояние флагов SYN, RST и ACK. При этом программа пытается обнаружить пакеты с установленным битом SYN и сброшенными битами RST и АСК. Того же результата можно добиться следующим образом:

-m state --state NEW

- В netfilter добавлена новая возможность: проверять соответствие определенным условиям, например состояние (одно из значений NEW, ESTABLISHED, RELATED или INVALID), MAC-адрес (разделенные двоеточиями шесть шест-надцатеричных чисел), предел (в основном для документирования сведений в журнале). При использовании каждой из этих возможностей требуется указать один или более аргументов.

- Из iptables удалены целевые действия MASQ и REDIRECT. Теперь эти действия добавлены в модуль ipnatctl (см. главу 18).