The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка Squid в связке с Rejik
Введение:

В статье хочу поделиться своим вариантом установки и конфигурирования
прокси сервера SQUID в связке с Rejik для фильтрации баннеров.

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

Рабочий пример, тест на FreeBSD 8.0-RELEASE i386:

Установка и настройка прокси-сервера SQUID

Ставим из пакетов:

   # pkg_add -r -K squid

ключ -r загружает пакет с удаленного сервера.
ключ -K сохраняет копию пакета в текущей директории.
Конфигурируем:

vi /usr/local/etc/squid/squid.conf


   #WELCOME TO SQUID 2.7.STABLE7
   #----------------------------------------------------------------
   #Имя листа доступа all, обозначающий все внутренние адреса:
   acl all src all

   #Имя листа доступа manager, отмечает протокол cache_object:
   acl manager proto cache_object

   #Имя листа доступа localhost, отмечает IP-клиента (127.0.0.1)
   acl localhost src 127.0.0.1/32

   #Имя листа доступа to_localhost, отмечает подсеть ресурсов:
   acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

   #----------------------------------------------------------------
   #Отмечаем подсети клиентов, которые могут обращаться к SQUID:
   acl localnet src 172.16.0.0/24
   acl localnet src 172.16.1.0/24

   #----------------------------------------------------------------
   #Имена листов доступа, с указанием ресурсов:
   acl  ip-block           dst             "/usr/local/etc/squid/block/ip-block"
   acl  sites-block1       dstdomain       "/usr/local/etc/squid/block/sites-block1"
   acl  sites-block2       dstdomain       .odnoklassniki.ru .vkontakte.ru

   #----------------------------------------------------------------
   #Имена листов доступа, отмечающие порты и медот соединения:
   acl  SSL_ports          port                    443
   acl  ports-std          port                    21 80 443 5190 9080 9443
   acl  CONNECT            method  CONNECT

   #----------------------------------------------------------------
   #Правило разрешает обращаться к КЭШу локальному ХОСТу.
   http_access allow manager localhost

   #Правило запрещает обращаться к КЭШу всему остальному.
   http_access deny manager

   #----------------------------------------------------------------
   #Правило запрещает все порты, кроме указ. в листе доступа "ports-std"
   http_access deny !ports-std

   #Правило запрещает соединения по методу "CONNECT" кроме порта 443:
   http_access deny CONNECT !SSL_ports

   #---------------------------------------------------------------
   #INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
   #---------------------------------------------------------------
   #Здесь указываем листы доступа отдельных клиентов, которым  требуется
   #гибко настроить уровень доступа:
   #---------------------------------------------------------------
   acl                     user1 src 172.16.0.100
   http_access allow       user1
   #---------------------------------------------------------------
   acl                     user2 src 172.16.0.101
   http_access deny        user2 ip-block
   http_access deny        user2 sites-block1
   http_access allow       user2
   #---------------------------------------------------------------
   
   #Здесь указываем запреты для остальных клиентов нашего прокси:

   http_access deny        localnet ip-block
   http_access deny        localnet sites-block1
   http_access deny        localnet sites-block2
   http_access allow       localnet
   http_access deny all

   #================================================================
   #Блокируем доступ к КЭШу нашего сервера:
   icp_access deny all

   #----------------------------------------------------------------
   #Откл. ICP-порт, если др. сервера не обращаются к КЭШу нашего сервера:
   icp_port 0

   #Указываем порт нашего прокси:
   #Если фаерволом используется редирект на прокси,
   #необходимо добавить опцию "transparent":

   #http_port 3128
   http_port 3128 transparent

   #---------------------------------------------------------------
   #Параметр указывает, какая программа использыется для редиректа. Если
   #утилита не установлена в системе, то требуется закомментировать опцию.
   #url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf

   #---------------------------------------------------------------
   #Default:
   #Язык страницы-блокировки, отображается при блокировании ресурсов.
   #error_directory /usr/local/etc/squid/errors/English
   error_directory /usr/local/etc/squid/errors/Russian-koi8-r

   #---------------------------------------------------------------
   #TAG: cache_peer
   #Default:
   #none
   #Если  у  вас есть  родительский  кеш, укажите его здесь. Администраторы
   #родительского кеша обычно дают вам необходимые инструкции. Но вы всегда
   #должы спрашивать  разрешения  перед тем, как добавить родительский кеш.

   #---------------------------------------------------------------
   #Default:
   #Кол-во памяти (ОЗУ) выделенной под кеширование.
   #Предупреждение: реально SQUID  использует  больше, чем  указанное здесь
   #значение. Золотое правило: если вы имеете N  мегабайт свободной  памяти,
   #которую можете отдать под squid, укажите здесь значение N/3.
   #cache_mem 8 MB
   cache_mem 256 MB

   #---------------------------------------------------------------
   #Первое число 100 -это количество дискового пространства, отведенного
   #под кеш (в мегабайтах). Второе и третье число  -каталоги первого
   #и второго уровня соответственно.
   #Default:
   #cache_dir ufs /usr/local/squid/cache 100 16 256
   cache_dir ufs /usr/local/squid/cache 2048 16 256

   #--------------------------------------------------------------
   #TAG: cache_mgr
   #Адрес эл. почты администратора прокси-сервера, который отображается
   #только на английской версии страницы, при блокировке ресурсов.
   #Default:
   #cache_mgr webmaster
   cache_mgr you@hostname.local

   #--------------------------------------------------------------
   #Default:
   #Имя пользователя, от имени которого работает SQUID в системе:
   #cache_effective_user squid

   #--------------------------------------------------------------
   #TAG: visible_hostname
   #В некоторых случаях, для работы демона SQUID, требуется указать  имя
   #хоста, на котором он работает.
   #Default:
   #none
   visible_hostname you.hostname.local

   #--------------------------------------------------------------
   #Default:
   #Имя файла, для записи идентификатора процесса:
   #pid_filename /usr/local/squid/logs/squid.pid

   #--------------------------------------------------------------
   #Default:
   #Показывает, какие объекты выбрасываются из кэша, и какие объекты
   #сохраняются и на какой срок. Если нет утилиты для анализа этих данных,
   #можно смело отключать.
   #cache_log /usr/local/squid/logs/cache.log
   cache_log none

   #--------------------------------------------------------------
   #Default:
   #Показывает, какие объекты выбрасываются из кэша, и какие объекты
   #сохраняются и на какой срок. Если нет утилиты для анализа этих данных,
   #можно смело отключать.
   #cache_store_log /usr/local/squid/logs/store.log
   cache_store_log none

   #--------------------------------------------------------------
   #TAG: hierarchy_stoplist
   #Список строк - через пробел, - при встрече в URL которых, запрос  будет
   #направлен сразу напрямую, а не "по соседям"; по-умолчанию -"cgi-bin ?":
   hierarchy_stoplist cgi-bin ?

   #--------------------------------------------------------------
   #TAG: access_log
   #Файл журнала деятельности запросу клиента. С каждой линии HTTP или
   #ICP запросу. Если статистика не нужна, указать: access_log none
   access_log /usr/local/squid/logs/access.log squid

   #--------------------------------------------------------------
   #TAG: refresh_pattern
   #Используется, чтоб определить не устарел ли объект в КЭШе:
   #usage: refresh_pattern [-i] regex min percent max [options]
   refresh_pattern ^ftp:                1440        20%        10080
   refresh_pattern ^gopher:        1440        0%        1440
   refresh_pattern -i (/cgi-bin/|\?) 0        0%        0
   refresh_pattern .                0        20%        4320

   #--------------------------------------------------------------
   #TAG: upgrade_http0.9
   #Лист доступа shoutcast, обозн. имя заголовка по заданному выражению:
   acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]

   #Опция upgrade_http0.9, позволяющая отключить обновл. откликов HTTP/0.9:
   upgrade_http0.9 deny shoutcast

   #--------------------------------------------------------------
   #TAG: broken_vary_encoding
   #Лист доступа "apache", обозн. имя заголовка по заданному выражению:
   acl apache rep_header Server ^Apache

   #Правило разрешает принимать битые заголовки от ACL apache:
   broken_vary_encoding allow apache

   #--------------------------------------------------------------
   #TAG: coredump_dir
   #Директория, где хранится КЭШ SQUID:
   coredump_dir /usr/local/squid/cache


Далее создаем директорию, в которой будут хранится файлы для блокирования
ресурсов, используемые SQUID`ом:

   # mkdir /usr/local/etc/squid/block

Создаем сами файлы:
Список блокируемых ip-адресов:

   # cat > /usr/local/etc/squid/block/ip-block
   169.254.0.1
   169.254.0.2
   169.254.0.3

   ^C

Список блокируемых доменов:

   # cat > /usr/local/etc/squid/block/sites-block1
   afisha.ru
   mail.ru

   ^C

Назначаем владельца, на директорию

   # chown -R squid /usr/local/etc/squid/block/


Далее делаем первый запуск SQUID:

   # squid -z
   2010/06/07 15:58:46| Creating Swap Directories

Параметр -z нужен для создания (обнуления) каталога, содержащего кэш.
Параметр -z нужен только при первом запуске.

После, будет создан файл squid.pid, которому необходимо задать владельца:

   # chown -R squid /usr/local/squid/logs/squid.pid

После этого заработает рестарт SQUID:

   # /usr/local/etc/rc.d/squid [start/stop/restart]

и реконфигурирование SQUID:

   # squid -k reconfigure

Добавим строку в /etc/rc.conf для автозапуска squid:

   squid_enable="YES"

Увидеть что SQUID корректно запустился, можно посмотрев:

vi /var/log/messages

   Jun  7 16:30:19 hostname squid[1014]: Squid Parent: child process 1018 started

Или внести изменения в настроки браузера :)

Возможные ошибки:

Если после запуска в логах "/usr/local/squid/logs/cache.log" видно:
Could not determine fully qualified hostname.Please set 'visible_hostname
В "/usr/local/etc/squid/squid.conf" нужно указать:

   visible_hostname you.hostname.local

Если store.log быстро растет без видимых причин, исправляем пересозданием директории с кЭшем SQUID.


Установка и настройка Rejik

Ставим из пакетов:
   
   # pkg_add -r rejik

Копируем банлисты в рабочий каталог Режика:
В случае установки из портов:

   # cp -R /usr/ports/www/rejik/work/banlists /usr/local/rejik

В случае установки из пакетов, с официального сайта http://www.rejik.ru/

Качаем файл "banlists-2.x.x.tgz" и "www.tgz", для Веб-страниц

Распаковываем банлисты:

   # tar vxzf ./banlists-2.x.x.tgz

Копируем в директорию, где установлен Rejik:

   # cp -R ./banlists /usr/local/rejik/

Распаковываем странички:

   # tar vxzf ./www.tgz

Копируем в директорию, где лежат файлы Apache-сервера:

   # cp -R ./www /usr/local/www/data

Даем права пользователю, от которого работает Apache

   # chown -R www:www /usr/local/www/data/www/

Даем права пользователю на директорию Rejik, от которого работает SQUID:

    # chown -R squid:squid /usr/local/rejik/

Чтобы избежать ошибок в /usr/local/squid/logs/cache.log

    Can't write to file /usr/local/rejik/redirector.err: Permission denied

Конфигурируем:

vi /usr/local/rejik/redirector.conf

   error_log /usr/local/rejik/redirector.err
   change_log /usr/local/rejik/redirector.log
   make-cache /usr/local/rejik/make-cache
   #allow_urls /usr/local/rejik/banlists/allow_urls

   <BANNER>
   ban_dir /usr/local/rejik/banlists/banners
   url http://127.0.0.1/www/1x1.gif
   #log off

   <PORNO>
   ban_dir  /usr/local/rejik/banlists/porno
   url http://127.0.0.1/www/porno.html

   <MP3>
   ban_dir /usr/local/rejik/banlists/mp3
   url http://127.0.0.1/www/mp3.html

   <JS>
   ban_dir /usr/local/rejik/banlists/js
   url http://127.0.0.1/www/js.js
   #log off

Далее, в /usr/local/etc/squid/squid.conf включаем опцию редиректа,
сняв комментарий со строки:

   #url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf
   url_rewrite_program /usr/local/rejik/redirector /usr/local/rejik/redirector.conf

Вносим изменения в файлы режика в соответствии по желаниям блокировки:

   /usr/local/rejik/banlists/banners/urls
   /usr/local/rejik/banlists/porno/urls
   /usr/local/rejik/banlists/js/urls

Например, чтобы заблокировать баннеры на сайте
www.test.ru, достаточно добавить эти строчки:

   # cat > /usr/local/rejik/banlists/banners/urls
   ad.test.ru
   bannerhost.ru
   doubleclick.net
   pagead2.googlesyndication.com

   ^C

После выполнения команды:

   # squid -k reconfigure

будут приняты изменения конфигурации, в том числе и нашего редиректа.


Используемая литература:

   /usr/local/etc/squid/squid.conf.default

Отдельное спасибо:
Моему коллеге Dok`у, за скрипт убирающий комментарии.
Сайту lissyra.su, некоторые материалы взяты оттуда.
Сайту opennet.ru, и отсюда :)
 
06.07.2010 , Автор: kvasik
Ключи: squid, proxy, banner, block, rejik / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / Прокси сервер Squid / ACL, ограничения трафика и пользователей

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, mef (ok), 23:09, 05/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему ставится из пакетов, а не из портов?
     
     
  • 2.2, Vitaly_loki (ok), 10:13, 06/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ИМХО к теме статьи это не имеет никакого отношения )))
     
  • 2.5, kvasik (ok), 10:01, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    2 mef

    Конечно, более правильным способом является установка из портов, предварительно обновив дерево портов. Но установка занимает заметно больше времени, для сервисов внутренней сети считаю это не принципиальным.  

     
  • 2.16, vovans (ok), 18:28, 13/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем возиться с портами, когда есть готовые пакеты?
     

  • 1.3, mitiok (??), 23:37, 06/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    сходу coredump_dir и cache_store_log вовсе не то что написано. и второй лучше не выключать, оченьполезные вещи говорит.

    редирект на http://127.0.0.1/ оригинальная вещь...

     
     
  • 2.8, mitiok (??), 14:53, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >сходу coredump_dir и cache_store_log вовсе не то что написано. и второй лучше
    >не выключать, оченьполезные вещи говорит.

    попутал. cache_log лучше не выключать. cache_store_log можно

     

  • 1.4, AlexeyZonov (ok), 09:20, 07/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Убило наповал:
    ==
    Увидеть что SQUID корректно запустился, можно посмотрев:

    vi /var/log/messages
    ==

    Уже изобрели (сюрприз!-сюрприз!) less и tail, а лучше "grep squid /var/log/messages | less".

     
     
  • 2.6, Filosof (ok), 14:27, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    ну что ж вы так бурно реагируете? вот есть у человека привычки. как надо так и работает.
    кста, с точки срения набора лишних символов его вариант оптимальней -:)
     
     
  • 3.7, AlexeyZonov (ok), 14:52, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    А протестируйте, плиз, ситуацию:

    vi /var/log/messages
    (демончики пинают и пинают syslogd)
    :wq

    ":wq" тут ведь тоже смотрится логично, раз есть "привычки"? ;-) Опасная привычка перебегать 6-полосное шоссе (даже в ярко-полосатых трусах) - может и не повезти...

    Упростим, пусть он всегда выходит ":q!". Тогда, например, этот файл имеет огрооомный размер. Что там с местом в /tmp/[?]/vi.recovery/ ? ;-)  За messages не скажу, а вот мейллог к обеду уже:
    [az@wcgate ~]$ ls -l /var/log/maillog
    -rw-r-----  1 root  wheel  45804764 Jul  7 14:44 /var/log/maillog

    Мой вариант, кстати, лечит не ту проблему. Проблему лечит нечто вроде "ps ax|grep squid", а то может сквид написал в лог "я тут запустился" и тихо умер. 8-)  А если в памяти его нет, то тогда и логи в грепы.

    Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак - надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди молотком, взболтать, но не смешивать. ;-)

     
     
  • 4.9, mitiok (??), 14:58, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >[az@wcgate ~]$ ls -l /var/log/maillog

    ну он мессаги смотрел, а не мейллог. чую ньюсислог не правил, а значит он у него 100кил максимум.

    но конечно ужасужас в любом случае

     
     
  • 5.10, AlexeyZonov (ok), 15:11, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    "Сегодня ты играешь джаз, а завтра..." (с)

    Он же и мейллоги смотрит так же? Научится ещё пару нужных штук прикручивать, вырастет (в плане unix-админа), устроится на работу в толстую контору, зайдёт на нагруженную систему, глянет на мейлог таким способом и место в /tmp что? Правильно, дадут по рукам больно.

    А теперь и ему не дадут и другие, почитав моё нудение ;-), узнают про less, tail/head и grep. less, кстати, совместим с vi по командам. Этот, как его, забываю всё... а! юникс-вей, во! ;-)

     
     
  • 6.11, mitiok (??), 20:26, 07/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    кстати, автор, скрипт для удаления коментариев обычно не нужен - можно поюзать чёнить типа
    grep -v ^\ \*# squid.conf | grep .
    ну или простое совсем
    grep -v ^# squid.conf | grep .
     
  • 4.12, Filosof (ok), 00:39, 08/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >/var/log/maillog
    >
    >Мой вариант, кстати, лечит не ту проблему. Проблему лечит нечто вроде "ps
    >ax|grep squid", а то может сквид написал в лог "я тут
    >запустился" и тихо умер. 8-)  А если в памяти его
    >нет, то тогда и логи в грепы.
    >
    >Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак
    >- надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди
    >молотком, взболтать, но не смешивать. ;-)

    Звучало как обвинение, а в качестве мини-мастер-класса пойдёт -:)
    Это как "хороший стиль программирования" Если идея подана херово - ничо, додебагится, хоть я себя и заставляю сразу логи тейлом читать.

     
  • 4.14, kvasik (ok), 20:15, 08/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак
    >- надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди
    >молотком, взболтать, но не смешивать. ;-)

    2 AlexeyZonov
    Да нет, информация лишней не бывает.
    В интернет довольно много информации, где описано как правильно посмотреть запущен ли демон. В данном случае, хотел внести нотку разнообразия, с мыслью о том где можно посмотреть о возможных ошибках.  
    А вот к столь критическим замечаниям, к теме особо не относящейся к статье, могу думать о отсутствии альтернативных способов самоутверждения критикана :)
    Впрочем, разве что не в спорах рождается истина? :)


     

  • 1.13, tonys (ok), 16:01, 08/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Автор скромно умолчал, что бан-листы banlists-2.x.x.tgz для режика датированы 2003-м годом. Актуальные листы доступны только через DBL.

     
  • 1.15, ононим (?), 22:04, 08/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    имеет смысл использовать фильтры от адблока-фаерфокс для сквида. режик уже не актуален.
     
  • 1.17, vovans (ok), 12:31, 15/07/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да уж.. толку от режика без свежих чёрных списков? :(
     
     
  • 2.18, slepnoga (??), 17:14, 28/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    выкинул его из оверлея - толку не ощутил.проект почти мертвый
     
     
  • 3.19, vovans (ok), 21:57, 13/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >выкинул его из оверлея - толку не ощутил.проект почти мертвый

    да и верно. Понимаю. Вот только что использовать в качестве альтернативы? Сильно вопросом не интересовался, так как пока режик работает, но вообще хорошо бы с него того... слазать бы уже...

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру