Введение:В статье хочу поделиться своим вариантом установки и конфигурирования
прокси сервера 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: &n...
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, и отсюда :)
URL:
Обсуждается: http://www.opennet.me/tips/info/2403.shtml
Почему ставится из пакетов, а не из портов?
ИМХО к теме статьи это не имеет никакого отношения )))
2 mefКонечно, более правильным способом является установка из портов, предварительно обновив дерево портов. Но установка занимает заметно больше времени, для сервисов внутренней сети считаю это не принципиальным.
Зачем возиться с портами, когда есть готовые пакеты?
сходу coredump_dir и cache_store_log вовсе не то что написано. и второй лучше не выключать, оченьполезные вещи говорит.редирект на http://127.0.0.1/ оригинальная вещь...
>сходу coredump_dir и cache_store_log вовсе не то что написано. и второй лучше
>не выключать, оченьполезные вещи говорит.попутал. cache_log лучше не выключать. cache_store_log можно
Убило наповал:
==
Увидеть что SQUID корректно запустился, можно посмотрев:vi /var/log/messages
==Уже изобрели (сюрприз!-сюрприз!) less и tail, а лучше "grep squid /var/log/messages | less".
ну что ж вы так бурно реагируете? вот есть у человека привычки. как надо так и работает.
кста, с точки срения набора лишних символов его вариант оптимальней -:)
А протестируйте, плиз, ситуацию: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-) А если в памяти его нет, то тогда и логи в грепы.
Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак - надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди молотком, взболтать, но не смешивать. ;-)
>[az@wcgate ~]$ ls -l /var/log/maillogну он мессаги смотрел, а не мейллог. чую ньюсислог не правил, а значит он у него 100кил максимум.
но конечно ужасужас в любом случае
"Сегодня ты играешь джаз, а завтра..." (с)Он же и мейллоги смотрит так же? Научится ещё пару нужных штук прикручивать, вырастет (в плане unix-админа), устроится на работу в толстую контору, зайдёт на нагруженную систему, глянет на мейлог таким способом и место в /tmp что? Правильно, дадут по рукам больно.
А теперь и ему не дадут и другие, почитав моё нудение ;-), узнают про less, tail/head и grep. less, кстати, совместим с vi по командам. Этот, как его, забываю всё... а! юникс-вей, во! ;-)
кстати, автор, скрипт для удаления коментариев обычно не нужен - можно поюзать чёнить типа
grep -v ^\ \*# squid.conf | grep .
ну или простое совсем
grep -v ^# squid.conf | grep .
>[оверквотинг удален]
>/var/log/maillog
>
>Мой вариант, кстати, лечит не ту проблему. Проблему лечит нечто вроде "ps
>ax|grep squid", а то может сквид написал в лог "я тут
>запустился" и тихо умер. 8-) А если в памяти его
>нет, то тогда и логи в грепы.
>
>Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак
>- надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди
>молотком, взболтать, но не смешивать. ;-)Звучало как обвинение, а в качестве мини-мастер-класса пойдёт -:)
Это как "хороший стиль программирования" Если идея подана херово - ничо, додебагится, хоть я себя и заставляю сразу логи тейлом читать.
>Не воспримите, как обвинение в полном неумении автора, но когда делаешь фак
>- надо быть уверенным в своих базовых знаниях. Шурупы отвёрткой, гвозди
>молотком, взболтать, но не смешивать. ;-)2 AlexeyZonov
Да нет, информация лишней не бывает.
В интернет довольно много информации, где описано как правильно посмотреть запущен ли демон. В данном случае, хотел внести нотку разнообразия, с мыслью о том где можно посмотреть о возможных ошибках.
А вот к столь критическим замечаниям, к теме особо не относящейся к статье, могу думать о отсутствии альтернативных способов самоутверждения критикана :)
Впрочем, разве что не в спорах рождается истина? :)
Автор скромно умолчал, что бан-листы banlists-2.x.x.tgz для режика датированы 2003-м годом. Актуальные листы доступны только через DBL.
имеет смысл использовать фильтры от адблока-фаерфокс для сквида. режик уже не актуален.
да уж.. толку от режика без свежих чёрных списков? :(
выкинул его из оверлея - толку не ощутил.проект почти мертвый
>выкинул его из оверлея - толку не ощутил.проект почти мертвыйда и верно. Понимаю. Вот только что использовать в качестве альтернативы? Сильно вопросом не интересовался, так как пока режик работает, но вообще хорошо бы с него того... слазать бы уже...