5.7 KiB
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 - возврат пакета в вышестоящую цепочку для применения действия по умолчанию, при отсутствии вышестоящей цепочки применится действие по умолчанию