Человек посередине с использованием iptables

Человек посередине с использованием iptables

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

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

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

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

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

решение1

Вы можете попробовать это (входящий трафик на порт 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оно не используется интерфейсом loopback:

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конфигурацию!

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