diff --git a/iptables.md b/iptables.md new file mode 100644 index 0000000..18688e4 --- /dev/null +++ b/iptables.md @@ -0,0 +1,64 @@ +# 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 - возврат пакета в вышестоящую цепочку для применения действия по умолчанию, при отсутствии вышестоящей цепочки применится действие по умолчанию