Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей. |
Межсетевое экранирование в Linux
Содержание
- Общие сведение о подсистеме netfilter
- Управление правилами iptables
- Взаимодействие правил и цепочек iptables
Общие сведение о подсистеме netfilter
Подсистема netfilter представляет собой средство пакетной фильтрации в ядре Linux (начиная с версии 2.4) [ 46 ] . Утилита iptables используется для управления netfilter.
Сетевые пакеты в подсистеме 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.
Следует отметить, что одноименные таблицы каждой цепочки независимы.
Входящий пакет (рис 11.1) начинает обрабатываться с цепочки PREROUTING в таблицах raw, conntrack (определение состояний) и mangle. Затем он обрабатывается правилами таблицы nat данной цепочки. На этом этапе проверяется, необходима ли модификация адреса получателя пакета ( DNAT ). Важно сменить адрес получателя на данном этапе, так как маршрут пакета определяется сразу после того, как он покинет цепочку PREROUTING.
Далее возможны два варианта:
- Если целью пакета является этот компьютер, то пакет будет отправлен в цепочку INPUT ; после маршрутизации, он обрабатывается правилами цепочек INPUT. В случае прохождения цепочек пакет передается приложению.
- Если целью пакета является другой компьютер, то пакет фильтруется правилами цепочки 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 используется с ключом -L. Так, для просмотра всех цепочек таблицы filter ( -v — для более детального отображения):
# iptables -L -v
Для просмотра цепочки 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 ] :
Действие, которое система выполнит, если пакет в одной из цепочек удовлетворяет условию, устанавливается с помощью ключа -j (--jump). Можно также передать пакет в другую цепочку.
Стандартные действия:
- -ACCEPT - пакет покидает данную цепочку и передается в следующую.
- -DROP - отбросить удовлетворяющий условию пакет.
- -REJECT - отбросить пакет, отправив отправителю ICMP-сообщение.
- -LOG - протоколировать пакет.
- -RETURN - возвратить пакет в предыдущую цепочку.
- -SNAT - применить трансляцию адреса источника в пакете. Может использоваться только в цепочках POSTROUTING и OUTPUT таблицы nat.
- -DNAT - применить трансляцию адреса назначения в пакете. Может использоваться только в цепочке POSTROUTING таблицы nat.
- -MASQUERADE — используется вместо SNAT при наличии соединения с динамическим IP.
- -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