SquidGuard

Матеріал з ALT Linux Wiki

SquidGuard це такий програмний додаток до Squid який дозволяє гнучко керувати доступом до ресурсів світових тенет користувачів вашого проксі. Він має власний окремий файл налаштувань, що спрощує контроль саме за доступом.

Встановлення

Щоб встановити SquidGuard достатньо дати команду: apt-get install squidGuard

Після встановлення пакунку ви отримаєте файл налаштувань у каталозі /etc/squid та потрібні для роботи самого SquidGuard каталоги та файли у var/lib/squidGuard. Під var/lib/squidGuard/db навіть будуть бази з якими вже можно починати працювати.

Налаштування

До пакунку вже включено попередньо налаштований файл налаштувань. Можливо, навіть, вам не доведеться нічого міняти щоб розпочати роботу. Проте, перевірити налаштування треба все одно. Наприклад, там заборонено доступ до www пошти у робочий час. Крім того, треба прописати шлях до файлу squidGuard у налаштуваннях самого Squid.

Налаштування у Squid

Для цього треба скорегувати два-три рядка у файлі /etc/squid/squid.conf.

redirect_program /usr/bin/squidGuard  # шлях до файлу
redirect_children 5                   # скільки процесів перенаправлення запитів може бути відкрито одночасно
redirector_bypass on                  # дозволити запити до ресурсів оминаючи сам squidGuard

Навіть один процес squidGuard зможе обслужити дуже велику кількість запитів. Головний виграш від кількості процесів більше одного, як кажуть, можна отримати на багатопроцесорних системах. Останній рядок дозволяє користувачам оминати контроль коли squidGuard не встигає за кількістю запитів. Кажуть, заборона прямих звертань оминаючи фільтр у такій ситуації "валить" Squid.

Налаштування SquidGuard

Визначення базових каталогів

Детальну інформацію щодо всіх можливостей налаштування SquidGuard ви можете подивитися у його документації. Але поглянемо на налаштування "з коробки". Файл досить "розлогий". Починається він з визначення двох змінних. dbhome визначає базовий шлях до баз з адресами які ми будемо використовувати у правилах доступу. logdir -- показує де буде розміщено файл журналу роботи SquidGuard.

dbhome /var/lib/squidGuard
logdir /var/log/squid

Тут коментарі, як кажуть, зайві.

Керування доступом з урахуванням часу

Наступним іде блок визначення робочого часу:

#
# TIME RULES:
# abbrev for weekdays: 
# s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat
time workhours {
       weekly mtwhf 09:00 - 18:00
       date *-*-01  09:00 - 18:00
}

Це дозволяє встановити різні правила на різні проміжки часу. У прикладі встановлюється робочий час з понеділка до п'ятниці. І за датою всі перші числа місця. Чесно кажучи, я не знаю на чому грунтується цей рядок.

Щоб це працювало у acl має бути присутнім щось такого типу:

<src> within 

Правила підстановки

Далі визначаються правила підстановки у адресах. Вам самим визначатися чи вам це треба.

#
# REWRITE RULES:
#
rew dmz {
       s@://admin/@://admin.example.com/@i
       s@://example.com/@://www.example.com/@i
}

Якщо подібна підстановка потрібна, не забудьте виправити назву домену на потрібну.

Визначення джерел

SquidGuard дозволяє розмежувати правила доступу до ресурсів за декількома критеріями. Наприклад, за ІР адресами користувачів мережі.

src lan {
      ip              192.168.2.0/24
}

Цим блоком визначається блок адрес мережі на 255 адрес. Блоків адрес можна визначити декілька. Таким чином, можна розмежувати доступ до ресурсів за діапазонами адрес. Адреси можна задавати декількома спосабами.

       ip              192.168.2.3 192.168.2.7
       ip              192.168.2.0-192.168.2.77
       iplist          iplist/blocked
       user            baduser
       

Перший рядок задає адреси перерахуванням. Другий -- діапазон у форматі від та до. Також можна задати посиланням на файл. У цьому випадку файл треба розмістити у тому місці файлової системи куди показує змінна dbhome або записати файл з урахуванням відносного або повного шляху до нього, рядки 3 та 4. Тобто, для четвертого рядка файл повинен лежати як /var/lib/squidGuard/baduser. І вміст файлу може бути, наприклад, таким:

192.168.2.0-192.168.2.255
172.16.12.0/255.255.255.0
10.5.3.1/28

Можна напряму блокувати за базою з Тенет. Якщо ви знаєте таку базу і цілком їй довіряєте. Якось так:

acl {
       default {
               pass !dnsbl:your.preferred.blacklist.domain.com all
               redirect http://localhost/block.html
       }
}

Ви можете прописати стільки джерел скільки вам треба і досить точно побудувати групи доступу до інформації.

Бази для блокування

Всі бази з якими ви збираєтесь працювати треба прописати у файлі налаштувань SquidGuard. Непрописані бази -- теж саме, що і відсутні. Принцип досить простий:

dest ads {
       domainlist      db/ads/domains
       urllist         db/ads/urls
       expressionlist  db/ads/expressions
}

Принципово, тут нічого складного. dest -- службове слово, що визначає тип налаштувань. Далі -- назва ресурсу і у дужках шлях до преліку доменів та універсальних визначників ресурсу (URL), доступом до яких ми збираємось керувати. Третій рядок визначає шлях до файлу з регулярними виразами. Користуватися ним треба вкрай обережно. Можна "зарізати" або, навпаки, дозволити зовсім не те що хотілося. :) Шлях до файлів визначається відносно визначеної на початку файла змінної dbhome. Баз можна визначити стільки скільки треба. Як вже було зазначено вище, декілька баз є в самому пакунку. У прикладі визначення однієї з таких баз.

Розподіл доступу

Ну і саме цікаве. Власне розподіл доступу.

acl {
       blocked {
               pass    none
               redirect http://10.10.10.80/cgi-bin/squidGuard-ru.cgi?clientaddr=%a&clientname=%n&cl
ientident=%i&srcclass=%s&targetclass=%t&url=%u
       }
       admin {
               pass    local-ok !ads any
               rewrite dmz
               redirect http://127.0.0.1/cgi-bin/squidGuard-ru.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&tar getclass=%t&url=%u
       }
       lan within workhours {
               pass    local-ok !local-block !ads !aggressive !anecdotes !audio-video !chat !drugs 
!gambling !hacking mail !porn !proxy !redirector !sex !violence !warez !warez1 any
               redirect http://127.0.0.1/cgi-bin/squidGuard-ru.cgi?clientaddr=%a&clientname
=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
       } else {
               pass    local-ok !local-block !ads !chat any
               redirect http://127.0.0.1/cgi-bin/squidGuard-ru.cgi?clientaddr=%a&clientname=
%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
       }
       default {
               pass     none
               redirect http://127.0.0.1/cgi-bin/squidGuard-ru.cgi?clientaddr=%a&clientname
=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u
       }
}

Запуск

Apache