Команда iptables используется для настройки IP filter и Network Address Translation. Для этого используются две таблицы: filter и nat. Если не задана опция -t, используется таблица filter. Доступные пять убудованих цепочек (наборов правил): INPUT и FORWARD для таблицы filter, PREROUTING и POSTROUTING для таблицы nat и OUTPUT для всех таблиц.
Как и раньше, ми допускаем, что есть сеть какой-то организации, на Linux-машине запущен firewall. Все внутренние пользователи имеют доступ к WWW-серверам в Internet, но и только.
Если сеть использует сетевую маску у 24 бита (класс C) и имеет адресу сети 172.16.1.0, нужно использовать правила iptables:
# modprobe ip_tables
# iptables -F FORWARD
# iptables -P FORWARD DROP
# iptables -A FORWARD -m tcp -p tcp -s 0/0 -іsport 80 -d 172.16.1.0/24 / -іsyn -j DROP
# iptables -A FORWARD -m tcp -p tcp -s 172.16.1.0/24 -іsport / 80 -d 0/0 -j ACCEPT
# iptables -A FORWARD -m tcp -p tcp -d 172.16.1.0/24 -іdport 80 -s 0/0 -j / ACCEPT
В этом примере iptables работает точно как команда ipchains. Вся разница в том, что нужно предварительно загрузить модуль ip_tables.o. Обратите внимание, что iptables не поддерживает опцию -b, так что ми должны отдельно задать правило для кожного направления.
Типы пакетов ICMP
Каждая из команд конфигурации firewall позволяет определять типы пакетов ICMP. В отличие от портов TCP и UDP, нет никакого удобного файла конфигурации, которая перечисляет типы пакетов и их значения. Типы пакетов ICMP определены в RFC-1700 (Assigned Numbers RFC). Они также перечислены в одном из стандартных библиотечных файлов C. Файл /usr/include/netinet/ip_icmp.h, что принадлежит обычной библиотеке GNU и используется C-программистами при написании сетевого программного обеспечения, которое работает йз протоколом ICMP, также определяет типы пакетов ICMP. Для удобства я они отображены в таблице 9-2. Интерфейс команды iptables позволяет определять типы ICMP по их именам, так что я укажу и эти имена. Позже они придадуться.
Таблица №5.4
Типы пакетов ICMP
Номер типа | Позначення iptables | Опис |
0 | echo-reply | Echo Reply |
3 | destination-unreachable | Destination Unreachable |
4 | source-quench | Source Quench |
5 | redirect | Redirect |
8 | echo-request | Echo Request |
11 | time-exceeded | Time Exceeded |
12 | parameter-problem | Parameter Problem |
13 | timestamp-request | Timestamp Request |
14 | timestamp-reply | Timestamp Reply |
15 | none | Information Request |
16 | none | Information Reply |
17 | address-mask-request | Address Mask Request |
18 | address-mask-reply | Address Mask Reply |
Управление битами TOS
Биты типа обслуживания (Type Of Service, TOS) являют собой набор из четырехбитных флагов в заглавии IP-пакета. Когда каждой йз этих флажков установок, маршрутизаторы могут обрабатывать пакет иначе, чем пакет без TOS-набора битов. Каждый из четырех битов имеет разную цель, и только один из TOS-битов может быть установлен в один момент часа, так что комбинации не позволяются. Флаги названы типом обслуживания потому, что они дают возможность прикладной программе, которая передает данные, сообщить сети тип необходимого мережного обслуживания.
Доступные классы обслуживания сети:
Minimum delay
Используется, когда час доставки пакета из исходного компьютера на компьютер адресата (час ожидания), больше всего важно. Провайдер выбирает самый быстрый канал связи для доставки таких пакетов.
Maximum throughput
Используется, когда объем данных в любом периоде часа важен. Есть много типов сетевых прикладных программ, для которых час ожидания не очень важно, но сетевая производительность критическая. Для таких пакетов рекомендуются каналы с красивой пропускной способностью, например, спутниковые.
Maximum reliability
Используется, когда важно иметь некоторую уверенность, что данные достичь адресата без повторной передачи. IP-протокол может быть передан по большому количеству основных сред передачи. У той час как SLIP и PPP красивые для передачи обычные протоколы, они не настолько надежные, как X.25 network. Для таких пакетов выбираются сами надежные каналы связи.
Minimum cost
Используется, когда важно минимизировать стоимость передачи данных. Аренда спутникового канала передачи вообще менее дорога, чем аренда оптоволоконного кабеля, так что провайдер может иметь разные каналы и направлять трафик по канале более подешево.
Задание TOS-битов с помощью ipfwadm или ipchains
Команды ipfwadm и ipchains имеют справа с TOS-битами. В обоих случаях определяется правило, которое отвечает пакетам с конкретным TOS-битом, и используете параметр -t, чтобы определить изменение, что желаем сделать.
Изменения определяются, используя двухразрядные маски. Первая йз этих разрядных масок используется в логической операции AND с полем параметров IP-пакета, вторая в операции OR. Если это звучит сложно, я дам рецепты, чтобы обеспечить каждый из типов обслуживания немедленно.
Разрядные маски определяются, используя восьмиразрядные шестнадцатеричные значения. ipfwadm и ipchains используют одинаковый синтаксис:
-t andmask xormask Наиболее полезные приложения для масок приведены вместе с их значениями в таблице 5.3.
Таблица 5.3
Использование TOS-битов
TOS | ANDmask | XORmask | Использование, которое рекомендует |
Minimum | Delay | 0x01 0x10 | ftp, telnet, ssh |
Maximum | Throughput | 0x01 0x08 | ftp-данные, www |
Maximum | Reliability | 0x01 0x04 | snmp, dns |
Minimum | Cost | 0x01 0x02 | nntp, smtp |
Установка TOS-битов с помощью iptables
Команда iptables позволяет определять правила для сбора данных с заданными TOS-битами, используя параметр -m tos и устанавливать биты с помощью параметра -j TOS. Можно устанавливать TOS-битые только на правилах цепочек FORWARD и OUTPUT. Соответствие и установка происходит совсем независимо. Мы можем конфигурировать много интересных правил. Например, конфигурировать правило для отклонения пакетов с задаными TOS-битами или для установки TOS-битов в пакетах из какого-то конкретного компьютера. В отличие от ipfwadm и ipchains, iptables использует больше простой подход, явно определяя почему TOS-битые должны отвечать, или какие TOS-битые должны быть установленные. Для битов заданы имена, что куда лучшее запоминание их числовых масок
Синтаксис для задания соответствию TOS-битов в правилах:
-m tos -іtos mnemonic [other-args] -j target
Синтаксис для установки TOS-битов в правилах:
[other-args] -j TOS -іset mnemonic
Проверка конфигурации Firewall
Общая процедура теста следующая:
Выберите тип firewall для использования: ipfwadm, ipchains или iptables.
Разработайте ряд тестов, которые определят, работает ли ваш firewall так, как нужно. Для этих тестов возможно использовать любой источник или адресов отправителя, так что выберите комбинации адрес, которые должны быть принятые и другие, которые должны быть отброшенные. Если принимать или отбрасывать только некоторые диапазоны адрес, красивой идеей будет проверить адреса по обе стороны границі диапазона: по одному внутри границі и внешне. Будет гарантировать, что имеем правильные границі, потому что иногда просто определить неправильную маску подсети в конфигурации. Если фильтровать в соответствии с протоколом и номером порта, тесте должны также проверить все важны комбинации этих параметров. Например, если допускаете принимать только TCP-пакеты, проверьте, что UDP-пакеты отклоняются.
Разработайте правила для ipfwadm, ipchains или iptables, чтобы выполнить каждый тест. Вероятно, стоит записать все правила в скрипт, так что Вы можете проверять и перепроверять усе без проблем по мере исправления ошибок или изменений проекта. Тесте используют почти той же синтаксис, поскольку определяют правила, но как параметры берут немного другие значения. Например, исходный параметр адреса в спецификации правила определяет исходная адреса, из которого виновный прийти пакет, который будет отвечать этому правилу. Исходный параметр адреса в синтаксисе теста, напротив определяет исходная адреса тестового пакета, который будет сгенерирован. Для ipfwadm должны использовать опцию -c, чтобы определить, что эта команда является тестом, у той час как для ipchains и iptables должны использовать опцию -C. Во всех случаях мы должны всегда определять исходную адресу, адреса получателя, протокол и интерфейс, которые нужно использовать для теста. Другие параметры, типа номера порта или битов TOS, являются факультативными.
Выполните каждую команду теста и обратите внимание на вывод. Вывод кожного теста будет одним словом, что указывает конечного адресата пакета после его прохождения через firewall. Для ipchains и iptables определенные пользователем цепочки будут проверены в добавление к убудованого.
Уравняете вывод кожного теста с желаемым результатом. Если есть разногласия, Вы будете должны анализировать набор правил, чтобы определить, где вы сделали ошибку. Если Вы записали команды теста в файл скрипта, Вы сможете легко повторно выполнить тест после исправления ошибок в конфигурации firewall. Гарантируют, что активная конфигурация, что Вы проверяете фактически, отбивает набор команд в скрипте конфигурации. внешние TCP-соединения с нашими web-серверами. Ничего больше не должно работать прямо. Начнем с передачи, которая точно виновата работать (из нашей локальной сети):
# ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 80 -ые eth0 accepted
Заметьте, что в параметрах нужно передать и путь для описания пакета. Вывод команды указывает на те, что пакет был принят для пересылки, которая есть именно том, на что ми надеялись.
Теперь попробуйте другой тест, в этот раз с исходным адресом, который не принадлежит нашей сети. Этот виноват быть отклоненный:
# ipchains -C forward -p tcp -s 172.16.2.0 1025 -d 44.136.8.2 80 -ые eth0 denied
Попробуйте немного больше тестов, в этот раз с теми же деталями, что и в первом тесте, но с разными протоколами. они должны быть отклоненные:
# ipchains -C forward -p udp -s 172.16.1.0 1025 -d 44.136.8.2 80 -ые eth0 denied
# ipchains -C forward -p icmp -s 172.16.1.0 1025 -d 44.136.8.2 80 -ые eth0 denied
Попробуйте другой порт адресата, опять ожидая, что этот пакет виноват быть отклоненный:
# ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 23 -ые eth0 denied