вступление
У меня есть рубиновое программное обеспечение, которое использует сеть во время своего выполнения.
Недавно я получил отзыв от пользователя, который работает за брандмауэром и использует SOCKS, у него это ПО не работает.
Поэтому мне нужно смоделировать эту ситуацию, чтобы проверить, какая часть моего программного обеспечения не соблюдает HTTP_ПРОКСИ
переменные среды
Что я пробовал
Я попытался смоделировать этот брандмауэр с помощью iptables
(внутри докера):
apt-получить обновление -y
apt-get установить iptables
экспортировать SOCKS5_PROXY_HOST=xxx.xxx.xxx.xxx[1]
экспорт SOCKS5_PROXY_PORT=ppp
iptables -A INPUT -s $SOCKS5_PROXY_HOST -j ПРИНЯТЬ
iptables -A ВЫВОД -d $SOCKS5_PROXY_HOST -j ПРИНЯТЬ
iptables -P ВХОД DROP
iptables -P ВЫХОД DROP
env HTTP_PROXY=$SOCKS5_PROXY_HOST:$SOCKS5_PROXY_PORT ruby my_script.rb
Проблема
По какой-то причине этот подход не работает, и я получаю:
Прокси CONNECT прерван
или же
Не удалось подключиться к порту xxx.xxx.xxx.xxx pppp: время ожидания подключения истекло
Примечания:
- [1] Я использовал IP-адрес (не доменное имя) для
НОСКИ
прокси
- [2] Перед подачей заявки я использовал разные случайные публичные прокси-серверы SOCKS.
iptable
правила, все они были доступны
- [3] Уважение API Ruby Open-URI
HTTP_ПРОКСИ
переменные среды https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html, но, возможно, какой-то сторонний код не работает.
Вопросы
- Это приемлемый подход: попытка «имитировать» брандмауэр с помощью
iptables
?
- Эта проблема может возникнуть из-за того, что это что-то специфичное для SOCKS, или неправильная конфигурация в моем
iptables
?
- Может быть, есть лучший подход для достижения той же цели: протестировать программное обеспечение, чтобы оно работало только через SOCKS-прокси, без «прямых» подключений?