Главная » 2009 Сентябрь 29 » SquidGuard - борьба с нарушителями
11:26 SquidGuard - борьба с нарушителями |
Вступление Думаю перед каждым администратором рано или поздно встает вопрос, как бороться с нецелевым использованием интеренет трафика, или если по простому, как запретить пользователям скачивать музыку, видео, просматривать порно сайты и т.д. и т.п. Конечно это можно сделать и с помощью самого squid, с помощью acl, но на мой взгляд для этих целей более подходит squidGuard. Принцып работы тот же, т.е. мы создаем acl (Access Control List) списки управления доступом и затем разрешаем/запрещаем определенным классам пользователей те или инные категории. . В предыдущей статье я описывал настройку прокси сервера squid. Поэтому буду исходить из того, что squid у вас уже настроен и работает. Итак, как всегда, устанавливаем все ПО из портов, squidguard не исключение. # cd /usr/ports/www/squidguard/ # setenv SQUID_UID squid # setenv SQUID_GID squid # make install clean # rehash Вместе с squidGuard идет так называемый blacklist, т.е. список запрещенных сайтов, разбитых по категориям. Но я не рекомендовал бы его использовать, так как он довольно таки старый и маленький. Я рекомендую скачать bigblacklist. Хоть занимает он много ~18 МБ, но он того стоит. # cd /tmp # tar zxvf bigblacklist.tar.gz x blacklists/ x blacklists/CATEGORIES x blacklists/ads/ x blacklists/ads/domains x blacklists/ads/urls x blacklists/ads/expressions x blacklists/adult/ ... ... ... x blacklists/weather/urls x blacklists/webmail/ x blacklists/webmail/domains x blacklists/webmail/urls x blacklists/whitelist/ x blacklists/whitelist/domains x blacklists/whitelist/urls После этого, удаляем текущие базы и копируем новые # rm -fr /var/db/squidGuard/* # cp -R blacklists/ /var/db/squidGuard/ Если вы все сделали правильно, то у нас должна получиться такая структура папок # ls -l /var/db/squidGuard/ total 132 -rw-rw---- 1 root wheel 3664 May 9 17:55 CATEGORIES drw-rw---- 2 root wheel 512 May 9 17:55 ads drw-rw---- 2 root wheel 512 May 9 17:55 adult drw-rw---- 2 root wheel 512 May 9 17:55 aggressive drw-rw---- 2 root wheel 512 May 9 17:55 antispyware drw-rw---- 2 root wheel 512 May 9 17:55 artnudes drw-rw---- 2 root wheel 512 May 9 17:55 audio-video drw-rw---- 2 root wheel 512 May 9 17:55 banking drw-rw---- 2 root wheel 512 May 9 17:55 beerliquorinfo drw-rw---- 2 root wheel 512 May 9 17:55 beerliquorsale drw-rw---- 2 root wheel 512 May 9 17:55 cellphones drw-rw---- 2 root wheel 512 May 9 17:55 chat drw-rw---- 2 root wheel 512 May 9 17:55 childcare drw-rw---- 2 root wheel 512 May 9 17:55 cleaning drw-rw---- 2 root wheel 512 May 9 17:55 clothing drw-rw---- 2 root wheel 512 May 9 17:55 culinary drw-rw---- 2 root wheel 512 May 9 17:55 dating drw-rw---- 2 root wheel 512 May 9 17:55 dialers drw-rw---- 2 root wheel 512 May 9 17:55 drugs drw-rw---- 2 root wheel 512 May 9 17:55 ecommerce drw-rw---- 2 root wheel 512 May 9 17:55 entertainment drw-rw---- 2 root wheel 512 May 9 17:55 frencheducation drw-rw---- 2 root wheel 512 May 9 17:55 gambling drw-rw---- 2 root wheel 512 May 9 17:55 games drw-rw---- 2 root wheel 512 May 9 17:55 gardening drw-rw---- 2 root wheel 512 May 9 17:55 government drw-rw---- 2 root wheel 512 May 9 17:55 hacking drw-rw---- 2 root wheel 512 May 9 17:55 homerepair drw-rw---- 2 root wheel 512 May 9 17:55 hygiene drw-rw---- 2 root wheel 512 May 9 17:55 instantmessaging drw-rw---- 2 root wheel 512 May 9 17:55 jewelry drw-rw---- 2 root wheel 512 May 9 17:55 jobsearch drw-rw---- 2 root wheel 512 May 9 17:55 kidstimewasting drw-rw---- 2 root wheel 512 May 9 17:55 mail drw-rw---- 2 root wheel 512 May 9 17:55 mixed_adult drw-rw---- 2 root wheel 512 May 9 17:55 mobile-phone drw-rw---- 2 root wheel 512 May 9 17:55 naturism drw-rw---- 2 root wheel 512 May 9 17:55 news drw-rw---- 2 root wheel 512 May 9 17:55 onlineauctions drw-rw---- 2 root wheel 512 May 9 17:55 onlinegames drw-rw---- 2 root wheel 512 May 9 17:55 onlinepayment drw-rw---- 2 root wheel 512 May 9 17:55 personalfinance drw-rw---- 2 root wheel 512 May 9 17:55 pets drw-rw---- 2 root wheel 512 May 9 17:55 phishing drw-rw---- 2 root wheel 512 May 9 17:55 porn drw-rw---- 2 root wheel 512 May 9 17:55 proxy drw-rw---- 2 root wheel 512 May 9 17:55 radio drw-rw---- 2 root wheel 512 May 9 17:55 reaffected drw-rw---- 2 root wheel 512 May 9 17:55 religion drw-rw---- 2 root wheel 512 May 9 17:55 ringtones drw-rw---- 2 root wheel 512 May 9 17:55 searchengines drw-rw---- 2 root wheel 512 May 9 17:55 sexual_education drw-rw---- 2 root wheel 512 May 9 17:55 sexuality drw-rw---- 2 root wheel 512 May 9 17:55 sportnews drw-rw---- 2 root wheel 512 May 9 17:55 sports drw-rw---- 2 root wheel 512 May 9 17:55 spyware drw-rw---- 2 root wheel 512 May 9 17:55 updatesites drw-rw---- 2 root wheel 512 May 9 17:55 vacation drw-rw---- 2 root wheel 512 May 9 17:55 violence drw-rw---- 2 root wheel 512 May 9 17:55 virusinfected drw-rw---- 2 root wheel 512 May 9 17:55 warez drw-rw---- 2 root wheel 512 May 9 17:55 weapons drw-rw---- 2 root wheel 512 May 9 17:55 weather drw-rw---- 2 root wheel 512 May 9 17:55 webmail drw-rw---- 2 root wheel 512 May 9 17:55 whitelist Собственно sports, violence, porn это и есть категории запретов (спорт, насилие, порнография). В файле /var/db/squidGuard/CATEGORIES приводится краткое описание к каждой из категорий. Теперь нам надо настроить squidGuard, для этого необходимо изменить его конфигурационный файл squidGuard.conf # cd /usr/local/etc/squid/ # cp squidGuard.conf.sample squidGuard.conf # # /usr/local/etc/squid/squidGuard.conf # # Указываем где у нас располагаются наши базы dbhome /var/db/squidGuard # Указываем где будет храниться log файл squidGuard logdir /var/log/ # Описываем классы доступа. Затем мы для каждого из классов # (admins, clients) создадим свой набор правил доступа. src admins { ip 192.168.127.50 ip 192.168.127.100 } src clients { ip 192.168.127.10 ip 192.168.127.11 ip 192.168.127.12 ip 192.168.127.13 ip 192.168.127.14 ip 192.168.127.15 } # В целях увеличения производительности желательно использовать # диапазон адресов, например ip 192.168.127.10-192.168.127.15 # Далее описываем все категории запретов dest ads { domainlist ads/domains expressionlist ads/expressions urllist ads/urls redirect http://192.168.127.230/block/ads.html } dest adult { domainlist adult/domains urllist adult/urls redirect http://192.168.127.230/block/adult.html } ... ... ... dest webmail { domainlist webmail/domains urllist webmail/urls redirect http://192.168.127.230/block/webmail.html } dest whitelist { domainlist whitelist/domains urllist whitelist/urls redirect http://192.168.127.230/block/whitelist.html } # Ну а теперь непосредственно делаем раздачу слонов. # Клиентам, разрешаем все, кроме запрещенного, # т.е. после слова pass вы должны указать все категории запрета, # которые вы описывали с помощью ключевого слова dest. # знак ! означает отрицание, т.е. если вы написали pass !porn, # это значит что данные пользователи не смогут просматривать сайты, # попадающие под категорию porn acl { clients { pass !ads !adult ... !porn !warez all } # Себе разрешаем все, кроме баннеров admins { pass !banner all } # И наконец, задаем правило по умолчанию - всем все запрещаем. default { pass none redirect http://192.168.127.230/block/default.html } } Сейчас я напримере опишу принцип построения файла squidGuard.conf, чтобы не приводить все категории запрета, так как их очень много. А принцип построения у них одинаковый. Итак, в папке /var/db/squidGuard есть папки - ads, adult, porno и т.д. Каждая из этих папок соответствует отдельной категории запрета. В каждой из этих папок может находиться 3 файла: domains - в данном файле содержатся запрещенные домены. expressions - в данном файле содержатся регулярные выражения, которые применяются к запрашиваемому url. Т.е. для борьбы с порнографией вы добавляете сюда, наиболее часто встречаемые слова, например, pornstar, sexdream, showgirl, striptease) и т.д. Если какое-нибудь из этих слов встретится в url, то этот адрес будет заблокирован. urls - из названия понятно, что здесь необходимо указывать запрещенные url, если вам надо заблокировать только определенный адрес, а не весь домен. Domainlist, Urllist, Expressionlist DOMAINLIST Например, если у вас в файле domains есть строка sex.com, то будут блокироваться следующие адреса: sex.com, www.sex.com, whatever.sex.com, www.what.ever.sex.com А адреса www.lesbian-sex.com, www.geysex.com уже не будут попадать под это правило. URLLIST Например, если у вас в файле urls есть строка sex.com/geys, то будут блокироваться следующие адреса: http://sex.com/geys http://sex.com/geys/whatever, ftp://sex.com/geys/whatever, ftp://www.sex.com/geys/whatever, ftp://web.sex.com/geys/whatever, ftp://www3.sex.com/geys/whatever, А адреса sex.com/lesbians, sex.com/adult уже не будут попадать под это правило. EXPRESSIONLIST Допустим мы хотим блокировать загрузку аудио и видео файлов, наиболее распространенных форматов. В этом случае наиболее эффективным будет использование регулярного выражения следующего вида: \.(ra?m|mpe?g?|mov|movie|qt|avi|dif|dvd?|mpv2|mp3|asf)($|\?) Думаю синтаксис данного файла очевиден, именно благодаря этому списку запросы типа: http://www.music.ru/whatever.mp3, http://www.video.com/thematrix.avi http://www.whatever.com/whatever.mpg попадут под категорию запрета и будут блокированы. Учитывайте эти особенности при добавлении новых правил. Регулярные выражения и производительность Советую не злоупотреблять регулярными выражениями, особенно при большой нагрузке. Так как они потребляют очень много ресурсов. Производительность зависит от сложности самого регулярного выражения, а так же от производительности библиотеки регулярных выражений, с которой был собран squidGuard. Каждая категория запрета описывается с помощью ключевого слова dest. И имеет следующий синтаксис dest имя_категории { domainlist путь_к_файлу/имя_файла expressionlist путь_к_файлу/имя_файла urllist путь_к_файлу/имя_файла дествие, если адрес попал под данную категорию запрета } Примечание !!! Все пути в dest задаются относительно директории, указанной в параметре dbhome. Например, если вы указали dbhome /var/db/squidGuard, а в dest указали - domainlist ads/domains, то это значит, что у вас список с запрещенными доменами должен находиться в /var/db/squidGuard/ads, а сам файл должен называться domains. Для составления полного списка категорий запрета, вы заходите в каждую из папок находящихся в /var/db/squidGuard/ и в зависимости от того, какие там файлы находятся, составляете соовтетствующее правило. Рекомендую давать имя категории запрета, совпадающее с именем папки, например, если папка называется audio-video, то имя категории будет - dest audio-video. Особо ленивые могут взять готовый squidGuard.conf После того, как мы составили конфигурационный файл, нам необходимо преобразовать наши текстовые файлы в БД (используется Berkeley DB), для обеспечения наилучшего быстродействия при поиске данных. Для этого воспользуемся следующей командой # squidGuard -d -C all 2006-05-09 18:59:29 [40660] init domainlist /var/db/squidGuard/ads/domains 2006-05-09 18:59:32 [40660] create new dbfile /var/db/squidGuard/ads/domains.db 2006-05-09 18:59:32 [40660] init expressionlist /var/db/squidGuard/ads/expressions 2006-05-09 18:59:32 [40660] init urllist /var/db/squidGuard/ads/urls 2006-05-09 18:59:32 [40660] create new dbfile /var/db/squidGuard/ads/urls.db ... ... ... 2006-05-09 19:09:35 [40660] init urllist /var/db/squidGuard/whitelist/urls 2006-05-09 19:09:35 [40660] create new dbfile /var/db/squidGuard/whitelist/urls.db 2006-05-09 19:09:35 [40660] squidGuard 1.2.0 started (1147201169.478) 2006-05-09 19:09:35 [40660] db update done 2006-05-09 19:09:35 [40660] squidGuard stopped (1147201775.362) Как видно из сообщений файлы с БД называются urls.db и domains.db, старые файлы urls и domains нужно удалить. Теперь нам осталось только выставить необходимые права и создать лог файл. # chown -R squid:squid /var/db/squidGuard # chmod -R 640 /var/db/squidGuard # chmod 550 /var/db/squidGuard # chmod 550 /var/db/squidGuard/* # touch /var/log/squidGuard.log # chown squid:squid /var/log/squidGuard.log Все, со squidGuard мы закончили. Теперь осталось только указать squid использовать в качестве редиректора squidGuard. Для этого внесем изменения в squid.conf. # # /usr/local/etc/squid/squid.conf # TAG: redirect_program # Указываем путь к squidGuard redirect_program /usr/local/bin/squidGuard # TAG: redirect_children # Количество одновременно запускаемых процессов squidGuard. redirect_children 5 Squid-2.6.STABLE и редиректор В ветке 2.6.STABLE произошли изменения и теперь вместо параметров redirect_program и redirect_children необходимо использовать url_rewrite_program и url_rewrite_children соответственно. Теперь у нас все готово к запуску нашей связки. # /usr/local/etc/rc.d/squid.sh start Starting squid. # cat /var/log/squidGuard.log 2006-05-09 19:12:33 [40744] init domainlist /var/db/squidGuard/ads/domains 2006-05-09 19:12:33 [40744] loading dbfile /var/db/squidGuard/ads/domains.db 2006-05-09 19:12:33 [40743] init domainlist /var/db/squidGuard/ads/domains 2006-05-09 19:12:33 [40743] loading dbfile /var/db/squidGuard/ads/domains.db 2006-05-09 19:12:33 [40744] init expressionlist /var/db/squidGuard/ads/expressions ... ... ... 2006-05-09 19:12:34 [40745] init urllist /var/db/squidGuard/whitelist/urls 2006-05-09 19:12:34 [40745] loading dbfile /var/db/squidGuard/whitelist/urls.db 2006-05-09 19:12:34 [40745] squidGuard 1.2.0 started (1147201953.012) 2006-05-09 19:12:34 [40745] squidGuard ready for requests (1147201954.939) # cat /usr/local/squid/logs/cache.log | grep squidGuard 2006/05/09 19:12:32| helperOpenServers: Starting 5 'squidGuard' processes Тестирование squidguard После этого можно протестировать squidGuard, для этого воспользуйтесь скриптом # perl squidGuard.pl Введите тестируемый адрес: 192.168.127.10 В результате будет создан файл result.txt, с таким содержимым # cat result.txt Запрос: http://www.sex.com 192.168.127.10/- - GET Результат: http://192.168.127.253/block/adult.html 192.168.127.10/- - GET Запрос: http://www.adult.com 192.168.127.10/- - GET Результат: http://192.168.127.253/block/adult.html 192.168.127.10/- - GET Запрос: http://www.aport.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.porno.ru 192.168.127.10/- - GET Результат: http://192.168.127.253/block/adult.html 192.168.127.10/- - GET Запрос: http://www.chat.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.test.com 192.168.127.10/- - GET Результат: http://192.168.127.253/block/ads.html 192.168.127.10/- - GET Запрос: http://www.aport.ru 192.168.127.10/- - GET Результат: OK Запрос: http://adv.aport.ru/banners/ban_1342.gif 192.168.127.10/- - GET Результат: http://192.168.127.253/block/ads.html 192.168.127.10/- - GET Запрос: http://www.bs.yandex.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.riva.ru 192.168.127.10/- - GET Результат: OK Запрос: http://linkexchange.ru/banners/bnr_dfg12.gif 192.168.127.10/- - GET Результат: http://192.168.127.253/block/ads.html 192.168.127.10/- - GET Запрос: http://www.sga/read.mp3 192.168.127.10/- - GET Результат: http://192.168.127.253/block/audio-video.html 192.168.127.10/- - GET Запрос: http://www.service.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.delit.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.teenslut.com 192.168.127.10/- - GET Результат: http://192.168.127.253/block/adult.html 192.168.127.10/- - GET Запрос: http://www.abort.ru 192.168.127.10/- - GET Результат: OK Запрос: http://engine.awaps.ru:8000/br/GOLDEN.gif 192.168.127.10/- - GET Результат: OK Запрос: http://www.rikki.ru 192.168.127.10/- - GET Результат: OK Запрос: http://www.mus.ru/read_me.mp3 192.168.127.10/- - GET Результат: http://192.168.127.253/block/audio-video.html 192.168.127.10/- - GET Ну вот собственно и вся настройка. Теперь вы сэкономите много трафика. Обновление БД Часто возникает необходимость запретить или разрешить тот или иной url/домен. Я специально создавал для каждой категории запрета свою страничку. Так намного легче будет найти под какую категорию запрета попал тот или иной адрес. После того, как вы узнали в какой категории содержится необходимый адрес, необходимо удалить или добавить его. Для этого мы создаем такой файл. Для примера я учитываю, что нужный адрес попал под категорию ADS. Для этого, мы создаем файл domains.diff в папке /var/db/squidGuard/ads следующего содержания +domain1.com +domain2.com +domain3.com ... -domain5.com -domain6.com -domain7.com Думаю, синтаксис и так понятен. Домены, перед которыми стоит знак + будут добавлены в список, а со знаком минус соответственно удалены из него. После того как вы создали файл, обновляем БД # squidGuard -u /var/db/squidGuard/ads/domains.diff # cat /var/log/squid/squidGuard.log 2006-10-25 17:16:38 [4924] update dbfile /var/db/squidGuard/ads/domains.db 2006-10-25 17:16:38 [4924] update: added 3 entries, deleted 3 entries 2006-10-25 17:16:38 [4924] squidGuard 1.2.0 started (1161785798.107) 2006-10-25 17:16:38 [4924] db update done 2006-10-25 17:16:38 [4924] squidGuard stopped (1161785798.113) И даем команду squid на реконфигурацию, чтобы он заново загрузил обновленные БД. # squid -k reconfigure |
|
Всего комментариев: 1 | |
| |