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

Обновлено и опубликовано Опубликовано:

Тематические термины: SquidGuard, SquidCentOS

В двух словах, SquidGuard позволяет блокировать нежелательные сайты с помощью списков доменов и URL-адресов. Данные списки можно вести самостоятельно или скачать готовые базы. Программное обеспечение работает как дополнение к Squid, соответственно, перед его настройкой необходимо настроить и сам Squid. Блокировака работает как для http, так и https.

Установка 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.

# Серверы # Интернет # Безопасность # CentOS # Active Directory
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет