Настройка SquidGuard на CentOS 7

Тематические термины: SquidGuard, Squid, CentOS
В двух словах, SquidGuard позволяет блокировать нежелательные сайты с помощью списков доменов и URL-адресов. Данные списки можно вести самостоятельно или скачать готовые базы. Программное обеспечение работает как дополнение к Squid, соответственно, перед его настройкой необходимо настроить и сам Squid. Блокировака работает как для http, так и https.
Установка SquidGuard
Настройка компонентов
SquidGuard
Squid
Проверка
Используем базы (blacklists)
Авторизация через Active Directory
Сборка BerkeleyDB
Сборка SquidGuard
Настройка сервера
Настройка блокировки
Возможные проблемы
Ошибка сегментирования
Syntax error in configfile squidGuard.conf line x
Установка SquidGuard
Сначала необходимо установить epel-репозиторий:
yum install epel-release
Устанавливаем squidGuard:
yum install squidGuard
Настройка сервера
SquidGuard
Открываем конфигурационный файл squidGuard:
vi /etc/squid/squidGuard.conf
Удаляем все его содержимое и вписываем:
dbhome /var/squidGuard/blacklists
logdir /var/log/squidGuard
dest deny {
domainlist manual/domains
urllist manual/urls
}
acl {
default {
pass !deny all
redirect http://www.dmosk.ru
}
}
* dest описывает путь к базам с перечисленными доменами и адресами, к которым необходимо блокировать доступ; acl — правила, по которым squidGuard обрабатывает запросы.
Создаем каталог для хранения базы для блокировки нежелательных сайтов:
mkdir -p /var/squidGuard/blacklists/manual
Создаем базу доменов:
vi /var/squidGuard/blacklists/manual/domains
porno.com
Создаем базу URL:
vi /var/squidGuard/blacklists/manual/urls
porno.com/test
Создаем базу заблокированных ресурсов:
squidGuard -C all
Squid
Открываем конфигурационный файл squid:
vi /etc/squid/squid.conf
Добавляем:
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
* url_rewrite_program — тег, указывающий на внешнюю программу для осуществления перенаправлений.
Задаем права для squid на доступ к файлам squidGuard:
chown -R squid:squid /var/squidGuard
chown root:squid /etc/squid/squidGuard.conf
chmod 0640 /etc/squid/squidGuard.conf
chown -R squid:squid /var/log/squidGuard
Перезапускаем squid:
systemctl restart squid
Проверяем настройку
Открываем браузер, настроенный на работу через прокси-сервер и пытаемся зайти на запрещенный сайт. Мы должны увидеть заглушку (веб-страницу, которую указали в redirect).
Использование баз блокировки сайтов
Для squidGuard уже имеется база доменов и адресов, разделенных по категориям. Их можно применять, чтобы не заводить свою базу вручную.
Переходим в рабочий каталог squidGuard:
cd /var/squidGuard
Удаляем базу, которая шла в комплекте:
rm blacklists.tar.gz
Скачиваем свежую базу с официального сайта:
wget http://squidguard.mesd.k12.or.us/blacklists.tgz
Распаковываем базу:
tar -xvf blacklists.tgz
Применяем ее:
squidGuard -C all
Задаем права для squid:
chown -R squid:squid /var/squidGuard
Настраиваем конфигурационный файл squidGuard:
vi /etc/squid/squidGuard.conf
Добавляем destination:
...
dest porn {
domainlist porn/domains
urllist porn/urls
log porn
}
...
* мы добавили базу porn, домены которой перечислены в файле /var/squidGuard/blacklists/porn/domains и пути в файле /var/squidGuard/blacklists/porn/urls.
Редактируем acl:
...
default {
pass !porn !deny all
...
* правило по умолчанию — пропускать все, кроме destination porn и deny.
Перезапускаем squid:
systemctl restart squid
Авторизация пользователей через Active Directory
* прежде, чем продолжить, настраиваем squid для аутентификации пользователей через AD DS.
Данное ПО позволяет разграничить доступ к сайтам, исходя из членства в группах AD. Однако, для CentOS 7 на момент написания данной инструкции был нюанс — версия из репозитория не выполняла поиск групп в AD, а в логе /var/log/messages мы видели ошибку, на подобие:
kernel: squidGuard[5377]: segfault at ffffffffffffffff ip 00007f0c89ea0722 sp 00007f4a27d64da8 error 5 in libc-2.16.so[7f4a2eb38000+1b6000]
Поэтому необходимо пересобрать squidGuard из исходников.
Первым делом, устанавливаем пакеты, необходимые для сборки исходников:
yum install gcc flex bison openldap-devel
Собираем Berkeley DB
wget http://download.oracle.com/berkeley-db/db-4.6.21.NC.zip
unzip db-*
* если получим ошибку, устанавливаем пакет unzip.
cd db-4.6.21.NC/build_unix/
* где 4.6.21 — версия скачанного исходника berkeley db.
Конфигурируем исходник:
../dist/configure --enable-compat185
Собираем его и устанавливаем:
make
make install
Копируем библиотеки из BerkeleyDB в системные каталоги:
cp /usr/local/BerkeleyDB.4.6/lib/* /usr/lib/
cp /usr/local/BerkeleyDB.4.6/lib/* /usr/lib64/
cp /usr/local/BerkeleyDB.4.6/include/* /usr/include/
Устанавливаем squidGuard из исходников
Скачиваем исходник, распаковываем его и переходи в каталог:
wget http://www.squidguard.org/Downloads/squidGuard-1.4.tar.gz
tar -xvf squidGuard-1.4.tar.gz
cd squidGuard-*
Конфигурируем, собираем и устанавливаем:
./configure --with-ldap=yes
make
make install
Настраиваем сервер
Так как при установке из исходников, пути до некоторых файлов меняются, создаем несколько симлинков.
Создаем симлинк на наш конфигурационный файл для squidGuard из новой рабочей директории:
rm -f /usr/local/squidGuard/squidGuard.conf
ln -s /etc/squid/squidGuard.conf /usr/local/squidGuard/squidGuard.conf
Аналогично для файла логов:
rm -f /usr/local/squidGuard/log/squidGuard.log
ln -s /var/log/squidGuard/squidGuard.log /usr/local/squidGuard/log/squidGuard.log
Редактируем конфигурационный файл squid:
vi /etc/squid/squid.conf
#url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
* мы поменяли путь до бинарника squidGuard и конфигурационного файла.
Перезапускаем squid:
systemctl restart squid
Можно проверить, что squidGuard по прежнему блокирует сайты.
Настраиваем блокировку на основе Actie Directory
Открываем конфигурационный файл squidGuard:
vi /usr/local/squidGuard/squidGuard.conf
Добавляем настройку для привязки с AD:
ldapbinddn cn=squidguard,cn=users,dc=domain,dc=local
ldapbindpass password
ldapcachetime 300
* ldapbinddn — учетная запись в AD, от которой squidGuard будет подключаться к каталогу; ldapbindpass — пароль для учетной записи squidguard; ldapcachetime — время в минутах, в течение которого сервер будет кэшировать результаты обращения к AD.
Добавляем группу пользователей:
src adusers {
ldapusersearch ldap://domain.local:3268/DC=domain,DC=local?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=squidGroup,CN=Users,DC=domain,DC=local))
}
* adusers — произвольное имя группе пользователей, которое мы будем использовать для ограничения доступа; domain.local:3268 — группа контроллеров домена для домена domain.local (подключение выполняется к глобальному каталогу по порту 3268).
Настраиваем ограничения для созданной группы:
acl {
adusers {
pass !deny !porn all
redirect http://www.dmosk.ru
}
...
* в данном примере мы запрещаем доступ к сайтам категорий porn и deny для пользователей группы adusers.
Перезапускаем squid:
systemctl restart squid
Возможные ошибки
1. Ошибка сегментирования
Появляется при вводе команды squidGuard -C all.
Причина: неправильный конфигурационный файл. По умолчанию, в комплекте идет файл, не пригодный для использования.
Решение: удалить конфигурационный файл и создать новый.
2. Syntax error in configfile squidGuard.conf line x
Система выдает ошибку, ссылаясь на строку применения ldapsearch.
Причина: squidGuard собран без поддержки ldap (--with-ldap=yes).
Решение: пересобраться программное обеспечение из исходника. Если при конфигурировании, система выдает ошибку конфигурирования lpad, необходимо убедиться, что установлен пакет openldap-devel.