notes/iptables.md

6.1 KiB
Raw Blame History

iptables

Таблицы

  • filter - основная таблица для фильтрации пакетов, используется по умолчанию;
  • nat - управление преобразованием сетевых адресов;
  • mangle - модификация и замена содержимого сетевых пакетов вне контекста NAT и фильтрации пакетов;
  • raw - предназначена для работы с сырыми пакетами, пока они еще не прошли обработку

Цепочки

Цепочки бывают базовые/встроенные и пользовательские (можно создать самому).

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

  • INPUT - входящий трафик (адресованный локальному хосту);
  • FORWARD - транзитный трафик поступающий на локальную машину с целью передачи его на другую машину (трафик передаваемый в docker контейнер тоже будет считаться транзитным), при этом транзитный трафик проходит в обоих направлениях;
  • OUTPUT - исходящий из локального хоста трафик

Правила - условия и действия

Правило - состоит из условия/критерия (если нет значит применяется ко всему трафику) действия (может не быть) и счетчика (для учета пакетов попавших под правило).

основные действия с правилами:

  • -A - добавить правило в цепочку;
  • -С - проверить все правила;
  • -D - удалить правило;
  • -I - вставить правило с нужным номером;
  • -L - вывести все правила в текущей цепочке;
  • -S - вывести все правила;
  • -F - очистить все правила;
  • -N - создать цепочку;
  • -X - удалить цепочку;
  • -P - установить действие по умолчанию.

Условия:

  • -p - протокол (TCP, UDP, ICMP, ALL);
  • -s - ip адрес источника (можно с маской 10.0.0.0/24), допускается отрицание (т.е. все кроме) -s ! 10.0.0.0/24;
  • -d - ip адрес получателя (аналогично -s);
  • -i - интерфейс с которого пришел пакет (только для INPUT, FORWARD, PREROUTING), например ens3, допускается указать ens+ что означает все имена интерфейсов начинающиеся с заданной строки, допускается отрицание -i ! ens+;
  • -o - интерфейс локального хоста, из которого выходит трафик (только для OUTPUT, FORWARD, PREROUTING);
  • --sport - порт с которого был отправлен TCP/UDP пакет (допускаются имена служб из /etc/services), поддерживаются диапазоны вида 20:80 что значит от 20 до 80 порта, так же можно опустить одно из значений :80 (от 0 до 80) или 20: (от 20 до 65535), отрицание поддерживается даже к диапазонам --sport ! 20:80;
  • --dport - аналогично --sport только речь идет про порт, которому адресован пакет;
  • --icmp-type - тип ICMP сообщения (номер или название), поддерживается отрицание. RFC 792 или iptables --protocol icmp --help;
  • -m mac --mac-source - MAC адрес устройства передавшего пакет, поддерживается отрицание;
  • -m state --state - состояние соединения:
    • INVALID - неизвестное соединение, возможно ошибочное;
    • NEW - новое соединение;
    • ESTABLISHED - уже установленное соединение;
    • RELATED - пакет принадлежит уже существующему соединению, но он отправляется по новому
  • -m ttl - Time To Live:
    • --ttl-eq N - TTL пакета равен N;
    • --ttl-lt N - TTL пакета меньше N;
    • --ttl-gt N - TTL пакета больше N

Действия:

  • ACCEPT - пакет принят в текущей таблице;
  • DROP - пакет сбрасывается и перестает движение в системе;
  • LOG - пакет журналируется и продолжает дальнейшие движение по цепочке правил и таблицам (рассмотрим ниже)
  • REJECT - аналогично DROP только отдает сообщение об ошибке на хост отправителя (работает на всех цепочках таблицы filter):
    • --reject-with - тип ответа, RFC 793 или iptables -j REJECT -h
  • RETURN - возврат пакета в вышестоящую цепочку для применения действия по умолчанию, при отсутствии вышестоящей цепочки применится действие по умолчанию

Примеры

  • Просмотр текущих правил
iptables -L

более наглядно

iptables -vnL --line-numbers