Порядок прохождения таблиц и цепочек.
Действие – это предопределенная команда, описывающая действие, которое необходимо выполнить, если пакет совпал с заданным критерием. Например, можно применить действие DROPили ACCEPTк пакету, в зависимости от наших нужд. Существует и ряд других действий, которые описываются ниже в этом разделе. В результате выполнения одних действий, пакет прекращает свое прохождение по цепочке, например DROPи ACCEPT, в результате других, после выполнения неких операций, продолжает проверку, например, LOG, в результате работы третьих даже видоизменяется, например DNATи SNAT, TTLи TOS, но так же продолжает продвижение по цепочке.
http://antonio.mccinet.ru/protection/iptables_howto.htmlв переводе Евгения Данильченко aka virii5, eugene@kriljon.ru
6.5.9. Действие REDIRECT
6.5.10. Действие REJECT
6.5.11. Действие RETURN
6.5.12. Действие SNAT
6.5.13. Действие TOS
Действие – это предопределенная команда, описывающая действие, которое необходимо выполнить, если пакет совпал с заданным критерием. Например, можно применить действие DROPили ACCEPTк пакету, в зависимости от наших нужд. Существует и ряд других действий, которые описываются ниже в этом разделе. В результате выполнения одних действий, пакет прекращает свое прохождение по цепочке, например DROPи ACCEPT, в результате других, после выполнения неких операций, продолжает проверку, например, LOG, в результате работы третьих даже видоизменяется, например DNATи SNAT, TTLи TOS, но так же продолжает продвижение по цепочке.
http://antonio.mccinet.ru/protection/iptables_howto.htmlв переводе Евгения Данильченко aka virii5, eugene@kriljon.ru
"...Для того чтобы эта цель была полезна, необходимы еще два компонента:
«queue handler» – обработчик очереди, который выполняет работу по передаче пакетов между ядром и пользовательским приложением; и
пользовательское приложение которое будет получать, возможно обрабатывать, и решать судьбу пакетов.
Стандартный обработчик очереди для IPv4 – модуль ip-queue, который распространяется с ядром и помечен как экспериментальный. Ниже дан пример, как можно использовать iptables для передачи пакетов в пользовательское приложение:
# modprobe iptable_filter # modprobe ip_queue # iptables -A OUTPUT -p icmp -j QUEUE
С этим правилом, созданные локально пакеты ICMP типа (такие, что создаются скажем при помощи команды ping) попадают в модуль ip_queue, который затем пытается передать их в пользовательское приложение. Если ни одно из таких приложений не найдено, пакеты сбрасываются. Чтобы написать пользовательскую программу обработки пакетов, используйте libipq API. Оно распространяется с пакетом iptables. Примеры можно найти в testsuite tools (например redirect.c) на CVS. Статус ip_queue можно проверить с помощью: /proc/net/ip_queue Максимальную длинну очереди (то есть, число пакетов передаваемых в пользовательское приложение без подтверждения обработки) можно контролировать с помощью: /proc/sys/net/ipv4/ip_queue_maxlen По умолчанию – максимальная длинна очереди равна 1024. Как только этот предел достигается, новые пакеты будут сбрасываться, пока очередь не снизиться ниже данного предела. Хорошие протоколы, такие как TCP интерпретируют сброшенные пакеты как перегруженность канала передачи, и успешно с этим справляются (насколько я помню, пакет будет просто переслан заново удаленной стороной, прим. перевод.). Однако, может потребоваться некоторого рода эксперементирование, чтобы определить оптимальную длину очереди в каждом конкретном случае, если по умолчанию очередь слишком мала..."
6.5.9. Действие REDIRECT
Выполняет перенаправление пакетов и потоков на другой порт той же самой машины. К примеру, можно пакеты, поступающие на HTTP порт перенаправить на порт HTTP proxy. Действие
REDIRECTочень удобно для выполнения «прозрачного» проксирования (transparent proxying), когда машины в локальной сети даже не подозревают о существовании прокси.
REDIRECTможет использоваться только в цепочках PREROUTINGи OUTPUTтаблицы nat. И конечно же это действие можно выполнять в подцепочках, вызываемых и вышеуказанных. Для действия REDIRECTпредусмотрен только один ключ.
Таблица 6-20. Действие REDIRECT
(Ключ – Пример – Описание)
Ключ: –to-ports
Пример: iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
Описание: Ключ –to-portsопределяет порт или диапазон портов назначения. Без указания ключа –to-ports, перенаправления не происходит, т.е. пакет идет на тот порт, куда и был назначен. В примере, приведенном выше, –to-ports 8080указан один порт назначения. Если нужно указать диапазон портов, то мы должны написать нечто подобное –to-ports 8080-8090. Этот ключ можно использовать только в правилах, где критерий содержит явное указание на протокол TCP или UDP с помощью ключа –protocol.
REDIRECTможет использоваться только в цепочках PREROUTINGи OUTPUTтаблицы nat. И конечно же это действие можно выполнять в подцепочках, вызываемых и вышеуказанных. Для действия REDIRECTпредусмотрен только один ключ.
Таблица 6-20. Действие REDIRECT
(Ключ – Пример – Описание)
Ключ: –to-ports
Пример: iptables -t nat -A PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
Описание: Ключ –to-portsопределяет порт или диапазон портов назначения. Без указания ключа –to-ports, перенаправления не происходит, т.е. пакет идет на тот порт, куда и был назначен. В примере, приведенном выше, –to-ports 8080указан один порт назначения. Если нужно указать диапазон портов, то мы должны написать нечто подобное –to-ports 8080-8090. Этот ключ можно использовать только в правилах, где критерий содержит явное указание на протокол TCP или UDP с помощью ключа –protocol.
6.5.10. Действие REJECT
REJECTиспользуется, как правило, в тех же самых ситуациях, что и
DROP, но в отличие от
DROP, команда
REJECTвыдает сообщение об ошибке на хост, передавший пакет. Действие
REJECTна сегодняшний день может использоваться только в цепочках
INPUT,
FORWARDи
OUTPUT(и во вложенных в них цепочках). Пока существует только единственный ключ, управляющий поведением команды
REJECT.
Таблица 6-21. Действие REJECT
(Ключ – Пример – Описание)
Ключ: –reject-with
Пример: iptables -A FORWARD -p TCP –dport 22 -j REJECT –reject-with tcp-reset
Описание: Указывает, какое сообщение необходимо передать в ответ, если пакет совпал с заданным критерием. При применении действия REJECTк пакету, сначала на хост-отправитель будет отослан указанный ответ, а затем пакет будет «сброшен». Допускается использовать следующие типы ответов: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited и icmp-host-prohibited. По-умолчанию передается сообщение port-unreachable. Все вышеуказанные типы ответов являются ICMP error messages. Дополнительную информацию по типам ICMP сообщений вы можете получить в приложении Типы ICMP. В заключение укажем еще один тип ответа – tcp-reset, который используется только для протокола TCP. Если указано значение tcp-reset, то действие REJECTпередаст в ответ пакет TCP RST, пакеты TCP RSTиспользуются для закрытия TCP соединений. За дополнительной информацией обращайтесь к RFC 793 – Transmission Control Protocol. (Список типов ICMP ответов и их алиасов вы сможете получить введя команду iptables -j REJECT -h прим. перев.).
Таблица 6-21. Действие REJECT
(Ключ – Пример – Описание)
Ключ: –reject-with
Пример: iptables -A FORWARD -p TCP –dport 22 -j REJECT –reject-with tcp-reset
Описание: Указывает, какое сообщение необходимо передать в ответ, если пакет совпал с заданным критерием. При применении действия REJECTк пакету, сначала на хост-отправитель будет отослан указанный ответ, а затем пакет будет «сброшен». Допускается использовать следующие типы ответов: icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited и icmp-host-prohibited. По-умолчанию передается сообщение port-unreachable. Все вышеуказанные типы ответов являются ICMP error messages. Дополнительную информацию по типам ICMP сообщений вы можете получить в приложении Типы ICMP. В заключение укажем еще один тип ответа – tcp-reset, который используется только для протокола TCP. Если указано значение tcp-reset, то действие REJECTпередаст в ответ пакет TCP RST, пакеты TCP RSTиспользуются для закрытия TCP соединений. За дополнительной информацией обращайтесь к RFC 793 – Transmission Control Protocol. (Список типов ICMP ответов и их алиасов вы сможете получить введя команду iptables -j REJECT -h прим. перев.).
6.5.11. Действие RETURN
Действие
RETURNпрекращает движение пакета по текущей цепочке правил и производит возврат в вызывающую цепочку, если текущая цепочка была вложенной, или, если текущая цепочка лежит на самом верхнем уровне (например
INPUT), то к пакету будет применена политика по-умолчанию. Обычно, в качестве политики по-умолчанию назначают действия
ACCEPTили
DROP.
Для примера, допустим, что пакет идет по цепочке INPUTи встречает правило, которое производит переход во вложенную цепочку – –jump EXAMPLE_CHAIN. Далее, в цепочке EXAMPLE_CHAIN пакет встречает правило, которое выполняет действие –jump RETURN. Тогда произойдет возврат пакета в цепочку INPUT. Другой пример, пусть пакет встречает правило, которое выполняет действие –jump RETURNв цепочке INPUT. Тогда к пакету будет применена политика по-умолчанию цепочки INPUT.
Для примера, допустим, что пакет идет по цепочке INPUTи встречает правило, которое производит переход во вложенную цепочку – –jump EXAMPLE_CHAIN. Далее, в цепочке EXAMPLE_CHAIN пакет встречает правило, которое выполняет действие –jump RETURN. Тогда произойдет возврат пакета в цепочку INPUT. Другой пример, пусть пакет встречает правило, которое выполняет действие –jump RETURNв цепочке INPUT. Тогда к пакету будет применена политика по-умолчанию цепочки INPUT.
6.5.12. Действие SNAT
SNATиспользуется для преобразования сетевых адресов (Source Network Address Translation), т.е. изменение исходящего IP адреса в IP заголовке пакета. Например, это действие можно использовать для предоставления выхода в Интернет другим компьютерам из локальной сети, имея лишь один уникальный IP адрес. Для этого. необходимо включить пересылку пакетов (forwarding) в ядре и затем создать правила, которые будут транслировать исходящие IP адреса нашей локальной сети в реальный внешний адрес. В результате, внешний мир ничего не будет знать о нашей локальной сети, он будет считать, что запросы пришли с нашего брандмауэра.
SNATдопускается выполнять только в таблице nat, в цепочке POSTROUTING. Другими словами, только здесь допускается преобразование исходящих адресов. Если первый пакет в соединении подвергся преобразованию исходящего адреса, то все последующие пакеты, из этого же соединения, будут преобразованы автоматически и не пойдут через эту цепочку правил.
Таблица 6-22. Действие SNAT
(Ключ – Пример – Описание)
Ключ: –to-source
Пример: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT –to-source 194.236.50.155-194.236.50.160:1024-32000
Описание: Ключ –to-sourceиспользуется для указания адреса, присваемового пакету. Все просто, вы указываете IP адрес, который будет подставлен в заголовок пакета в качестве исходящего. Если вы собираетесь перераспределять нагрузку между несколькими брандмауэрами, то можно указать диапазон адресов, где начальный и конечный адреса диапазона разделяются дефисом, например: 194.236.50.155-194.236.50.160. Тогда, конкретный IP адрес будет выбираться из диапазона случайным образом для каждого нового потока. Дополнительно можно указать диапазон портов, которые будут использоваться только для нужд SNAT. Все исходящие порты будут после этого перекартироваться в заданный диапазон. iptables старается, по-возможности, избегать перекартирования портов, однако не всегда это возможно, и тогда производится перекартирование . Если диапазон портов не задан, то исходные порты ниже 512 перекартируются в диапазоне 0-511, порты в диапазоне 512-1023 перекартируются в диапазоне 512-1023, и, наконец порты из диапазона 1024-65535 перекартируются в диапазоне 1024-65535. Что касается портов назначения, то они не подвергаются перекартированию.
SNATдопускается выполнять только в таблице nat, в цепочке POSTROUTING. Другими словами, только здесь допускается преобразование исходящих адресов. Если первый пакет в соединении подвергся преобразованию исходящего адреса, то все последующие пакеты, из этого же соединения, будут преобразованы автоматически и не пойдут через эту цепочку правил.
Таблица 6-22. Действие SNAT
(Ключ – Пример – Описание)
Ключ: –to-source
Пример: iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT –to-source 194.236.50.155-194.236.50.160:1024-32000
Описание: Ключ –to-sourceиспользуется для указания адреса, присваемового пакету. Все просто, вы указываете IP адрес, который будет подставлен в заголовок пакета в качестве исходящего. Если вы собираетесь перераспределять нагрузку между несколькими брандмауэрами, то можно указать диапазон адресов, где начальный и конечный адреса диапазона разделяются дефисом, например: 194.236.50.155-194.236.50.160. Тогда, конкретный IP адрес будет выбираться из диапазона случайным образом для каждого нового потока. Дополнительно можно указать диапазон портов, которые будут использоваться только для нужд SNAT. Все исходящие порты будут после этого перекартироваться в заданный диапазон. iptables старается, по-возможности, избегать перекартирования портов, однако не всегда это возможно, и тогда производится перекартирование . Если диапазон портов не задан, то исходные порты ниже 512 перекартируются в диапазоне 0-511, порты в диапазоне 512-1023 перекартируются в диапазоне 512-1023, и, наконец порты из диапазона 1024-65535 перекартируются в диапазоне 1024-65535. Что касается портов назначения, то они не подвергаются перекартированию.
6.5.13. Действие TOS
Команда
TOSиспользуется для установки битов в поле
Type of ServiceIP заголовка. Поле TOS содержит 8 бит, которые используются для маршрутизации пакетов. Это один из нескольких полей, используемых
iproute2. Так же важно помнить, что данное поле может обрабатываться различными маршрутизаторами с целью выбора маршрута движения пакета. Как уже указывалось выше, это поле, в отличие от
MARK, сохраняет свое значение при движении по сети, а поэтому может использоваться вами для маршрутизации пакета. На сегодняшний день, большинство маршрутизаторов в Интернете никак не обрабатывают это поле, однако есть и такие, которые смотрят на него. Если вы используете это поле в своих нуждах, то подобные маршрутизаторы могут принять неверное решение при выборе маршрута, поэтому, лучше всего использовать это поле для своих нужд только в пределах вашей