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

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

Содержание


Ядро Linux 2.4.x
Подобный материал:
1   ...   68   69   70   71   72   73   74   75   ...   101

Ядро Linux 2.4.x


В ядрах нового семейства Linux 2.4.x механизмы маскировки IP и перенаправления портов являются частью программного средства netfilter. Новый программный пакет netfilter является модульным, в нем код брандмауэра отделен от кода IP-маскировки и кода перенаправления портов. К счастью, полный набор всех правил, в соответствии с которыми функционирует netfilter, можно узнать при помощи команды iptables -L. По этой команде вы увидите на экране правила перенаправления портов, правила маскировки, а также правила брандмауэра. Программный инструмент, осуществляющий перенаправление портов, носит название ipnatctl. При помощи этого средства реализуются все формы NAT, при этом вы должны загрузить специальные отдельные программные модули NAT.

Все эти изменения стали результатом путаницы, связанной с ipchains, а также невозможностью перенаправления портов на удаленные системы (в составе ipchains присутствует лишь механизм перенаправления портов внутри локальной системы). Все эти проблемы теперь решаются с использованием ipnatctl.

Прежде всего вы должны убедиться в том, что все необходимые вам модули загружены в память. Это будет выполнено автоматически в результате выполнения команды depmod -а после того, как модули будут скомпонованы и установлены. На момент написания данной книги механизм автоматической загрузки модулей работает не полностью, однако в момент выхода в свет ядра 2.4.x, скорее всего, все будет работать как надо. Модули netfilter еще не интегрированы в ядро, поэтому вы по-прежнему должны выполнить два различных действия: компоновка и установка netfilter, а затем запуск depmod. В будущем это, скорее всего, будет выполняться удобнее.

Если вы хотите загрузить модули вручную, запустите depmod -а а затем используйте modprobe для того, чтобы выполнить необходимые операции загрузки. Вам потребуется загрузить следующие модули: ip_nat_map_masquerade, ip_nat_ftp (для поддержки соединений FTP), ip_state, ip_defrag и ip_conntrack_ftp. Помимо этих будут загружены также и другие модули.

Формат использования ipnatctl не сильно отличается от формата ipchains. Запустив ipnatctl без аргументов, вы получите краткую справку об использовании этой программы. То же самое произойдет в случае, если вы укажете неправильный аргумент. Используя ipnatctl, вы можете вставлять (-I) или удалять (-D) любые интересующие вас правила. Вы также можете очистить (-F) список правил или отобразить его на экране (-L). При вводе любых параметров допускается использовать только численные аргументы (-n), при этом ipnatctl не будет осуществлять разрешение имен сетевых узлов или служб.

Сообщив ipnatctl, что, собственно, вы собираетесь делать (вставлять или удалять), вы должны указать один из нескольких параметров. Для маскировки используется следующее правило:


ipnatctl -I -о eth0 -b source -m masquerade

Ключ -о указывает на интерфейс вывода, в отношении которого будет применяться данное правило. Этот ключ связан со следующим параметром: -b source. Ключ -b означает binding — связывание. Здесь необходимо указать один из двух аргументов: source (источник) или destination (приемник). При помощи ключа -b вы указываете, хотите ли вы осуществлять перезапись адреса в момент, когда пакет прибывает или когда он покидает ваш маскирующий узел. Аргумент source указывает на то, что модуль ip_nat должен перезаписывать адрес в момент, когда пакет покидает узел, а аргумент destination предписывает перезаписать адрес в момент, когда пакет прибывает на узел. Приведенное ранее правило осуществляет маскировку исходящих пакетов, поэтому перезапись адреса следует выполнять в момент, когда пакет покидает узел. Ключ -о <устройство> следует использовать только совместно с ключом -b source, точно так же как ключ -i <устройство> (идентифицирующий входной интерфейс) следует использовать только совместно с ключом -b destination. Последним аргументом является -m masquerade, который указывает на специальное отображение адресов — маскировку IP. Вместе с ключом -m можно использовать один из четырех параметров: msaquerade, redirect, null и static. На данный момент доступны только три из них: msaquerade, redirect и static. К моменту выхода в свет новой версии ядра станет доступным и последний: null. Как можно заметить, данный формат существенно проще, чем формат правил маскировки, используемый в ipchains.

Для перенаправления портов используется несколько другой формат. При реализации перенаправления портов с использованием ipnatctl аргументы больше напоминают формат ipchains, чем рассмотренный ранее синтаксис NAT. Например, если вы хотите перенаправить все соединения, входящие через порт 80, в порт 8080 другой системы, необходимо использовать следующее правило:

ipnatctl -I -р tcp -s 0/0 --sport 80 -d 192.168.0.5 --dport 8080 -b dest

В данном примере вы ожидаете поступления любых соединений из Интернета (0/0) через входящий порт 80. Пакеты будут перенаправлены по адресу 192.168.0.5 в порт 8080. В данном случае вместо входного и выходного интерфейса указываются адрес-источник и адрес-приемник. Так как вы используете расширенные спецификации -sport и --dport, вы должны указать параметр protocol (-p). Таким образом, если вы осуществляете перенаправление портов для DNS, вам потребуется определить два правила: одно для TCP, а другое — для UDP. Опять же необходимо использовать ключ -b, и так как производится перезапись прибывающих пакетов, необходимо указать -Ь destination.

Приведенное ранее правило перенаправления портов можно переписать следующим образом:

ipnatctl -I -p tcp -i eth0 --sport 80 -d 192.168.0.5 --dport 8080 -b dest -m redirect

Ключ -i eth0 и ключ -s 0/0 абсолютно идентичны. Кроме того, в данном правиле используется отображение redirect. Благодаря этому используется специальный модуль ip_nat_map_redirect.

Правило маскировки, приведенное ранее, не требует реверсивного правила (как это было необходимо при использовании ipchains) для того, чтобы обеспечить возврат пакетов. Эту проблему решает модуль ip_conntrack (IP connection tracking — слежение за соединениями IP). Применение правил netfilter для маскировки IP (NAT) существенно упростит администрирование.

После того как вы введете рассмотренные ранее правила в систему, по команде ipnatctl на экран будет выведен список, показанный в листинге 18.5.


Листинг 18.5. Пример вывода команды ipnatctl -L

masquerade [SRC] 0.0.0.0/0->0.0.0.0/0 tap0T0:

generic [DST] 0.0.0.0/32->192.168.0.5/32 proto=6 srcpt=80 dstpt=8080 TO:

redirect [DST] 0.0.0.0/0->192.168.0.5/32 eth0proto=6 srcpt=80 dstpt=8080 TO:

Обратите внимание на различие между вторым и третьим правилом. Во втором правиле осуществляется перенаправление портов (port forwarding) на адрес 192.168.0.5 в порт 8080 всех пакетов, поступающих с адреса 0/0 через порт 80. В третьем правиле осуществляется перенаправление пакетов (redirecting), поступающих через интерфейс eth0 через порт 80 на адрес 192.168.0.5 в порт 8080. Два эти правила обеспечивают один и тот же эффект, однако третье правило выглядит более понятным.