Iptables basics/основы

Материал из Webko Wiki
Перейти к навигации Перейти к поиску


Netfilter

Relation of (some of) the different Netfilter components

Flow of network packets through the Netfilter

Here is a packet flow diagram for iptables, omitting the Prerouting and Postrouting chains for simplicity. It also assumes all traffic through the OUTPUT chain leaves the host, but packets addressed to loopback may circulate back to the "packet in" point.

Iptables

Here is a packet flow diagram for iptables, omitting the Prerouting and Postrouting chains for simplicity. It also assumes all traffic through the OUTPUT chain leaves the host, but packets addressed to loopback may circulate back to the "packet in" point.

Iptables.png

Packet rules can be added with the form

iptables --add chain_name  packet-description  --jump [ACCEPT | DROP]

Here are a few examples for the packet-description part. You can select by source/destination address, protocol (TCP/UDP/etc), src/dest port, input or output interface, Ethernet address (no examples here), or any other header bits. You can mix and match.

--destination lamp.cslabs.luc.edu
--source 10.2.3.0/24
--protocol tcp --source-port 80    # must have --protocol tcp before you can have any tcp-specific match
--protocol tcp --destination-port 25 --out-interface eth2
--protocol icmp --icmp-type echo-request --in-interface eth0
--protocol udp
--match state --state ESTABLISHED,RELATED       # --match has several modules; here we use state
--match state --state NEW
--protocol tcp --syn   # for TCP, same as --state NEW: first TCP SYN packet

When iptables is used to mark packets for iproute2 or tc, usually the prerouting chain / mangle table is used. Iptables also has a classify option for tagging packets for a given tc-htb queue.

Целью правил IPTables называется действие, которое выполняется над пакетом, если его заголовок соответствует совпадению правила. Обычно используются 15 стандар­тных целей. Также можно указать в качестве цели пользовательскую це­почку, которой передается управление. Если ни одно из правил в пользовательской цепочке не совпало, выполнение передается назад в вызывающую цепочку.

Опция -j используется для задания цели. Стандартные цели пишутся прописными буквами.

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

# iptables -N my_packets

Чтобы перейти в пользовательскую цепочку выполняется следующая команда:

# iptables -A INPUT -p tcp -j my_packets

На движение по такой цепочке накладывается ряд ограничений. Первое, это цепочка должна быть создана до того как на нее будет выполнен переход. Второе, цепочка должна находиться в той же таблице, как и цепочка с которой на нее будет выполнен переход.

Порядок прохода пользовательской цепочки такой же, как и вызывающей. Если пакет пройдет эту цепочку до конца, то он будет возвращен в вызывающую цепочку и продолжит движение по ней. Если к пакету в пользовательской цепочке будет применено действие DROP, то пакет будет считаться отброшенным и его движение по вызывающей цепочке прекратиться.

ACCEPT (-j ACCEPT)

Пакет должен быть принят. Обработка пакета в этой цепочке прекращается и он передается следующей цепочке, где над ним может быть произведена дополнительная обработка.

DROP (-j DROP)

Пакет будет отброшен. Больше над пакетом никакой обработки не произво­дится, так как после этого действия пакет отбрасывается. Ни в какие другие цепочки после этого действия пакет не передается. Поэтому, если вы хотите протоколировать такие пакеты, то это нужно делать до этой обработки. Данная обработка может оставлять незакрытые сокеты на стороне сервера, поэтому его нужно применять с осторожностью.

Обработки ACCEPT и DROP не имеют дополнительных ключей.

REJECT (-j REJECT)

Пакет отклоняется. В отличие от цели DROP, где пакет просто отбрасывается, в данном случае отправителю будет отправлено IСМР-сообщение "Port unreachable" («Порт недоступен»). С помощью опции --reject-with можно изменить тип ICMP-сообщения:

# iptables -A INPUT -s 1.2.3.4 -j REJECT --reject-with icmp-net-unreachable

У опции --reject-with есть следующие аргументы:

  • icmp-net-unreachable — сеть недоступна;
  • icmp-host-unreachable — узел недоступен;
  • icmp-port-unreachable — порт недоступен;
  • icmp-proto-unreahable — неподдерживаемый протокол;
  • icmp-net-prohibited — сеть запрещена;
  • icmp-host-prohibited — узел запрещен.

По умолчанию будет передано сообщение port-unreachable.

Вышеперечисленные аргументы являются ICMP error messages.В дополнение к опции --reject-with TCP-пакеты можно отклонить с помощью аргумента tcp-reset, который отправляет RST-сообщения отправителю. Это наилучший с точки зрения безопасности способ, нужно обязательно использовать именно его. TCP RST пакеты используются для закрытия TCP соединений.

LOG (-j LOG [опции])