Назад | Перейти на главную страницу

Перенаправление трафика с помощью linux? (Человек посередине)

У меня такой сценарий:

У меня есть Linux с двумя сетевыми адаптерами, и весь сетевой трафик проходит через одну сетевую карту и переходит на другую. Так что по сути я уже мужчина посередине.

Но сейчас, Я хочу перенаправить весь трафик с целевым IP-адресом «xyz» и целевым портом 500 на порт 500 на моей локальной машине, где работает мой собственный демон. Затем после определенного события я хочу остановить перенаправление (просто удалив правило или около того) и просто пропустить трафик, как и весь другой трафик.

Интересно, могу ли я сделать это с помощью iptables или другого инструмента, уже включенного в Linux? Пока не нашел рабочего решения. У меня также есть проблемы с запуском команд от имени пользователя root из сценария оболочки, который я вызвал с помощью system(). Он не запускается как root, хотя я изменил владельца и привилегии скрипта на root. Я хотел использовать сценарий оболочки, чтобы отменить перенаправление (когда мне удалось заставить его работать).

Вот как вы делаете то, о чем просили, с помощью iptables:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 500 -j DNAT --to-destination 127.0.0.1:500
iptables -t nat -A POSTROUTING -j MASQUERADE

Что касается проблем со сценарием оболочки, вам нужно либо настроить сценарий (плохая идея), либо использовать popen() бежать sudo /path/to/yourscript и настройте sudo, чтобы позволить пользователю, запускающему программу C.

Вы должны иметь возможность сделать это с помощью правила iptables в таблице nat и изменения PREROUTING. Что-то вроде этого:

iptables -t nat -A PREROUTING -d xyz -p tcp --dport 500 -j DNAT --to-destination zyx:1111

Предполагается, что у вас включена переадресация ipv4 через sysctl, что я предполагаю, так как трафик уже проходит через маршрутизатор.

На данный момент я не могу это проверить, но это должно быть хорошей отправной точкой.