Использование iptables TPROXY вместо REDIRECT

Использование iptables TPROXY вместо REDIRECT

Я запускаю Debian 8. Я пытаюсь перехватить все пакеты, и в настоящее время использую iptablesдля этого:

iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 5000

Кажется, это работает, но это исключает возможность получения исходного порта назначения в пакете.

Я читал, TPROXYчто это должно быть правильным решением, поскольку он не использует NAT.

Я попробовал заменить REDIRECTна это:

iptables -t mangle -A PREROUTING -p tcp -j TPROXY --tproxy-mark 0x1/0x1 --on-port 5000

Но при этом я не перехватываю никаких пакетов на своем сервисе...

решение1

В Documentation/networking/tproxy.txt в дереве ядра упоминается следующее:

Цель 'TPROXY' обеспечивает аналогичную функциональность, не полагаясь на NAT. Просто добавьте такие правила в набор правил iptables выше:

iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
  --tproxy-mark 0x1/0x1 --on-port 50080

Обратите внимание, что для того, чтобы это работало, вам придется изменить прокси-сервер, включив (SOL_IP, IP_TRANSPARENT) для прослушивающего сокета.

Настроили ли вы вышеупомянутые параметры прослушивающего сокета в вашем приложении?

Также обратите внимание, что в документе выше упоминается необходимость добавления соответствующего правила и таблицы маршрутизации IP для локальной доставки пакетов.

Связанный контент