Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> Rejik

Блокирование баннеров с помощью SQUID+REJIK

Автор: dikens3.


Статья получилась как рекламная, но проект мне действительно понравился и сам пользуюсь уже более года. Нарекание было одно, но оказалось, что необходимо было просто воспользоваться portupgrade. (Связывался по E-MAIL с автором, проблем не возникло, рассказал о проблеме, сообщил версию rejik’а и получил ответ на свой вопрос.)
Итак, если:

  • 1. Вас раздражает перемигивание рекламных баннеров;
  • 2. Вас не устраивает, что Вам навязывают рекламу;
  • 3. Вам бы хотелось ускорить загрузку страниц и сэкономить время;
  • 4. Вы платите провайдеру за трафик и хотели бы сэкономить деньги;
  • 5. Ваши соседи по сетке забивают канал, качая порно или mp3;
  • 6. Вам надоело устранять последствия установки sexdownloader.exe;
  • 7. Вы хотите продемонстрировать свою высокую квалификацию начальству;
  • 8. Вам просто надоело бесконтрольно пускать юзеров на любой сайт и позволять им качать оттуда что ни попадя.

    Тогда вам поможет проект REJIK (www.rejik.ru)

    Что такое rejik? Это программа редиректор для squid, которая блокирует рекламу по списку блокировок (бан-листам).

    Не поленитесь, сходите на сайт и получите ответы на часто-задаваемые вопросы:
    (Оно мне надо? Как это работает? Как установить? Как настроить? Как вырезать?)

    BAN-LIST’ы постоянно обновляются. И для скачивания обновлений необходимо зарегистрироваться, но не только, нужно ещё и насобирать баны.
    Тут  придётся немного поработать. Способов несколько:
    1. Платная подписка на DBL листы. (2000 руб. в год)
    2. Проверкой BAN-LIST’ов (Тут необходимо зарегистрироваться на сайте и выбрать необходимый тип листа и размер)
    3. Добавлением в список новых правил для удаления баннеров/url и т.п.

    Предполагается, что Squid и Apache (nginx и т.п.) уже настроен и работает.
    Устанавливаем rejik:
    * Включаем все опции. Опцию clean при установке не указываем, позже файлы нам пригодятся.
    cd /usr/ports/www/rejik
    make install
    

    После установки у Вас не будет всех BAN-LIST’ов, как бы вам этого не хотелось, а только небольшая затравка. Находятся они в /usr/ports/www/rejik/work/banlists
    Всю папку banlists нужно скопировать в установленную директорию /usr/local/rejik
    Делаем:
    # cp -R /usr/ports/www/rejik/work/banlists /usr/local/rejik
    

    Далее копируем картинку, которой будем заменять баннеры, и странички, которые будут отображаться, если пользователь захочет пойти на запрещённые ресурсы.
    Все файлы находятся в в папке /usr/ports/www/rejik/work/squid-like-www-en
    Копируем куда нужно, чтобы до неё мог добраться Apache, у меня это /usr/local/www/ban:
    # cp -R /usr/ports/www/rejik/work/squid-like-www-en /usr/local/www/ban
    

    Можно проверить доступ набрав http://ВАШ_ИП_Apache/ban/porno.html

    Приступаем к самой настройке:
    Squid:
    Следуем инструкции, и вносим необходимые изменения в squid.conf:
    # Антибаннер
    url_rewrite_program        /usr/local/rejik/redirector /usr/local/rejik/redirector.conf
    url_rewrite_children       15
    

    rejik:
    Файл /usr/local/rejik/redirector.conf правим до примерно такого состояния:
    # Лог ошибок redirectora (Бывает он не может разобрать URL и т.п.)
    error_log /usr/local/rejik/redirector.err
    # Лог произведённых замен, в нём будем смотреть кто
    # куда хотел пойти, и какие баннеры заменены.
    change_log /usr/local/rejik/redirector.log
    
    make-cache /usr/local/rejik/make-cache
    
    work_ip 127.0.0.1/8
    work_ip 192.168.x.0/24
    
    <BANNER>
    ban_dir /usr/local/rejik/banlists/banners
    url http://ВАШ_ИП_Apache/ban/1x1.gif
    
    <PORNO>
    ban_dir  /usr/local/rejik/banlists/porno
    url http://ВАШ_ИП_Apache/ban/porno.html
    
    <AUDIO-VIDEO>
    ban_dir /usr/local/rejik/banlists/mp3
    url http://ВАШ_ИП_Apache/ban/audio-video.html
    
    <JS>
    ban_dir /usr/local/rejik/banlists/js
    url http://ВАШ_ИП_Apache/ban/js.js
    

    Для выставления необходимых пермишенов запускаем /usr/local/rejik/tools/set-permissions

    Стартуем squid и смотрим в логах.(cache.log)
    2007/01/29 15:48:24| helperOpenServers: Starting 15 'redirector' processes

    Смотрим ошибки, если есть, в /usr/local/rejik/redirector.log

    Если всё нормально, заходим на какой-нибудь www.rambler.ru и смотрим лог rejik’а
    2007-01-29 16:48:37 BANNER: \
    192.168.x.x - http://counter.rambler.ru/top100.cnt?29811 (urls rule: counter.rambler.ru)
    2007-01-29 16:48:37 BANNER: \
    192.168.x.x - http://images.rambler.ru/head2005/rambler.gif (pcre rule#: 43)
    2007-01-29 16:48:37 BANNER: \
    192.168.x.x - http://images.rambler.ru/upl/r3audio/crim_small-1.jpg (urls rule: images.rambler.ru/upl)
    2007-01-29 16:48:37 BANNER: \
    192.168.x.x - http://images.rambler.ru/upl/r3audio/games2.gif (urls rule: images.rambler.ru/upl)
    2007-01-29 16:48:37 BANNER: \
    192.168.x.x - http://images.rambler.ru/upl/r3/maxwell_electro_x25Z.gif (urls rule: images.rambler.ru/upl)
    2007-01-29 16:48:38 BANNER: \
    192.168.x.x - http://images.rambler.ru/upl/r3audio/promoblock.gif (urls rule: images.rambler.ru/upl)

    После тестирования отключаем логи замены баннеров (Жрут много такие логи, а толку от них не очень.:-) )
    <BANNER>
    ban_dir /usr/local/rejik/banlists/banners
    url http://ВАШ_ИП_Apache/ban/1x1.gif
    log off
    

    Вот и всё.

    На момент исправления статьи использовалось:
    server# uname -a
    FreeBSD server.dom.ru.local 6.2-STABLE FreeBSD 6.2-STABLE #0: Sun Nov  4 14:23:15 MSK 2007
    root@server.dom.ru.local:/usr/obj/usr/src/sys/MYKERNEL  i386
    
    server# pkg_info | egrep "(squid|nginx)"
    nginx-nopcre-0.5.33 Robust and small WWW server
    rejik-3.2.1_1       A squid redirector used for blocking unwanted content
    squid-2.6.16        HTTP Caching Proxy
    

    banlist'ы, от 28 сентября 2007 года.
    Банлисты
    файл скачан размер размещён примечание
    rejik.lists.tar.bz2
    4043 363.7kb 2007-09-28 Бан листы от 28 сентября 2007 года.

    Для вопросов существуют форумы:
    http://forum.lissyara.su/
    http://www.rejik.ru/forum/



    размещено: 2007-01-29,
    последнее обновление: 2007-12-01,
    автор: dikens3


    Happy_demon, 2007-01-31 в 10:11:51

    статья отличная. все просто и предельно ясно. странички на пхп - очень приятно и удобно. единственное- логи я привык хранить /var/log. в данном случае
    error_log /var/log/rejik/redirector.err
    change_log /var/log/rejik/redirector.log
    и режик уж очень сильно привязан при установке к /usr/local/rejik, даже если указать make INSTALL_DIR=/usr/local/etc - он все равно ругается что там не найден redirect.conf разбираться было лень, но вообще я все настроечные файлы предпочитаю держать /usr/local/etc

    dikens3, 2007-01-31 в 11:24:08

    Могу добавить, что там несовсем PHP страницы, я только добавил PHP код в них для вывода прикольных картинок. В подключаемом файле myrandom.php нужно изменить IP-Адрес на ваш собственный.

    KaMa-CyTpA, 2007-03-01 в 9:28:37

    Какая-то нелепая там регистрация для получения этих листов - непонятно. Типа ещё чего-то там где-то заплатить...
    Уже не Free
    Сквидом ведь самим можно "резать" - и, вроде, нехило.
    Там вроде даже регулярные выражения прокатывают...

    Nark, 2007-04-20 в 22:36:08

    Вы не указали что режик должен быть запущен того пользователя, от которого запущен squid

    Nark, 2007-04-20 в 22:38:19

    Регистрация там абсолютно нормальная, а вот набрать балы это другая тема, я не углядел при проверке и ответил да, а надо было нет или незнаю, с меня со драли 50 балов за не внимательность. а вобще rejik в 100 раз лучше чем squidguard

    Raven2000, 2007-09-27 в 14:28:52

    Дюк поменяй
    #cd /usr/ports/www/rejik && make install clean
    Выбрать:
    Options for rejik 3.2.1_1
    [X] BAN  With banlists
    [X] DBL  With DBL scripts
    [X] WWW  With error pages
    В Squid.conf
    url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf
    redirect_children 15
    >Находятся они в /usr/ports/www/rejik/work/banlists
    Уже нет банлисты и ban качаем с сайта режика

    _az_, 2007-10-16 в 18:04:14

    Изменение конфига РЕЖИКА по времени

    В стандартных настройках РЕЖИКа нет возможности изменять правила в зависимости от времени. Придется обходить этот недостаток. Подготовку к обходу разделим на два этапа. Для простоты восприятия считаем что РЕЖИК у нас уже установлен и настроен, и что мы просто добавляем или убираем секции целиком, а не изменяем их.

    1. Выделяем основную часть redirector.conf и изменяемую. В примере основная часть заканчивается строкой "##<EOF>##". Все секции идущие после нее, добавляются или убираются сценарием запускаемым по crontab. Каждая секция записывается в отдельный файлик. Для удобства эти кусочки обзываем одним именем, например Section.part.conf, и раскладываем их по соответствующим папкам.

    Например, "кусочек":

    <PORNO>
    ban_dir /usr/local/rejik/banlists/PORNO
    url http://10.100.1.1/cgi-bin/access-deny?PORNBANNED_SECTION=#SECTION#DENY_URL=#URL#
    #USER_IP=#IP#
    #USER_LOGIN=#IDENT#

    запишется в файл /usr/local/rejik/banlists/PORNO/Section.part.conf. Строки USER_IP и USER_LOGIN закоментированы, потому что я ими не пользуюсь.

    2. Пишем такой скриптик rejik_reconf.sh:

    #!/bin/sh

    # Переходим в папку с программой
    cd /usr/local/rejik

    # имя файла конфигурации
    conf_name=redirector.conf

    # вырезаем c помощью awk основную часть конфига во временный файл
    cat $conf_name | awk 'BEGIN { EndOfFile = 0 }
       ( EndOfFile ) { print "\n"; exit 0 }
       { EndOfFile = ( substr( $0, 1, 9 ) == "##<EOF>##" );\
       print $0 }
    ' > $conf_name.temp

    # заменяем файлы
    mv $conf_name.temp $conf_name

    # Проверяем наличие параметров, если имена секций не переданы — завершить работу
    case $# in 0)
       exit 0
       ;;
    esac

    # Для всех переданных наименований секций,  
    for sec in $@
    do
       # если такой файл есть
       Section_part=banlists/$sec/Section.part.conf
       if [ -f $Section_part ]
       then
           # добавить в конфиг секцию и три пустых строки после нее
           cat $Section_part       >> $conf_name
           printf "\n\n\n"         >> $conf_name
       fi
    done

    # на всякий случай...
    /usr/sbin/chown -R squid:squid /usr/local/rejik

    В качестве параметров сценарию передаются наименования папок со списками.

    На этом подготовительная часть заканчивается, можно писать правила в crontab-е.

    0   8   *   *   1-5   /usr/local/rejik/rejik_reconf.sh PORNO GAMES MEDIA  && killall redirector
    0   18  *   *   1-5   /usr/local/rejik/rejik_reconf.sh                    && killall redirector
    В примере в 8-00 с понедельника по пятницу rejik3_reconf.sh дописывает в основную часть три дополнительных секции: PORNO, GAMES, MEDIA. В конце рабочего дня, в 18-00 скрипт запускается без параметров, а значит в конфиге остается только основная часть.


    (отсюда )

    rsp, 2007-11-06 в 15:42:12

    очепятка в статье.
    cd /usr/local/www/rejik, видимо имелось ввиду /usr/ports/www/rejik

    dikens3, 2007-11-09 в 15:53:15

    Спасибо.

    Всё настраивалось на FreeBSD 5.5, Squid 2.5, Apache 1.3.x
    Если вдруг что-то у вас не получается.

    Bliznezz, 2007-11-22 в 2:08:32

    сам пользуюсь режиком правда под линуксом.
    ну а замечание такое: использовать апач в качестве раздавалки банерозаменителей, да и пхп в этом случае - это не ценить оперативку и cpu на машине со сквидом. ^^)
    у меня например lighttpd живет для этого, немного, ..800k хитов в месяц на себя принимает. но экономия =)

    vovans, 2008-09-10 в 13:27:17

    базам уже ровно год. Хорошо бы и обновить =))

    grinz, 2008-10-27 в 14:07:07

    А новые банлисты есть у кого нибудь?

    m0ps, 2008-12-16 в 15:59:51

    а что мешает самин на них заработать?

    Жэко., 2009-03-21 в 6:27:10

    Спасиб. Статья классно помогла.

    LEAD, 2010-07-07 в 11:45:57

    Блин жесть.... Сколько приходилось собирать каждый раз по разному....

    То все прекрасно подымается и работает без проблем.
    А иногда бывает что Сквид ни при каких обстоятельствах не хочет открывать страницы замены.. Хотя доступ к страницам открыт.

    Везде пишут что права, права, права....
    Это я так к слову....
    Скорее всего не у одного у меня так :)

    alexvas84, 2010-09-01 в 15:57:14

    "Можно проверить доступ набрав http://ВАШ_ИП_Apache/ban/porno.html"

    Набираю http://ВАШ_ИП_Apache/ban/ - открывается список файлов, а когда набираю, н-р, http://ВАШ_ИП_Apache/ban/porno.html, то выдает пустое окно.
    В чем же может быть дело?

    alexvas84, 2010-09-01 в 16:52:06

    Сделал chmod -R www:www /usr/local/www/apache22/data/ban/
    и все равно ничего



  •  

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.2118 секунд
    Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 78 шт.
    Исходный размер: 39423; Сжатая: 10810