squid$ df -h Filesystem Size Used Avail Capacity Mounted on /dev/da0s1a 496M 36M 420M 8% / devfs 1.0K 1.0K 0B 100% /dev /dev/da1s1c 66G 108M 60G 0% /shares /dev/da0s1d 3.9G 403M 3.2G 11% /tmp /dev/da0s1e 7.7G 819M 6.3G 11% /usr /dev/da0s1f 52G 17M 48G 0% /var jabber:/shares/ports 206G 17G 172G 9% /usr/ports squid$
Одной из задач было использовать sqstat - поэтому пришлось отказаться от squidGuard в пользу родных методов ограничения сквида - при использовании внешних редиректоров пропадает "живая" статистика. Поехали. Ставим самбу:
squid$ cd /usr/ports/net/samba3/ squid$ make install clean
В вылезшем окошке расставляем такой набор галок:
+--------------------------------------------------------------------+ | Options for samba 3.0.26a_1,1 | | +----------------------------------------------------------------+ | | | [X] LDAP With LDAP support | | | | [X] ADS With Active Directory support | | | | [ ] CUPS With CUPS printing support | | | | [X] WINBIND With WinBIND support | | | | [ ] ACL_SUPPORT With ACL support | | | | [ ] FAM_SUPPORT With File Alteration Monitor | | | | [ ] SYSLOG With Syslog support | | | | [ ] QUOTAS With Disk quota support | | | | [ ] UTMP With UTMP accounting support | | | | [ ] MSDFS With MSDFS support | | | | [ ] PAM_SMBPASS With PAM authentication vs passdb backends | | | | [ ] CLUSTER With experimental cluster support | | | | [ ] DNSUPDATE With dynamic DNS update | | | | [ ] EXP_MODULES With experimental modules | | | | [X] POPT With system-wide POPT library | | +-+----------------------------------------------------------------+-+ | [ OK ] Cancel | +--------------------------------------------------------------------+
Заметим, что в современных версиях FreeBSD керберос из портов ставить не обязательно - прекрасно работает и без него. После инсталляции самбы, рисуем для неё такой конфиг:
squid$ more /usr/local/etc/smb.conf # SAMBA for SQUID [global] workgroup = MYDOMAIN security = ADS password server = MYDOMAIN.LOCAL realm = MYDOMAIN.LOCAL netbios name = SQUID server string = Proxy server of mydomain.local # log level = 10 log file = /var/log/samba/%m.%U.log max log size = 50000 winbind uid = 10000-20000 winbind gid = 10000-20000 winbind use default domain = yes display charset = koi8-r unix charset = koi8-r dos charset = 866 # for mail template homedir = /usr/home/%D/%U template shell=/bin/csh # added by lissyara 2007-06-21 in 10:36 #magic script = /root/scripts/create_user_dir.sh %U [printers] comment = All Printers path = /var/spool/samba printable = Yes browseable = No use client driver = yes public = No squid$
И для кербероса:
squid$ more /etc/krb5.conf # [libdefaults] default_realm = MYDOMAIN.LOCAL [realms] MYDOMAIN.LOCAL = { kdc = MYDOMAIN.LOCAL admin_server = MYDOMAIN.LOCAL } [domain_realm] .mydomain.local = MYDOMAIN.LOCAL [logging] kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmin.log default = FILE:/var/log/krb5lib.log squid$
А также для nsswitch:
squid$ more /etc/nss nsswitch.conf nsswitch.conf.orig squid$ more /etc/nsswitch.conf group: files winbind passwd: files winbind group_compat: nis passwd_compat: nis hosts: files dns networks: files shells: files squid$
Особых комментариев нет - всё это я уже рассказывал раньше, в статье про samba и ACL. Далее - ставим собственно сквид:
squid$ cd /usr/ports/www/squid squid$ make install clean
В окошке снимаем все галки - мне так ничё не нужно от него кроме авторизации и кэширования. Первый же возникающий вопрос - почему не ставил третий сквид? Ставил. Работает. Синтаксис как у 2.6 - но, QIP, сцуко, не может нативно авторизоваться. Авторизовалка ntlm у него кривая... Пришлось снести и поставить squid2.6. После инсталляции, занимаемся самбой - надо ввести её в домен, но, вначале получаем билетик керберос:
squid$ kinit akeda akeda@MYDOMAIN.LOCAL's Password: kinit: NOTICE: ticket renewable lifetime is 1 week
Ну и вводим в домен:
squid$ net join -U akeda akeda's password: Using short domain name -- MYDOMAIN Joined 'SQUID' to realm 'MYDOMAIN.LOCAL'
Добавляем такие строки в /etc/rc.conf:
# squid winbindd_enable="YES" squid_enable="YES"
Мне сама самба не нужна - нужен тока винбинд, поэтому тока он. После этого запускаем самбу
squid$ /usr/local/etc/rc.d/samba start Performing sanity check on Samba configuration: OK Removing stale Samba tdb files: .. done Starting winbindd.
Проверяем, что из всего этого получилось:
squid$ id akeda uid=10000(akeda) gid=10000(domain users) groups=10000(domain users) squid$ squid$ wbinfo -g | wc -l 398 squid$ wbinfo -u | wc -l 1131 squid$
Всё нормально. Теперь проверяем работу хелпера отвечающего за группы. Это несложный перловый скрипт идущий в комплекте со сквидом - он тупо вызывает wbinfo на тему поиска СИДа группы, и ещё разок на тему принадлежности юзера к группе с найденным SID. Всё просто, но по три форка на запрос. Будет ли он кэшировать найденные значения - выясниться позже, когда запустим и посмотрим на скорость изменения PID`ов в шапке top`a (могу сразу успокоить - кэширует :))). Итак, проверяем хелпер:
squid$ echo akeda bank | /usr/local/libexec/squid/wbinfo_group.pl OK squid$ echo akeda novosibirsk_gr | /usr/local/libexec/squid/wbinfo_group.pl ERR squid$ echo akeda omsk_gr | /usr/local/libexec/squid/wbinfo_group.pl ERR squid$
Работает. Тока косяк - не удалось ему впарить группу (или юзера) с пробелом в названии - что для меня не очень существенно, всё равно для разруливания прав будут созданы отдельные группы - разумеется без пробелов. Заметим, что сам wbinfo - прекрасно обрабатывает и группы и имена пользователей с пробелами. В принципе, допилить наверно несложно, но - у меня желания нет. Если кому понадобиться - пилите и шлите разработчикам - будет со следующих версий всем щассье. Далее, проверяем хелпер самого сквида:
'akeda' - это мой логин, 'my_password' - пароль. Всё нормально, пашет. Конечно, в итоге будет всё не так гладко, т.к. сквид запускается не от рута, от которого я запускал данный хелпер, и у него не хватит прав на доступ к сокету winbindd - поэтому, заранее исправляем сиё досадное упущение:
squid$ chown root:squid /var/db/samba/winbindd_privileged
Теперь рисуем конфиг сквида:
squid$ cat /usr/local/etc/squid/squid.conf # squid conf # начат lissyara, 2007-10-25 в 13:25 # порт где слушаем http_port 3128 # список слов, которые будучи обнаруженными в URL # вызывают обработку без кэширования hierarchy_stoplist cgi-bin ? # список ACL которые вызывают несовпадение с кэшем, # и, запрос с ответом кэшироваться не будут acl QUERY urlpath_regex cgi-bin \? # собственно - правило что не кэшируем no_cache deny QUERY # сколько отдаём ему памяти (реально пожрёт втрое больше) cache_mem 1024 MB # Директория для кэша, числа - размер кэша в Mb, # число директорий первого уровня, число директорий второго # уровня в каждой директории первого. cache_dir ufs /shares/squid/cache 50000 64 512 # лог доступа - первый параметр путь, второй - формат # форматы описаны в дефолтовом файле. access_log /var/log/squid/access.log squid # лог активности менеджера хранилища. Показывает, какие # объекты были сохранениы/удалены из кэша и как долго. # мне он не нужен, а места занимает прилично. cache_store_log none # файл hosts, проверяемый при запуске. Из него берётся # доменное имя и добавляется к неполным адресам (которые # не содержат ни одной точки в имени) hosts_file /etc/hosts # домен добавляемый к неполным именам append_domain .mydomain.local # директория где хранятся HTML c текстами ошибок error_directory /usr/local/etc/squid/errors/Russian-1251 # программа редиректор (у меня сквидгард) для более простой # и тонкой настройки правил использования инета #redirect_program /usr/local/bin/squidGuard -c \ # /usr/local/etc/squid/squidguard.conf # число процессов редиректора #redirect_children 20 #cache_log /usr/local/squid/logs/cache.log #debug_options ALL,5 # авторизация # нативная авторизация ослика auth_param ntlm program /usr/local/bin/ntlm_auth \ --helper-protocol=squid-2.5-ntlmssp # число детишек для авторизации - сколько процессов запускать auth_param ntlm children 30 # базовая авторизация для тех, кто не может нативную (я, например, # т.к. сижу из под FreeBSD, да и многие программы - например, # родной ICQ клиент от AOL) auth_param basic program /usr/local/bin/ntlm_auth \ --helper-protocol=squid-2.5-basic # Число процессов для базовой аворизации - значительно меньше # чем для основной, т.к. таких юзеров/программ немного auth_param basic children 4 # Заголовок окна выводимяй при запросе авторизации auth_param basic realm Squid proxy-caching web server # время жизни авторизации - сколько кэшировать данные # (для базовой авторизации) auth_param basic credentialsttl 2 hours #refresh_pattern ^ftp: 1440 20% 10080 #refresh_pattern ^gopher: 1440 0% 1440 #refresh_pattern . 0 20% 4320 # внешняя ACL для разруливания по группам external_acl_type nt_group %LOGIN \ /usr/local/libexec/squid/wbinfo_group.pl # пользователи у которых просто интернет - с ограничениями acl inet_users external nt_group inet_users # пользователи у которых есть тока аська acl inet_icq external nt_group inet_icq # пользователи с полными парвами на доступ в инет acl inet_full external nt_group inet_full # люди с доступом к серверу аналитики acl inet_analit external nt_group inet_analit # пользователи с ограниченным доступом в инет - тока # определённый набор ресурсов и всё. acl inet_restrict external nt_group inet_restrict # Пользователи которым разрешён метод CONNECT acl inet_connect external nt_group inet_connect # ACL авторизации на проксе acl MYDOMAIN proxy_auth REQUIRED # Описываем порты на которые разрешено лазить acl SSL_ports port 443 563 acl SSL_for_client_banks port 910 8443 4500 # порты на которе можно ходить юзерам acl safe_ports port 80 # http acl safe_ports port 21 # ftp acl safe_ports port 443 # ssl acl ICQ_ports port 5190 # ICQ # надо ли? 1025-65535 acl CONNECT method CONNECT # для /usr/ports/www/sqstat/ # копируете конфиг, ставите вместо 'host' - 'user' # и начальство не оторвать от экрана :)) acl manager proto cache_object # Описываем все сети все IP acl all src 0.0.0.0/0.0.0.0 # описываем локалхост acl localhost src 127.0.0.1/255.255.255.255 # acl до сайтов которые разрешены всем] acl mydomain_site dstdomain \ "/usr/local/etc/squid/db/allow_all.txt" # запрещённые в URL выражения (для всего УРЛа) acl bad_url url_regex \ "/usr/local/etc/squid/db/deny_url.txt" # запрещённые в URL выражения (для самого урла, без домена) #acl bad_url_2 urlpath_regex \ # "/usr/local/etc/squid/db/deny_url_2.txt" # запрещённые доменные имена acl deny_domains dstdomain \ "/usr/local/etc/squid/db/deny_domains.txt" # acl для клиент-банков и прочих кому надо напрямую ходить acl client_banks dst \ "/usr/local/etc/squid/db/clinet_banks.txt" # сети в которые ходить не надо (ICQ и прочия) acl bad_networks dst \ "/usr/local/etc/squid/db/bad_networks.txt" # те кто ходят без авторизации acl not_autorized src \ "/usr/local/etc/squid/db/not_autorized.txt" # список сайтов для тех у кого их определённый набор acl domains_for_restrict dstdomain \ "/usr/local/etc/squid/db/domains_for_restrict.txt" ### настройки доступа #### # вводим свои определения для сообщений о # отказе по ACL - пригодиться когда кто-то # воет что не может попасть на определённый сайт deny_info ERR_BAD_URL bad_url deny_info ERR_BAD_NETWORKS bad_networks deny_info ERR_DENY_DOMAINS deny_domains deny_info ERR_SAFE_PORTS safe_ports deny_info ERR_SSL_PORTS SSL_ports # пропускаем sqstat http_access allow manager localhost http_access deny manager # выпускаем на неавторизуемые сайты http_access allow client_banks # выпускаем тех кто не авторизуется в принципе # т.к. они не в домене и т.п. http_access allow not_autorized # Разрешаем всем доступ на сайт конторы # Этим же правилом срубаются все неавторизованные http_access allow MYDOMAIN mydomain_site # Разрешаем доступ ко всему группе 'inet_full' http_access allow inet_full all # Зарубаем запрещённые куски url http_access deny bad_url # Разрешаем асечный порт тем у кого есть аська http_access allow inet_icq ICQ_ports # зарубаем запрещённые сети http_access deny bad_networks # зарубаем запрещённые домены http_access deny deny_domains # Зарубаем коннект кроме как к SSL (надо ли группе отдельной?) http_access deny CONNECT !SSL_ports # зарубаем все порты проме safe_ports http_access deny !safe_ports # разрешаем инет обычным пользователям http_access allow inet_users # разрешаем инет ограниченным пользователям на разрешённые сайты http_access allow inet_restrict domains_for_restrict # зарубаем всё нах :) # Для начала кустомизируем сообщение о ошибке. # ERR_INET_NO_ALLOW - это имя файла в # /usr/local/etc/squid/errors/Russian-1251 # синтаксис описан # http://wiki.squid-cache.org/SquidFaq/MiscFeatures deny_info ERR_INET_NO_ALLOW all http_access deny all
Сам конфиг хорошо прокомментирован, поэтому, дополнительные камменты не делаю, тока привожу файлики которые в нём фигурируют:
squid$ more /usr/local/etc/squid/db/allow_all.txt # файл с сайтами доступ на которые разрешён всем squid mydomain.ru ttb.kz squid$
squid$ more /usr/local/etc/squid/db/deny_domains.txt # файл со списком запрещённых доменов # если надо весь домен с субдоменами - в начало # надо поставить точку # из файла mydomain_bad download.zachot.ru goblin.faberz.com muzoff.ru .udaff.ru .udaff.com .ziza.ru .rapidshare.de stream.fluendo.com realaudio.aradio.ru .mp3real.ru files.rfonline.ru files1.rfonline.ru files2.rfonline.ru files3.rfonline.ru .proxy80.com .cloakme.net stream03.rambler.ru .odnoklassniki.ru .odnoklasniki.ru .mamba.ru .cirota.ru .vkontakte.ru .youtube.com .video.google.com # из сквидгарда - аудио-видео 123mp3links.tsx.org 128.242.103.21 128.242.103.22 128.242.103.23
squid$ more /usr/local/etc/squid/db/deny_url.txt # url на котоые нельзя никому кроме тех у кого полный доступ # # ya[a-z/0-9/-]+dex\.ru диапазон буквы (мелкие), цифры и дефис # ya.+ex\.ru - всё что начинается на ya и кончается на ex.ru # объединение (gaz|plan)(eta) порубаются gazeta planeta # Ахтунг! Длинна строки имеет ограничения, когда оно превышено он # тупо отсекает лишнюю часть и ругается на несбалансированные # скобки (у меня такое было на регулярных выражениях) porn sex # из скивдгарда - реклама /ads/ /ad/ /banner/ /sponsor/ /event.ng/ /Advertisement /adverts/ # из сквидгарда - сайты для взрослых # ... покоцано ... строки длинные - дезигн портят :) #из сквидгарда - аудио-видео \.(ra?m|wma|mp2|mpv2|mp3|asx)($|\?) \.(mpe?g?|wmv|mov|movie|qt|avi|dvd?|divx|flv|iflv)($|\?) \.(iso|exe|vbs)($|\?)
squid$ more /usr/local/etc/squid/db/clinet_banks.txt # всякие назначения на которые надо попадать напрямую # WU 206.211.228.242/32 206.211.227.242/32 # RF 217.227.42.3/32 # STC ATNN 213.191.224.0/19 # SB 213.85.162.11/32 193.33.122.18/32 194.84.227.220/32
squid$ more /usr/local/etc/squid/db/bad_networks.txt # сети в которые ограничен доступ - ICQ и прочия # переенсены из конфига старого прокси 81.19.68.114/32 217.16.18.76/32 # ICQ 64.12.0.0/16 205.188.0.0/16
squid$ more /usr/local/etc/squid/db/not_autorized.txt # те кто ходят неавторизованными # _guests 172.30.105.38/32 172.30.101.17/32 # notariat 172.30.19.92/32 172.30.19.93/32 172.30.19.103/32 squid$
squid$ more /usr/local/etc/squid/db/domains_for_restrict.txt # список доменов для юзеров с ограниченным доступом в инет. # из файла good mydomain.ru localhost.mydomain.local maps.yandex.ru img.yandex.net img.yandex.ru postindex.otrok.ru # из файла good mts.ru gismeteo.ru yandex.ru
После рисовки всех конфигов, делаем сквида владельцем директории с кэшем, и создаём субдиректории:
squid$ chown -R squid:wheel /shares/squid squid$ squid -z 2007/10/29 12:38:02| Creating Swap Directories 2007/10/29 12:38:02| /shares/squid/cache exists 2007/10/29 12:38:02| Making directories in /shares/squid/cache/00 2007/10/29 12:38:02| Making directories in /shares/squid/cache/01 2007/10/29 12:38:02| Making directories in /shares/squid/cache/02 2007/10/29 12:38:02| Making directories in /shares/squid/cache/03 2007/10/29 12:38:02| Making directories in /shares/squid/cache/04 2007/10/29 12:38:02| Making directories in /shares/squid/cache/05 2007/10/29 12:38:03| Making directories in /shares/squid/cache/06 2007/10/29 12:38:03| Making directories in /shares/squid/cache/07 2007/10/29 12:38:03| Making directories in /shares/squid/cache/08 2007/10/29 12:38:03| Making directories in /shares/squid/cache/09 2007/10/29 12:38:03| Making directories in /shares/squid/cache/0A 2007/10/29 12:38:03| Making directories in /shares/squid/cache/0B 2007/10/29 12:38:03| Making directories in /shares/squid/cache/0C 2007/10/29 12:38:04| Making directories in /shares/squid/cache/0D 2007/10/29 12:38:04| Making directories in /shares/squid/cache/0E 2007/10/29 12:38:04| Making directories in /shares/squid/cache/0F squid$
Всё. Запускаем и юзаем.P.S. С вопросами - в форум а не в камменты - камменты для косяков.P.S.2 По дефолту, ОС не отдайт приложению более 512 мегов рамы, поэтому на реальной эксплуатации было замечено, что сквид регулярно отлетает на этом числе используемой оперативки. Решение:
kern.maxdsiz="2610612736" kern.dfldsiz="2610612736" kern.maxssiz="2610612736"
в /boot/loader.conf и проблемы сняло как рукой.