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