Яка різниця між PREROUTING та FORWARD в iptables?


16

Я намагаюся зрозуміти, як працює ця система, і у мене виникають проблеми, щоб зрозуміти різницю між використанням NAT PREROUTING або фільтра FORWARD. З того, що я розумію, PREROUTE може відправити пакет на інший сервер, уникаючи фільтра. Якщо NAT може впоратися з цим за допомогою PREROUTE, яка мета наявності правила FORWARD у фільтрі?

Відповіді:


25

Таблиця NAT :

Ця таблиця повинна використовуватися лише для NAT (трансляції мережевих адрес) у різних пакетах. Іншими словами, його слід використовувати лише для перекладу вихідного поля або поля призначення пакета.

Таблиця фільтрів :

Таблиця фільтрів використовується в основному для фільтрування пакетів. Ми можемо зіставляти пакети і фільтрувати їх будь-яким способом. Це місце, де ми насправді вживаємо заходів проти пакетів і дивимось, що вони містять, і DROP або / ACCEPT їх залежно від їх вмісту. Звичайно, ми можемо також зробити попередню фільтрацію; однак саме ця таблиця є місцем, для якого була розроблена фільтрація.

В Подорож таблиць і ланцюгів ми можемо побачити, що ланцюг FORWARD фільтра проходить лише перенаправлені пакети (пакети, які надходять з мережі І виходять у мережу), тобто ваш комп'ютер працює як маршрутизатор, тоді як ланцюг PREROUTING NAT переходить обома пересланими. пакети та пакети, місцем призначення яких є місцевий хост.

Ви повинні використовувати NAT-PREROUTING лише для зміни адреси призначення пакетів та FORWARD фільтра лише для фільтрації (скидання / прийняття пакетів).

Якщо ми отримаємо пакет у першому рішенні про маршрутизацію, який не призначений для самої локальної машини, він буде направлений через ланцюг FORWARD. Якщо пакет, з іншого боку, призначений для IP-адреси, яку слухає локальна машина, ми надішлемо пакет через ланцюг INPUT та на локальну машину. введіть тут опис зображення Пакети можуть бути призначені для локальної машини, але адреса призначення може бути змінена у ланцюзі ПЕРЕДАЧА, виконуючи NAT. Оскільки це відбувається до першого рішення про маршрутизацію, пакет буде розглянуто після цієї зміни. Через це маршрутизація може бути змінена до прийняття рішення про маршрутизацію. Зверніть увагу, що на цьому зображенні всі пакети пройдуть той чи інший шлях. Якщо ви DNAT пакету повернетесь до тієї ж мережі, з якої він потрапив, він все одно буде проїжджати через решту ланцюгів, поки він не вийде з мережі.


5

ПЕРЕДАЧА : Цей ланцюжок використовується для прийняття будь-яких рішень, пов'язаних з маршрутизацією, перед тим, як ( 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

Ваше використання "хостів" здається дивним. Яка таблиця використовується, коли в першу чергу залежить від локальних інтерфейсів, до яких увійшов пакет і призначений для виходу.
guntbert

яка частина здається дивною? Я використав поняття хостів, щоб вказати на відправляючі та приймаючі сторони ..
heemayl

Я говорю про абзац Вперед: ця таблиця використовується, коли пакет, що надходить через один інтерфейс, призначений для іншого інтерфейсу (на відміну від локального хоста)
guntbert

ой .. я .. я зрозумів .... так, я повинен використовувати інтерфейс .... просто використовувати хости, щоб зробити зображення легким ... я зміню це, коли я буду в центрі мого комп'ютера.
heemayl

@guntbert: я просто зробив голову прямо. не прочитав ваш останній коментар достатньо уважно. Я думаю, ви помиляєтесь в контексті двох різних інтерфейсів для FORWARDланцюга. Коли пакети переносяться з одного хоста локальної мережі на інший хост локальної мережі, пакети будуть проходити лише через один інтерфейс, і ланцюг буде використовуватися, FORWARDхоча тут сервер (середовище) не буде виконувати роль маршрутизатора в строгому сенсі скоріше можна розглядати як перемикач.
heemayl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.