Рейтинг:2

Докажите, что программное обеспечение работает через SOCKS

флаг za

вступление

У меня есть рубиновое программное обеспечение, которое использует сеть во время своего выполнения.

Недавно я получил отзыв от пользователя, который работает за брандмауэром и использует 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, но, возможно, какой-то сторонний код не работает.

Вопросы

  1. Это приемлемый подход: попытка «имитировать» брандмауэр с помощью iptables?
  2. Эта проблема может возникнуть из-за того, что это что-то специфичное для SOCKS, или неправильная конфигурация в моем iptables?
  3. Может быть, есть лучший подход для достижения той же цели: протестировать программное обеспечение, чтобы оно работало только через SOCKS-прокси, без «прямых» подключений?
Michael Hampton avatar
флаг cz
Похоже, вы не написали поддержку SOCKS в своей программе.Это не то, с чем мы можем помочь.
CAMOBAP avatar
флаг za
@MichaelHampton спасибо за ответ. На самом деле Ruby уважает переменные окружения `HTTP[S]_PROXY` https://ruby-doc.org/stdlib-2.6.3/libdoc/open-uri/rdoc/OpenURI.html. И скрипт ruby ​​определенно пытается подключиться к прокси-серверу SOCKS, потому что в сообщении об ошибке я вижу IP-адрес прокси-сервера. У меня есть предположение, что, возможно, правила iptables слишком строгие.
Michael Hampton avatar
флаг cz
Прокси-серверы HTTP(S) полностью отличаются от прокси-серверов SOCKS. Протокол совершенно другой, поэтому они не могут быть заменены. Для подключения через SOCKS требуется специальная поддержка в вашей программе, например. через [класс SOCKSSocket] (https://ruby-doc.org/stdlib-2.6.3/libdoc/socket/rdoc/SOCKSSocket.html).
CAMOBAP avatar
флаг za
@MichaelHampton спасибо за ответ, я этого не знал. если вы напишете ответ, я его одобрю. Спасибо
Рейтинг:1
флаг za

Большое спасибо @Майкл Хэмптон для комментариев.

Короткие ответы на мои вопросы:

  1. Этот подход отлично работает
  2. Выпуск на Рубин боковая сторона HTTP_ПРОКСИ принимает только прокси HTTP[S] (он не обрабатывает прокси SOCKS как завиток делает)
  3. Наверное iptable самый простой

Подробнее о программировании:

Ответить или комментировать

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