Попробуем в этой статье изложить всю суть 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)
Название цепочки - направить пакет в цепочку.Основная суть - пакеты идут сверху вниз по правилам, заходя во все цепочки на своём пути, если соответствует условиям.