Linux: IPTABLES — руководство: часть 4 — цели для правил

Опубликовано:

IPTABLES — руководство: часть 1 — основы IPTABLES

IPTABLES — руководство: часть 2 — управление IPTABLES

IPTABLES — руководство: часть 3 — параметры правил

Общий обзор действий был дан в первом посте — IPTABLES — руководство: часть 1 — основы IPTABLES.

Содержание:

Действие над попавшим под правило пакетом выполняется с помощью опий -j (--jump) или-g (--goto).

-j, --jump <i>цель</i> — цель (или действие) для пакетов, попадающих по действие правила; целью может быть цепочка, определённая пользователем (отличная от цепочки правила), одна из встроенных целей, определяющая окончательное действие над пакетом; если опция не задана в правиле (и ключ -g не использован), то сработает только счётчик количества правила;

-g, --goto <i>цепочка</i> — продолжить обработку в цепочке, определённой пользователем; в отличие от опции —jump, после действия RETURN из вызванной цепочки, применение правил будет продолжено не в текущей цепочке, а в той цепочке, которая вызвала текущую через --jump.

Для использования -j <em>chain</em> или -g <em>chain</em> — цепочка должна быть уже создана.

Пример:

iptables -A INPUT -p tcp -j tcp_packet

Цели IPTABLES

ACCEPT – принять пакет, и передать следующей цепочке  (или приложению, или передать для дальнейшего роутинга);

У данного действия нет дополнительных опций. После выполнения ACCEPT пакет не будет более отслеживаться никаким правилом этой цепочки (но может попасть под правило в другой, например вPOSTROUTING).

Пример:

iptables -A INPUT -s SOME_IP_HERE -j ACCEPT

CONNMARK — схожа с MARK. Позволяет установить метку на пакеты одной сессии или соединения. Можно использовать в любой цепочке, но при этом учтите, что в таблице nat проверяется только первый пакет, а потому метки на всех пакетах будут бесполезны.

--set-mark — устанавливает метку на паккет; значение может быть long int (от 0 до 4294967295l); можно установить метку на каждый бит пакета, например --set-mark 12/8;

Пример:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j CONNMARK --set-mark 4

--save-mark — используется для сохранения метки пакета на всё соединение;  например, если вы установили метку на пакет с помощью цели MARK — с помощью --save-mark вы можете переместить её на всё подключение целиком;

Пример:

iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --save-mark

--restore-mark — восстановить метку пакета из метки всего соединения, заданного CONNMARK; допустимо  использование только в таблице mangle ;

Пример:

iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --restore-mark

--mask  —  используется вместе с --save-mark и --restore-mark;

Пример:

iptables -t mangle -A PREROUTING --dport 80 -j CONNMARK --restore-mark --mask 12

DNAT — используется для Destination Network Address Translation, перезаписывает Destination IP addressпакета. Допустимо использование только в цепочках PREROUTING и OUTPUT таблицы nat.

--to-destination — указывает механизму DNAT какой IP задать в IP-заголовке пакета, и куда его пересылать; в примере ниже все пакеты на адрес 15.45.23.67 будут перенаправляться на диапазон локальных адресов 192.168.1.1 — 192.168.1.10; можно указать порт назначения, например 192.168.1.1:80, или диапазон портов — 192.168.1.1:80-100;  обязательно указание протокола (-p tcp или -p udp):

Пример:

iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10

DROP — просто «сбрасывает» пакет и IPTABLES «забывает» о его существовании; «сброшенные» пакеты прекращают свое движение полностью, т.е. они не передаются в другие таблицы, как это происходит в случае с действием ACCEPT. Следует помнить, что данное действие может иметь негативные последствия, поскольку может оставлять незакрытые «мертвые» сокеты как на стороне сервера, так и на стороне клиента. Наилучшим способом защиты будет использование действия REJECT, особенно при защите от сканирования портов.

LOG  — действие, которое служит для журналирования отдельных пакетов и событий. В журнал могут заноситься заголовки IP пакетов и другая полезная информация. Информация из журнала может быть затем прочитана с помощью dmesg или syslogd, либо с помощью других программ. Обратите ваше внимание так же на цель ULOG, которое позволяет выполнять запись информации не в системный журнал, а в базу данных MySQL и т.п.

--log-level — указание log-level при логировании события;

Пример:

iptables -A FORWARD -p tcp -j LOG --log-level debug

--log-prefix — добавляет префикс к сообщениям в лог-файле; допустимо максимум 29 символов,включая пробелы и другие специальные символы;

Пример:

iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

--log-tcp-sequence — записывать в лог номер TCP Sequence;

Пример:

iptables -A INPUT -p tcp -j LOG --log-tcp-sequence

--log-tcp-options — записывать  влог различные опции из заголовка TCP-пакета;

Пример:

iptables -A FORWARD -p tcp -j LOG --log-tcp-options

MARK — устанавливает метку Netfilter, которая ассоциирована с определённым пакетом. Допустимо использование только в таблице mangle. Учтите — «метка» устанавливается не на сам пакет, а является неким значением для ядра, которое ассоциируется с пакетом. Т.е., если вы ожидаете увидеть данную метку на это пакете на другом хосте — у вас это не выйдет. Для таких целей лучше использовать TOS (в данном посте не описано, смотрите тут>>>), который устанавливает значение в IP-заголовок пакета.

--set-mark — устанавливается в виде int (целого числа), например для дальнейшей расширенной маршрутизации;

Пример:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

MASQUERADE — в целом, сход по назначению с целью SNAT, но без  ключа  --to-source, так как в основном используется при динамических соединения — DHCP, DialUp, когда IP присваивается динамически и получает информацию об IP непосредственно с сетевого интерфейса. Использование MASQUERADE  допустимо  приналичии постоянного IP, но использует больше системных ресурсов, потому в таком случае предпочтительнее использование SNAT. Допускается использование только в цепочке POSTROUTING таблицы nat.

--to-ports — может быть использована для указания исходных порта или портов для исходящих пакетов; обязательно указание протокола (p- tcp или -p udp);

Пример:

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

NOTRACK — установка метки NOTRACK  на пакеты. Не имете дополнительных опций. Подробнее смотрите тут>>>.

REDIRECT — выполняет перенаправление пакетов и потоков на другой порт той же самой машины. Можно пакеты, поступающие на HTTP порт, перенаправить на порт HTTP-proxy. Удобен для выполнения «прозрачного» проксирования (transparent proxy), когда машины в локальной сети даже не подозревают о существовании прокси. Может использоваться только в цепочках PREROUTING и OUTPUT таблицы nat.

--to-ports — указывает порт или диапазон портов назначения; что бы указать диапазон — укажите их через тире; обязательно указание протокола (-p tcp или -p udp);

Пример:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080-9090

REJECT — используется, как правило, в тех же самых ситуациях, что и DROP, но в отличие от DROP, цель REJECT выдает сообщение об ошибке на хост, передавший пакет. Допустимо использование в цепочках INPUT, FORWARD и OUTPUT, и их под-цепочках.

--reject-with — выполняет REJECT с указанным ответом; сначала будет выполнен REJECT, отправлен ответ, после чего — DROP пакета; допустимые значения:icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable,
icmp-proto-unreachable, icmp-net-prohibited and icmp-host-prohibited

Пример:

iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

RETURN — прекращает премещение пакета далее по правилам в текущей цепочке. Если это вложенная цепочка другой, вышестоящей, цепочки — пакет будет перемещён в неё, если это главная цепочка  — он будет обработан согласно действия по-умолчанию для данной цепочки. Не имеет дополнительных опций.

SNAT — используется для преобразования сетевых адресов (Source Network Address Translation), т.е. изменение исходящего IP адреса в IP в заголовке пакета. SNAT допускается выполнять только в таблицеnat, в цепочке POSTROUTING. Если первый пакет в соединении подвергся преобразованию исходящего адреса, то все последующие пакеты, из этого же соединения, будут преобразованы автоматически и не пойдут через эту цепочку правил.

--to-source — используется для указания исходного адреса пакета;  допустимо  указать диапазон адресов, разделённые тире — 194.236.50.155-194.236.50.160, в таком случае конкретный IP адрес будет выбираться случайным образом для каждого нового потока;

Пример:

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 194.236.50.155-194.236.50.160:1024-32000

ULOG — лучше ознакомится с информацией на домашней странице проекта.

Понравилась статья, расскажи о ней друзьям, нажми кнопку!