Библиотека сайта rus-linux.net
Серверы Linux. Часть I. Серверы Apache и Squid
Оригинал: Introduction to squidАвтор: Paul Cobbaut
Дата публикации: 24 мая 2015 г.
Перевод: А.Панин
Дата перевода: 11 июля 2015 г.
Глава 2. Знакомство с прокси-сервером Squid
2.1. Информация о прокси-серверах
2.1.1. Область применения
Прокси-сервером
называется сервер, предназначенный для кэширования данных, получаемых из сети Интернет. Клиент соединяется с прокси-сервером и передает ему запрос, который должен быть отправлены серверу из сети Интернет. После этого прокси-сервер соединяется с сервером из сети Интернет и передает ему запрос от имени клиента. При этом прокси-сервер осуществляет кэширование страниц, полученных от сервера из сети Интернет. Благодаря данной функции прокси-сервер может передавать клиенту копии страниц из своего кэша, а не соединяться с сервером из сети Интернет для получения (этих же) страниц.
Прокси-сервер имеет два полезных свойства. Во-первых, он повышает скорость веб-серфинга при возвращении клиентам кэшированных копий данных, а во-вторых, он уменьшает необходимую пропускную способность (цену) соединения с сетью Интернет.
Небольшие организации иногда размещают прокси-сервер на физическом компьютере, который уже используется в качестве сервера преобразования сетевых адресов (NAT) для доступа к ресурсам сети Интернет. В больших организациях прокси-сервер является одним из серверов, размещенных в демилитаризованной зоне сети (DMZ).
При использовании прокси-сервера для обработки всего веб-трафика обычной практикой является дополнительная настройка этого сервера для управления доступом к определенным ресурсам. Под управлением доступом в случае прокси-сервера могут подразумеваться ограничения доступа, которые могут распространяться как на учетные записи пользователей, так и на отдельные веб-сайты (идентифицируемые в помощью строк URL), IP-адреса ресурсов или механизм разрешения доменных имен.
2.1.2. Общедоступные прокси-серверы
При работе в сети Интернет вы можете столкнуться со списками общедоступных прокси-серверов, которые позволяют заниматься анонимным веб-серфингом. При использовании прокси-сервера из такого списка веб-серфинг будет действительно анонимным лишь в том случае, если прокси-сервер будет соединяться с веб-сайтом от вашего имени без записи в файл журнала вашего IP-адреса. Будьте осторожны, ведь эти общедоступные прокси-серверы (из списков) могут быть созданы и для слежки за действиями пользователей.
2.1.3. Прокси-сервер Squid
В данной главе будет обсуждаться прокси-сервер Squid
(http://www.squid-cache.org). В первую очередь будет описан процесс настройки Squid для работы в режиме обычного прокси-сервера.
2.2. Установка прокси-сервера Squid
В примере ниже показана методика установки прокси-сервера Squid с помощью утилиты aptitude
в дистрибутиве Debian. Используйте утилиту yum
для установки одноименного пакета программного обеспечения в том случае, если вы работаете с дистрибутивом Red Hat/CentOS.
root@debian7:~# aptitude install squid НОВЫЕ пакеты, которые будут установлены: squid squid-common{a} squid-langpack{a} обновлено 0, установлено 3 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено. Необходимо скачать 1,513 kБ архивов. После данной операции, объём занятого дискового пространства возрастёт на 4,540 kБ. Хотите продолжить [Д/н]? ...вывод сокращен... Setting up squid-langpack (20120616-1) ... Setting up squid-common (2.7.STABLE9-4.1) ... Setting up squid (2.7.STABLE9-4.1) ... Creating squid spool directory structure 2014/08/01 15:19:31| Creating Swap Directories Restarting Squid HTTP proxy: squid.
Главным конфигурационным файлом прокси-сервера Squid
является файл /etc/squid/squid.conf
. В данном файле имеются подробные описания каждого из параметров.
root@debian7:~# wc -l /etc/squid/squid.conf 4948 /etc/squid/squid.conf
2.3. Порт 3128
По умолчанию прокси-сервер Squid
будет принимать соединения на порту 3128
.
root@debian7:~# grep ^http_port /etc/squid/squid.conf http_port 3128 root@debian7:~#
2.4. Запуск и остановка службы прокси-сервера
Вы можете изменять состояние службы squid
с помощью стандартной утилиты service
таким же образом, как показано в данном примере.
root@debian7:~# service squid start Starting Squid HTTP proxy: squid. root@debian7:~# service squid restart Restarting Squid HTTP proxy: squid. root@debian7:~# service squid status squid is running. root@debian7:~# service squid stop Stopping Squid HTTP proxy: squid. root@debian7:~#
2.5. Ввод параметров доступа к прокси-серверу на стороне клиента
Для активации режима доступа к сети посредством прокси-сервера в веб-браузере Firefox
или Iceweasel
следует выбрать пункты меню окна "Правка - Настройки"
и ввести параметры доступа к прокси-серверу таким же образом, как показано на рисунке ниже (замените IP-адрес 192.168.1.60 на IP-адрес машины с прокси-сервером).
Проверьте работоспособность соединения с сетью Интернет при использовании прокси-сервера. Также проведите повторную проверку работоспособности соединения после исполнения команды service squid stop
на машине с установленным прокси-сервером, в результате чего веб-браузер должен вывести сообщение, аналогичное представленному на рисунке ниже.
Для активации режима доступа к сети посредством прокси-сервера в веб-браузере Google Chrome (или Chromium в дистрибутиве Debian) запустите веб-браузер из терминала с помощью аналогичной команды:
paul@debian7:~$ chromium --proxy-server='192.168.1.60:3128'
Остановка службы прокси-сервера с помощью команды service squid stop
должна привести к выводу сообщения об ошибке, аналогичного представленному на рисунке ниже.
2.6. Переворот изображений
Прокси-сервер выступает посредником между вашим браузером и серверами из сети Интернет. Исходя из этого, помимо кэширования данных (что является основной задачей прокси-сервера), а также фильтрации веб-трафика по аналогии с межсетевым экраном, прокси-сервер отлично подходит для модификации содержимого посещаемых вами веб-страниц.
Например, на уровне прокси-сервера вы можете заменить рекламные баннеры на веб-странице (а также удалить некоторые из них) или же, как в примере ниже, модифицировать все изображения на веб-странице, перевернув их.
Для модификации изображений серверу потребуются утилиты с интерфейсом командной строки, а также сценарий на языке Perl, который использует эти утилиты (кроме того, понадобится утилита wget
для загрузки изображений на сервер и предоставления доступа к ним посредством веб-сервера Apache 2
). В данном примере мы будем использовать инструменты из пакета imagemagic
(такие, как утилиты convert
и mogrify
).
root@debian7:~# aptitude install imagemagick wget perl apache2 ...вывод сокращен... root@debian7:~# dpkg -S $(readlink -f $(which mogrify)) imagemagick: /usr/bin/mogrify.im6 root@debian7:~#
Приведенный в примере ниже сценарий на языке Perl размещен на множестве веб-сайтов, но мне так и не удалось найти информацию о его авторе. Данный сценарий является достаточно простым и использует утилиты wget
и mogrify
для загрузки изображений (с расширениями .jpg, .gif и .png), их переворота и сохранения результирующих изображений в директории /var/www/images
.
root@debian7:~# cat /usr/local/bin/flip.pl #!/usr/bin/perl $|=1; $count = 0; $pid = $$; while (<>) { chomp $_; if ($_ =~ /(.*\.jpg)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.jpg", "$url"); system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.jpg"); print "http://127.0.0.1/images/$pid-$count.jpg\n"; } elsif ($_ =~ /(.*\.gif)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.gif", "$url"); system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.gif"); print "http://127.0.0.1/images/$pid-$count.gif\n"; } elsif ($_ =~ /(.*\.png)/i) { $url = $1; system("/usr/bin/wget", "-q", "-O","/var/www/images/$pid-$count.png", "$url"); system("/usr/bin/mogrify", "-flip","/var/www/images/$pid-$count.png"); print "http://127.0.0.1/images/$pid-$count.png\n"; } else { print "$_\n";; } $count++; }
Также следует изменить (или раскомментировать) следующую строку в файле конфигурации прокси-сервера /etc/squid/squid.conf
.
http_access allow localnet http_port 3128 transparent url_rwwrite_program /usr/local/bin/flip.pl
Данный сценарий использует директорию /var/www/images
, которая должна быть доступна для записи как для прокси-сервера Squid
(который использует учетную запись пользователя proxy
), так и для веб-сервера Apache 2
(который использует учетную запись пользователя www-data
). В примере ниже показаны команды, предназначенные для создания данной директории, установки прав доступа к ее содержимому и добавления используемых упомянутыми серверами учетных записей пользователей в соответствующие группы пользователей.
root@debian7:~# mkdir /var/www/images root@debian7:~# chown www-data:www-data /var/www/images root@debian7:~# chmod 755 /var/www/images root@debian7:~# usermod -aG www-data proxy root@debian7:~# usermod -aG proxy www-data
Проверьте работоспособность сценария для поворота изображений после перезапуска службы прокси-сервера под названием squid
и службы веб-сервера под названием apache2
.
2.7. Директория для хранения файлов журналов /var/log/squid
По умолчанию файлы журнала прокси-сервера Squid хранятся в директории /var/log/squid
.
[root@RHEL4 ~]# grep "/var/log" /etc/squid/squid.conf # cache_access_log /var/log/squid/access.log # cache_log /var/log/squid/cache.log # cache_store_log /var/log/squid/store.log
2.8. Управление доступом
При использовании стандартных настроек прокси-сервер Squid принимает соединения исключительно с локального узла. Для разрешения доступа с машин, имеющих IP-адреса из диапазона адресов частной сети следует найти в файле конфигурации squid.conf
предложение "INSERT YOUR OWN RULE(S) HERE..." и добавить после него две строки, аналогичные приведенным в примере ниже.
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS acl company_network src 192.168.1.0/24 http_access allow company_network
2.9. Тестирование прокси-сервера Squid
В первую очередь следует убедиться в том, что прокси-сервер функционирует и имеет доступ к сети Интернет.
[root@RHEL4 ~]# wget -q http://linux-training.be/index.html [root@RHEL4 ~]# ls -l index.html -rw-r--r-- 1 root root 2269 сен 18 13:18 index.html [root@RHEL4 ~]#
После этого следует настроить веб-браузер на клиентской машине для работы с сетью посредством прокси-сервера или установить в качестве значения переменной окружения HTTP_PROXY
(иногда вместо этой переменной окружения используется переменная http_proxy
) адрес прокси-сервера для передачи этого адреса программам с интерфейсом командной строки.
[root@fedora ~]# export HTTP_PROXY=http://192.168.1.39:8080 [root@ubuntu ~]# export http_proxy=http://192.168.1.39:8080
Тестирование работоспособности прокси-сервера со стороны клиентской машины может осуществляться с помощью утилиты wget
(команда wget -q
используется для упрощения примера).
[root@RHEL5 ~]# > /etc/resolv.conf [root@RHEL5 ~]# wget -q http://www.linux-training.be/index.html [root@RHEL5 ~]# ls -l index.html -rw-r--r-- 1 root root 2269 сен 18 2008 index.html [root@RHEL5 ~]#
2.10. Разрешение доменных имен
Несмотря на то, что вам потребуется работоспособный механизм разрешения доменных имен на уровне прокси-сервера Squid
, вы вполне сможете обойтись без данного механизма на уровне клиентских машин.
[paul@RHEL5 ~]$ wget http://grep.be --14:35:44-- http://grep.be Распознаётся grep.be... ошибка: Temporary failure in name resolution. [paul@RHEL5 ~]$ export http_proxy=http://192.168.1.39:8080 [paul@RHEL5 ~]$ wget http://grep.be --14:35:49-- http://grep.be/ Подключение к 192.168.1.39:8080... соединение установлено. Proxy-запрос отправлен. Ожидание ответа... 200 OK Длина: 5390 (5.3K) [text/html] Сохранение в: `index.html.1' 100%[================================>] 5,390 --.-K/s за 0.1s 14:38:29 (54.8 KB/s) - `index.html' сохранён [5390/5390] [paul@RHEL5 ~]$
Предыдущий раздел: | Оглавление | Следующий раздел: |
1.8. Диагностика веб-сервера Apache | Глава 3. Вводная информация о структурированном языке запросов SQL и сервере базы данных MySQL |