Squid
Squid - популярный прокси сервер, имеющийся во многих дистрибутивах Unix (Linux) систем, а также для Windows.
Содержание
Установка
- Проверяем, установлен ли squid.
# dpkg -la | grep squid
или
# rpm -qa | grep squid
- Если не установлен, то устанавливаем:
# apt-get install squid3
Настройка
Базовая настройка
- Вносим изменения в конфигурационный файл /etc/squid3/squid.conf:
Прокси сервер будет отвечать только на запросы из локальной сети и компьютера, где установлен:
http_port 10.0.0.2:3128 http_port 127.0.0.1:3128
Squid позволяет обмениваться закэшированной информацией с другими сервермами, если не будем устанавливать их у себя, то отключаем эту возможность (по умолчанию squid прослушивает для этого порт 3130):
icp_port 0
Отводим под кэш 9 Гб, 32 и 256 это 1-й и 2-й уровни каталогов для хранения кэша.
cache_dir ufs /var/spool/squid3/ 9000 32 256
Для безопасности ограничим количество портов, которые будет обрабатывать наш прокси сервер. Для этого правилах acl Safe_ports port закомментируем всё кроме
- 80 - соединение по http,
- 21 - соединение по ftp,
- 443 - соединение по https
После заголовка # INSERT YOUR OWN RULE(S) HERE TO ALLOW: можно вставить правила на ограничения доступа к сервису ICQ и нежелательным сайтам:
acl pool_icq src '/etc/squid3/icq.txt' acl icq dstdomain .icq.com http_access allow pool_icq icq http_access deny icq acl pool_blacklist dstdomain '/etc/squid3/blacklist.txt' http_access deny pool_blacklist
Здесь же можно указать запрет на загрузку mp3, avi и др. мультимедиа файлов:
acl music urlpath_regex -i \.mp3 \.wav \.ogg \.avi \.mpg \.mpeg \.wmf http_access deny music
Указываем кому писать если есть проблемы
cache_mgr user@domain.ru
Задаём размер оперативной памяти, в которой squid будет хранить часть кэша. Параметр зависит от общего объёма оперативной памяти и загруженности сервера остальными задачами. Squid по умолчанию ставит 5 MB.
memory_pools_limit 100 MB
Статистику по клиентам будем собирать внешней программой, т.ч. здесь выключим
client_db off
Сообщения об ошибках показывать на русском языке
error_directory /usr/share/squid3/errors/Russian-koi8-r
- В /etc/squid3/ создаём файлы:
- icq.txt - пользователи, кому разрешено использовать эту службу
- blacklist.txt - список запрещённых для пользователя сайтов, можно указывать как IP адреса так и DNS имена (к сожалению одно другое не заменяет, т.е. если IP занесён, а имя нет, то по последнему можно будет получить доступ к странице). Список можно взять либо где-нибудь в интернете (забыл, где брал, но таких мест несколько), либо здесь.
- Создаём кэш сквида:
# /usr/sbin/squid3 -z
- Запускаем:
# /etc/init.d/squid3 start
- Всё. Прокси-сервер работает. Проверяем с клиентской машины.
Объединение нескольких Squid
Чтобы объединить несколько проски-серверов squid для обмена кэшами между собой, нужно в squid.conf на каждом из них указать соседей:
[[Медиа:Example.ogg]] icp_port 3130 cache_peer 10.0.0.2 sibling 3128 3130 cache_peer 10.0.0.3 sibling 3128 3130
Если мы хотем завернуть весь трафик на соседний прокси, т.е. заставить наш прокси 10.0.0.1 выходить в Интернет только через соседний прокси-сервер 10.0.0.2, то в squid.conf прописываем:
icp_port 3130 cache_peer 10.0.0.2 parent 3128 3130 never_direct allow all
и на 10.0.0.2 даём доступ для 10.0.0.1. Теперь все пользователи, подключенные к 10.0.0.1 будут выходить в Интернет через прокси 10.0.0.2 как один большой пользователь.
Параметр never_direct иногда нужно закомментировать.
Разрешаем доступ по определённому порту
Чтобы позволить клиентам подключаться через прокси сервер к серверам в Интеренет по определённому порту, скажем 3900 и 3901, добавляем в /etc/squid3/squid.conf правило:
acl Special_ports port 3900 3901 ... http_access deny CONNECT ... !Special_ports
Квотирование доступа
Для квотирования и управления доступом пользователей существует несколько проектов:
Прозрачный прокси
Включив режим прозрачного прокси сервера, мы избавим пользователей от необходимости настраивать свои интернет-обозреватели на наш прокси. Клиенты будут думать, что идут в Интернет напрямую. Файрвол (через правила NAT) будет перенаправлять все запросы отправляемые в Интернет на 80 порт squid'у. Запросы к веб серверам локальной сети (10.0.0.0/8) перенаправлять не будет, они пойдут по правилам маршрутизации.
Настройка Squid. В squid.conf к параметру http_port нужно добавить параметр transparent. Например так:
http_port 10.0.0.1:3128 transparent
Настройка iptables. Добавим правило для NAT:
iptables -t nat -A PREROUTING -s 10.0.0.0/8 -d ! 10.0.0.0/8 -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
В этом правиле подразумевается, что Squid установлен на том же сервере, что выполняет роль шлюза.
Очистка кэша
Создание структуры каталогов:
squid -z
Для squid 3 это может быть:
squid3 -z
Удаление файлов:
find /var/spool/squid -type f -exec rm {} \;
Журналы (ротация, вид)
- По умолчанию Squid хранит журналы в /var/log/squid3 (для версии до 3 в /var/log/squid) в формате
Time Elapsed Host Status/HTTP Size Method URL Ident Hier_Status/Hier_Host Content_Type
- Изменить представление даты и времени из юниксового в человеческий можно в /usr/local/squid/etc/squid.conf указав:
emulate_httpd_log on
Если позже решим использовать Calamaris или Sarg, то нужно вернуть родной для squid формат журнала, выключив эту опцию.
- Посмотреть и изменить можно в /etc/logrotate.d/squid3. Для примера, настроим ротацию на ежедневную, сделаем 6 архивных файлов, для access.log уберём компрессию, а для cache.log и store.log оставим:
/var/log/squid3/access.log { daily rotate 6 copytruncate nocompress notifempty missingok } /var/log/squid3/cache.log { daily rotate 6 copytruncate compress notifempty missingok } /var/log/squid3/store.log { daily rotate 6 copytruncate compress notifempty missingok postrotate /usr/sbin/squid3 -k rotate endscript }
Работа над ошибками
Потеря прав
Если squid перестал работать, а в журнале появились записи:
(squid): storeUfsDirOpenSwapLog: Failed to open swap log. squid[8293]: Squid Parent: child process 8317 exited due to signal 6 squid[8293]: Exiting due to repeated, frequent failures
значит squid потерял доступ к каталогу со своим кэшем. Проверить это можно установив полный доступ к каталогу. Предварительно запомним кому он принадлежит и с какими правами:
# chmod 777 /var/spool/squid
Если после этого squid запустился нормально, то стоит выяснить почему он потерял свои права.
См. также
Статистика прокси сервера Squid
Ссылки
Довольно подробно на русском про журналы можно почитать на http://www.bog.pp.ru/work/squid.html#logs