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

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

2 ответа

Решение

Таблица NAT:

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

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

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

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

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

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

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

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
Другие вопросы по тегам