В чем разница между PREROUTING и FORWARD в iptables?

16

Я пытаюсь понять, как работает эта система, и у меня возникают проблемы, чтобы понять разницу между использованием NAT PREROUTING или фильтра FORWARD. Из того, что я понимаю, PREROUTE может отправлять пакет на другой сервер, избегая фильтра. Если NAT может справиться с этим через PREROUTE, какова цель наличия правила FORWARD в фильтре?

Георге
источник

Ответы:

25

Таблица NAT :

Эта таблица должна использоваться только для NAT (трансляция сетевых адресов) в разных пакетах. Другими словами, его следует использовать только для перевода поля источника или поля назначения пакета.

Таблица фильтра :

Таблица фильтров в основном используется для фильтрации пакетов. Мы можем сопоставлять пакеты и фильтровать их так, как мы хотим. Это то место, где мы на самом деле принимаем меры против пакетов и смотрим, что они содержат, и УДАЛЯЕМ или / ПРИНИМАЕМ их, в зависимости от их содержимого. Конечно, мы можем также выполнить предварительную фильтрацию; однако именно эта таблица является местом, для которого была разработана фильтрация.

В Обходе таблиц и цепочек мы видим, что цепочка FORWARD фильтра пересекается только перенаправленными пакетами (пакетами, которые приходят из сети и выходят в сеть), т.е. ваш компьютер работает как маршрутизатор, в то время как цепочка PREROUTING nat пересекается обеими пересылаемыми пакеты и пакеты, местом назначения которых является локальный хост.

Вы должны использовать только PREROUTING для изменения адреса назначения пакетов, а фильтр FORWARD - только для фильтрации (отбрасывание / прием пакетов).

Если мы получим пакет в первом решении о маршрутизации, который не предназначен для самой локальной машины, он будет маршрутизирован через цепочку FORWARD. Если пакет, с другой стороны, предназначен для IP-адреса, который прослушивает локальный компьютер, мы отправим пакет через цепочку INPUT и на локальный компьютер. введите описание изображения здесь Пакеты могут быть предназначены для локальной машины, но адрес назначения может быть изменен в цепочке PREROUTING с помощью NAT. Поскольку это происходит до первого решения о маршрутизации, пакет будет рассматриваться после этого изменения. Из-за этого маршрутизация может быть изменена до принятия решения о маршрутизации. Обратите внимание, что все пакеты будут проходить через тот или иной путь в этом образе. Если вы DNAT пакета обратно в ту же сеть, из которой он пришел, он будет по-прежнему проходить через остальные цепочки, пока не вернется в сеть.

Эрик Карвалью
источник
5

PREROUTING : эта цепочка используется для принятия любых решений, связанных с маршрутизацией, до ( PRE ) отправки любых пакетов. Всегда помните, что в таблице PREROUTING/POSTROUTINGie цели etc таблицы по умолчанию не будут работать. Таблица используется только для принятия решений маршрутизации. Вы должны использовать при принятии любых решений о маршрутизации, то есть решений, которые необходимо принять, прежде чем пакет начнет проходить через сеть. Вот пример, мы перенаправляем любой трафик, который только что достиг сервера на порту 80, на порт 8080:NATACCEPT/DROP/REJECTFILTERNATPREROUTING

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

ВПЕРЕД : Как следует из названия, FORWARDцепочка FILTERтаблиц используется для пересылки пакетов из источника в пункт назначения, здесь источник и пункт назначения - это два разных хоста. Итак, как вы можете себе представить, FORWARDправила в основном используются на серверах, где один хост отправляет / получает трафик от другого хоста через сервер. Когда пакет генерируется с сервера, цепочка, OUTPUTт.е. трафик выходит из себя, тогда как INPUTцепочка означает, что пакеты предназначены только для самого сервера. Вот пример FORWARDцепочки, где любой TCPтрафик, полученный через порт 80 через интерфейс, eth0предназначенный для хоста, 192.168.0.4будет принят и перенаправлен на 192.168.0.4:

iptables -A FORWARD -i eth0 -p tcp --dport 80 -d 192.168.0.4 -j ACCEPT
heemayl
источник
Ваше использование "hosts" кажется странным. Какая таблица используется, когда она зависит в основном от локальных интерфейсов, в которые пришел пакет и которые он намерен завершить.
Гюнтберт
какая часть кажется странной? Я использовал понятие хостов, чтобы указать отправляющую и принимающую стороны ..
Heemayl
Я говорю о параграфе FORWARD: эта таблица используется, когда пакет, поступающий через один интерфейс, предназначен для другого интерфейса (в отличие от локального хоста)
Guntbert
ох..ок..я понял .... да, я должен использовать интерфейс .... просто используйте хосты, чтобы было проще представить ... я изменит это, когда я буду перед моим компьютером.
Heemayl
@ Guntbert: только что получил мою голову прямо. не прочитал ваш последний комментарий достаточно внимательно. Я думаю, что вы ошибаетесь в контексте двух разных интерфейсов для FORWARDцепочки. Когда пакеты передаются от одного хоста локальной сети к другому хосту локальной сети, пакеты будут проходить только через один интерфейс, и используемая цепочка будет, FORWARDхотя здесь сервер (среда) не будет действовать в строгом смысле как маршрутизатор скорее можно рассматривать как переключатель.
Heemayl