Я хочу протестировать подсистему, которая взаимодействует с другими подсистемами через 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
конфигурацию!