В моей карьере произошли некоторые изменения, я больше не работаю на Ярославском радиозаводе. Покидаю эту фирму с большой благодарностью коллективу и лично бывшему моему начальнику отдела ИТ Александру Воронину. Мы сделали много интересных проектов и всегда работали в хорошем контакте.Но новая работа сулит новые горизонты, так устроен мир.
Итак, на новом месте, помимо довольно стандартных задач создания "с нуля" всей инфраструктуры по новым корпоративным стандартам, потребовалось найти нормальное решение для прокси-сервера с авторизацией в домене, по возможности не требующее значительных затрат - фирма большая, более 20 филиалов в разных городах России, и продолжает расти. Понятно, что покупать под это дело в каждый филиал Forefront TMG плюс лицензию на Windows Server довольно накладно будет и вряд ли оправданно, когда есть вполне адекватные open source решения. Поэтому решили воспользоваться традиционным SQUID с авторизацией пользователей в домене. Привожу это решение, так как в Интернет не часто можно найти на эту тему законченное работоспособное описание, обычно все описывается лишь в общих чертах. Вполне может кому-то пригодиться, особенно новичкам в этом деле. Хотя, если не слишком углубляться в настройки, для минимально необходимых функций все достаточно просто.
Я использовал ubuntu-server 12.04. Прежде всего ставим необходимые компоненты для прокси и самбы:
apt-get install squid3 ldap-utils samba winbind samba-common-bin
Далее для настройки самбы нужно остановить ее и winbind:
/etc/init.d/smbd stop
/etc/init.d/winbind stop
Редактируем конфиг Samba:
nano /etc/samba/smb.conf
(В примере используем домен brand.domain.local с контроллером pdc.brand.domain.local - это просто имя одного из контроллеров домена AD
workgroup = BRAND
password server = pdc.brand.domain.local
security = ads
realm = brand.domain.local
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
# server string is the equivalent of the NT Description field
server string = Proxy Server
Присоединяем прокси-сервер к домену и проверяем доступность домена
net ads join –U administrator
/etc/init.d/smbd start
/etc/init.d/winbind start
Понятно, что учетная запись должна иметь права для присоединения к домену и потребует авторизации.
Проверяем доступность домена:
wbinfo –t
должен быть получен следующий ответ:
checking the trust secret for domain BRAND via RPC calls succeeded
Проверяем возможность подключения пользователя с правами присоединиения к домену и чтения каталогов ( вообще, можно использовать и учетку доменного администратора, не создавая специальную)
wbinfo -a BRAND\\user%'password'
ответ должен быть таким
plaintext password authentication succeeded
challenge/response password authentication succeeded
Добавляем пользователя proxy в группу winbindd_priv
gpasswd -a proxy winbindd_priv
Если все в порядке и нужные ответы получены, переходим к редактированию конфига самого SQUID:
nano /etc/squid3/squid.conf
# Host_name
append_domain .brand.domain.local
visible_hostname Squid
#Это просто почта администратора SQUID, которая, например, будет отображаться на странице запрета доступа к сайту
cache_mgr
brand@domain.local
### pure ntlm authentication
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param ntlm keep_alive on
### basic
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
#Location_Of_Windows_Groups
external_acl_type
nt_group %LOGIN /usr/lib/squid3/wbinfo_group.pl
#ACLs
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl blacklist url_regex -i "/etc/squid3/blacklist.acl"
acl update url_regex -i "/etc/squid3/update.acl"
acl whitelist url_regex -i "/etc/squid3/whitelist.acl"
#ACLs_Windows_Groups (ACL называется inet_users, а InetUsers это группа в домене, куда добавлены те, кому можно ходить в интернет, понятно, что ее нужно создать в домене самому и включить в нее нужных пользователей)
acl inet_users external nt_group InetUsers
#AUTH
acl auth proxy_auth REQUIRED
# Safe_Ports
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 #filemaker
acl Safe_ports port 777
acl Safe_ports port 8088
acl Safe_ports port 8089
acl Safe_ports port 2112 # multiling http
acl chat port 5190 5222 2041 2042
acl CONNECT method CONNECT
# No_auth_access (доступ без авторизации) Почему-то не заработали нормально через прокси некоторые клиенты чатов
http_access allow all chat
http_access allow CONNECT all chat
http_access allow all whitelist
# Auth_access (доступ с авторизацией)
http_access deny !auth
http_access allow update
http_access allow manager localhost # это просто пример блокировки
http_access deny manager # это просто пример блокировки
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny !inet_users
http_access deny blacklist
http_access allow auth
http_access deny all
# Client_Port
http_port 3128
#Default_conf
coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
После редактирования конфига выполняем выполняем его реконфигурирование:
Squid3 –k reconfigure
Далее для нормальной работы пользователей необходимо создать в домене группу InetUsers и включаем в нее всех тех пользователей домена, которые должны работать через прокси-сервер. Конечно же, этого недостаточно. На самом деле еще необходимо доменной политикой принудительно задать настройки прокси-сервер в браузерах пользователей домена и запретить им самостоятельно менять настройки. Я для этого создал отдельное подразделение, включил в него всех тех же пользователей, что и в группе InetUsers, и включил на этом подразделении созданную мной политику. Рецептов этого действия в Интернет множество, они вполне корректны, желающие могут найти их самостоятельно.
Далее заполняем листы контроля доступа, например, у меня черный список /etc/squid3/blacklist.acl выглядит примерно так:
.*vkonta*
.*odnoklass*
.opera-mini.net
.vk.com
.odnoklassniki.ru
.narod.yandex.ru
.cameleo.ru
.cmla.ru
.facebook.com
.anon.fafka.ru
.anonymouse.org
.webwarper.net
.anonymizer.ru
.2ip.ru
.unlumen.ru
.hideme.ru
.chameleon-proxy.ru
.spools.com
.mmt.su
.vkoko.ru
.vkpse.com.ext.yarb.ru
.yarb.ru
.spoolls.com
.vkpse.com.ext.socialwin.ru
.socialwin.ru
.facebook.net
.dd34.ru
.youtube.com
.playflock.com
.userapi.com
.erenta.ru
.smotri.com
.loadup.ru
В основном в нем - анонимайзеры, и я регулярно добавляю их на основе анализа активности пользователей. Запись .opera-mini.net относится к серверу Opera Turbo, которым тоже можно воспользоваться для обхода запрещенных сайтов. Белый список и список сайтов обновлений заполняются аналогично.
Особо хочу отметить важную деталь - если шлюз по умолчанию, задаваемый в настройках сетевых карт пользователей динамически или статически является открытым, то есть не имеет собственного списка доступа ACL, так или иначе выполненного в зависимости от аппаратной реализации шлюза, то любой достаточно умный пользователь может легко обойти прокси-сервер при помощи portable браузера любого типа, который либо не берет настройки прокси из операционной системы принудительно, либо легко позволяет отключить эту настройку без прав локального администратора. Поэтому нужно использовать шлюз с ACL, в котором разрешен доступ во внешнюю сеть только для самого прокси-сервера или, например, привилегированного компьютера системного администратора, а остальным IP адресам прямой доступ запрещен. Cisco, например, легко это делает.
Для SQUID существует достаточно много программ формирования отчетов, но постоянной поддержки удостаиваются немногие - большинство давненько уже висят в релизах года так 2006 или даже раньше. Что касается всем известного SARG, то хотелось что-нибудь попроще и побыстрее, второе важнее. Так что я остановил свой выбор на проекте free-sa - http://free-sa.sourceforge.net/ Работает существенно быстрее SARG, есть форум сообщества, где можно порешать проблемы: http://sourceforge.net/apps/phpbb/free-sa/ Правда, проблем пока не возникало, разве что собираюсь как-нибудь зайти поглядеть, как можно будет подкорректировать интерфейс отчетов.
Прежде, чем устанавливать free-sa, доставляем необходимые пакеты:
apt-get install build-essential apache2
build-essential нужен для сборки пакетов, apache2 – веб-сервер для отображения веб-страницы с отчетами. Вполне возможно, что эти пакеты в вашей системе уже установлены, тогда вы получите соответствующее сообщение.
.
Скачиваем исходники программы:
wget http://sourceforge.net/projects/free-sa/files/free-sa-dev/2.0.0b3p8/free-sa-2.0.0b5p10.tar.gz
Обратите внимание, что нужно использовать именно тестовую сборку – она работает нормально, а объявленные стабильными сборки сильно отстают по дате релиза. Для просмотра имеющихся сборок загляните на страницу http://sourceforge.net/projects/free-sa/files/free-sa-dev/ . На момент составления этого документа самой свежей была именно сборка 2.0.0b5p10. Если вы видите, что появилась сборка свежее, соответствующим образом измените номер сборки в конце данной команды на закачивание.
Распаковываем полученный каталог, заходим в него и редактируем файл для управления установкой программы
tar –zxf free-sa*
cd free-sa*
nano global.mk
В файле находим и раскомментируем строку OSTYPE = ubuntu-i586-gcc4.
Затем устанавливаем программу free-sa
make install
Копируем и настраиваем конфиги
cp /etc/free-sa/free-sa.conf.sample
/etc/free-sa/free-sa.conf
nano /etc/free-sa/free-sa.conf
Делаем минимальную настройку конфига:
##################
# GLOBAL OPTIONS #
##################
configuration_name="/etc/free-sa/free-sa.conf"
#cache_directory="/var/cache/free-sa"
target_directory="/var/www/free-sa"
#locale=""
####################
# LOG FILE OPTIONS #
####################
log_file="/var/log/squid3/access.log"
#log_format="0"
#log_skip_errors="no"
#log_time_zone_shift="0"
##########################
# NAMES HANDLING OPTIONS #
##########################
#recipient_tolower="no"
#username_file="/etc/free-sa/usertab"
#username_is_preferred="yes"
username_resolve_ip="yes"
#username_unescape="no"
Затем:
mkdir /usr/local/etc/free-sa
cp /etc/free-sa/free-sa.conf
/usr/local/etc/free-sa/free-sa.conf
Настраиваем скрипт статистики и cron для автоматического выполнения задачи формирования статистики за истекший день. В Ubuntu я сделал это следующим образом, конечно, каждый может изменить задачу, как ему необходимо. У меня сбор статистики идет ежесуточно в самом конце истекших суток, и на следующее утро я уже могу видеть статистику за прошедший день.
mkdir /etc/cron.free-sa
nano /etc/cron.free-sa/free-sa_day
#!/bin/bash
# Приложение создания отчетов по журналам SQUID
#set -x
umask 0022
free_sa=/usr/bin/free-sa
date1=`date +%x`
$free_sa -d $date1-
Устанавливаем права запуска
chmod +x /etc/cron.free-sa/free-sa_day
Редактируем cron
nano /etc/crontab
GNU nano 2.2.6
Файл: /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
59 23 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.free-sa )
Перезапустите cron командой /etc/inti.d/cron restart или
просто перезагрузите сервер.
Статистика будет на странице http://your_server _ip_address/free-sa
Примечание: пока что меня временно устроил тот вид статистики, который
отображается по умолчанию. Если вы хотите подредактирвать его под свои
потребности, можно обратиться к форуму сообщества http://sourceforge.net/apps/phpbb/free-sa/
Ничего не понимаю, собираю free-sa по Вашему мануалу. Компиляция и установка проходят нормально. Но при запуске free-sa -d month выдает, что отчет успешно сформирован, но в директории /var/www/free-sa файл index.html не появляется ЧЯДНТ?
ОтветитьУдалитьЗЫ:
OS Ubuntu GNU\Linux 12.04
Squid3
free-sa-2.0.0b5p15
Права на каталог проверяли? Что в логах?
ОтветитьУдалитьls -l /var/www/free-sa/
ОтветитьУдалитьитого 8
drwxr-xr-x 2 root root 4096 окт. 21 21:36 cgi-bin
lrwxrwxrwx 1 root root 20 окт. 21 21:36 c.png -> themes/default/c.png
lrwxrwxrwx 1 root root 20 окт. 21 21:36 d.png -> themes/default/d.png
lrwxrwxrwx 1 root root 20 окт. 21 21:36 g.png -> themes/default/g.png
lrwxrwxrwx 1 root root 22 окт. 21 21:36 gsa.css -> themes/default/gsa.css
lrwxrwxrwx 1 root root 22 окт. 21 21:36 lsa.css -> themes/default/lsa.css
lrwxrwxrwx 1 root root 22 окт. 21 21:36 rsa.css -> themes/default/rsa.css
lrwxrwxrwx 1 root root 12 окт. 21 21:36 sa.js -> themes/sa.js
lrwxrwxrwx 1 root root 20 окт. 21 21:36 s.png -> themes/default/s.png
drwxr-xr-x 7 root root 4096 окт. 21 21:36 themes
ИМХО, права тут ни при чем, т.к., free-sa запускаем от имени root.
Лог инсталляции (выхлоп sudo make install 2>&1|pastebinit) тут В global.mk выставил
OSTYPE = ubuntu-i586-gcc4
Файл configs/ubuntu-i586-gcc4.mk. Конфиг /etc/free-sa/free-sa.conf
Запускаю free-sa вручную:
sudo free-sa -d month
SADEBUG: [CS2TP] START: 21.09.2013 21:54:34
SADEBUG: [CS2TP] END: 21.10.2013 21:54:34
SADEBUG: [CS2TP] INTERVAL: 'month' -> 2592000
#проверяю
ls /var/www/free-sa/
cgi-bin c.png d.png g.png gsa.css lsa.css rsa.css sa.js s.png themes
1) после настройки конфига было сделано вот это, по тексту:
ОтветитьУдалитьmkdir /usr/local/etc/free-sa
cp /etc/free-sa/free-sa.conf
/usr/local/etc/free-sa/free-sa.conf
Если копии настроенного конфига не будет, нельзя будет подключиться к веб серверу через браузер, мы же цепляемся к браузеру не рутом, а просто юзером.
2) у меня изначально не формировался отчет и не возникал файл индекса, пока я хотя бы немного не походил в Интернет через прокси с какого-нибудь одного клиента, соответственно, комп клиента должен быть нормально настроен на прокси и прокси должен пропустить его в Инет, если не пускает, сначала копаем сквид, нормально ли он авторизуется в домене и прочее. В сквиде должна быть хоть какая-то статистика за этот период. Попробуйте.
Разобрался в чем подвох был!!! Версия, которую я скачал (2.0.0b5p15) "сыроватая" и как бы не танцевал вокруг нее, ничего не выходило, качнул 2.0.0b5p10, она прекрасно собралась и зароботала с пол-тычка :).
ОтветитьУдалить1) после настройки конфига было сделано вот это, по тексту:
mkdir /usr/local/etc/free-sa
cp /etc/free-sa/free-sa.conf
/usr/local/etc/free-sa/free-sa.conf
Это излишне, так как в configs/-ubuntu-i586-gcc4.mk явно указано где какие конфиги храняться (ETCDIR = /etc/$(PROGLNAME)).
Если копии настроенного конфига не будет, нельзя будет подключиться к веб серверу через браузер, мы же цепляемся к браузеру не рутом, а просто юзером.
Обратите вимание, сразу после установки у /var/www оунер именно root:root, а не www-data:www-data, при этом "It's work" мы в браузере видим, какой отсюда вывод?
Огромное спасибо за консультацию! Успехов в Ваших начинаниях!!!
Пару недель назад поставил free-sa на физический сервер Ubuntu 13.04 всё прошло на ура, спасибо вашему мануалу. Но сегодня решил поставить на виртуальную машину Hyper-V 2012, сначала на Ubuntu 13.04 x64 вроде всё поставилось но не мог найти файл /usr/bin/free-sa, я взял этот файл с уже установленной реальной машины и просто подсунул его в каталог, ни чего не заработало этот файл Ubuntu x64 просто игнорирует. На том же Hyper-V установил Ubuntu 13.04 i386, проблема была та же но когда я подсунул файл /usr/bin/free-sa всё отлично заработало. Не могу понять почему на реальной машине таких проблем не было?
ОтветитьУдалитьЗдравствуйте Андрей!
ОтветитьУдалитьПрошу прощения за просьбу не по теме.
Опубликуйте пожалуйста статью как у вас раздаётся интернет. Дело в том, что статей по iptables много но толком ни чего не понятно или уже ни чего не работает на Ubuntu 13.04, меня больше интересует маркировка пакетов например mark 1 и т.д.. Просто раздать интернет (NAT) и настроить шейпер HTB нет ни чего проще, а вот сделать маркировку ни как не могу понять механизм. Хочется именно маркировку что бы потом через HTB можно было менять скорость для клиентов, очень мне понравился этот шейпер.
root@ubuntu:/etc/free-sa# sudo free-sa -d month
ОтветитьУдалитьSAERROR: [LoadUsertab] Incorrect file format
В чем причина? Файл Usertab присутствует, там одна запись "Имя" пробел "АЙПИ"