Наши партнеры

UnixForum





Библиотека сайта 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