Жизнь за прокси. Методы борьбы с прокси-сервером
Часто бывает, что Интернет в локальной сети доступен через прокси, и никаких радостей жизни вроде VPN нет и не предвидится. Вам, как администратору, это доставляет немало хлопот, особенно если ваш сервер на Линуксе. В этой статье мы рассмотрим настройку некоторых системных утилит на доступ через прокси.
apt – в нем скрыта коровья сила
Для того чтобы заставить менеджер пакетов тянуть обновления и инсталляции с репозиториев через прокси-сервер, откройте в редакторе
/etc/apt/apt.conf и поместите туда следующие строчки:
Acquire::http::Proxy "http://username:password@proxy.host:port/";
Acquire::Proxy "true";
Некоторые утилиты, такие как wget например, используют значение системных переменных http_proxy и ftp_proxy. В них тоже нужно прописать наш прокси-сервер со слэшем в конце.
exporthttp_proxy=http://username:password @proxy.host:port/
exportftp_proxy=ftp://username:password @proxy.host:port/
Настраиваем wget
Чтобы качать менеджером загрузок wget, открываем /etc/wgetrc и пишем следующие строчки:
http_proxy=http://username:password @proxy.host:port/
ftp_proxy=ftp://username:password @proxy.host:port/
use_proxy=on
После этого автоматически заработают все скрипты, которые загружают из Сети что-либо с помощью wget, например, зеркало репозитория или обновления для антивируса.
Прокидываем ssh
Предположим, что где-то на просторах Интернета есть сервер, к которому вы хотите получить доступ по ssh, но напрямую это невозможно, так как вы за прокси! Ничего сложного, есть несколько вариантов решения этой проблемы. Один из них – это организация специального туннеля, использующего протокол SSL. Но это довольно долгий способ, желающие могут ознакомиться здесь: http://www.opennet.ru/base/net/ssh_over_ssl.txt.html. Мы же с вами воспользуемся принципом наименьшего действия. Устанавливаем утилиту corkscrew (http://www.agroman.net/corkscrew/):
apt-get install corkscrew
Создаем в home файл proxy-auth, в него пишем логин:пароль для доступа к прокси-серверу. Если у вас авторизация на прокси по IP-адресу, то этот шаг пропускаем. Далее открываем /etc/ssh/ssh_configи добавляем команду после Host*:
ProxyCommand corkscrew proxy.hostport %h %p /home/proxy-auth
Теперь подключаемся к нашему серверу стандартно:
sshgoogle.com
Теперь главное, чтобы были открыты нужные порты на фаерволе.
Настраиваем openvpn
Клиент для VPN-соединений также поддерживает работу через прокси-сервер. Допустим, вам нужно организовать туннель с сервером в Интернете. В конфигурационном файле /etc/openvpn/client.conf добавляем строчки:
http-proxyproxy.hostport
http-proxy-retry
comp-lzo
Первая строчка понятна, вторая заставляет клиент восстанавливать соединение после дисконнекта, а третья включает сжатие. Только важный момент: если вы используете сжатие, то его нужно включить и на серверной стороне. Иначе клиент и сервер «не поймут» друг друга.
Синхронизируем время
На серверах очень часто выходит из строя батарейка на материнской плате. Из-за этого идут неправильно системные часы. Менять батарейку не всегда хочется, особенно если у вас пару лет аптайма, а вот засинхронизировать часы с сервером в Интернете можно. Обычно для этого используют протокол NTP и утилиту ntpdate, но его настроить на прокси-доступ нельзя. Однако выход как всегда есть - это хитрое использование одной особенности протокола HTTP. В соответствии с RFC 2616 — спецификацией HTTP — в заголовках ответа сервер должен указывать дату. С большой долей вероятности на крупных веб-серверах время настроено точно, и на него можно полагаться. Соответствующей утилитки нет в репозиториях, но ее можно скачать с сайта разработчика: http://www.clevervest.com/htp/ или http://www.rkeene.org/oss/htp/.
После заветной комбинации ./configure; make; makeinstall прописываем в cron.d такое правило:
htpdate -P proxy.host:port -s microsoft.com
Надеюсь, что microsoft.com не обманет нас со временем.
Заключение
Как видите, большинство популярных утилит поддерживает доступ через прокси. Если есть необходимость пустить через прокси какое-то редкое приложение либо вовсе сделать доступ прозрачным, можно поднять прокси-сервер squidс авторизацией на прокси верхнего уровня и сделать его прозрачным с помощью iptables. Подробнее об этом как-нибудь в другой раз.
Brian Warner, Minsk 2010
apt – в нем скрыта коровья сила
Для того чтобы заставить менеджер пакетов тянуть обновления и инсталляции с репозиториев через прокси-сервер, откройте в редакторе
/etc/apt/apt.conf и поместите туда следующие строчки:
Acquire::http::Proxy "http://username:password@proxy.host:port/";
Acquire::Proxy "true";
Некоторые утилиты, такие как wget например, используют значение системных переменных http_proxy и ftp_proxy. В них тоже нужно прописать наш прокси-сервер со слэшем в конце.
exporthttp_proxy=http://username:password @proxy.host:port/
exportftp_proxy=ftp://username:password @proxy.host:port/
Настраиваем wget
Чтобы качать менеджером загрузок wget, открываем /etc/wgetrc и пишем следующие строчки:
http_proxy=http://username:password @proxy.host:port/
ftp_proxy=ftp://username:password @proxy.host:port/
use_proxy=on
После этого автоматически заработают все скрипты, которые загружают из Сети что-либо с помощью wget, например, зеркало репозитория или обновления для антивируса.
Прокидываем ssh
Предположим, что где-то на просторах Интернета есть сервер, к которому вы хотите получить доступ по ssh, но напрямую это невозможно, так как вы за прокси! Ничего сложного, есть несколько вариантов решения этой проблемы. Один из них – это организация специального туннеля, использующего протокол SSL. Но это довольно долгий способ, желающие могут ознакомиться здесь: http://www.opennet.ru/base/net/ssh_over_ssl.txt.html. Мы же с вами воспользуемся принципом наименьшего действия. Устанавливаем утилиту corkscrew (http://www.agroman.net/corkscrew/):
apt-get install corkscrew
Создаем в home файл proxy-auth, в него пишем логин:пароль для доступа к прокси-серверу. Если у вас авторизация на прокси по IP-адресу, то этот шаг пропускаем. Далее открываем /etc/ssh/ssh_configи добавляем команду после Host*:
ProxyCommand corkscrew proxy.hostport %h %p /home/proxy-auth
Теперь подключаемся к нашему серверу стандартно:
sshgoogle.com
Теперь главное, чтобы были открыты нужные порты на фаерволе.
Настраиваем openvpn
Клиент для VPN-соединений также поддерживает работу через прокси-сервер. Допустим, вам нужно организовать туннель с сервером в Интернете. В конфигурационном файле /etc/openvpn/client.conf добавляем строчки:
http-proxyproxy.hostport
http-proxy-retry
comp-lzo
Первая строчка понятна, вторая заставляет клиент восстанавливать соединение после дисконнекта, а третья включает сжатие. Только важный момент: если вы используете сжатие, то его нужно включить и на серверной стороне. Иначе клиент и сервер «не поймут» друг друга.
Синхронизируем время
На серверах очень часто выходит из строя батарейка на материнской плате. Из-за этого идут неправильно системные часы. Менять батарейку не всегда хочется, особенно если у вас пару лет аптайма, а вот засинхронизировать часы с сервером в Интернете можно. Обычно для этого используют протокол NTP и утилиту ntpdate, но его настроить на прокси-доступ нельзя. Однако выход как всегда есть - это хитрое использование одной особенности протокола HTTP. В соответствии с RFC 2616 — спецификацией HTTP — в заголовках ответа сервер должен указывать дату. С большой долей вероятности на крупных веб-серверах время настроено точно, и на него можно полагаться. Соответствующей утилитки нет в репозиториях, но ее можно скачать с сайта разработчика: http://www.clevervest.com/htp/ или http://www.rkeene.org/oss/htp/.
После заветной комбинации ./configure; make; makeinstall прописываем в cron.d такое правило:
htpdate -P proxy.host:port -s microsoft.com
Надеюсь, что microsoft.com не обманет нас со временем.
Заключение
Как видите, большинство популярных утилит поддерживает доступ через прокси. Если есть необходимость пустить через прокси какое-то редкое приложение либо вовсе сделать доступ прозрачным, можно поднять прокси-сервер squidс авторизацией на прокси верхнего уровня и сделать его прозрачным с помощью iptables. Подробнее об этом как-нибудь в другой раз.
Brian Warner, Minsk 2010
Компьютерная газета. Статья была опубликована в номере 28 за 2010 год в рубрике интернет