Установка squid-а и всего прочего необходимого одной стокой: $ sudo aptitude install language-pack-ru squid squidguard squidview apache2 php5 libgd-gd2-perl Дальше качаем коллекцию блеклистов к примеру от сюда: http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist, распаковываем: $ tar -xzf blacklists.tar.gz Создаем необходимую для работы конфигурации структуру папок: $ sudo mkdir /etc/squid/{acl,bl} В папке acl будут храниться файлы определяющие различные разрешения запреты. К примеру у меня там лежат файлы с расширением .usr и .ip определяющие логины и адреса соответствующих групп. Ниже привожу пример: root@proxy:/etc/squid/acl# ls -1 admins.ip admins.usr buhi.usr design.usr kadr.usr lim.ip managers.ip managers.usr market.ip market.usr nolim.ip other.usr rukovod.usr snabg.usr Расскажу от куда брать логины для записи в файл с расширением .usr. Далее мы создадим файл, в котором будут храниться все пары логин:хеш пароля для авторизации на нашем прокси сервере: $ sudo htpasswd -b /etc/squid/passwd user password эта команда годится если файл с паролями уже существует, если необходимо его создание то: $ sudo htpasswd -сb /etc/squid/passwd user password кроме того, пароль можно не указывать прямо в команде а использовать запрос на его ввод: $ sudo htpasswd /etc/squid/passwd user в этом случае у вас будет запрошен пароль и его подтверждение. Собственно файлы .usr просто хранят описание всех логинов пользователей входящих в ту или иную группу, т. е. после создания пары логин:хеш пароля, нам необходимо записать только что созданный логин в файл с названием той группы к которой мы хотели бы чтоб принадлежал пользователь. Ну и конечно же включить правильное описание этой группы в squid.conf Далее мы создадим каталоги содержащие определения фильтров. Просто копируем соответствующие папки из ранее скачанной и разархивированной базы блеклистов. Хочу сказать сразу, что много фильтров лучше не использовать, иначе squid будет жутко тормозить. Конкретное количество фильтров определяем экспериментальным путем. Мало того, те блек листы которые я нашел содержали кучу неактуальной для круга моих пользователей сайтов, поэтому я их немного проредил (удобным средством для «прореживания» мне кажется связка cat domains | grep .ru >> new_domains, несколько заходов с подстановкой вместо .ru к примеру .ua или .su и дальнейшее переименование mv new_domains domains). Создадим папки и файлы для своих нужд: $ sudo mkdir {blocked,good,lockal}&&sudo touch {blocked,good,lockal}/domains в blocked/domains — заносим домены которые не подходят в другие категории но которые очень хочется закрыть, ну или если вовсе и не хочется но надо; good/domains — записываем домены которые по каким-то по своей сути хорошие но почемуто попадают под действие какого-то фильтра; lockal/domains — локальные сайты, мне кажется они должны быть доступны даже когда все остальное уже нельзя. Пример моего дерева коталогов: /etc/squid ├── acl │ ├── admins.ip │ ├── admins.usr │ ├── buhi.usr │ ├── design.usr │ ├── kadr.usr │ ├── lim.ip │ ├── managers.ip │ ├── managers.usr │ ├── market.ip │ ├── market.usr │ ├── nolim.ip │ ├── other.usr │ ├── rukovod.usr │ └── snabg.usr ├── bl │ ├── ads │ │ └── domains │ ├── blocked │ │ └── domains │ ├── good │ │ └── domains │ ├── idle │ │ └── domains │ ├── local │ │ └── domains │ ├── porn │ │ └── domains │ ├── proxy │ │ └── domains │ ├── socialnet │ │ └── domains │ └── spyware │ └── domains ├── cachemgr.conf ├── passwd └── squid.conf В принципе все готово, для того чтоб редактировать собственно /etc/squid.conf. Условно, конфиг делится на четыре части, деления условные, просто мне так нравится. Что трогать нельзя неумелыми руками(общие настройки squid-а); Кто и Что(описания групп пользователей, и фильтров); Кому Чего (сопоставление групп пользователей и фильтров); Кому и Сколько (описание delaypool-сов). Разжёвывать параметры не буду, оригинальный squid.conf имеет очень подробные описания что-по-чем-и-для-чего, это кстати вторая причина его сохранить, первая — в нем записана минимальная конфигурация при которой все гарантированно работает, поэтому: $ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.orig Пример моего squid.conf: #-------------------- Ne znaeh, ne lez'------------- # Begin http_port 3128 icp_port 0 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY error_directory /usr/share/squid/errors/Russian-1251 cache_mem 16 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 4096 KB ipcache_size 1024 ipcache_low 90 ipcache_high 95 fqdncache_size 1024 cache_dir ufs /home/squid/spool/ 1024 16 256 cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log mime_table /usr/share/squid/mime.conf access_log /var/log/squid/access.log log_mime_hdrs off pid_filename /var/run/squid.pid debug_options ALL,1 log_fqdn off refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 quick_abort_min 16 KB quick_abort_max 16 KB quick_abort_pct 95 negative_ttl 5 minute positive_dns_ttl 1 hour negative_dns_ttl 5 minute range_offset_limit 0 KB connect_timeout 120 second peer_connect_timeout 30 seconds #siteselect_timeout 4 second read_timeout 15 minute request_timeout 30 second client_lifetime 1 day pconn_timeout 120 second ident_timeout 10 seconds # shutdown_liftime 30 second cache_mgr hostmaster cache_effective_user proxy cache_effective_group proxy visible_hostname proxy.germes-design.com.ua unique_hostname proxy.germes-design.com.ua logfile_rotate 10 append_domain .germes-design.com.ua memory_pools off log_icp_queries off icp_hit_stale off minimum_direct_hops 4 client_db off netdb_low 900 netdb_high 1000 netdb_ping_period 5 minutes query_icmp off uri_whitespace strip ignore_unknown_nameservers on auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off auth_param basic children 5 auth_param basic realm SQUID # End # ---------------------dal'he mogno lezt'------------- # # # ----------------===== Кто и Что =====------------- # ----------------------- Porti ------------------------- acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 3313 acl Safe_ports port 20 acl Safe_ports port 21 # ftp acl Safe_ports port 80 # http acl Safe_ports port 443 # https acl Safe_ports port 3389 # rdp acl Safe_ports port 5190 # ICQ acl Safe_ports port 5222 # jabber acl Safe_ports port 8000 # online radio #acl Safe_ports port 6667-6669 7770-7776 # IRC acl CONNECT method CONNECT acl Mailport port 25 110 143 465 993 995 # ------------------------------------------------------------ acl office src 192.168.0.0/255.255.255.0 # ------------------- Зона заблокированных ip --------------------- acl ban_ip src 192.168.0.200/255.255.255.254 http_access deny ban_ip # ------------------- Bez parolniy vxod ------------------------ acl no_limit_ip src "/etc/squid/acl/nolim.ip" acl limit_ip src "/etc/squid/acl/lim.ip" http_access allow no_limit_ip # -------------------- Gruppi ------------------------- # -BUHI acl buhi_usr proxy_auth "/etc/squid/acl/buhi.usr" # -KADRI acl kadr_usr proxy_auth "/etc/squid/acl/kadr.usr" # -MANAGERI acl manag_usr proxy_auth "/etc/squid/acl/managers.usr" acl manag_ip src "/etc/squid/acl/managers.ip" # -DESIGNERI acl design_usr proxy_auth "/etc/squid/acl/design.usr" # -MARKETI acl market_usr proxy_auth "/etc/squid/acl/market.usr" acl market_ip src "/etc/squid/acl/market.ip" # -SNABG acl snabg_usr proxy_auth "/etc/squid/acl/snabg.usr" # -Руководство acl rukov_usr proxy_auth "/etc/squid/acl/rukovod.usr" # Admins acl admins_usr proxy_auth "/etc/squid/acl/admins.usr" acl admins_ip proxy_auth "/etc/squid/acl/admins.ip" # Other acl other_usr proxy_auth "/etc/squid/acl/other.usr" # ------------ Запрещения/Разрешения --------------------------- acl worktime time 9:00-17:30 acl dinnertime time 12:00-12:30 acl porn dstdomain "/etc/squid/bl/porn/domains" acl porn_reg dstdom_regex -i adult|blow-?job|bondage|cyberlust|cybercore|hardcore|incest|masturbat|obscene|pedophil|pedofil|porn|sexdream|girl|softcore|striptease acl media url_regex -i \.exe$|\.mpa$|\.torrent$|\.mp3$|\.wma$|\.m3u$|\.avi$|\.mpg$|\.mpeg$|\.wmv$|\.wav$|\.asf$|\.flv$ acl video_upload rep_mime_type -i ^video/x-msvideo$ acl video_upload rep_mime_type -i video/x-msvideo acl video_upload rep_mime_type -i ^video/mpeg$ acl video_upload rep_mime_type -i video/mpeg acl video_upload rep_mime_type -i video/x-flv acl video_upload rep_mime_type -i ^video/x-flv$ acl ip_port url_regex \d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}:\d{4,6} acl baners url_regex "/etc/squid/bl/ads/domains" acl proxy dstdomain "/etc/squid/bl/proxy/domains" acl socnet dstdom_regex -i odnoklas|vkontakt #acl socnet dstdomain "/etc/squid/bl/socialnet/domains" acl spyware dstdomain "/etc/squid/bl/spyware/domains" acl blocked dstdomain "/etc/squid/bl/blocked/domains" acl leisure_time dstdomain "/etc/squid/bl/idle/domains" acl local dstdomain "/etc/squid/bl/local/domains" acl good dstdomain "/etc/squid/bl/good/domains" # # # ----------------===== Кому Чего =====------------- http_access allow Mailport http_access allow local http_access deny ip_port http_reply_access deny video_upload !good worktime http_access deny leisure_time worktime !dinnertime !good http_access deny porn !good worktime http_access deny porn_reg !good worktime http_access deny baners !good worktime http_access deny proxy !good worktime http_access deny socnet !good worktime http_access deny spyware !good worktime http_access deny blocked !good worktime # ------------ Разрешения входа --------------------------- # -------------#### admins ####------------------ http_access allow admins_usr http_access allow admins_ip
# ---------------------------------------------------- Особо внимательный народ заметит что тут нет ничего про делейпулы, а вот не сложилось у меня с ними... все некогда мне с ними разобраться. Не хочется описывать все по пунктам, тем более что так же хорошо как в родном squid.conf.orig у меня не получиться. Но обращу внимание на: http_port — указывает на какой порт нужно подключаться к прокси серверу; cache_mem — размер кэша; auth_param — блок конфигов определяющий каким образом будет происходить аутентификация пользователей, особый интерес представляет вот эта строка - auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd. /usr/lib/squid/ncsa_auth, указывает какой модуль использовать для аутентификации, а /etc/squid/passwd, указывает какой файл использовать для хранения логинов и паролей. acl Safe_ports port — описываем какие порты может пропускать проксик. Дальше пошло описание групп пользователей. В общем тут все просто мы составляем соответствие названию группы и логинам/апишникам пользователей, входящих в нее. Стоит помнить о том что если описательная часть указывается в ковычках, то сквид будет искать такой файл, т. е. именно ковычки говорят что в строке acl market_usr proxy_auth "/etc/squid/acl/market.usr", описание пользователей нужно искать в файле /etc/squid/acl/market.usr Следующим идет описание фильтров. Тоже вроде все тривиально. В мануалах описано какие словечки за что отвечают, но добавлю, что тут работает тот же принцип, то что в кавычках — файл. Далее — сопоставление групп пользователей и фильтов. Вообще надо сказать, что в конфиге сквида, порядок имеет значение. Не даром, группе no_limit_ip я разрешил доступ в самом начале описания групп и фильтров. Принцип такой, сквид просматривает конфиг сверху вниз, и в соответствии с этим порядком выставляет разрешения. Если он в самом начале встретил строку http_access allow no_limit_ip, он пропустит пользователей входящих в эту группу и закончит просмотр конфига. Если посмотреть мой конфиг видно что разрешения для группы admins находятся почти в конце участка «вынесения вердиктов фильтрам», почти но не в конце, после описания этой группы идет запрет на фильтр media. Что это значит, это значит что сквид не будет админам рубить медиафайлы, но будет рубить все остальное. Еще важное замечание, хочу обратить внимание на синтаксис фильтра: http_access deny blocked !good worktime перевожу на человеческий язык эту надпись: запретить доступ группе blocked исключая группу good и причем, только в рабочее время. Ну мы то с вами знаем что blocked и good это фильтры сайтов, а worktime описан как время. Дальше совсем не интересно, просто перечисляем группы и разрешаем им доступ, потому как все плохое и нехорошее уже отсеялось. Чтение логов сквида В принципе их можно читать прям так как есть, правда это скучно и не очень то и удобно, зато в высшей степени информативно. Для помощи в этом занятии может послужить моя статья про awk. Но мы с вами люди ленивые, ну по крайней мере я. Поэтому логи я смотрю lightsquid-om а текущее состояния проксика, просматриваю squidview-ом. Кстати последний мы уже поставили, в настройке он не нуждается и прям уже готов к работе, запускайте в консоли команду squidview и обозревайте, обозревайте и обозревайте. Там есть хелп, обязательно его прочтите, благо он не большой. Lightsquid... в общем то, мне этот сквидвьюер нравится, хотя некоторые предпочетают к примеру sarg, тоже кстати не плохой, но шибко он тяжелый. Я знаю есть люди которые ставят и то и другое, и смотрят текущую статистику с помощью лайтсквида которая обновляется раз в 10-15 минут, а саржем подытоживают статистику за день. Их право, но мне этого не нужно, поэтому — lightsquid. Скачиваем с офсайта: http://sourceforge.net/projects/lightsquid/files/ там выберете последнюю версию. Распаковываем в … а куда хотите, у меня в /home лежит. И делаем символическую ссылку этой папки в /var/www: $ sudo ln -s /home/lightsquid /var/www/lightsquid далее открываем /etc/apache2/httpd.conf и добавляем следующие строки: Alias /stat /var/www/lightsquid <Directory "/var/www/lightsquid"> AddHandler cgi-script .cgi AllowOverride All AuthType Basic AuthName "Restricted Files" AuthBasicProvider file AuthUserFile /etc/squid/passwd Require user admin </Directory> Тут мы указываем алиас, т. е. теперь наша статистика доступна по двум адресам в сети 1) http://proxyserver.local/lightsquid, 2) http://proxyserver.local/stat. Далее мы в качестве защиты от чтения статистики кем попало, ограничиваем доступ к этой папке только пользователю admin, при этом мы используем файл с паролями squid-а. Следующим, и завершающим шагом, нам необходимо настроить чтение логов сквида с каким то периодом. Для этих нужд используется файл crontab и несложный скрипт. В моем случае, надеюсь что и в вашем, нам просто необходимо положить следующий скрипт в /etc/cron.hourly: #!/bin/sh test -x /var/www/lightsquid/lightparser.pl && /var/www/lightsquid/lightparser.pl Сохраняем его к примеру, под именем lightsquid и выставляем ему атрибут запуска: $ sudo chmod +x /etc/cron.hourly/lightsquid И собственно все.
|