Документация по ОС FreeBSD Пятница, 19.04.2024, 15:41
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Squid

Squid и авторизация пользователей в AD по группам [2010]
Итак предыстория: опыт работы с прокси-сервером squid у меня большой, но после
смены рабочего места (эх кризис) пришлось привыкать к тормознутости и
неповоротливости Microsoft ISA Server, который выполнял задачи шлюза и прокси.
Мириться с этим мне не хотелось, но в компании были исторически сложившиеся религиозные
устои, а именно:
•    Все администраторы специализировались на Windows платформах
•    Существовало несколько ступеней доступа в сеть интернет
•    Руководство было немного без головы и могло запросить статистику по
пользователю аж за какой-то день хрен знает какого года до нашей эры, причем
все это должно было быть красиво в графиках, закорючках и с уточнением посещенных
сайтов и т.д…
Немного покопавшись в своей голове, взвесив все тяготы и последствия принятой 
инициативы, я убедил руководство отцепить резервный интернет канал от шлюза и
дать мне месяц на настройку и доказательство жизнеспособности и конкурентоспособности
нового творения. Конечно выбрал любимую FreeBSD. На то время уже был доступен
релиз 7.2, на нем и было все построено.
В качестве шлюза я развернул FreeBSD, настроил на нем IPFW с «ядерным» натом,
и считалочки трафика по интерфейсам trafd (что б было о чем раз в месяц с провайдером
поговорить). И внутри сети уже был развернут отдельный сервер со Squid.
Распишу сразу особенности будущего прокси:
•    Авторизация должна проходить без участия пользователя и на основании 
учетных данных AD
•    Пользователи должны делиться на группы и иметь установленный политиками
компании доступ в глобальную сеть
•    Статистика по пользователям должна вестись непрерывно и на протяжении
бесконечно огромного времени
Начнем:
Для реализации задачи нам потребуется:
•    Squid 3.0.19
•    Samba (вернее ее маленькая часть WinBIND)
•    Lightsquid (для подсчета трафика)
По установке самбы и сквида в интернете есть куча howto, но на всякий случай
повторюсь.
Устанавливаем самбу:
//>cd /usr/ports/net/samba3/
/usr/ports/net/samba3/>make config

Выбираем следующее:
[X] LDAP With LDAP support
[X] ADS With Active Directory support
[X] WINBIND With WinBIND support
[X] SYSLOG With Syslog support
[X] UTMP With UTMP accounting support
[X] POPT With system-wide POPT library

И собираем
/usr/ports/net/samba3/>make install clean

Копируем дефолтный конфиг и правим его для наших нужд
cd /usr/local/etc
/usr/local/etc/>cp smb.conf.sample smb.conf
/usr/local/etc/>mcedit smb.conf

#======================= Global Settings ============================
[global]
# netbios имя нашего домена
 workgroup = MYDOMAIN
# Комментарий сервера
 server string = Corporate Proxy Server
# Режим безопасности
 security = ADS
# Указываем сети, которым разрешен досту к прокси
 hosts allow = 10.201.1.
# Указываем расположение логов
 log file = /var/log/samba/log.%m
# Указываем размер логов (в килобайтах)
 max log size = 1024
# Указываем имя контроллера домена (Внимание! Необходимо указать контроллер
# домена,выполняющий роль PDC, если он у вас один то не заморачивайтесь. У 
# меня в сети много сайтов.)
 password server = dc4.mydomain.local
# Указываем полное имя нашего домена
 realm = mydomain.local
# Указываем тип хранилища
 passdb backend = tdbsam
# Сетевые настройки
 socket options = TCP_NODELAY
# Указываем самбе, что она не является PDC
 local master = no
 os level = 0
 domain master = no
 preferred master = no
 domain logons = no
# Настройки кодировки
 display charset = koi8-r
 unix charset = koi8-r
 dos charset = cp866
# Настройки winbind
 winbind use default domain = no
 winbind uid = 10000-20000
 winbind gid = 10000-20000
 winbind enum users = yes
 winbind enum groups = yes

Теперь необходимо внести изменения в nsswitch.conf для того, чтобы winbind получал информацию из AD. Нужно исправить всего две строки:
group: files winbind
passwd: files winbind

Теперь добавляем наш сервер в домен
//>net ads join -U user%pass
Using short domain name -- MYDOMAIN
Joined 'FREEBSD' to realm ‘mydomain.local’

Внимание!!! User – имя пользователя с привилегиями добавлять машины в домен (для особо непонятливых – это либо администратор домена, либо пользователь, которому были делегированы права администратором на сею экзекуцию тачек), pass – пароль этого пользователя!
Теперь настроим запуск winbind вместе с системой, добавляем в rc.conf следующие строки:
winbindd_enable="YES"
winbindd_flags="-d 1"

Осталось указать пользователя, от имени которого будет проходить аутентификация (для этих целей я создал отдельного пользователя, и делегировал ему нужные права (если не хочется заморачиваться дайте ему права администратора домена))
//>wbinfo --set-auth-user=MYDOMAIN\\proxy%password
//>wbinfo --get-auth-user
MYDOMAIN\proxy%password

Все с самбой разобрались.
Для упрощения своей работы по описанию установки и настройки самбы было взято первое попавшееся на глаза вменяемое howto. Оригинал здесь: http://sys-adm.org.ua/www/squid-ad.php

Теперь займемся установкой и настройкой Squid'a.
Устанавливаем:
//>cd /usr/ports/www/squid30
/usr/ports/www/squid30/>make config

Выбираем следующее:
[X] SQUID_LDAP_AUTH Install LDAP authentication helpers
[X] SQUID_DELAY_POOLS Enable delay pools
[X] SQUID_SNMP Enable SNMP support
[X] SQUID_HTCP Enable HTCP support
[X] SQUID_CACHE_DIGESTS Enable cache digests
[X] SQUID_WCCP Enable Web Cache Coordination Prot. v1
[X] SQUID_IDENT Enable ident (RFC 931) lookups
[X] SQUID_ARP_ACL Enable ACLs based on ethernet address

Устанавливаем
/usr/ports/www/squid30/>make install clean

Теперь перейдем к настройке (Внимание! Конфиг Squid'a очень большой.  Я его переписывал почти полностью! Последовательность TAG должна быть как у меня.)
//>mcedit /usr/local/etc/squid/squid.conf
# Указываем Squid как проводить аутентификацию:
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol
=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on
authenticate_cache_garbage_interval 15 minute
authenticate_ttl 5 minute
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol
=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid Proxy-Server
auth_param basic credentialsttl 20 minute
auth_param basic casesensitive off
# Теперь указываем Squid где брать информацию о группах пользователей
external_acl_type nt_group %LOGIN /usr/local/libexec/squid/wbinfo_group.pl
# Рекомендованная минимальная конфигурация:
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
# Описываем основные порты (с вашего позволения из этого списка я убираю 
# порты для управления активным оборудованием, службами и сервисами, в т.ч. 
# порты доступа по ssh (эти порты у меня не стандартные, что рекомендую 
# всем остальным))
acl SSL_ports port 563 # snews
acl Safe_ports port 80 # http
acl FTP port 20 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 # multiling http
acl Safe_ports port 631 # cups
acl Safe_ports port 110 # POP3
acl Safe_ports port 25 # SMTP
acl purge method PURGE
acl CONNECT method CONNECT
# Указываем пулы адресов нашей сети/сетей
acl lan src 10.201.1.0/255.255.255.0
# Указываем диапазоны адресов серверных платформ, нуждающихся в обновлении 
# через интернет 
# В моем случае это сервера WSUS, Symantec Endpoint Protection Manager и т.д.
acl Servers src 10.201.1.1-10.201.1.49
# Указываем адреса машин, которым интернет доступен без ограничений 
# скорости (правильно админские)
acl Speed_Internet src 10.201.1.101 10.201.1.102
# Указываем диапазон адресов пользователей FTP
acl FTPusers src 10.201.1.101-10.201.1.102
# Указываем расположение и назначение словарей доступа в сеть интернет:
acl url-updates dstdomain "/usr/local/etc/squid/url-updates.txt" 
# Список сайтов для обновления серверов
acl url-mail-ru dstdomain "/usr/local/etc/squid/url-mail-ru.txt" 
# Доступ к почте mail.ru
acl url-good dstdomain "/usr/local/etc/squid/url-good.txt" 
# Список разрешенных сайтов (доступ к этим сайтам будет возможен 
# даже пользователям, кторым доступ в интернет запрещен)
acl urls-good urlpath_regex -i "/usr/local/etc/squid/urls-good.txt" 
# Тоже самое только по протоколу https
acl url-bad dstdomain "/usr/local/etc/squid/url-bad.txt" 
# Список запрещенных сайтов
acl urls-bad url_regex -i "/usr/local/etc/squid/urls-bad.txt" 
# Тоже самое только по протоколу https
acl url-webmail dstdomain "/usr/local/etc/squid/url-webmail.txt" 
# Список web-mail
acl urls-webmail url_regex -i "/usr/local/etc/squid/inet-webmails.txt" 
# web-mail по https
acl url-porno url_regex -i "/usr/local/etc/squid/url-porno.txt" 
# Список порносайтов
acl url-audio dstdomain "/usr/local/etc/squid/url-audio.txt" 
# Списки аудиоконтента
acl url-banners url_regex -i "/usr/local/etc/squid/url-banners.txt" 
# Список баннеров
acl url-JAVA dstdomain "/usr/local/etc/squid/url-java.txt" 
# Список сайтов, использующих для работы JAVA-#апплеты
acl url-netshare dstdom_regex -i "/usr/local/etc/squid/url-netshare.txt" 
# Списки netshare
acl url-redirector dstdom_regex -i "/usr/local/etc/squid/url-redirector" 
# Список анонимайзеров
acl urls-redirector url_regex -i "/usr/local/etc/squid/urls-redirector" 
# Тоже самое по https
#########################################################
Многие спросят нахрена одно и тоже и так много, ведь можно все объединить
в один файл. Объясняю: во-первых часть списков будет содержать не адреса 
сайтов а регулярные выражения в ссылках, по которым сайты будут блокироваться
(очень актуально для порнухи и web-mail ибо банить их просто устанешь). 
Так же данные ограничения буду применяться по разному для разных 
групп пользователей
#########################################################
# Указываем группы доступа
acl inet-admins external nt_group inet-admins # Доступ для админов
acl inet-directors external nt_group inet-directors # Как же их любимых 
# с пользователями то ровнять
acl inet-mail.ru external nt_group inet-mail.ru # Избранные с правом 
# доступа на почту mail.ru
acl inet-servers external nt_group inet-servers # Группа для обновлений 
# серверов
acl inet-users external nt_group inet-users # Бедняги обычные смертные
acl inet-webmail external nt_group inet-webmail # Группа пользователей с 
#голубой кровью, испытывающих #недостатки в работе с корпоративной почтой 
# и предпочитающей альтернативы (думаю везде есть такие #уникумы)
acl GET method GET
acl inet-ftp external nt_group inet-ftp # Пользователи которым разрешен
# доступ к ftp-серверам

# TAG: http_access
# Теперь начинаем процесс естественной селекции, указывая 
# кому что можно, а именно сопоставляем группы пользователей
# с ранее указанными словарями
# Для начала вводим ограничения по портам
http_access allow manager lan
http_access allow purge localhost
http_access deny !Safe_ports !FTP
http_access deny CONNECT !SSL_ports
http_access deny manager
http_access deny to_localhost
http_access allow localhost
http_access allow purge localhost
http_access deny purge
url_rewrite_access deny localhost
# Теперь указываем права доступа по словарям
http_access deny FTP !FTPusers
http_access allow url-JAVA
http_access allow url-good
http_access allow urls-good
http_access deny urls-bad
http_access deny url-bad
http_access deny urls-redirector
http_access deny url-redirector
# Теперь указываем в каких группах используются какие словари
http_access allow inet-directors !url-netshare
http_access allow url-mail-ru inet-mail.ru
http_access allow inet-webmail !url-porno !url-netshare
http_access allow url-updates inet-servers
http_access allow inet-mail.ru !url-webmail !urls-webmail !url-
porno !url-netshare
http_access allow inet-admins !url-mail-ru !url-webmail !urls-
webmail !url-porno
http_access allow inet-ftp !url-bad !urls-bad !url-webmail !urls-
webmail !url-porno
http_access allow inet-users !url-mail-ru !url-good !url-bad !urls-
bad !url-webmail !urls-webmail !url-porno !url-audio !url-banners !url-
netshare !url-redirector !urls-redirector !inet-ftp
# Напоследок стандартные правила
http_access deny all
http_reply_access allow all
icp_access allow all

# Указываем порт, на котором будет слушать Squid
http_port 3128

# MEMORY CACHE OPTIONS
# --------------------------------------------------------------------
# TAG: cache_mem (bytes)
cache_mem 256 MB
# TAG: maximum_object_size_in_memory (bytes)
maximum_object_size_in_memory 80 KB

# DISK CACHE OPTIONS
# --------------------------------------------------------------------
# TAG: cache_dir
cache_dir ufs /usr/local/squid/cache 1024 16 256
# TAG: minimum_object_size (bytes)
#Default:
minimum_object_size 10 KB
# TAG: maximum_object_size (bytes)
#Default:
maximum_object_size 32 MB
# TAG: cache_swap_low (percent, 0-100)
# TAG: cache_swap_high (percent, 0-100)
#
cache_swap_low 90
cache_swap_high 95

# LOGFILE OPTIONS
# -------------------------------------------------------------------

# TAG: access_log
access_log /usr/local/squid/logs/access.log squid

# TAG: pid_filename
pid_filename /usr/local/squid/logs/squid.pid

# TAG: ftp_user
ftp_user unix@mydomain.ru

# TAG: ftp_passive
ftp_passive on

# OPTIONS FOR TUNING THE CACHE
# --------------------------------------------------------------------

# TAG: cache
acl QUERY urlpath_regex cgi-bin \?

# TAG: refresh_pattern
#Suggested default:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

# TAG: quick_abort_min (KB)
# TAG: quick_abort_max (KB)
# TAG: quick_abort_pct (percent)
quick_abort_pct 80

# ADMINISTRATIVE PARAMETERS
# -------------------------------------------------------------------

# TAG: cache_mgr
cache_mgr admins@mydomain.ru

# TAG: cache_effective_user
cache_effective_user squid

# TAG: delay_access
delay_access 1 allow url-bad !Speed_Internet
delay_access 2 allow Speed_Internet
delay_access 2 allow url-updates
delay_access 3 deny all
delay_access 4 allow lan !Speed_Internet
delay_access 4 deny all
delay_access 1 allow urls-bad !Speed_Internet
delay_access 1 allow url-audio !Speed_Internet
delay_access 2 deny all

# TAG: delay_parameters
delay_class 1 2
delay_class 2 2
delay_class 3 3
delay_class 4 2
delay_parameters 1 32000/128000 8000/8000
delay_parameters 2 250000/1000000 125000/512000
delay_parameters 3 64000/512000 125000/2000000 32000/1000000
delay_parameters 4 250000/2000000 32000/512000

# TAG: delay_initial_bucket_level (percent, 0-100)
delay_initial_bucket_level 50

# TAG: error_directory
error_directory /usr/local/etc/squid/errors/Russian-1251

# TAG: hosts_file
hosts_file /etc/hosts

# TAG: fqdncache_size (number of entries)
fqdncache_size 16386

# TAG: memory_pools_limit (bytes)
memory_pools_limit 64 MB

# TAG: forwarded_for on|off
forwarded_for off

# TAG: cachemgr_passwd
cachemgr_passwd "your password” all

# TAG: coredump_dir
coredump_dir /usr/local/squid/cache

no_cache deny QUERY manager localhost to_localhost SSL_ports CONNECT url-
JAVA
visible_hostname proxy.mydomain.local
dns_nameservers 10.201.0.1 10.201.1.1

Все с настройкой squid’a закончили. Теперь необходимо внести соответствующие изменения:
Создаем словари в директории /usr/local/etc/squid/
Примеры содержания словарей.
/usr/local/etc/squid/>cat url-updates.txt
.microsoft.com
.microsoft.ru

/usr/local/etc/squid/ >cat url-mail-ru.txt
.mail.ru

/usr/local/etc/squid/>cat url-good.txt
.rbc.ru
news.mail.ru

/usr/local/etc/squid/>cat urls-good.txt
services.mozilla.com:443
msexchange
smsexpress
procmail
userMessageCreate
=emailform
adsi_mailboxes

/usr/local/etc/squid/>cat url-bad.txt
.1tvrus.com
.2krota.ru
.72.ru
.KM.ru
.a91.ru
.addictinggames.com
.amba.ru
.amobil.ru
.anekdot.ru

/usr/local/etc/squid/>cat urls-bad.txt
spine.heightanxiety.com
kamerton.com.ua

/usr/local/etc/squid/>cat url-webmail.txt
.AEmail4U.com
.AviationEmail.com
.BankersMail.com
.BlazeMail.com
.BornAgain.com
.BuildTraffic.com
.CBGB.com
.CarJunky.com
.ChefMail.com
.CoolYork.com
.DarkSites.com

/usr/local/etc/squid/>cat inet-webmails.txt
mail
inbox
message
pochta

/usr/local/etc/squid/>cat url-porno.txt
porn
sex
xxx
teen
fuck

/usr/local/etc/squid/>cat url-audio.txt
\.(ra?m|wma|mp2|mpv2|mp3|asx)($|\?)
\.(mpe?g?|wmv|mov|movie|qt|avi|dvd?|divx|flv|iflv)($|\?)
\.(iso|exe|vbs)($|\?)

/usr/local/etc/squid/>cat url-banners.txt
/ads/
/ad/
/banner/
/sponsor/
/event.ng/
/Advertisement
/adverts/

/usr/local/etc/squid/>cat url-java.txt
.forexpf.ru

/usr/local/etc/squid/>cat url-netshare.txt
11mbit.in
allfiles.ru
cyberupload.com
depositfiles.com

/usr/local/etc/squid/>cat url-redirector
zonefast.info
zonesafe.info
zoom.selfip.net
zroxee.com
zroxi.com

/usr/local/etc/squid/>cat urls-redirector
207.156.166.165/anonymiser
66.75.98.129/cgi-bin/nph-ssl.cgi
charter.com/cgi-bin/nph-815764.cgi/010110A/

Создаем группы пользователей в AD. Внимание группы должны располагаться в корне AD. Хоть убей, но я так и не смог заставить Squid читать группы из разных Организационных юнитов, поэтому создал их в корне.
Список нужных нам групп:
inet-admins
inet-directors
inet-mail.ru
inet-servers
inet-users
inet-webmail
inet-ftp

Внимание: при создании группы учитывать: тип группы – глобальная  группа распространения!
Теперь добавляем пользователей в нужные группы!
Добавляем Squid в rc.conf
squid_enable=”YES”

Теперь для простоты использования сего творения сочиняем пару простеньких скриптиков. Директорию размещения скриптов оставляю вам на выбор.
Первый скрипт поможет нам перезагружать все это безобразие «одной кнопкой».
Я его обозвал коротко и локанично «restart_all»
#! /bin/sh
/usr/local/etc/rc.d/samba stop
/usr/local/etc/rc.d/samba start
wbinfo -p
wbinfo -u
wbinfo -g
/usr/local/etc/rc.d/squid stop
/usr/local/etc/rc.d/squid start

Данный скрипт перезапускает winbind, проверяет связь с AD и перезапускает Squid.
И второй скриптик более важный. Он не перезагружает демонов, а заставляет Squid перечитать словари доступа, что требуется значительно чаще. Хоть по содержанию он совсем прост.
#!/bin/sh
/usr/local/etc/rc.d/squid reload

Последний скрипт пихаем в cron с частотой запуска примерно раз в 2 часа (хотя нужды у всех разные и решать это опять Вам).

Теперь осталось дать доступ виндовым админам к нашим файликам доступа пользователей. Каким образом вы это сделаете решать тоже вам, лично я их расшарил по сети, а случайным образом придуманное расширение .txt не заставит бедняг рвать волосы на голове не понимая как это открывать… А всю работу сделает скриптик в кроне. Подсчетом статистики у меня занимается lightsquid. Писать про его настройку я не стану. В интернете про это написаны даже докторские диссертации.



Источник: http://www.lissyara.su/?id=2075
Категория: Squid | Добавил: oleg (06.03.2010) | Автор: aspera
Просмотров: 2145 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 1
1 k0rven  
0
Здравствуйте, отличная статья, думаю нужно знать некоторые полезные команды при настройке squid:
после редактирования конфига обязательно используйте вот эту команду: squid -k parse, она проверит файл на наличие синтаксических ошибок. Для того, чтобы squid применил внесенные в конфиг изменения без перезапуска самого "себя")), т.е просто перечитал свой конфиг и применил изменения, делаем так:

squid -k reconfigure

Я кстати написал о том, как я настраивал squid на работы с AD вот ссылка http://www.artcom-ufa.ru/posts/2012/07/28/nastroika-squid

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links
unlock pdf password

Copyright MyCorp © 2024