Настройка прокси-серверов для unix и windows
Введение Настройка прокси на Windows-шлюзе Настройка прокси-сервера SQUID под UNIX Денис Романюк
🕛 28.07.2005, 01:37
Денис Романюк
НАСТРОЙКА ПРОКСИ-СЕРВЕРОВ ДЛЯ UNIX и WINDOWS
ВВЕДЕНИЕ
Если через один канал к интернету подключается несколько компьютеров, рано или поздно возникает проблема кеширования. Вкратце эту идею можно описать так. Когда с одного компьютера клиент выкачивает большой файл, то сервер не просто передает файл клиенту, но предварительно сохраняет его на своем жестком диске. И в случае, если другому клиенту с другого компьютера понадобится тот же файл, то сервер определяет, что этот файл уже сохранен, и не берет его из Интернета, а выдает прямо с диска. Таким образом, канал, соединяющий нас с провайдером, разгружается.
В случае хорошего "попадания" в кеш, т.е. когда вышеуказанная ситуация с повторным запросом одного документа происходит довольно часто, внешний трафик может значительно сократиться. Это весьма критично особенно в том случае, если провайдер считает скачанные мегабайты, и выставляет соответствующий счет. Но даже в случае неограниченного подключения, прокси-сервер может быть полезен в смысле уменьшения загруженности внешнего канала. Кроме того, использование прокси-сервера может быть элегантным решением распространенной проблемы: "У меня есть интернет на одном компьютере в моей локальной сети, как мне разрешить выход туда всем прочим компьютерам?"
Пусть компьютер, имеющий прямое подключение к интернету (назовем его сервером или шлюзом), имеет адрес 192.168.1.144, а все другие компьютеры локальной сети - адреса типа 192.168.1.ххх
Наша задача заключается в том, чтобы настроить на компьютере-шлюзе программу (proxy-сервер), а клиентские компьютеры сконфигурировать так, чтобы они выходили в интернет через созданный нами прокси-сервер. При выборе программы-сервера рекомендуется выбрать программу, представляющую наибольшую функциональность и возможности продвинутой настройки. Даже если сейчас эти возможности не нужны, они могут понадобится в будущем. Например, такими возможностями может быть тонкое разграничение доступа по клиентам, возможность запрещать доступ к определенным серверам или URL и т.д. Ясное дело, что выбор программы-сервера зависит и от типа операционной системы, установленной на компьютере-шлюзе. Рассмотрим базовую настройку прокси-серверов для Windows и для UNIX/Linux.
Глава 1. НАСТРОЙКА ПРОКСИ-СЕРВЕРА НА WINDOWS-ШЛЮЗЕ
Существует большой выбор программ для Windows, имеющих прокси-функции: Microsoft Proxy Server, WinGate, WinProxy, Proxy+, DeleGate, FreeProxy и др. Однако большинство из них либо не бесплатны, либо примитивны, либо недостаточно освещены в русскоязычной документации.
Рекомендую установить бесплатный прокси-сервер ESPS (Extra Systems Proxy Server ). Домашняя страница программы - _http://www.esproxy.org.ua - по этому адресу можно найти документацию по конфигурированию (некоторые вопросы администрирования ESPS лучше освещены на странице, посвященной предыдущей версии программы - www.esps.org.ua). Также на news-сервере _news://news.extrasystems-freeware.org.ua открыта группа новостей software.esps для обсуждения данного продукта. Этот прокси-сервер, несмотря на бесплатность, обладает возможностями гибкой настройки, будучи при этом весьма простым в установке. Он нормально пропускает HTTP и HTTPS и умеет осуществлять маршрутизацию портов. Недостатком программы является то, что FTP-доступ пока что поддерживаетcя только через файл-менеджеры (типа FAR) и не поддерживается через браузеры.
Скачаем последнюю версию программы (4.01- июль 2003 года) с _http://ln.com.ua/~vendor/progs/ESPSRV.EXE . Программа может работать под любой версией Windows - включая линейки 9х и NT, однако авторы рекомендуют не использовать ее под 9х. Наилучшая платформа - NT, 2000 или ХР, и дальнейшее изложение предполагает, что вы импользуете именно ее. Кроме того, для повышения быстродействия, создатели программы советуют не использовать сервер как обычный клиентский компьютер. Рекомендуется также размещать каталоги кеша на дисках NTFS, а не FAT и не забывать переодически делать дефрагментацию диска.
Запустим загруженный файл из командной строки с параметром INSTALL:
Пуск->Выполнить->Путь/к/файлу/Espsrv.exe /INSTALL
После этого исполнимый файл программы копируется в системный каталог WINDOWS (напр., C:WINNT или D:WINDOWS) и программа регистрируется в системе как сервис с именем ES Proxy. Вы должны увидеть его, если заглянете в Control panel [->Administrative tools ] -> Services. Обратите внимание на то, что тотчас после инсталляции сервис регистрируется, но НЕ запускается, поэтому вам нужно самостоятельно открыть окно "Services" Панели управления, щелкнуть правой кнопкой на ES Proxy и выбрать "Start". Если вы не желаете этого делать, можете попросту перезагрузить компьютер, ибо ESPS по умолчанию устанавливается так, чтобы запускаться при каждом старте системы.
Кроме того, следует запомнить, что после любого изменения в конфигурации необходимо перезапустить сервис для того, чтобы изменения вступили в силу - для этого надобно опять-таки открыть окно "Services", найти ES Proxy, и выбрать "Restart".
В момент первого запуска программа создает в системном каталоге Windows (напр., C:WINNT или D:WINDOWS) файл esps40.ini Этот файл является основой настройки сервера. Специфика программы ESPS заключается в том, что ее конфигурирование происходит в стиле UNIX - через редактирование текстовых файлов (тогда как большинство Windows-программ настраиваются посредством диалоговых окон). Это одна из причин того, что программа при столь продвинутой функциональности имеет столь малый размер (всего 100 Кбайт (!)).
По ходу работы программа создаст в том же каталоге файлы с именами типа esps4_*.dat - обратите внимание, что расширение указывает на то, что файлы двоичные, т.е. не предназначены для того, чтобы в них что-либо изменять вручную. Поэтому не обращайте внимания на эти файлы.
Теперь приступим к конфигурированию. Отредактируем вышеупомянутый файл esps40.ini в каталоге WINDOWS. Как и любой ini-файл, он делится на секции, названия которых проставлены в квадратных скобках. Секции состоят из пар "параметр-значение", разделенных знаком равенства. Создадим простейшую рабочую конфигурацию ESPS. Для этого отредактируем и добавим некоторые параметры в секциях [Connect], [Cache] и [Routers] (см. листинг). Все прочие параметры оставим как есть.
(листинг esps40.ini):
...
[Connect]
Enable=1 ; разрешить https-соединения
...
[Cache]
Enable=1 ; включить кеширование
Path=F:PROXY_CACHE ; путь к каталогам кеша
...
[Routers]
Enable=1 ; разрешить перенаправление портов
List File Name=D:WINDOWSesps4_routers.txt ; путь к файлу настройки портов
Обратите внимание, что после того, как вы установите Enable=1 в секции [Cache] и первый раз перезапустите сервер, будут созданы каталоги кеша (компьютер в это время может немного притормаживать). По умолчанию каталоги кеша будут созданы в каталоге каталоге "WINDOWSESPS4 Cache", поэтому перед перезапуском сервера проверьте наличие свободного пространства на системном разделе, так как создается 65536 вложенных каталогов, которые, даже будучи пустыми, занимают полгигабайта. Если же вы хотите, чтобы директории кеша были созданы в другом месте, вам следует явно указать путь к ним в [Cache]-секции ini-файла, напр., Path=F:ESPS_CACHE (cм. листинг).
Кроме файла esps40.ini, следует отредактировать файл настройки пользователей. Путь к нему можно найти в секции [Users] файла esps40.ini (см. параметр "Groups File"). У меня этот файл лежит в D:WINDOWSesps4_users_list.txt. Создадим файл с таким именем, откроем его в редакторе и пропишем настройки для групп пользователей, например:
(листинг esps4_users_list.txt)
;-
GROUP : Administrators : ; название группы
USER : 192.168.1.1 : 255.255.255.255 : ; адреса компьютеров, относящейся к этой
; группе
USER : 192.168.1.144 : 255.255.255.255 :
Show Statistics : 1 : ;разрешить просмотр статистики сервера
Enable Https Port : 443 : ; разрешить https-соединения членам группы
Enable Route Port : 110 : ; открыть доступ к перенаправлению портов
Enable Route Port : 127 :
Disable URL : *banner*.gif : ; запретить доступ к некоторым URL
Disable URL : *porn* :
Disable URL : *sex* :
;-
GROUP : Users :
USER : 192.168.1.0 : 255.255.255.0 :
Enable Route Port : 25 :
Enable Route Port : 110 :
Enable Route Port : 127 :
Disable URL : *banner*.gif :
Disable URL : *porn* :
Disable URL : *sex* :
В этом файле создано всего 2 группы (при желании, вы можете сделать и больше). Принадлежность компьютера к группе определяется его IP-адресом через команду USER. Причем если второй параметр команды USER (маска подсети) задана как 255.255.255.255, то это означает, что данной командой к группе приписывается ОДИН компьютер с указанным адресом. Если же маска определяется по-другому (напр., 255.255.255.0), то к группе приписывается целая группа компьютеров, находящаяся в указанной сети. Например, команда "USER : 192.168.1.0 : 255.255.255.0 :" приписывает к группе все компьютеры с адресами 192.168.1.ххх (не забудьте заменить это на ВАШИ адреса).
Командой "Disable URL" мы можем запретить обращение ко всем адресам, соответстующим определенной маске. В нашем примере мы запретили все URL, содержащие в себе слова "porn" и "sex", а также содержащие слово "banner" и заканчивающиеся на ".gif" Например, если на странице, просматриваемой пользователем, будет картинка с адресом _http://reklamka22.ru/cgi/banner/qw.gif, то она не будет загружена.
Теперь, когда мы внесли и сохранили изменения в файлах esps40.ini и esps4_users_list.txt, перезапустим сервис ESPS (через Control Panel - Services). После этого можно пробовать настраивать броузеры на клиентских компьютерах для выхода в интернет через созданный нами proxy через 3128-й порт (как это делается, см. ниже).
При необходимости с помощью ESPS можно настроить маршрутизацию портов. Эта задача может возникнуть, например, тогда, когда клиентам в нашей локальной сети понадобится снимать почту с внешних POP3-серверов. Например, некоторые пользователи имеют почтовые аккаунты на сервере pop3.rambler.ru, другие - на сервере ns.ampersand.cv.ua. Пользователи хотят получать входящую почту с этих серверов прямо в своих почтовых клиентах (Outlook, The Bat и др.). Чтобы осуществить эту задачу, создадим файл D:WINDOWSesps4_routers.txt и напишем в нем следующее:
(Листинг esps4_routers.txt)
;-
ROUTER : POP3-Почта сервера на дружественном сервере :
Remote Server : ns.ampersand.cv.ua : ; имя сервера
Remote Port : 110 : ; порт доступа на удаленном сервере
Local Port : 110 : ; порт, открываемый для этого сервиса на локальной машине
;-
ROUTER : Почта POP3 на Рамблере :
Remote Server : pop3.rambler.ru :
Remote Port : 110 :
Local Port : 127 :
Как видим, Remote Port в обоих случаях мы прописываем 110-й, ибо именно этот порт по умолчанию отвечает за POP3-соединения. Что касается локального порта (Local Port), то он обязательно для каждого ROUTER"а должен быть разным, ибо этой командой мы открываем порт на нашем сервере (т.е., на компьютере, где выполняется ESPS). Поэтому в первом случае мы написали 110, а во втором - 127 (это совершенно произвольные числа - но нужно, чтобы эти порты не были уже заняты). Далее необходимо внести изменения в esps4_users_list.txt, разрешив пользователям (через Enable Route Port) пользоваться 110-м и 127-м портами (см. листинг esps4_users_list.txt). Сохранив изменения в обоих файлах, перезапустим сервис ESPS и будем настраивать почтовых клиентов. Самое главное в настройке клиентов - не забыть установить номер порта POP3 в то значение, которое необходимо для маршрутизации на нужный сервер. Т.е., в нашем примере в случае маршрутизации на Рамблер в почтовом клиенте необходимо изменить номер порта POP3 на 127, а адресом POP3-сервера прописать машину с ESPS (192.168.1.144).
Разумеется, вышеописанная операция возможна не только с серверами POP3 и 110-м портом. Например, подобным образом пользователи могут воспользоваться внешними SMTP-серверами по 25-ому порту.
Группы пользователей, которым в конфигурационном файле esps4_users_list.txt разрешен просмотр статистики (Show Statistics установлено в 1 ), могут просмотреть ее, набрав _http://192.168.1.144/ESPS/MainServerStatus в окне браузера, подключающегося через данный прокси сервер. Разумеется, 192.168.1.144 в указанном примере следует заменить на адрес прокси-сервера в вашей сети. Страница статистики представляет собой таблицу, в которой некоторые числовые значения являются ссылками на другие страницы статистики. Наиболее интересна ссылка, стоящая в строке "Зарегистрировано клиентов" - она ведет на страницу учета траффика - т.е., сколько мегабайт выкачано каждым из клиентов за определенный период.
Разумеется, все нюансы работы ESPS выходят за рамки этой статьи. Внимательно почитав цитированные выше сайты с документацией, вы можете узнать о возможностях тонкой настройки сервера, например , как установить лимит трафика для клиентов; как заставить ESPS вести протокол (лог) всех операций; как настроить различные правила кеширования для определенных URL (напр., не закачивать *.zip файлы больше 100 Мб и т.п.); как ограничить некоторым клиентам скорость доступа в Интернет и др.
Глава 2. НАСТРОЙКА ПРОКСИ-СЕРВЕРА SQUID ПОД UNIX
В операционных системах семейства UNIX бесспорным лидером является прокси-сервер squid (http://www.squid-cache.org/ - там есть подробная документация на английском). Русский перевод FAQ по squid доступен по адресу _http://www.linux.org.ru/books/Squid-faq.html (к сожалению, это перевод не последней версии FAQ - поэтому в английский вариант тоже нужно заглядывать).
Перед тем, как скачивать и инсталлировать squid убедимся, не установлен ли он уже у нас (для этого можно воспользоваться командой "which squid" либо "find / -name squid -type f -print" - последнее дольше, но надежнее ). Если эти команды дали непустой результат, то значит, squid у вас уже установлен. В этом случае, памятуя лозунг врачей "не навреди", лучше пропустить данный абзац и перейти сразу к конфигурированию. Скачаем последнюю стабильную версию 2.5 с ftp://squid.nlanr.net/pub/squid-2/STABLE/squid-2.5.STABLE4.tar.gz, и сохраним файл squid-2.5.STABLE4.tar.gz в каталоге /tmp. Перейдем в этот каталог и распакуем архив:
gzip -dc squid-2.5.STABLE4.tar.gz | tar xvf -
Перейдем в появившийся каталог squid-2.5.STABLE4 и выполним компиляцию и установку (это может занять некоторое время):
./configure; make all ; make install
После выполнения этих команд squid будет проинсталлирован в /usr/local/squid, однако надобно еще создать каталог, в котором squid будет хранить свой кеш и назначить владельцем каталога squid пользователя nobody (т.к. по умолчанию squid выполняется с правами nobody):
mkdir /usr/local/squid/var/cache
chown -R nobody /usr/local/squid
После чего можно приступать к конфигурированию.
_Конфигурирование_ squid заключается в редактировании файла squid.conf, который будет находится в директории /usr/local/squid/etc/squid.conf (если же squid был проинсталлирован из rpm, то он может оказаться в каталоге /etc/squid). Следует помнить, что после каждого изменения в этом файле необходимо заставить squid перечитать свои конфигурационные файлы, что можно сделать, в зависимости от вашего UNIX'a и формы инсталляции squid, либо послав ему сигнал HUP (killall -HUP squid) либо просто через "service squid reload".
Сразу же после инсталляции squid.conf будет содержать в себе значения по умолчанию (на случай, если вы захотите вернуться к этому варианту файла, в том же каталоге лежит squid.conf.default. В этом же файле можно познакомится с огромным количеством возможных директив конфигурации).
Однако файл squid.conf, устанавливающийся по умолчанию, имеет очень большой размер из-за множества закоментированных строк (т.е., строк, начинающихся на #). Чтобы получить тот же файл без коментариев, можно выполнить команду:
grep . squid.conf.default | grep -v '^#' > squid.conf
после чего файл squid.conf будет состоять всего из нескольких строк, в которых уже не так трудно разобраться.
Я рекомендую для начала следующую простейшую конфигурацию. В дальнейшем при желании вы можете подстраивать squid под свои нужды:
(Листинг squid.conf)
acl all src 0.0.0.0/0.0.0.0 #Все возможные IP адреса
acl localhost src 127.0.0.1/255.255.255.255 # loopback-интерфейс (127.0.0.1)
acl mynetwork src 192.168.1.0/255.255.255.0 # Адреса локальной сети (192.168.1.ххх)
acl SSL_ports port 443 # Порт безопасного http-соединения(https)
acl Safe_ports port 80 21 443 1025-65535 # Все разрешаемые порты
acl CONNECT method CONNECT # ACL для метода CONNECT
#(применяется в https)
#ACL для страниц, которые мы хотим запретить
acl Banners url_regex -i porn
acl Banners url_regex -i sex
acl Banners url_regex -i banner.*.gif$
http_access deny Banners #Не загружать URL, подпадающие под acl Banners
http_access deny !Safe_ports #Запрещать все порты, кроме acl Safe_ports
http_access deny CONNECT !SSL_ports #Запрещать для метода CONNECT все порты, кроме # SSL_ports
http_access allow mynetwork # Дать доступ адресам типа 192.168.1.ххх , т. е.
# acl mynetwork
http_access allow localhost #Дать доступ адресу 127.0.0.1 (acl localhost)
http_access deny all # Всем остальным доступ закрыть (acl all)
Данная конфигурация разрешает для локальной сети (192.168.1.ххх) и для адреса 127.0.0.1 подключения по http, https и ftp, но запрещает доступ к URL, содержащим слова porn, sex, а также содержащие слово banner и заканчивающиеся на ".gif".
Сначала в файле перечисляются acl - Access Control Lists - т.е., списки контроля доступа, которые могут относиться и к IP-адресам клиентов, и к портам доступа, и к запрашиваемым URL. В последнем случае используются регулярные выражения (например, "banner.*.gif$"), с помощью которых можно формировать сложные шаблоны запрашиваемых документов. Регулярные выражения - отдельная и непростая тема, однако всем системным администраторам UNIX рекомедую изучить основы учения о них, ибо это мощнейший инструмент.
После acl перечисляются правила доступа (http_access) с директивой резрешения/запрещения (allow/deny) и со ссылкой на соответствующий acl.
После первичной настройки файла squid.conf необходимо стартовать сервер.
Однако перед первым запуском необходимо создать директории кеша, запустив исполнимый файл squid с аргументом "-z":
/usr/local/squid/sbin/squid -z
Теперь можно запускать программу:
/usr/local/squid/sbin/squid -D либо просто service squid start (и не забудем прописать это в одном из стартовых скриптов, чтобы squid запускался при каждой перезагрузке системы).
После этого squid будет слушать свой 3128-й порт и отвечать на запросы.
(Примечание : Разумеется, для того, чтобы все это работало, правила нашего брандмауэра должны разрешать входящие подключения на порт 3128 для адресов нашей локальной сети, а также исходящие запросы в Интернет на 80, 443, 20, 21, 53-й порты с той машины, на которой происталлирован squid)
По умолчанию squid ведет протокол всех операций, log-файлы при этом находятся в каталоге /usr/local/squid/var/logs ( либо /var/log/squid ). Анализируя простеньким скриптом файл access.log из этого каталога можно организовать учет трафика по клиентам. Однако необходимо следить за тем, чтобы лог-файлы не переполняли диск.
Обратите внимание, что squid - это сложная в настройке, но очень мощная программа, способная выполнить почти всякую мыслимую в пределах компетенции прокси-сервера задачу. Например, его можно настроить так, что он будет пускать пользователей в интернет только после ввода пароля; можно научить squid пользоваться кешем других прокси-серверов (например, сервера вашего провайдера); может он и ограничивать скорость доступа в интернет определенным пользователям; может применяться squid и для кеширования исходящего веб-трафика, тем самым ускоряя и разгружая веб-сервер и выполнять множество других задач.
НАСТРОЙКА КЛИЕНТОВ
Пусть адрес proxy-сервера - 192.168.1.144. После конфигурирования и запуска proxy-сервера, необходимо настроить браузеры на клиентских компьютерах с адресами 192.168.1.ххх. Для Internet Explorer:
меню Tools - Internet options - закладка Connections - кнопка LAN settings... - поставить флажок Use a proxy server... - написать IP-адрес (192.16.1.144) и порт (3128) нашего прокси-сервера . При желании можно нажать кнопку Advanced и осуществить более тонкую настройку.
Для Opera:
меню File - Preferences - Network - кнопка Proxy servers... - поставить флажки HTTP, HTTPS и FTP, написав адрес и указав порт прокси-сервера (см. скриншот)
Настройка прочих браузеров осуществляется аналогично.
Разумеется, не только браузеры могут выходить в Интернет через прокси. Например, если прокси-сервер является единственными воротами в Интернет, то даже ICQ на клиентских компьютерах можно заставить выходить в онлайн через прокси. Для этого прокси-сервер должен пропускать https, а в ICQ надо щелкнуть Main - Preferences - Connections - закладка Servers - выбрать Using firewall, Using proxy, в выпадающем списке выбрать HTTPS. В строке host должно быть login.icq.com , а в строке port - 443. После этого щелкнуть на закладке firewall окна Preferences, выбрать в списке HTTPS, написать IP-адрес и порт нашего proxy-сервера.
ЗАМЕЧАНИЕ
В случае выхода в Интернет через прокси-сервер может возникнуть следующая проблема. Случается, что нам нужно зайти на определенный сайт, требующий авторизации, сначала под одним, затем под другим логином и паролем. Некоторые сайты работают так, что, в случае использования прокси-сервера, при втором и последующем входах будут все же воспринимать вас как "первого" пользователя. Бывает также, что на сайтах с быстро меняющейся информацией, даже после нажатия кнопки "Обновить" мы видим старую, "кешированную" версию страницы. Если вы столкнетесь с подобной проблемой, ее можно решить прямо на клиентской машине, указав в свойствах подключения браузера, что необходимо "миновать" прокси-сервер для определенных адресов. Но, разумеется, для этого необходимо, чтобы клиентский компьютер имел не только "прокси-выход" в интернет. Другим возможным решением проблемы может быть запрет на кеширование подобных страниц в конфигурации самого прокси-сервера.