2

Я хочу протестировать подсистему, которая взаимодействует с другими подсистемами через TCP. Я использовал следующее:

"iptables -A OUTPUT -p tcp --dport "+port_number" -j DROP"

чтобы остановить трафик через порт, чтобы я мог через скрипт отправить свои данные в тестируемую систему. Это сработало очень хорошо.

Однако теперь я хочу перенаправить трафик на мой сценарий, а не просто отбрасывать его. Затем я хочу манипулировать данными в моем сценарии, прежде чем пересылать их в тестируемую подсистему.

Могу ли я сделать это с помощью iptables? Есть ли лучший подход?

1 ответ1

0

Вы можете попробовать это (входящий трафик на порт 1234 будет перенаправлен на 4321 на локальном хосте, где вы могли бы прослушивать ваш скрипт):

iptables -I INPUT -p tcp --dport 1234 -j ACCEPT
iptables -I INPUT -p tcp --dport 4321 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1234 -j REDIRECT --to-ports 4321

Если вы хотите получить доступ к порту 1234 с той же машины, вам нужно добавить правило OUTPUT , так как PREROUTING не используется интерфейсом обратной связи:

iptables -t nat -I OUTPUT -p tcp -o lo --dport 1234  -j REDIRECT --to-ports 4321

Теперь на сервере вы можете попробовать прослушать с помощью nc -l 4321 (здесь вы можете использовать свой собственный скрипт). На клиенте попробуйте nc server_host_name_or_ip 1234 и напишите что-нибудь, чтобы убедиться, что сервер правильно выполняет перенаправление.

Не забудьте сохранить конфигурацию iptables !

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