Как стать автором
Обновить

Выдаём предупреждение о необходимости использования прокси

Время на прочтение 3 мин
Количество просмотров 1.9K
Иногда в локальной сети появляется необходимость выпускать пользователей в интернет через прокси-сервер. Например, для учёта трафика или ограничения доступа к определённым ресурсам. При этом использование прозрачного прокси невозможно или нежелательно.

Информируем пользователей


Можно, конечно, просто сделать рассылку на всех с указанием параметров. Но, как показывает практика, это не избавляет полностью от лишних вопросов.

Облегчаем жизнь


Чуть более сложный в реализации, но убирающий значительную часть вопросов по настройке способ заключается в том, чтобы при попытке открытия страницы пользователю выдавалось сообщение, в котором указаны все необходимые параметры. Для этого нам понадобится установить на шлюзе веб-сервер и настроить его на выдачу страницы с этим сообщением.

Выбираем сервер


Особо продвинутые могут спросить: а зачем что-то выбирать, когда есть Apache? Отвечаю заранее: Apache в данном случае сильно избыточен и будет только зря расходовать ресурсы, которых на шлюзе, скорее всего, и так немного. Поэтому будем использовать более лёгкий вариант. От сервера потребуется умение слушать 80 порт (ибо inetd нам не нужен) и поддержка пользовательских сообщений об ошибках (нам понадобится реагировать на 404). Вполне подходящим вариантом является thttpd.

Установка и настройка


В дальнейшем предполагается, что на шлюзе установлен Debian Etch. Ставим thttpd обычным способом:

# aptitude install thttpd


Создаём файл /var/www/index.html и в нём описываем всё необходимое для того, чтоб пользователь мог спокойно настроить свой браузер: адрес прокси-сервера, порт, пожелания приятно провести время и тому подобное.

Для того, чтобы пользователь при попытке вылезти наружу видел не сообщение об ошибке, а нашу красивую инструкцию, добавляем правило в iptables:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT


Теперь любая попытка выбраться наружу через 80 порт попадёт на thttpd. Открываем habrahabr.ru и видим вместо него то, что мы и хотим увидеть.

Ловим 404


Как можно заметить, при попытке зайти на какую-то страницу, не являющуюся корнем домена, мы получим 404. В thttpd собственный обработчик ошибок устанавливается очень просто. Нам даже нет необходимости что-то менять в конфиге.

# mkdir /var/www/errors
# cd /var/www/errors
# ln -s ../index.html err404.html


К сожалению, thttpd пытается показать свою значимость и дорисовывает внизу страницы свой баннер, портящий наш красивый валидный XHTML Strict. К счастью, это лечится.

Практическая хирургия


Берём машину с той же версией дебиана, что и на шлюзе. Идём на packages.debian.org и качаем оттуда исходники пакета в виде трёх файлов:

$ wget -c http://ftp.de.debian.org/debian/pool/main/t/thttpd/thttpd_2.23beta1-5.dsc http://ftp.de.debian.org/debian/pool/main/t/thttpd/thttpd_2.23beta1.orig.tar.gz http://ftp.de.debian.org/debian/pool/main/t/thttpd/thttpd_2.23beta1-5.diff.gz


Ставим утилиты для разработчика:

$ sudo aptitude install dpkg-dev build-essential fakeroot debhelper


Распаковываем пакет:

$ dpkg-source -x thttpd_2.23beta1-5.dsc
$ cd thttpd-2.23beta1


Редактируем файл config.h. Находим там следующую строку:

#define ERR_APPEND_SERVER_INFO


И комментируем её:

/*#define ERR_APPEND_SERVER_INFO*/


Используем именно такой тип комментария, т. к. это C, а не C++.

Также можно провести ещё некоторые настройки. Например, отключить поддержку CGI и установить кодировку по умолчанию в UTF-8. Читайте комментарии в конфиге.

Далее таким же образом открываем файл debian/changelog. Необходимо увеличить номер версии пакета, чтобы при следующем обновлении он не оказался перезаписан версией из репозитория. Это может произойти даже в том случае, если пакет на самом деле не обновлялся.

В начале файла видим запись следующего вида:

thttpd (2.23beta1-5) unstable; urgency=high

* Applied patch from Steve Kemp <skx@debian.org> on thttpd.logrotate to fix
the insecure use of temporary files when invoked by logrotate
[CVE-2006-4248] (Closes: #396277).

-- Daniel Baumann <daniel@debian.org> Tue, 31 Oct 2006 20:13:00 +0200


Добавляем перед ней свою. Обращаем внимание на форматирование и оставлям одну пустую строку перед тем, что в файле уже было.

thttpd (2.23beta1-5pupkin1) unstable; urgency=low

* Minor configuration changes required for Company X

-- Vasily Pupkin <pupkin@example.com> Mon, 17 Nov 2008 13:18:00 +0200


Собираем пакет:

$ dpkg-buildpackage -rfakeroot


В каталоге уровнем выше образовался файл thttpd_2.23beta1-5pupkin1_i386.deb. Заливаем его на шлюз, устанавливаем и радуемся результату.

upd.: freefd написал статью про автоконфигурацию и предоставил пример страницы с настройками.
Теги:
Хабы:
+33
Комментарии 24
Комментарии Комментарии 24

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн