Попробуем в этой статье изложить всю суть iptables. В iptables есть пять основных сущностей:

  • Таблицы
  • Цепочки
  • Правила
  • Условия
  • Действия

Таблицы

Как работать с таблицами:

iptables -t <ТАБЛИЦА>

Вообще - таблица это набор цепочек. По умолчанию существуют несколько таблиц (и цепочек внутри них):

filter

  • INPUT - идущий на сам сервер трафик
  • OUTPUT - идущий от самого сервер трафик
  • FORWARD - идущий через сервер трафик

mangle

  • PREROUTING - весь трафик до роутинга и фильтров
  • INPUT,
  • FORWARD,
  • OUTPUT,
  • POSTROUTING - весь трафик после роутинга и фильтра

nat

  • PREROUTING - здесь можно перенаправлять трафик
  • OUTPUT
  • POSTROUTING - здесь можно выдавать трафик за свой и маскировать серые адреса.

raw

  • PREROUTING - первая цепочка в которую попадает трафик.
  • OUTPUT

Ключ -t означает указание таблицы. Если не указывать - используется таблица filter.

Цепочки

задаются после ключей:

  • -I <цепочка> <номер> - вставить правило в определённое место в цепочке, по умолчанию - в начало.
  • -A <цепочка>- добавить правило в конец цепочки
  • -D <цепочка> <номер> - удалить правило, можно задавать номер, можно условие, по условию удаляется не всегда.
  • -L <цепочка> - просмотреть цепочку.

Правила

Правила добавляются в цепочки. Правила состоят из условия и действия, и то и другое - необязательно.

Условия

самые популярные - это:

  • -p <протокол> - указать для какого протокола будет срабатывать это правило.
  • -s <ip адрес> - с какого адреса пришёл этот пакет
  • -d <ip адрес> - на какой адрес идёт этот пакет
  • --sport - с какого порта пришёл пакет
  • --dport - на какой порт идёт пакет.

P.S: указывать порт можно только для tcp / udp пакетов.

Действия

То что делать с пакетом, если он соответствует условию правила.

iptables -A FORWARD -j <действие>

Может быть как встроенным действием, так и направлением в цепочку. Популярные действия:

  • ACCEPT - принять пакет, дальше пакет по цепочкам не пойдёт, независимо от вложенности цепочек.
  • DROP - заблокировать пакет.
  • RETURN - выкинуть пакет из текущей цепочки в предыдущую.
  • SNAT - изменить source адрес пакета (работает в nat POSTROUTING)
  • DNAT - изменить dest адрес пакета (работает в nat PREROUTING)
  • Название цепочки - направить пакет в цепочку.Основная суть - пакеты идут сверху вниз по правилам, заходя во все цепочки на своём пути, если соответствует условиям.