Я хотел бы захватить вызов службы HTTP от HostA -> HostB, чтобы проверить клиент на HostA для замены ответа HTTP. Обе ОС Linux. Я попытался следовать, но потерпел неудачу. Какой рекомендуемый способ сделать это?

Я хотел бы использовать режим прозрачного прокси, потому что я не могу изменить клиента и не могу перенаправить весь трафик с HostA на hostB, поскольку другие службы также работают на HostA. Я хотел бы только перенаправить соединение клиента с хоста A на хост B. Клиент на хосте A вызывает службу на хосте B через определенный порт 10001 по HTTP.

Я попытался настроить HostC с mitmproxy (HostA и HostC находятся в одной подсети) HostA (ip_A) -> HostC (ip_C) с mitmproxy-> HostB (ip_B), я установил таблицу ip для создания прозрачного режима.

Вот что я настраиваю на HostA

sudo iptables -t mangle -I OUTPUT -p tcp --dport 10001 -j MARK --set-mark 1
sudo ip route add default via ip_C table 100
sudo ip rule add fwmark 0x1 table 100

На HostC

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -o eth0 -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host

Это не работает таймаут подключения клиента к HostA. Если я попробую traceroute на HostA

traceroute ip_B -p 10001 -T

Это показывает, что ip_B недоступен по TCP от HostA

Я также попытался настроить mitmproxy на HostA, но когда я пытаюсь перенаправить трафик порта 10001 на HostA

sudo iptables -t nat -A OUTPUT -p tcp --dport 10001 -j REDIRECT --to-port 8080
mitmproxy -T --host

Сервисный вызов может быть перехвачен mitmproxy на HostA, но не может получить ответ.

Большое спасибо за вашу помощь.

1 ответ1

0

Возможно - как только пакеты попадают на сервер MITM, он теперь переходит на порт 8080 - но веб-сервер HOST_A все еще работает на 10001 - так что вам не нужно делать другие IPTABLES, чтобы вернуть их на 10001? Я думаю, что ты лучше меня, но я бы догадался

sudo iptables -t nat -A OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 10001

сделал бы это

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .