Установка squid freebsd 11

Установка squid freebsd 11

Оглавление

Squid + SquidGuard +…

И вот наконец мы добрались до того, ради чего, собственно говоря, всё и затевалось.

Идея системы фильтрации и значительная часть ее реализации позаимствована из статьи Андрея Бешкова «Система фильтрации интернет траффика на основе squidGuard + Apache + Squid + Berkeley DB». К ней я и отсылаю интересующихся обоснованиями выбора именно такой системы. Здесь же рассмотрим только ее практическую реализацию.

Squid

Для начала устанавливаем из портов прокси сервер Squid. У меня использована стабильная версия 2.6 и именно ей посвящено дальнейшее описание. Версию 2.5 (также имеющуюся в портах) не рекомендую, т.к. там несколько более запутанная настройка. С новой 3.0 не экспериментировал, потому не могу гарантировать, что вся система будет работать без изменений в настройках. Итак…

По окончании установки редактируем конфигурационный файл:

У меня он выглядит вот так (естественно, здесь отсутствует множество строк комментариев — этот файл, как это обычно и бывает в мире *nix, содержит внутри себя подробную документацию):

Все остальные параметры (а их гораздо больше, чем тут перечислено) можно оставить так, как они назначены по умолчанию.

Далее мы должны создать каталоги для кэша и лог-файлов, а затем сделать так, чтобы их «владельцем» стал именно тот пользователь, от имени которого будет выполняться Squid (в нашем примере его зовут squid — см. конфигурационный файл выше):

# chown -R squid:squid /usr/local/squid/cache /usr/local/squid/logs

Впоследствие могут пригодится и некоторые другие ключи для запуска Squid

  • -d выводить на устройство stderr отладочную информацию
  • -f запуск с другим файлом конфигурации
  • -h вывод справки
  • -k reconfigure отправка сигнала HUP (чтобы файл конфигурации был повторно прочитан; обычно используется после его изменений)
  • -k shutdown «вежливое» выключение
  • -k interrupt выключение, сразу разрывающее текущие соединения
  • -k kill принудительное прерывание работы
  • -v вывод информации о версии и ключах компиляции Squid
  • -X отладочный режим для разборки конфигурационного файла
  • -F ускоренное перестроение кэша после сбоя (но на время перестроения запросы не обслуживаются)

Далее необходимо создать в каталоге cache иерархию каталогов кэша (в соответствии с записью в конфигурационном файле там должно быть 16 каталогов, в каждом из которых — по 16 подкаталогов). Конечно, мы не будем делать это вручную. Воспользуемся самим Squid’ом:

Готово. Теперь можем запустить прокси-сервер в работу.

Ключ -D обозначает, что нам пока не нужно, чтобы Squid при запуске проверял работоспособность DNS-серверов (сейчас важно убедиться в работоспособности самого прокси).

Во время запуска на другой консоли (если мы работаем за компьютером непосредственно, консоли переключаются клавишами Alt+Fn , где n — номер консоли) или в другом терминальном окне (если работаем через SSH) наблюдаем за сообщениями, появляющимися в файле протокола:

# tail -f /var/log/messages

Вообще команда tail предназначена для вывода нескольких (по умолчанию, десяти) последних строк файла. Но добавление ключа -f превращает ее в средство отслеживания добавляющихся в файл строк. Чтобы прервать ее работу в этом случае используют сочетание клавиш Ctrl+C .

Если всё сделано правильно, ошибок там не появится. А когда мы увидим что-то похожее на

Jul 9 11:22:49 sch415 squid[3792]: Squid Parent: child process 3794 started ,

значит, Squid заработал. Можем попробовать позаходить на разные сайты с компьютеров локальной сети, а затем посмотреть файлы протоколов (они у нас, напомню, в /usr/local/squid/logs ).

Apache

Вообще-то, Apache — очень совершенный http-сервер (на таких «живет» большая часть Интернет). Но у нас он будет подменять те сервера, которые мы, по той или иной причине, решили от пользователей закрыть. Как мы уже поступали со многими программами, установим сервер из портов:

Заметьте, мы устанавливаем версию 1.3, хотя в портах есть и 2.*. Эти версии существенно отличаются.

Создаем каталог, в котором будут лежать файлы-подменки:

Помещаем туда (любым возможным способом: загрузкой с помощью links, копированием и т.п.) файлы 1×1.gif (он будет передаваться клиентам вместо баннеров), my.mp3 (маленький огрызок мелодии, который получит каждый желающий загрузить музыку), возможно, еще какие-либо картинки и т.п.

В каталог /usr/local/apache/cgi-bin помещаем специальный сценарий на perl — block.cgi. Он будет выводить сообщение при попытке посетить запрещенную страницу. Можно использовать либо оригинальный squidGuard.cgi.in из пакета SquidGuard, но лучше взять переведенный Андреем Бешковым. Чтобы скрипт смог работать, ему нужно выставить соответствующие права:

# chown nobody:wheel /usr/local/apache/cgi-bin/block.cgi

# chmod 500 /usr/local/apache/cgi-bin/block.cgi

Berkeley DB

Для работы SquidGuard необходима база данных, где будут храниться запреты. В этом качестве используется Berkeley DB. А она, в свою очередь, использует библиотеку libtool. На момент написания статьи ее актуальная версия — 1.5.26. Установка обычным способом из портов у меня не сработала (да, ошибки встречаются везде), потому пришлось загрузить архив с сайта (нужно воспользоваться ссылкой «Download this directory in tarball»), распаковать его и полностью выполнить процедуру сборки и инсталляции.

Читайте также:  Photoshop как обрезать изображение

# tar zxvf libtool15.tar.gz

(после этой команды будет выполнена загрузка исходников, которая может занять достаточное время при медленном канале, а затем компиляция)

При выполнении дух последних команд смотрим внимательно на появляющиеся сообщения, если что-то происходит не так, наиболее важная информация для понимания причин неприятности будет в последних строчках.

После установки libtool займемся Berkeley DB. Тут процесс будет заметно более сложным. Для начала нам нужно загрузить исходный код и два патча. Внимание! Нужна версия 3.2.9. Я не перепроверял, но по данным Андрея Бешкова только она может быть успешно собрана под FreeBSD. Распаковываем архив исходников, копируем в него оба патча и применяем их по очереди:

# tar zxvf db-3.2.9.tar.gz

# cp patch.3.2.9.1 patch.3.2.9.2 ./db-3.2.9

А дальше — компилируем и устанавливаем:

Ну, вот дело дошло и до последнего компонента нашей системы — редиректора SquidGuard. Его мы, как и предыдущие программы, соберем из исходников. Начнем с их загрузки с www.squidguard.org. Затем распакуем, скомпилируем и установим:

# tar zxvf squidGuard-1.3.tar.gz

Обратите внимание на «страшную» команду configure (эти несколько строк именно одна команда). В ней мы указали: 1) куда будет установлен SquidGuard; 2) где находится библиотека BercleyDB; 3) где будет лежать файл конфигурации программы; 4) куда будут записываться файлы протоколов и 5) где будет база данных блокируемых сайтов. Естественно, ошибиться при вводе этой команды крайне нежелательно.

Создаем каталог для протоколов:

Теперь нам нужен список «нехороших» сайтов. В сети есть несколько источников таких списков. Я воспользовался помощью наших американских коллег. Загружаем список. Распакуем его и перенесем в каталог, заданный при конфигурации:

# tar zxvf blacklists.tgz -C /usr/local/squidGuard

# mv /usr/local/squidGuard/blacklists /usr/local/squidGuard/db

В появившихся подкаталогах будут находиться файлы domains (домены, блокируемые целиком), urls (если нужно блокировать страницу, а не весь домен) и expression (регулярные выражения, определяющие, какие подстроки запрещены в url).

Категории блокируемых сайтов

База Комментарии
ads реклама
adult сайты для взрослых
aggressive агрессия
audio-video музыка и видео
forums форумы
drugs наркотики
gambling азартные игры
hacking хакерство
local-block сайты заблокированные местным админом
local-ok сайты разрешенные местным админом
mail бесплатные почтовые сервера
porn порнография
proxy общедоступные прокси сервера
publicite опять реклама
redirector анонимные прокси сервера
violence насилие
warez пиратское програмное обеспечение

К этой базе добавим еще базу баннеров (banners).

Теперь нам необходимо настроить SquidGuard. Создаем файл squidGuard.conf

Выглядеть он может примерно так:

Установим права на служебные файлы и каталоги (сделаем их владельцем пользователя, от имени которого будет работать SquidGuard):

# chown -R nobody /usr/local/squidGuard/log /usr/local/squidGuard/db

# chown nobody /usr/local/squidGuard/squidGuard.conf

Чтобы SquidGuard не строил при каждом запуске базы данных в оперативной памяти, напишем сценарий, который построит их (сохранив на диске) и перезапустит Squid (и с ним SquidGuard):

Установим необходимые права (этот сценарий должен иметь право запускать только root, а остальным с ним вообще ничего делать нельзя), а затем запустим его:

# chmod 100 /usr/local/squidGuard/bin/rebuild_base.sh

Теперь ждем, когда задача будет завершена. Процесс не слишком быстрый. Затем протестируем работу SquidGuard. Воспользуемся написанной опять же Андреем Бешковым маленькой тестовой программкой на Перле. Загружаем архив, распаковываем его и помещаем полученный файл test.pl в каталог /usr/local/squidGuard/bin. Устанавливаем ему разрешение на исполнение, запускаем и вводим тестируемый IP-адрес. В файле result.txt смотрим результат. (Там, где результат — пустая строка, сайт будет доступен, во всех остальных случаях показана строка, на которую произойдет перенаправление Squid’а) Набор сайтов можно поменять, отредактировав сценарий. Если результаты теста нас удовлетворили, подключим SquidGuard к Squid. Для этого в файл /usr/local/etc/squid/squid.conf добавим следующие строки:

Перезапускаем Squid (а редиректоры он уже [пере]запустит сам):

# killall -HUP squid

Если после этого в конце файла протокола /usr/local/squidGuard/log/squidGuard.log появились строки, подобные:

2008-07-10 14:57:54 [1285] squidGuard 1.2.0 started (1215687474.577)

2008-07-10 14:57:54 [1285] squidGuard ready for requests (1215687474.645)

…значит все запустилось нормально. Теперь сделаем, чтобы наша система запускалась автоматически при загрузке компьютера. Для этого внесем два сценария в «стартовый каталог» FreeBSD rc.d:

# chmod 100 /usr/local/etc/rc.d/apache.sh /usr/local/etc/rc.d/squid.sh

Перезагружаем компьютер, убеждаемся, что все нормально работает.

Для полного счастья админа школьной сети недостает только автоматического обновления баз блокируемых сайтов. Что делать?— естественно, писать сценарий. Базу надо скачать, распаковать, перенести в каталог баз данных SquidGuard, после чего запустить уже имеющийся сценарий перегенерации БД:

# chmod 100 /usr/local/squidGuard/bin/update_blacklist.sh

Создаем временный каталог для распаковки:

И настраиваем планировщик cron на периодическое выполнение сценария обновления:

# crontab -e -u root

Запускаем редактирование (-e) таблицы периодических заданий пользователя (-u) root. Для просмотра таблицы нужно было бы использовать ключ -l.

Запустится указанный в настройках ОС текстовый редактор (по умолчанию это vi). С его помощью дополним файл примерно такой строкой:

Она означает, что файл update_blacklist.sh должен запускаться каждую пятницу (5 день недели) в 15 часов 1 минуту. Правильнее было бы назначать обновление на ночное время (например, на 2 часа и сколько-то-там минут), но мы по правилам не можем оставлять компьютеры включенными на ночь.

Читайте также:  Круг вписанный в правильный шестиугольник

vi — редактор с непривычным для людей не из мира *nix интерфейсом. Для выхода из него нужно сделать следующее:

— нажимаем Esc — редактор переходит в командный режим

— нажимаем : (двоеточие, оно появится в нижней строке экрана) — редактор переходит в расширенный режим

— набираем wq — файл сохраняется и завершается работа с редактором.

Вот, собственно говоря, и всё. Два учебных года — полёт нормальный. Помимо добавления нескольких адресов в список запрета, никаких дополнительных телодвижений. Утром щелкнул выключателем, вечером — shutdown -h now . Бывало, в нарушение правил, машинка (P-II/333MHz/256M) работала по несколько суток не выключаясь.

PS Заметка была написана почти два года назад. С тех пор система умудрилась проработать полтора года практически без участия человека (и почти без выключения). Единственная поломка — выход из строя… одной из сетевых карт.

Быстрая настройка и установка Squid севера на базе FreeBSD.

Прокси сервер сервер Squid имеет огромное количество настроек, большинство из них для простого кеширования не нужно. Рассмотрим краткую установку Squid сервера и необходимую настройку для быстрого старта.

Устаналиваем из портов сам сервер.

Редактируем конфигурационный файл /usr/local/etc/squid/squid.conf

http_port 192.168.0.1:3128 (адрес и порт на котором будет работать Squid)

acl allowed_hosts src 192.168.0.0/255.255.255.0 (разрешаем доступ вашей подсети)
acl localhost src 127.0.0.1/255.255.255.255 (разрешаем доступ самому серверу)
acl SSL_ports port 443 563 (разрешаем доступ https)
http_access allow allowed_hosts localhost SSL_ports
http_access deny all (запрещаем всем остальным)

cache_peer proxy.isp.ru (указываем прокси своего провайдера)
cache_mem 512000 (память выделяемая под кеш в Килобайтах)
cache_dir ufs /usr/local/squid/cache 10240 16 256 (дисковый кеш)

cache_access_log /usr/local/squid/logs/access.log (путь для хранения лог-файлов)
cache_log /usr/local/squid/logs/cache.log
cache_store_log /usr/local/squid/logs/store.log

Первый запуск должен быть с параметром -z для создания кеша на диске

Добавляем Squid в автозагрузку (в /etc/rc.conf)

Установка Squid сервера завершена.

Закажите услугу обслуживание серверов и мы настроим вам прокси сервер любой сложности!

Записки Саныча

Squid будет с delay_pools, clamav сканирует трафик «на лету», squid guard, списки доступа acl …

Для начала выкачаем и распакуем порты:

# portsnap fetch # portsnap extract

Либо, если порты уже были установлены, обновим их:

# portsnap fetch update

Порты обновлены, можно начать установку. Все команды необходимо выполнять из-под root.

Установка squid:

Добавляем необходимые опции:

| [X] DELAY_POOLS # Возможность "рубить скорость" пользователям | [X] ICAP | [X] LARGEFILE # Поддержка лог и кэш файлов большого объёма | [X] TP_IPFW # Для создания "прозрачного" прокси

# cd /usr/ports/www && echo squid* # cd /usr/ports/www/squid # make config-recursive install clean

После успешной установки Squid, включим его автозапуск при загрузке системы:

# echo ‘squid_enable="YES"’ >> /etc/rc.conf

Приведём конфигурационный файл squid к следующему состоянию:

# Рекомендованная минимальная конфигурация(Squid Cache: Version 3.4.11): # # Список внутренних сетей #acl localnet src 10.0.0.0/8 # RFC1918 возможная внутренняя сеть #acl localnet src 172.16.0.0/12 # RFC1918 возможная внутренняя сеть #acl localnet src 192.168.0.0/16 # RFC1918 возможная внутренняя сеть #acl localnet src fc00::/7 # RFC 4193 локальный частный диапазон сети #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl localnet src 192.168.0.0/24 # Наша локальная сеть # Вводим acl acl _boss src "/usr/local/etc/squid/acl/boss.acl" # Пользователи, для которых нет ограничений acl _noinet src "/usr/local/etc/squid/acl/noinet.acl" # Пользователи, которым закрыт доступ в интернет acl _slowusers src "/usr/local/etc/squid/acl/slowusers.acl" # Пользователи, с ограниченим скорости доступа к интернету acl _forslowsite src "/usr/local/etc/squid/acl/forslowsite.acl" # Пользователи, которым у которых будет порезана скорость, дерктивой _slowsite acl _slowsite dstdomain "/usr/local/etc/squid/acl/slowsite.acl" # Домены, скорость доступа к которым ограничена acl _denysite dstdomain "/usr/local/etc/squid/acl/denysite.acl" # Домены, доступ к которым закрыт acl _urlip url_regex -i ^http://[0-9]<1,3>.[0-9]<1,3>.[0-9]<1,3>.[0-9]<1,3>/.* #Сайты с IP-адресами acl _MimeAudioVideo rep_mime_type audio video # Mime-типы для аудио и видео #acl mobile urlpath_regex -i (.thm|.sis|.swf|.jad|.jar|.3gp|.mp4)((#|&|?|s)<1>|$) #acl multimedia urlpath_regex -i (.swf|.mp3|.m3u|.flv|.wav|.vqf|.avi|.wmv|.mpeg|.mp|.asf|.mpe|.dat|.mpg|.wma|.midi|.aiff|.au|.qt|.ram|.rm|.iso|.raw|.mov)((#|&|?|s)<1>|$) #acl archive urlpath_regex -i (.tar.gz|.gz|.tar|.zip|.rar|.cab|.arj|.lzh|.ace|.7-zip|.gzip|.uue|.bz2|.iso)((#|&|?|s)<1>|$) #acl soft urlpath_regex -i (.exe|.msi|.rpm)((#|&|?|s)<1>|$) #acl mp3 urlpath_regex -i (.wav|.mp3|.mp4)((#|&|?|s)<1>|$) #Не использовать IPv6, если доступен IPv4 #По умолчанию, приоритет отдается протоколу IPv6, что может привести к ошибкам соединения, если IPv6 недоступен dns_v4_first on # Отображение местного времени на страницах ошибок error_directory /usr/local/etc/squid/errors.local/ru #При завершении работы ожидать закрытия клиентских подключений, так заявлено в документации #Фактически, ждет независимо от наличия подключений #По умолчанию — 30 секунд, сократим время ожидания до 1 shutdown_lifetime 1 seconds log_mime_hdrs on # Протоколировать http-заголовки #forwarded_for transparent # Не отправлять заголовок X-Forwarded-For содержащий внутренний IP-адрес клиента #via off # Не отправлять заголовок Via с именем и версией прокси-сервера cache_mgr root@localhost # e-mail администратора, для отправки уведомлений об отказе кэша visible_hostname mail.domino.zavod-okon.info # Адрес сервера на страницах ошибок # Количество старых лог-файлов, которые нужно хранить logfile_rotate 10 #Продолжить загрузку при отключении клиента, если осталось загрузить менее указанного объема данных #Позволяет сохранить объект в кэше при отмене загрузки клиентом #Значение 0 для quick_abort_min и quick_abort_max отменяют докачку #Значение -1 включает полную закачку объекта, не зависимо от оставшегося объема, повышает нагрузку на канал #По умолчанию 16 Кб #quick_abort_min 5 MB # Если пользователь прервал загрузку, когда скачано # не менее 70% файла, завершить его загрузку в кэш quick_abort_pct 70 # Порты, с которыми будем работать 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 # Убрать _ у method_ # Конфигурация доступа # Запретить запросы на порты, которые не указаны в Safe_ports http_access deny !Safe_ports # Запретить запросы на порты, которые не указаны в SSL_ports http_access deny CONNECT !SSL_ports # Даём доступ к кешу, только с localhost http_access allow localhost manager http_access deny manager # Запретить доступ к локальным ресурсам сервера через прокси http_access deny to_localhost # Разрешаем доступ пользователям, для которых нет ограничений (не учитывается ограничение по скорости) http_access allow _boss # Блокируем пользователей, которым интернет не разрешён http_access deny _noinet # Блокировать запрещенные сайты http_access deny _denysite # Запретить доступ к сайтам по IP-адресу http_access deny _urlip # Разрешить доступ из локальной сети, всем кто не попадает под acl http_access allow localnet # Блокировать все, что не разрешено http_access deny all # Squid обычно слушает порт 3128 http_port 192.168.0.1:3128 # При прозрачном проксировании может использоваться для управления кэшем #http_port 127.0.0.1:3128 # Локальный интерфейс, для трафика, перенаправленного брандмауэром. На этот порт редиректим файерволлом (80-83,8080-8088 —> 3129) #http_port 127.0.0.1:3129 intercept # Здесь указываем программу-редиректор, у нас — это squidGuard. # В предыдущих версиях Squid этот параметр назывался redirect_program #url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/etc/squid/squidGuard.conf # Управление скоростью доступа в Интернет посредством пулов # Количество пулов доступа delay_pools 3 # Первая цифра — номер пула, вторая — класс пула, мы используем пулы только первого класса, # без деления на подсети delay_class 1 1 # Отдельному пользователю 600 Кб/с, это

Читайте также:  Часы amazfit bip black отзывы

5 Мб, думаю достаточно delay_class 1 1 #delay_parameters 1 6000000/6000000 delay_parameters 1 -1/-1 # вообще всё без ограничений (upd) delay_access 1 allow _boss delay_access 1 deny all # Кому-то не повезло, ограничиваем скорость до 32 Кб/с delay_class 2 1 #delay_parameters 2 32000/128000 delay_access 2 allow _slowusers #delay_access 2 allow loopback delay_access 2 deny all # Ограничение скорости доступа к сайтам, для определённого acl delay_class 3 1 delay_parameters 3 15000/15000 delay_access 3 allow _forslowsite delay_access 3 allow _slowsite delay_access 3 deny all # Учетная запись, с правами которой работает Squid cache_effective_user squid cache_effective_group squid # Местонахождение pid- и log- файлов coredump_dir /var/log/squid/cache # Путь должен быть такой же как и у cache_dir cache_log /var/log/squid/cache.log access_log daemon:/var/log/squid/access.log squid cache_store_log daemon:/var/log/squid/store.log # По-умолчанию отключен, вроде как и не нужен pid_filename /var/run/squid/squid.pid # Кэширование и параметры памяти # Кэш: формат, размещение, размер в мегабайтах на диске, число папок первой и второй вложенности # Указанный размер кэша не учитывает издержки файловой системы и должен быть примерно на 20% меньше доступного дискового пространства # Директиву cache_dir, можно указать несколько раз, выделив под кэш дополнительные разделы cache_dir ufs /var/squid/cache 16384 16 256 #memory_pools off memory_pools_limit 100 MB # Не кэшировать файлы больше заданного размера maximum_object_size 2048 MB # По умолчанию 4Мб maximum_object_size_in_memory 2 Mb cache_mem 512 MB # Размер оперативной памяти, отводимой под кэш # Поддержка функционала icap-клиента: #icap_enable on #icap_preview_enable on #icap_preview_size 128 #icap_send_client_ip on #icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/avscan #icap_service service_avi respmod_precache 1 icap://localhost:1344/avscan #icap_class class_antivirus_req service_avi_req # Для каждого имени icap_service указываем отдельную строку icap_class, а не все сервисы # в одной строке, как предлагается в configuration guide на сайте проекта c-icap: # "icap_class class_antivirus service_avi service_avi_req", иначе Squid при запуске выдаст сообщение: # "WARNING: Multiple ICAP services per icap_class # are not yet supported." #icap_class class_antivirus service_avi # Соответственно получаем две строки icap_access для двух классов icap_class #icap_access class_antivirus_req allow all #icap_access class_antivirus allow all # Время устаревания кэшируемого контента в минутах, если явно не задано сервером # Поля: шаблон соответствия URL, минимальное время в минутах, процент для расчета времени устаревания объекта, максимальное время в минутах # Если повторный запрос приходит до наступления минимального времени, объект считается актуальным, запрос к серверу не выполняется # Расчет времени жизни производится по формуле: (ВремяПолучения-ВремяСоздания)*Процент # Чем старее объект, тем дольше он содержится в кэше, но не дольше заданного максимального времени # http://etutorials.org/Server+Administration/Squid.+The+definitive+guide/Chapter+7.+Disk+Cache+Basics/7.7+refresh_pattern/ refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|?) 0 0% 0 refresh_pattern . 0 20% 4320

Создадим папку с acl

# mkdir -pv /usr/local/etc/squid/acl

Создадим файлы acl, установим на них права и необходимо заполнить их

Ссылка на основную публикацию
Adblock detector