Ситуация:

  • Пакет tcp приходит на eth0 с пунктом назначения 8.8.8.8.
  • Этот пакет соответствует некоторым критериям, которые заставляют меня хотеть перехватить его (скажем, меня интересуют все пакеты из источника 10.0.0.5 или все пакеты на порту 80).
  • Пакет выделен с помощью правила iptables, так что я могу сделать с ним что-нибудь интересное.

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


Чтобы уточнить: я не хочу изменять IP-адрес назначения пакета и не хочу подделывать IP-адрес назначения для всей сети - я только хочу украсть пакеты, которые могут соответствовать правилу iptables.

Я попытался iptables -j REDIRECT, но, похоже, не может сделать это
Я также подумал о создании временного интерфейса, который будет принимать пакеты со всех ips, и использовать iptables для отправки на него пакетов интереса, но в соответствии с тем, что я прочитал, это заставит linux запечатывать каждый пакет, который он видит, потому что думает, что у него есть Действительный IP-адрес назначения для всех из них, даже если маршрутизация отключена.

Решение не должно быть эксклюзивным для tcp, если оно работает с tcp.

Есть какой-либо способ сделать это?

1 ответ1

1

Должно быть возможно сделать это, используя REDIRECT для IPTables. Есть несколько вещей, не упомянутых о ваших попытках здесь, и которые, возможно, были упущены из виду - то есть необходимо использовать цепочку предварительной маршрутизации (или цепочку вывода, но, вероятно, не здесь). Это также, я думаю, требует использования таблицы NAT:

  1. Вы захотите использовать что-то вроде iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000

  2. Вам нужна программа, работающая на порту 8000 на локальном компьютере, чтобы фактически обрабатывать запросы.

  3. Вам может понадобиться настроить свой стек, например, включить пересылку ip, включить send_redirects в зависимости от вашего варианта использования.

Мысль для вас - то, что вы пытаетесь сделать, было решено в Linux для "прозрачного проксирования", поэтому использование подобных руководств поможет вам продвинуться далеко вперед к вашей цели.

Вы также можете захотеть очистить свое определение "всех пакетов на порту 80" - что, вероятно, не сработало бы, если бы был дан ответ на вопрос, который вы на самом деле задали - я подозреваю, что вы имеете в виду все пакеты, предназначенные для порта 80 - который сильно отличается ко всем пакетам, полученным ОТ 80 порта также.

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