Pull to refresh

Использование HTTP proxy и SOCKS в Linux

Reading time4 min
Views168K
В Linux существует много полезных консольных команд, которые при необходимости хотелось бы запустить через proxy. Некоторые приложения имеют встроенную поддержку proxy, а некоторые нет. Далее описано как пользоваться востребованными утилитами через proxy, даже теми, которые этой поддержки не имеют.

curl: передача данных через proxy


curl имеет полноценную поддержку как HTTP proxy так и SOCKS.

Для тестирования возможно использовать proxy сервера из бесплатных списков (socks — sockslist.net, и HTTP proxy — proxyhttp.net). Проверка IP адреса будет производиться с помощью ресурса check-host.net

# Проверить HTTP proxy
curl --proxy 11.22.33.44:5555 check-host.net/ip
# Тоже самое, но если для HTTP proxy требуется авторизация
curl --proxy 11.22.33.44:5555 -U username:password check-host.net/ip
# Проверить socks4
curl --socks4 11.22.33.44:5555 check-host.net/ip
# Проверить socks5
curl --socks5 11.22.33.44:5555 check-host.net/ip
# Тоже самое, только преобразование имен идет также через SOCKS
# (подробнее о преобразовании имен можно прочитать ниже в подразделе "DNS запросы через proxy")
curl --socks5-hostname 11.22.33.44:5555 check-host.net/ip



Часть параметров curl можно записать в файл ~/.curlrc:
socks5 = 11.22.33.44:5555
proxy-user = username:password
user-agent = "Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"


С помощью time и curl также можно замерить время отклика сервера:
# Без proxy:
time curl check-host.net/ip
# С proxy:
time curl --socks5 11.22.33.44:5555 check-host.net/ip
# Или любого сайта:
time curl habrahabr.ru


Результат будет выглядеть так:
real    0m0.307s
user    0m0.000s
sys     0m0.004s


wget: закачка файлов через proxy



wget имеет встроенную поддержку proxy. Недостаток лишь в том, что только поддержку HTTP proxy. Для использования совместно с SOCKS рекомендуется использовать соксификатор dante.

 # Скачать файл через proxy:
http_proxy="http://33.22.44.44:8080" wget http://www.google.com/favicon.ico
  Тоже самое, но для HTTPS
https_proxy="http://33.22.44.44:8080" wget https://www.google.com/favicon.ico
 # Использовать proxy с авторизацией
http_proxy="http://33.22.44.44:8080" wget --proxy-user=user --proxy-password=password http://www.google.com/favicon.ico


Чтобы все время не указывать --proxy-user и --proxy-password можно их прописать в файл ~/.wgetrc:
proxy-user = username
proxy-password = password
user-agent = Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1


ssh: доступ к серверам



Для доступа к серверам через ssh и proxy также лучше использовать соксификатор dante.

Соксификатор dante



Установка:
apt-get install dante-client # пример для Debian-based систем


Использование:
# Если требуется зайти по ssh на сервер
SOCKS_PASSWORD="" SOCKS_SERVER="11.22.33.44:1080" socksify ssh myserver
# Тоже самое, только если для подключения к соксу требуется авторизация
SOCKS_USERNAME="user" SOCKS_PASSWORD="password" SOCKS_SERVER="11.22.33.44:1080" socksify ssh myserver  
# Пример с использованием IRC клиента - irssi
SOCKS_PASSWORD="" SOCKS_SERVER="11.22.33.44:1080" socksify irssi
# Тоже самое, только с использованием HTTP proxy с поддержкой метода CONNECT
HTTP_CONNECT_PROXY="http://11.22.33.44:8080" socksify irssi


С помощью socksify можно направить через proxy почти любое приложение, не только консольное.

Чтобы все время не вводить данные о proxy можно создать файл /etc/socks.conf
Пример для SOCKS:
route {
	from: 0.0.0.0/0   to: 0.0.0.0/0   via: 11.22.33.44 port = 55555
	protocol: tcp udp
	proxyprotocol: socks_v4 socks_v5
	method: none
}


Пример для HTTP proxy с авторизацией:
route {
	from: 0.0.0.0/0   to: 0.0.0.0/0   via: 11.22.33.44 port = 8080
	command: connect
	proxyprotocol: http
        method: username
}


А также экспортировать переменные SOCKS_USERNAME и SOCKS_PASSWORD, если для SOCKS или HTTP proxy требуется авторизация:
export SOCKS_USERNAME="username"
export SOCKS_PASSWORD="password"


DNS запросы через proxy



Часто требуется чтобы и преобразование имен происходило через proxy. Если использовать dante, то запрос на преобразование имен идет и через proxy, и через именной сервер указанный в /etc/resolv.conf . Понять почему же идет два одинаковых запроса вместо одного не удалось. Поэтому можно предложить два варианта:
1) Закомментировать именные сервера в файле /etc/resolv.conf, чтобы преобразование имен шло только через proxy. Это отразится на всей системе.
2) Изменить /etc/resolv.conf и выставить именные сервера необходимой страны, или просто отличные от серверов провайдера. Например установить сервера Google:
nameserver 8.8.8.8
nameserver 8.8.4.4


Чтобы данные не были перезаписаны именными серверами провайдера (при переподключении), можно запретить обновление списка именных серверов сетевому менеджеру (NetworkManager/wicd) или DHCP-клиенту (спасибо ergil за корректировку).

Или воспользоваться «грубым» методом — запрещением изменения файла /etc/resolv.conf:
sudo chattr +i /etc/resolv.conf


Если есть какие-то дополнения, пожалуйста, напишите, это будет полезно узнать и применить.

Дополнительная информация:
man socks.conf
man socksify
man curl
Tags:
Hubs:
+34
Comments18

Articles

Change theme settings