Опубликован: 26.07.2011 | Уровень: для всех | Доступ: свободно
Лекция 11:

Межсетевое экранирование в Linux

< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Аннотация: Даны краткие сведения о подсистеме netfilter/iptables. Приведены примеры составления правил и взаимодействия правил и цепочек iptables в задачах фильтрации трафика

Содержание

  1. Общие сведение о подсистеме netfilter
  2. Управление правилами iptables
  3. Взаимодействие правил и цепочек iptables

Общие сведение о подсистеме netfilter

Подсистема netfilter представляет собой средство пакетной фильтрации в ядре Linux (начиная с версии 2.4) [ 46 ] . Утилита iptables используется для управления netfilter.

Примечание: Netfilter/iptables кроме создание межсетевых экранов на основе пакетной фильтрации (в том числе и с учетом состояния соединения), также позволяет реализовать различные сложные схемы манипуляции сетевыми пакетами, в частности трансляцию сетевых адресов (NAT) для разделяемого доступа в Интернет и организации прозрачных прокси (см. "Обеспечение доступа в сеть Интернет" ).

Сетевые пакеты в подсистеме netfilter проходят последовательность цепочек (chain). Каждая цепочка включает заданный набор таблиц (table), содержащих упорядоченные списки правил. Каждое правило содержит параметры выбора и выполняемое действие при соответствии содержимого пакета параметрам.

Существует пять типов стандартных цепочек, встроенных в систему [ 47 ] :

  • PREROUTING — для изначальной обработки входящих пакетов
  • INPUT — для входящих пакетов, адресованных непосредственно локальному компьютеру
  • FORWARD — для проходящих (маршрутизируемых) пакетов
  • OUTPUT — для пакетов, создаваемых локальным компьютером
  • POSTROUTING — для окончательной обработки исходящих пакетов

Цепочки организованы в четыре таблицы рис. 11.1 [ 47 ] :

  • raw — просматривается до передачи пакета системе определения состояний. Содержится в цепочках PREROUTING и OUTPUT.
  • mangle — содержит правила модификации заголовка IP?пакетов. Среди прочего, поддерживает изменения полей TTL и TOS, и маркеров пакета. Содержится во всех стандартных цепочках.
  • nat — используется для трансляции сетевых адресов. Содержится в цепочках PREROUTING, OUTPUT, и POSTROUTING.
  • filter — основная таблица, предназначенная для фильтрации сетевых пакетов; используется по умолчанию если название таблицы не указано. Содержится в цепочках INPUT, FORWARD, и OUTPUT.
Прохождение пакета в подсистеме netfilter (взято из wikipedia.org)

Рис. 11.1. Прохождение пакета в подсистеме netfilter (взято из wikipedia.org)

Следует отметить, что одноименные таблицы каждой цепочки независимы.

Входящий пакет (рис 11.1) начинает обрабатываться с цепочки PREROUTING в таблицах raw, conntrack (определение состояний) и mangle. Затем он обрабатывается правилами таблицы nat данной цепочки. На этом этапе проверяется, необходима ли модификация адреса получателя пакета ( DNAT ). Важно сменить адрес получателя на данном этапе, так как маршрут пакета определяется сразу после того, как он покинет цепочку PREROUTING.

Далее возможны два варианта:

  1. Если целью пакета является этот компьютер, то пакет будет отправлен в цепочку INPUT ; после маршрутизации, он обрабатывается правилами цепочек INPUT. В случае прохождения цепочек пакет передается приложению.
  2. Если целью пакета является другой компьютер, то пакет фильтруется правилами цепочки FORWARD таблиц mangle и filter, а затем к нему применяются правила цепочки POSTROUTING. На данном этапе можно использовать SNAT/MASQUERADE (подмена источника/маскировка). После этих действий пакет будет отправлен в сеть.

Третий вариант - когда приложение на компьютере, отвечает на запрос или отправляет собственный пакет, то он обрабатывается цепочкой OUTPUT таблиц raw, conntrack и filter. Затем к нему применяются правила цепочки OUTPUT таблицы nat, для определения, требуется ли использовать DNAT (модификация адреса получателя), пакет фильтруется цепочкой OUTPUT таблицы filter и выпускается в цепочку POSTROUTING. В случае успешного прохождения POSTROUTING пакет выходит в сеть.

Непосредственно для фильтрации используются таблицы filter. Поэтому в рамках данной темы важно понимать, что для фильтрации пакетов, предназначенных данному узлу необходимо модифицировать таблицу filter цепочки INPUT, для проходящих пакетов — цепочки FORWARD, для пакетов, созданных данным узломOUTPUT.

Управление правилами iptables

Команда iptables позволяет редактировать правила таблиц netfilter. Каждое правило представляет собой запись, содержащую в себе параметры отбора (критерии), определяющие, подпадает ли пакет под данное правило, и действие, которое необходимо выполнить в случае соответствия параметрам отбора [ 48 ] .

В общем виде правила записываются в виде:

iptables [-t table] command [match] [target/jump]

По умолчанию используется таблица filter, если же необходимо указать другую таблицу, то следует использовать спецификатор -t с указанием имени таблицы. После имени таблицы указывается команда, определяющая действие: вставить правило, или добавить правило в конец цепочки, или удалить правило и т. п. Match задает параметры отбора. Target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле: передать пакет в другую цепочку правил, "сбросить" пакет, выдать на источник сообщение об ошибке и т. п.

Примечание: для работы с iptables требуются права суперпользователя.

Для просмотра существующих правил, команда iptables используется с ключом -L. Так, для просмотра всех цепочек таблицы filter ( -v — для более детального отображения):

# iptables -L -v
Примечание: Далее по тексту данной темы, если не названа таблица, то имеется в виду таблица filter.

Для просмотра цепочки FORWARD нужно указать имя цепочки:

# iptables -v -L FORWARD

Сбросить все правила (-F) и удалить определенные пользователем цепочки (-X):

# iptables -F
# iptables -X

Для добавления правила в цепочку используется ключ -A. Например, чтобы добавить правило в цепочку POSTROUTING таблицы nat:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Для того, чтобы добавить правило в цепочку FORWARD:

# iptables -A FORWARD -i eth0 --destination 192.168.1.0/24  -j ACCEPT

Ниже в виде таблицы приведены основные параметры отбора пакетов [ 48 ] :

Таблица 1.1.
Параметр Описание Пример
--protocol (сокращено -p ) Определяет протокол. Опции tcp, udp, icmp, или любой другой протокол определенный в /etc/protocols iptables -A INPUT -p tcp
--source (-s) IP адрес источника пакета. Может быть определен несколькими путями.
  • Одиночный хост: host.domain.tld, или IP адрес: 10.10.10.3
  • Пул-адресов (подсеть): 10.10.10.3/24 или 10.10.10.3/255.255.255.0
iptables -A INPUT -s 10.10.10.3
--destination (-d) IP адрес назначения пакета. Может быть определен несколькими путями - смотри — source iptables -A INPUT --destination 192.168.1.0/24
--source-port (--sport) Порт источник, возможно только для протоколов — protocol tcp, или — protocol udp iptables -A INPUT --protocol tcp --source-port 25
--destination-port (--dport) Порт назначения, возможно только для протоколов — protocol tcp, или — protocol udp iptables -A INPUT --protocol udp --destination-port 67
--state

Состояние соединения. Доступно, если модуль 'state' загружен с помощью '-m state'. Доступные опции:

NEW (Все пакеты устанавливающие новое соединение)

ESTABLISHED (Все пакеты, принадлежащие установленному соединению)

RELATED (Пакеты, не принадлежащие установленному соединению, но связанные с ним. Например - FTP в активном режиме использует разные соединения для передачи данных. Эти соединения связаны.)

INVALID (Пакеты, которые не могут быть по тем или иным причинам идентифицированы. Например, ICMP ошибки не принадлежащие существующим соединениям)

iptables -A INPUT -m state --state NEW,ESTABLISHED
--in-interface (сокращенно -i ) Определяет интерфейс, на который прибыл пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами iptables -t nat -A PREROUTING --in-interface eth0
--out-interface (сокращенно -o ) Определяет интерфейс, с которого уйдет пакет. Полезно для NAT и машин с несколькими сетевыми интерфейсами iptables -t nat -A POSTROUTING --out-interface eth1
--tcp-flags Определяет TCP флаги пакета. Содержит 2 параметра: Список флагов которые следует проверить и список флагов которые должны быть установлены
--syn Сокращение для ‘--tcp-flags SYN,RST,ACK SYN. Поскольку проверяет TCP флаги, используется с — protocol tcp. В примере показан фильтр для пакетов с флагом NEW, но без флага SYN. Обычно такие пакеты должны быть выброшены ( DROP ). iptables -A INPUT --protocol tcp ! --syn -m state --state NEW

Действие, которое система выполнит, если пакет в одной из цепочек удовлетворяет условию, устанавливается с помощью ключа -j (--jump). Можно также передать пакет в другую цепочку.

Стандартные действия:

  1. -ACCEPT - пакет покидает данную цепочку и передается в следующую.
  2. -DROP - отбросить удовлетворяющий условию пакет.
  3. -REJECT - отбросить пакет, отправив отправителю ICMP-сообщение.
  4. -LOG - протоколировать пакет.
  5. -RETURN - возвратить пакет в предыдущую цепочку.
  6. -SNAT - применить трансляцию адреса источника в пакете. Может использоваться только в цепочках POSTROUTING и OUTPUT таблицы nat.
  7. -DNAT - применить трансляцию адреса назначения в пакете. Может использоваться только в цепочке POSTROUTING таблицы nat.
  8. -MASQUERADE — используется вместо SNAT при наличии соединения с динамическим IP.
  9. -MARK — используется для установки меток на пакеты.
# iptables -A input -p tcp -s 192.168.0.0/16 --dport 80 -j ACCEPT
Листинг 11.1. Правило, разрешающее подключения к локальному HTTP-серверу из заданной подсети
# iptables -A FORWARD -s 192.168.1.0/24 -d 192.168.9.9 -j DROP
Листинг 11.2. Правило, запрещающее проходящий трафика от сети 192.168.1.0/24 к узлу 192.168.9.9
< Лекция 10 || Лекция 11: 12 || Лекция 12 >
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Сергей Пархоменко
Сергей Пархоменко
Россия, Ростов-на-Дону, ЮФУ (ДГТУ), 2008