Squid

Материал из СисадминВики (SysadminWiki.ru)
Перейти к: навигация, поиск

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