Як я можу переадресувати вихідний трафік на порт 80 за допомогою iptables локально?


19

Я намагаюся локально перенаправляти порти на моїй машині Ubuntu за допомогою iptables. Схожий на прозорий проксінг. Я хочу зловити що-небудь, намагаючись залишити свою систему на порт 80 і перенаправити її на віддалений хост і порт.

Чи можу я досягти цього за допомогою NAT та функцій попереднього маршрутизації iptables?

Відповіді:


30

Спробуйте це iptablesправило:

$ sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination IP:80

Сказане говорить:

  • Додайте наступне правило до таблиці NAT ( -t nat).
  • Це правило буде додано ( -A) до вихідного трафіку ( OUTPUT).
  • Нас цікавить лише трафік TCP ( -p tcp).
  • Нас цікавить лише трафік, якому порт призначення 80 ( --dport 80).
  • Коли у нас матч, перейдіть до DNAT ( -j DNAT).
  • Перенесіть цей трафік на інший IP-порт 80 сервера іншого сервера --to-destination IP:80.

Що DNAT?

DNAT
    This target is only valid in the nat table, in the PREROUTING and OUTPUT 
    chains, and user-defined chains which are only called from those chains.
    It specifies that the destination address of the packet should be modified 
    (and all future packets in  this  connection will also be mangled), and
     rules should cease being examined.

Список літератури


спасибі за це, але, здається, це не працює. Однак я виявив, що це працює.
pjf

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT - до місця призначення xx.xx.xx.xx: 3128
pjf

Це тому, що це локально, а не через шлюз? ваш SNAT буде працювати через шлюз?
pjf

@pjf - я так вірю. Я оновив свою відповідь.
slm

@pjf - я знайшов обидва правила, і я відповідав обом правилам. Я не був впевнений, у якій ситуації ти опинився.
slm

6

Це може бути більш конкретним для роботи лише на трафіку до певного хоста призначення. Наприклад, коли помилка Postfix зробила помилку, а пошти в черзі хочуть надсилати на стару ip-адресу.

iptables -t nat -A OUTPUT -p tcp -d {ONLY_TO_THIS_DESTINATION} --dport 25 -j DNAT --to-destination {NEW_IP}:25

4

Це дозволяє перевести порти на всі IP-адреси. Основна відмінність тут - відсутність IP-адреси в --to-destinationполі.

iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination :80

Дуже корисна порада; саме те, що мені було потрібно. Чи можна збільшити номер порту? Скажіть, у мене діапазон 100 портів і хочу підняти їх на певну суму.
Зденек

Не впевнений, що ти маєш на увазі. Не могли б ви написати B-циклу на Bash?
Феліпе Альварес

Цикл, що додає 100 правил iptables, буде працювати, але це сповільнить його. Я вважаю за краще мати змогу сказати, що він збільшить багато послідовних портів в одному правилі.
Зденек

@ Zdenek Я не знаю, чи можливо це за допомогою iptables. Ви подивилися firewalld?
Феліпе Альварес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.