Установка и настройка squid. Установка и настройка прокси сервера SQUID на Ubuntu Server
Linux: Полное руководство Колисниченко Денис Николаевич
18.3. Настройка SQUID
18.3. Настройка SQUID
Сервер SQUID использует файл конфигурации squid.conf , который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID. Отредактируйте в этом файле следующие строки.
Укажите прокси-провайдера (тот сервер, который станет вашим «соседом» (neighbour, peer)):
cache_peer proxy.isp.ru
Установите объем памяти, разрешенный для кэша squid , в байтах, и каталог для дискового кэша:
cache_dir ufs /usr/local/squid/cache 1024 16 256
где 1024 - количество мегабайтов, отводимое под кэш в указанном каталоге. В этом каталоге будут храниться кэшированные файлы. Стоит ли говорить, что если у вас несколько жестких дисков, то кэш нужно разместить на самом быстром из них.
Укажите узлы, которым разрешен доступ к прокси-серверу:
acl allowed_hosts src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
Укажите разрешенные SSL-порты:
acl SSL_ports port 443 563
Запретите метод CONNECT для всех портов, кроме указанных в acl SSL_ports:
http_access deny CONNECT !SSL_ports
Запретите доступ всем, кроме тех, кому можно:
http_access allow localhost
http_access allow allowed_hosts
http_access allow SSL_ports http_access deny all
Пропишите пользователей, которым разрешено пользоваться SQUID (в рассматриваемом примере это den, admin и developer):
acl allowed_users user den admin developer
http_access allow allowed_users
http_access deny all
Тэги maximum_object_size и maximum_object устанавливают ограничения на размер передаваемых объектов.
Ниже приведен пример запрета доступа к любому URL, который соответствует шаблону games, и разрешения доступа ко всем остальным:
acl GaMS url_regex games
http_access deny GaMS
http_access allow all
Из книги Linux-сервер своими руками автора15 Прокси-сервер SQUID 15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг),
Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич15.1. Что такое SQUID? SQUID - это программа, которая получает HTTP/FTP-запросы клиентов и по ним обращается к ресурсам Интернет. Применение прокси-сервера (squid) дает возможность использовать фиктивные IP-адреса во внутренней сети (Masquerading - маскарадинг), увеличивает скорость
Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич15.2. Установка SQUID SQUID может быть установлен из исходных текстов или в виде RPM-пакета. Установка RPM-пакета SQUID очень проста - для этого нужно ввести команду rpm –ih squid-2.3.STABLE2-3mdk.i586.rpmЯ использую версию squid 2.3. Более новая версия доступна в виде исходных кодов. Исходники можно
Из книги автора15.4. Запуск SQUID Теперь, когда вы выполнили базовую настройку SQUID, его нужно запустить: /usr/local/squid/bin/squid –zПараметр –z необходим для создания (обнуления) каталога, содержащего кэш. Обычно этот параметр нужен только при первом запуске. Некоторые другие полезные параметры SQUID
Из книги автора15.5. Формат файла squid.conf В файле squid.conf задаются всевозможные параметры конфигурации прокси-сервера. Давайте рассмотрим их все по
Из книги автора17.1.5. Настройка Squid Установите пакет squid. Осталось настроить и запустить его. Для этого нужно отредактировать файл конфигурации /etc/squid/squid.conf. Сначала укажите адрес прокси провайдера: cach_peer proxy.your_isp.comЗадайте объем ОЗУ, который будет использовать прокси-сервером: cache_memВ том
Из книги автораГлава 18. Прокси-серверы SQUID и SOCKS 18.1. Что такое прокси-сервер? Прокси-сервер (сервер-посредник) - это программа, которая выполняет HTTP/FTP-запросы от имени клиентов. Применение прокси-сервера дает возможность использовать фиктивные IP-адреса во внутренней сети (IP-маскарадинг),
Из книги автора18.2. Установка SQUID Я использую версию squid 2.5. Пакет squid входит в состав современных дистрибутивов, а если его у вас почему-то нет, то скачать можно с www.squid-cache.org.При сборке SQUID из исходных кодов первым шагом должна быть команда# ./configure --prefix=/usr/local/squidSQUID будет установлен в каталог,
Из книги автора18.3. Настройка SQUID Сервер SQUID использует файл конфигурации squid.conf, который обычно располагается в каталоге /etc/squid (или /usr/local/squid/etc - более ранние версии). Подробнее на отдельных настройках мы остановимся чуть позже. А сейчас просто по шагам произведем настройку SQUID.
Из книги автора18.4. Запуск SQUID Первый раз squid нужно запускать с ключом -z, чтобы создать и очистить каталог кэша:# /usr/local/squid/bin/squid -zЕще несколько полезных ключей, с которыми можно запускать squid, перечислены в таблице 18.2.Ключи запуска squid Таблица 18.2 Ключ Назначение -а порт Задает
Из книги автора18.5. Расширенные настройки SQUID. Конфигурационный файл squid.conf 18.5.1. Параметры сети В файле squid.conf могут быть заданы следующие параметры сети:? http_port - порт для запросов клиентов. С этого порта прокси-сервер будет ожидать и обрабатывать запросы клиентов. Значение по умолчанию
Из книги автора18.8. Разделение канала с помощью SQUID Допустим, вам нужно настроить прокси-сервер таким образом, чтобы одна группа компьютеров работала в Интернете с одной скоростью, а другая - с другой. Это может потребоваться, например, для разграничения пользователей, которые
Из книги автора9.3. squid Как я уже сказал, самым распространенным прокси-сервером является squid. Этот сервер имеет достаточно длинную историю, и за время его существования в нем реализовано много возможностей. Еще не было ничего такого, что я не смог бы получить с помощью squid.Основной
Из книги автора9.4. Права доступа к squid Это самая больная тема для любого администратора. Да, и в squid тоже есть права доступа, и они также описываются в конфигурационном файле /etc/squid/squid.conf. Но мы рассматриваем права отдельно, потому что основной упор делаем на безопасность. Именно поэтому
Из книги автора9.5. Замечания по работе squid Сейчас нам предстоит немного поговорить о некоторых вопросах безопасности сервиса squid и дополнительных возможностях, которые могут ускорить работу в
Из книги автора12.5.4. Журнал прокси-сервера squid Основным журналом прокси-сервера squid является /var/log/squid/access.log. Это текстовый файл, в котором каждая строка состоит из следующих полей:? время начала соединения или события;? продолжительность сессии;? IP-адрес клиента;? результат обработки
Squid - это популярный прокси-сервер, который используется в основном для кэширования часто запрашиваемого веб-контента, чтобы уменьшить время отклика страниц, а также для фильтрации сетевого трафика. Он поддерживает множество различных протоколов таких как HTTP, FTP, TLS, SSL, Internet Gopher и HTTPS. А еще эта штука может быть очень полезной при медленном интернет-соединении. Первоначально Squid был разработан как Unix демон, но потом было выпущено несколько портов для WIndows. Squid распространяется под лицензией GNU General Public License.
В этой инструкции вы узнаете как установить Squid в Ubuntu 16.04. Просто последовательно выполняйте эти инструкции и установка squid ubuntu не вызовет никаких проблем. Squid это довольно многофункциональная программа и мы не сможем охватить в этой статье все ее функции, но попытаемся рассмотреть основные, чтобы вы смогли ее полностью настроить и использовать. Начнем с установки.
Есть несколько способов установки Squid в Ubuntu, один из самых распространенных - установка из официальных репозиториев с помощью утилиты apt.
Сначала откройте терминал сочетанием клавиш Ctrl+Alt+T и обновите индекс пакетов:
После обновления списка пакетов можно переходить к установке прокси-сервера просто выполните команду:
sudo apt install squid
Затем утилита спросит нужно ли продолжать установку, введите Y и дождитесь окончания загрузки и установки:
Затем можно переходить к настройке.
Настройка Squid
Конфигурационный файл сервера находится в директории /etc/squid. В зависимости от версии Squid название папки и самого файла может отличаться, например, /etc/squid3/squid.conf или /etc/squid/squid.conf. Все настройки находятся в этом файле. Давайте его рассмотрим.
vim /etc/squid3/squid.conf
Когда откроется файл вы увидите что то похожее:
Файл содержит несколько опций настроек, а также очень много документации по их использованию. Мы не будем трогать многие из них, но основные рассмотрим.
Контроль доступа
Сначала нам нужно настроить правила доступа клиентов к нашему прокси-серверу. Squid проектировался как программа для организаций и даже если вы используете его дома, настройка squid 3 тоже должна быть выполнена.
Для это используется acl список. это обычный список объектов, сейчас он вообще ничего не значит. Это могут быть ip адреса, порты и т д. Потом мы укажем программе что нужно делать с этим списком, разрешать или запрещать доступ. Синтаксис создания acl списка такой:
acl имя_списка тип_списка элемент_списка
Таких строк может быть несколько с одним именем и типом, из них получается список. Имя списка может быть произвольным, мы его еще будем использовать. Тип списка это намного интереснее. Может быть одним из:
- src - ip адрес откуда исходит соединение, адрес клиента;
- dst - ip адрес назначения соединения, адрес сервера, к которому хочет получить доступ клиент;
- dstdomain - домен назначения соединения;
- srcdomain - домен клиента;
- arp - MAC адрес сетевой карты клиента;
- time - время, когда выполняется соединение;
- port - порт, к которому пытается получить доступ клиент;
- proto - протокол, по которому устанавливается соединение;
- method - метод передачи данных, например, GET - передача данных HTTP, POST - передача данных форм в HTTP, CONNECT - запрос соединения с сервером;
- http_status - ответ сервера;
- browser - браузер клиента;
- url_regex - url адрес, к которому пытаются получить доступ.
Это далеко не все типы списков, но для начала хватит, а более подробная информация есть в том же конфигурационном файле.
Добавим список, для доступа к серверу из локальной сети:
acl localnet src 192.168.0.0/16
Создадим список Safe_ports, чтобы разрешить трафик на порты основных сетевых служб, а также незарегистрированные порты выше 1024:
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
Создадим еще два списка - SSL_ports и connect, чтобы разрешить использовать метод connect только для ssl соединений. Это запретит клиенту использовать другие прокси-серверы поверх нашего:
acl SSL_ports port 443
acl connect method CONNECT
Как я уже говорил, эти списки сами по себе ничего не значат и никак не влияют на работу сервера. Чтобы применить список нужно использовать директиву http_access. Ее синтаксис:
http_access действие имя_списка
Действие может быть allow (разрешить) или deny (запретить). теперь запретим доступ ко всем портам, кроме заданных в Safe_ports:
http_access deny Connect !SSL_ports
Теперь разрешим доступ из этого компьютера (acl список localhos предопределен):
http_access allow localhost
Разрешим доступ из локальной сети:
http_access allow localnet
И запретим все остальное:
http_access deny all
Другие настройки
Контроль доступа, это один из самых важных компонентов, но настройка squid ubuntu на этом незакончена. Есть еще много интересных параметров, мы рассмотрим только несколько из них:
http_port - задает ip адрес и порт, на котором будет работать программа. Можно запускать прокси только на этом компьютере такой конструкцией:
http_port localhost:3218
Или в локальной сети:
https_port - задает ip адрес и порт, на котором будут приниматься https соединения. Мы не рассматриваем работу с https в этой статье.
cache_mem - количество памяти, которая выделяется для кэширования объектов.
cache_dir - позволяет задать папку для хранения кэша. По умолчанию весь кэш хранится в оперативной памяти. Синтаксис:
cache_dir файловая_система папка размер_в_мб L1 L2
L1 и L2 - количество подпапок первого и второго уровня. Файловая система определяет каким образом данные будут писаться на диск. Например:
cache_dir aufs /var/spool/squid 100 16 256
coredump_dir - директория, в которую будет сохранен дамп памяти в случае ошибки.
refresh_pattern - очень интересный параметр, который позволяет продлить время жизни объектов в кэше. Синтаксис такой:
refresh_pattern -i регулярное_выражение минимальное_время процент максимальное_время параметры
- регулярное выражение - задает объекты, к которым нужно применять параметр;
- минимальное_время - время в минутах пока объект считается свежим;
- максимальное_время - максимальное время в минутах, пока объект будет свежим;
параметры могут быть такие:
- override-expire - игнорировать заголовок expire;
- override-lastmod - игнорировать последнюю дату изменения файла;
- reload-into-ims - вместо не кэшировать отправлять запрос If-Modified-Since;
- ignore-reload - игнорировать запросы клиента не кэшировать.
Например:
refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
Вам могут понадобиться и другие настройки после того, как установка squid ubuntu Будет завершена. Но они выходят за рамки этой статьи. Теперь сохраните изменения, закройте файл и перезагрузите Squid:
sudo service squid3 restart
Если эта команда вернет ошибку, попробуйте другую:
sudo service squid restart
Осталось проверить работу нашего прокси-сервера. Это можно сделать с помощью любого браузера. Откройте настройки браузера и выполните настройку прокси. Я покажу как это сделать в Mozilla Firefox. Если у вас другой браузер, например, Google Chrome думаю вы разберетесь как там настраивается прокси.
Настройка клиентской стороны
Откройте браузер, перейдите в Настройка --> Дополнительно --> Сеть . Затем нажмите Настройки в разделе Подключение и выберите настроить прокси вручную :
В поле HTTP прокси укажите IP адрес машины, на которой выполнялась установка Squid сервера, а в поле порт - номер порта 3128. Этот порт используется по умолчанию в Squid, но вы можете изменить номер порта с помощью /etc/squid/squid.conf
Следующим шагом настройки, будет установка прокси сервера, для обеспечения контролируемого доступа к сети интернет.
Воспользуемся для этого прокси сервером SQUID3
Устанавливаем сервер командой:
sudo apt-get install squid3Внимание: В Ununtu Server версий менее 16, адрес папки прокси сервера squid — /etc/squid3 , в Ubuntu Server 16 адрес папки прокси сервера squid — /etc/squid . Будьте внимательны при прописывании путей. Визуально в правильном пути до папки SQUID можно убедится с помощью .
Файл конфигурации SQUID3 находится по адресу /etc/squid3 /squid.conf , так как данное руководство предназначается для новичков, а файл конфигурации очень большой и содержит очень много комментариев, мы создадим новый файл конфигурации, а оригинальный скопируем под другим названием.
Когда вы решите более полно ознакомиться с возможными опциями конфигурации SQUID3, вы можете самостоятельно восстановить оригинальный файл.
Переименуем оригинальный файл squid3.conf в файл с названием squid3.conf.bac
sudo mv /etc/squid3 /squid.conf /etc/squid3 /squid.conf.bacСоздаем пустой файл конфигурации squid.conf :
sudo touch /etc/squid 3/squid.confОткрываем файл конфигурации:
sudo nano /etc/squid3 /squid.confВставляем в файл следующий текст конфигурации:
acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl localnet src 192.168.137.0/24 acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access allow localnet http_access deny all http_port 192.168.137.1:3128 intercept cache_dir ufs /var/spool/squid3 2048 16 256 maximum_object_size 4 MB maximum_object_size_in_memory 512 KB cache_mem 1024 MB access_log daemon:/var/log/squid3 /access.log squid logfile_rotate 31 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880 refresh_pattern . 0 20% 4320Ubuntu Server 15: Файл начальной конфигурации прокси сервера SQUID
Что мы изменили в изначальной конфигурации:
- acl localnet src 192.168.137.0/24 — указали диапазон нашей локальной сети;
- http_port 192.168.137.1:3128 intercept — открыли прозрачный прокси сервер на порту 3128, в режиме «прозрачный» на клиентах не нужно настраивать адрес прокси сервера;
- cache_dir ufs /var/spool/squid3 2048 16 256 — указали настройки использования кеша. Обратите внимание на путь до папки SQUID в зависимости от версии вашего сервера;
- maximum_object_size 4 MB — минимальный размер кешируемого файла;
- maximum_object_size_in_memory 512 KB — максимальный размер кешируемого объекта в оперативной памяти;
- cache_mem 1024 MB — допустимый объем памяти для хранения кеша;
- access_log daemon:/var/log/squid3 /access.log squid — включения ведения логов. Обратите внимание на путь до папки SQUID в зависимости от версии вашего сервера;
- logfile_rotate 31 — срок хранения лог файлов.
Все остальные параметры, отставлены в изначальном файле конфигурации — без изменения.
Выполним проверку файла конфигурации перед перезапуском службы:
sudo squid3 -k checkЕсли команда отрабатывает без вывода — ошибок нет, в противном случае изучаем вывод и исправляем допущенные ошибки.
Перезапустим службу squuid, чтобы применить внесенные изменения:
sudo service squid3 restartОткроем созданный в файл /etc/nat и укажем перенаправление http трафика через наш прокси сервер squid:
sudo nano /etc/natДобавим в конце файла следующее:
# Заворачиваем http на прокси iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.137.0 /24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.137.1 :3128Ubuntu Server: Настройка squid
Перезапускаем сервер.
Прокси сервер Squid успешно настроен.
Большинство «не работает» вызвано невнимательностью! Внимательно проверяйте команды и не допускайте в файлах конфигурации лишних символов.
Настройка прокси сервера Squid
Очень часто нам нужен прокси. Например у вас серый IP или вы счастливый пользователь спутникового интернета. Скачать что-то с сайтов подобных Rapidshare нереально. Здесь нас и выручит squid.
Для установки proxy необходим сервер на виртуализации KVM. На других виртуализациях размещение proxy-серверов запрещено.
Более расширенный вариант моей статьи можно найти на сайте Курского LUG , где я так же рассмотрел возможность использования squid домашними пользователями, а также интеграцию системы сжатия траффика Globax или Toonel каскадом в squid.
Установка squid
cd /usr/ports/www/squid && make BATCH=yes installНастройка squid
Немного об acl и правилах
Сердцем конфигурирования squid являются acl
(access control list) и правила.
Для начала надо усвоить принципы работы acl. ACL имеют сделующий формат:
Acl <имя> <тип> <содержание>
Например этот acl описывает две пользовательские машины с айпишниками (тип src) 192.168.0.1 и 192.168.0.2
Acl comps src 192.168.0.1/32 192.168.0.2/32
Теперь рассмотрим правила.
Правила имеют следующий формат:
<тип_правила> <действие>
На этом этапе надо усвоить то, что правила одного типа проверяются до первого выполняющегося правила. Действие этого правила будет выполнено, и проверка дальнейших правил этого типа будет остановлена. Пример:
Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access allow vasya http_access deny all
Правила типа http_access
это правила разрешающие или запрещающие доступ по http. Рассмотри действие вышеописанного отрывка. acl all указывает нам на все айпишники. А acl vasya указывает на один ip 192.168.1.12
Проверка будет проходить так:
1) http_access allow vasya Если через прокси сидит пользователь с этого айпишника то разрешим ему доступ. Проверка будет остановлена, четвертая строка даже не будет проверена.
2) если прокси использует пользователь не с этого айпи, то правило на строке 3 не выполнится и мы перейдем к правилу на строке 4. Поскольку под acl all подходит любой айпи, то данное правило выполнится и мы заблокируем доступ. дальнейшие правила проверяться не будут
. Таким образом мы запретили пользоваться прокси всем кроме Васи.
Рассмотрим частую ошибку на основе прошлого примера:
Acl all src 0/0 acl vasya src 192.168.1.12/32 http_access deny all http_access allow vasya
В данном случае даже Вася не сможет пользоваться прокси. Так как правилом на строке 3 мы заблокировали доступ всем, оно выполнилось, и правило на строке 4 даже не будет проверяться. Внимательно следите за порядком правил одного типа.
Создаем конфиг squid
Приступим к написанию конфига. Разберу на примере своего конфига.
Для начала в папке /etc/squid создадим папку acls. В ней я создал 3 файла: banners, nobanners, 1banners
В файле banners хранятся регулярные выражение реклам и баннеров которые будут вырезаны. В nobanners хранятся исключения, то есть те страницы и картинки которые будут грузиться даже если в banners есть правило под которое они попадают. В файле 1banners хранятся регулярные выражения описывающие те баннеры которые будут вырезаться в первую очередь. Содержимое своих файлов фильтрации рекламы приведу в конце статьи.
С root правами создадим файл /etc/squid/squid.conf и начинаем добавлять в него строки:
Укажем порт на котором будет работать прокси: (ВНИМАНИЕ!! Никогда не ставьте стандартные порты вроде 8080 80 или 3128 если не хотите чтобы ваш прокси легко можно было обнаружить)
Http_port 1234
Укажем имя нода на котором стоит squid. Узнать свое имя можно выполнив uname -n
Visible_hostname dimon4eg
Отключим icp
Icp_port 0
Через acl с регулярными выражениями укажем страницы которые не будут кешироваться
Acl donocache urlpath_regex cgi-bin user submit no_cache deny donocache
Создадим папку /var/spool/squid и сделаем chmod 777 /var/spool/squid
Опишем обьем "быстрого" кеша и кеша на жестком диске. Объем быстрого кеша рекомендуется ставить не более 32 метров для экономии оперативной памяти.
Cache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256
Аналогично создадим папки /var/log/squid и укажем где хранить логи
Cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log
Таблица mime и pid процесса
Mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid
Настройки фтп через прокси
Ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on
Служебные acl
Acl all src 0/0 acl SMTP port 25
Список айпи с которых разрешен прокси. Обязательно указать 127.0.0.1 и адрес самого сервера в локалке. Далее укажем всех пользователей кто имеет доступ. (ВНИМАНИЕ, обязательно отключите доступ всем кому попало.)
Acl doallow src 192.128.0.2/32 127.0.0.1/32
Зададим порты которые разрешены
Acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 5190 5552 acl Safe_ports port 777
Расположение файлов с правилами вырезания рекламы. Ключ -i означает сделать правила не чувствительными к регистру
Acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"
Теперь опишем правила
Http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all
Запретим доступ icp
Icp_access deny all
Приложения
Полный текст моего squid.conf
http_port 1234 visible_hostname dimon4eg icp_port 0 acl donocache urlpath_regex cgi-bin user submit no_cache deny donocachecache_mem 32 MB cache_dir ufs /var/spool/squid 1000 16 256
cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log
mime_table /etc/squid/mime.conf pid_filename /var/run/squid.pid
ftp_user anonymous@ ftp_list_width 32 ftp_passive on ftp_sanitycheck on
acl server src 192.168.0.2/32
acl all src 0/0 acl manager proto cache_object acl localhost src 127.0.0.1/32 acl SSL_ports port 443 563 acl SMTP port 25
acl doallow src 192.128.0.2/32 127.0.0.1/32
acl Safe_ports port 80 acl Safe_ports port 21 acl Safe_ports port 443 563 acl Safe_ports port 777 acl CONNECT method CONNECT
acl banners url_regex -i "/etc/squid/acls/banners" acl 1banners url_regex -i "/etc/squid/acls/1banners" acl nobanners url_regex -i "/etc/squid/acls/nobanners"
http_access deny 1banners http_access deny banners !nobanners http_access deny !Safe_ports http_access deny SMTP http_access allow doallow http_access deny all
icp_access deny all
never_direct allow all
Мои правила для нарезки рекламы
/etc/squid/acls/banners
.?(count(\d|er|\.rbc)|hitbox|advertising|linkexchange|click\d|\dcount|adriver) .*(/ad(s|v)|\.adnet\.ru|banview|banner|adriver|\dcount|bnr|bans\.|/sale|/pagead) .*exaccess\.ru/asp/. .*(spylog|warlog\.info|ipz.ru/cgi-bin/cm\.cgi\?|c\.mystat-in\.net|c\.bigmir\.net|online\.mirabilis|top\.winrate\.net|vipelita\.ru|cnews\.ru.*/informres).* .*(brs\.trilan\.ru/images|google-analytics\.com|/informer|bantex\.ru|100-100\.ru).* .?(hotlog|tours|sharereactor|&rand=|livejournal\.com/userpic).* ^(www\.)?ad\d?\..* .?images\.rambler\.ru/upl.* .*s1\.adward\.ru/\?r.* .*(bhanvad)\.com.* .*(dosugonline|blogonline|all-web|otvali|loveplanet|ziza|body\.imho|meganame)\.ru.* .?(clx|gold-music)\.ru/.* .*(nnm.ru|rambler|realcoding|kpnemo\.ru/advimg).*\.swf .*/ad?.* .?re(k|c)lama.* .^(www\.)?(1001tur|jmp\.net|kmindex.ru/.*/\?|kreis\.trl\.ru|rot\.goup\.ru/\?|au-au\.ru).* .?r\.mail\.ru/b.*\.swf .?bs\.yandex\.ru/show.* .?br\.gcl\.ru/cgi-bin/br.* .?m1.nedstatbasic.net/basic.js .*\.doubleclick\.net .*an.yandex.ru/* .*/adserver/*Для инсталляции Squid используется команда:
Apt-get install squid3
Когда установка завершится, сервис запустится автоматически.
Перейдём к настройке. Файл конфигурации расположен по адресу /etc/squid3/squid.conf . Для неподготовленного пользователя он может показаться совершенно необъятным — в нём более 7000 строк. Большая часть из них закомментированы и описывают значительную часть всех возможных вариантов работы Squid.
Для комфортной работы скопируем файл настроек в ту же папку под другим именем, чтобы всегда иметь под рукой стандартные настройки:
cp /etc/squid3/squid.conf /etc/squid3/backup-squid.confПри необходимости перед началом настройки можно обратиться к официальной документации проекта .
Теперь можно удалять из файла конфигурации все закомментированные строки и пояснения, оставляя только активные директивы. По умолчанию их немного:
acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025 -65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost manager http_access deny manager http_access allow localhost http_access deny all http_port 3128 coredump_dir /var/spool/squid3 refresh_pattern ^ftp: 1440 20 % 10080 refresh_pattern ^gopher: 1440 0 % 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0 % 0 refresh_pattern (Release|Packages(.gz)*)$ 0 20 % 2880 refresh_pattern . 0 20 % 4320Основной инструмент настройки Squid — это списки контроля доступа или ACL (Access Control List) . ACL объявляются директивой, имеющей следующий синтаксис:
acl имя параметр элементы_списка
Параметр даёт серверу понять тип элементов списка. АCL с параметром port содержит номера портов, а с параметром src — ip-адреса, с которых на сервер поступает запрос. Полный список параметров весьма обширен и доступен в официальной документации.
Таким образом, строка
acl Safe_ports port 80добавляет в список Safe_ports, содержащий элементы типа “порт”, новое значение 80.
Директива http_access, имеющая формат
http_access указание имя_acl
определяет правила работы с элементами указанного acl. Например, строка:
http_access deny !Safe_portsблокирует все порты, не входящие в список Safe_ports.
По умолчанию доступ к Squid разрешен только с самого сервера:
http_access allow localhost http_access deny allЧтобы открыть доступ клиентам локальной сети создадим для них новый список доступа c параметром src:
acl localnet src 192.168.0.0 /24И разрешим доступ:
http_access allow localnetТеперь укажем порт, на котором работает Squid, и установим прозрачный режим работы:
http_port 192.168 .0 .1 :3128 intercept #параметр intercept включает прозрачный режимМинимальная настройка конфигурационного файла Squid завершена, теперь можно перейти к описанию политики информационной безопасности.
Параметр src позволяет регулировать доступ для клиентов со статичными ip-адресами:
acl UserGroup src 192.168 .0 .2-192 .168 .0 .9 # группа пользователей acl SingleUser src 192.168 .0 .10 #отдельный пользователь http_access allow UserGrour #разрешаем доступ для группы http_access allow SingleUser # и для отдельного пользователя http_access deny all #запрещаем всем остальнымПараметр dst позволяет указать список ip-адресов назначения, к которым клиент желает получить доступ:
acl Net194 dst 194.67.0.0 /16 #описываем некую подсеть 194.67.0.0/16 http_access deny SingleUser Net194 # запрещаем пользователю доступ к нейПараметр dstdomain даёт возможность указывать домен, к которому выполняется запрос:
acl SitesBlocked dstdomain .example .ru .sample .ru #указываем несколько доменных имён http_access deny UserGroup SitesBlocked #и запрещаем к ним доступ группе пользователейЕсли необходимо указать домен источника, используется параметр srcdomain .
Параметры srcdom_regex и dstdom_regex позволяют использовать в ACL регулярные выражения:
Acl SitesRegexFree dstdom_regex free #сайты, содержащие в доменном имени слово “free” acl SitesRegexComOrg dstdom_regex \.com$ \.org $ #сайты доменных зон.com и.org http_access deny SingleUser SitesRegexFree http_access deny SingleUser SitesRegexComOrg
Ключ -i необходим для игнорирования регистра символов в регулярных выражениях:
acl имя [-i] url_regex элементы_списка
С помощью параметра url_regex возможно указать шаблон регулярного выражения для URL:
acl MusicMP3 url_regex -i \.mp3$ #охватывает музыкальные файлы.mp3Параметр port используется для указания списка портов. Он будет полезен для запрета отдельных портов, которые используются установленными на клиентской машине программами, например интернет-мессенджерами.
Ограничение пользователей по времени осуществляется с помощью параметра time:
acl имя time дни чч:мм-ЧЧ:ММ
Где день: M — Понедельник, T — Вторник, W — Среда, H — Четверг, F — Пятница, A — Суббота, S — Воскресенье.
Важно отметить что время начала промежутка должно быть всегда меньше времени конца. Например, возможно указать вариант 00:00-23:59, но промежуток 20:00-09:00 придётся разбить на 20:00-23:59 и 00:00-09:00.
Ограничения по времени можно комбинировать и с другими правилами. Есть возможность по расписанию разрешать или запрещать доступ к просмотру определённых сайтов, открывать и закрывать порты, управлять доступностью IP-адресов и отдельных доменов. Например:
Acl WeekendTime time AS 10 :00 -15 :00 #обозначим некоторый временной промежуток для выходных дней: http_access allow SingleUser WeekendTime MusicMP3 #разрешим пользователю достум к файлам формата mp3 в выбранный промежуток времени http_access deny SingleUser MusicMP3 #и запретим в любое другое время
Параметр proto позволяет указывать протокол передачи информации:
acl имя_acl proto список
Используя его можно запретить пересылку файлов по протоколу ftp:
acl proto_ftp proto ftp http_access deny SingleUser proto_ftpОграничения по скорости
На сегодняшний день, когда ушли в прошлое каналы с пропускной способностью в 256 кбит/с и менее, можно ошибочно предположить что устанавливать ограничения по скорости соединения в случае небольшого количества клиентов локальной сети бессмысленно. Тем не менее, очень желательно устанавливать хотя бы самые простые правила регулирования скорости соединения для отдельных пользователей, чтобы избежать перегрузки сети и нехватки ресурсов для отдельных пользователей, для которых важна хорошая скорость работы сети. Подводные камни могут скрываться в следующих процессах:
- автоматическое резервное копирование данных с сервера компании и прочие процессы передачи больших объемов данных, выполняющиеся сервером по расписанию;
- операции передачи файлов для личных и рабочих нужд, особенно своей способностью использовать все доступные сетевые ресурсы известен протокол BitTorrent;
- технические неисправности в отдельных компьютерах и программах, а так же действия вредоносных программ;
- злонамеренные сетевые атаки на отдельные компьютеры локальной сети.
Прокси-сервер Squid позволяет реализовывать политику ограничения скорости с помощью механизма пулов. Пул можно представить себе, как емкость с водой, которая постоянно заполняется до краёв, а клиенты по мере надобности наливают воду в свои стаканы через персональные краны.
Работу пулов регулируют три директивы: delay_class , delay_parameters , delay_access .
Количество пулов устанавливает директива delay_pools:
delay_pools количество_объявленных_пулов
Создадим несколько пулов:
delay_pools 2 #всего 2 пула с номерами 1 и 2 соответственноПулы могут быть трёх классов:
- Один кран на всю сеть ограничивает поток воды;
- Весь поток ограничен одним краном, после которого идут отдельные персональные краны(для каждого IP-адреса сети);
- Весь поток ограничен одним краном, от которого идут отдельные краны для каждой группы пользователей(подсети), каждый из которых, в свою очередь, делится на персональные краны для каждого клиента(для отдельного IP-адреса).
Класс пула должен быть указан в директиве delay_class:
delay_class номер_пула класс_пула
Укажем класс пула:
delay_class 1 1 #пул №1 ограничит скорость для всех клиентов, для которых он будет примененДиректива delay_parameters устанавливает параметры пула:
delay_parameters номер_пула параметры
Формат записи параметров зависит от выбранного класса пула:
delay_parameters 1 байт_на_всю_сеть # для класса 1 delay_parameters 1 на_всю_сеть на_клиента #для класса 2 delay_parameters 1 на_всю_сеть на_подсеть на_клиента #для класса 3Для пула №1 выбран класс 1, установим для него скорость передачи данных в 512 кбит/с:
delay_parameters 1 64000 /64000 # 512 Кбит = 64 Кбайта = 64000 байтЗапись параметра производится по следующим правилам: сперва указывается ограничение скорости, затем указывается лимит, после которого это ограничение начинает действовать. Таким образом значение параметра 64000/64000 говорит о том, что после того, как пользователь скачал на максимальной скорости первые 64Кб запроса, на клиента накладывается ограничение скорости в 512 Кбит/с. Удобно устанавливать второе значение параметра несколько больше чем первое, например конфигурация:
delay_parameters 1 64000 /256000позволяет пользователю получить первые 256Кбайт запроса на максимальной скорости и только потом ограничить клиента шириной канала в 512 Кбит/с.
delay_parameters 1 -1 #неограниченная скорость доступа для пула №1Теперь можно распространять действие пула на отдельных клиентов сети при помощи директивы delay_access , имеющей формат:
delay_access номер_пула действие имя_acl
Параметр “ действие” имеет значения allow (разрешить) и deny (запретить). Пул будет действовать на тех клиентов, которым он разрешен и не будет действовать на тех, кому запрещён.
Например, конфигурация:
delay_access 1 deny UserGroup delay_access 1 allow SingleUserраспространяет действия пула №1 на отдельного пользователя SingleUser, но не затрагивает группу пользователей UserGroup.
Для группы пользователей используем пул №2:
delay_class 2 2 # пул №2 позволит отрегулировать общую ширину канала для всей группы клиентов и установить отдельные органичения для каждого пользователя группы.Опишем ограничения:
delay_parameters 2 512000 /512000 64000 /128000 # 8 Мбит/с - ограничение ширина канала для всей группы, на этой скорости клиент может скачать первые 128Кбайт запроса, а затем скорость его соединения упадёт до 512 Кбит/с.Применим ограничения пула №2:
delay_access 1 allow UserGroup #действует на группу пользователей UserGroup delay_access 1 deny SingleUser #но не действует на отдельного пользователя SingleUserНастройка кэширования
Прокси-сервер Squid поддерживает два вида кэширования — кэш в оперативной памяти и на жестком диске. При их настройке стоит помнить, что кэширование в принципе может ускорить скорость обработки запросов, но может вызвать и обратный эффект — в случае неверно подобранных параметров конфигурации. Также немаловажным является тот факт, что любое кэширование влечет дополнительную нагрузку на ресурсы сервера, в частности, слишком большой объем кэша в RAM может полностью парализовать работу сервера, спровоцировав нехватку оперативной памяти.
В стандартной конфигурации Squid включен только RAM кэш, объем используемой памяти установлен на 256Мб. Увеличим объем кэша и установим максимальный размер кэшированного объекта с помощью соответствующих директив:
Cache_mem 1024 MB # объем доступной для кэширования памяти maximum_object_size_in _memory 512 KB # максимальный размер объекта в кэше
Следует учитывать, что кэш в оперативной памяти сбрасывается каждый раз при перезагрузке или выключении сервера, поэтому оценивать результаты изменения конфигурации стоит только по прошествии некоторого времени.
За использование HDD кэша отвечает директива cache_dir , имеющая формат:
cache_dir тип_хранилища путь_к_хранилищу размер L1 L2
Cache_dir ufs /var /squid_cache 1024 16 256
Размер кэша на диске указывается в мегабайтах, в примере выше кэш с максимальным размером 1 Гб будет хранится в папке /var/squid_cache . Тип хранилища ufs стандартный. Параметры 16 и 256 указывают количество директорий первого и второго уровня, эти значения так же прописаны в документации как стандартные.
Максимальный размер объекта в дисковом кэше также можно указать:
maximum_object_size 2 MBНастройка логирования
Squid имеет мощную систему подробного логирования для контроля проходящего через прокси-сервер траффика. Логи делятся на три различных журнала:
- access.log — содержит записи о запросах клиентов;
- store.log — содержит записи, относящиеся к действиям с кэшем;
- cache.log — содержит сообщения об ошибках, возникающих при работе Squid.
Чаще всего используется журнал access.log. Укажем в конфигурации собственный путь для его хранения:
access_log daemon:/etc/squid3/logs/access.log squidПараметр, имеющий в примере значение “squid” определяет формат лог-файла. Можно задать формат лога “common” для того, чтобы можно было обрабатывать полученный журнал сторонними программами, но в таком случае стоит помнить, что этот формат лога не содержит всей информации, которая есть в логе по умолчанию. Помимо стандартных вариантов имеется возможность создать собственный формат лог-файла, используя директиву logformat. Подробную информацию о работе этой директивы можно найти в документации к продукту.
Директивы cache_log и cache_store_log позволяют указать путь к файлам cache.log и store.log соответственно. Они не требуют указания формата:
Cache_log daemon:/etc/squid3/logs/cache .log cache_store_log daemon:/etc/squid3/logs /store .log
Помимо различных видов журналов Squid имеет настройку уровней логирования. За глубину отладки отвечает директива debug_options . У неё два обязательных параметра — секция и глубина отладки:
debug_options ALL ,1 # секция “ALL ”, глубина отладки 1Значение секции рекомендуется оставлять ALL (либо осторожно выбирать конкретную секцию из списка). Уровень логирования же может менятся в диапазоне от 1 до 9, где с ростом уровня увеличивается подробность логов, и, соответственно, количество записей в журнале. Как правило, уровень выше 5 редко используется в реальной жизни, потому что выводит уже слишком много “избыточной” информации для каждого произошедшего события.
Для того чтобы всегда иметь возможность начать новый файл логов и упорядочить их существует параметр количества ротаций:
logfile_rotate 31Значение 31 означает, что при создании нового файла логов старый получит расширение от 0 до 30 и дальнейшая запись в него вестись не будет. Создание нового файла логов производится с помощью команды:
squid -k rotateТаким образом, добавив в cron задачу каждый день создавать новый файл логов, можно иметь упорядоченный отчет обо всём прошедшем через прокси-сервер трафике за прошедший месяц.
Если даже с самым низким уровнем логирования объем логов возрастает до нежелательных масштабов — стоит применить дополнительные средства, вроде автоматического сжатия журналов или переноса их в отдельное хранилище. Так же можно изменить количество или частоту ротаций в зависимости от задачи. Можно хранить меньшее количество логов, либо чаще создавать свежий журнал, а старый архивировать и перемещать. Для прокси-сервера Squid есть множество надстроек и сторонних программ, упрощающих все этапы работы с лог-файлами.
Оставим без изменений остальные параметры и проверим файл настроек с помощью команды:
squid3 -k checkЭта команда предназначена для поиска ошибок в конфигурационном файле, если она ничего не выводит — значит ошибок нет.
Теперь осталось применить новые параметры:
service squid3 reloadПосле завершения настройки прокси-сервера перенаправим на него весь трафик локальной сети, внеся изменения в файл /etc/nat командой:
nano /etc/natДобавим в самый низ файла следующую строку:
#Перенаправление всего http-трафика на прокси-сервер iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.0.0 /24 -p tcp -m multiport --dport 80 ,8080 -j DNAT --to 192.168.0.1:3128После этого перезагрузим сервер для автоматического применения новых настроек:
Таким образом, несмотря на большое общее количество параметров настройки Squid, минимальный набор для начала работы достаточно скромен. Использование прокси-сервера Squid позволит вам быстро реализовать политику доступа групп пользователей или отдельных клиентов к ресурсам сети интернет, а так же мониторинг их деятельности и сбор статистики об использовании канала.