В чем разница между PREROUTING и FORWARD в iptables?
Я пытаюсь понять, как работает эта система, и у меня возникают проблемы, чтобы понять разницу между использованием NAT PREROUTING или фильтра FORWARD. Из того, что я понимаю, PREROUTE может отправлять пакет на другой сервер, избегая фильтра. Если NAT может справиться с этим через PREROUTE, какова цель наличия правила FORWARD в фильтре?
2 ответа
Эта таблица должна использоваться только для 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