Настройка Squid с авторизацией пользователей в AD

Задача: Настроить прокси сервер Squid с возможностью прозрачной авторизации клиентов Active Directory, веб интерфейсом Sams для управления и системой блокировки нежелательного трафика Rejik на базе Debian Lenny

Подготовка

Контроллер Домена

На контроллере домена создаем группу безопасности Internet и добавляем в нее пользователей, которым будет разрешен доступ в интернет. Добавляем в эту группу пользователя, который ее создавал, для того чтобы увидеть ее SID. Разлогиниваемся. Залогиниваемся еще раз и в командной строке выполняем команду

С:\>WHOAMI /GROUPS /FO CSV /NH

Копируем SID используемой группы для дальнейшего добавления в конфигурационный файл Squid

Прокси сервер

Прописываем имя сервера

# echo proxy.kontora.local > /etc/hostname
# cp /etc/hostname /etc/mailname

Добавляем FQDN контроллера домена и прокси сервера

# nano /etc/hosts
127.0.0.1	localhost.localdomain		localhost
192.168.1.7	proxy.kontora.local		proxy
192.168.1.2	ad.kontora.local		ad

Где ad.kontora.local — имя контроллера домена.

Указываем сервер dns сервер и домен по умолчанию

# nano /etc/resolv.conf
search kontora.local
nameserver 192.168.1.2

Добавляем расширенные репозитории

# nano /etc/apt/sources.list

Приводим файл к следующему виду:

# deb http://ftp.ua.debian.org/debian/ lenny main                                                                                 
                                                                                                                                  
deb http://ftp.ua.debian.org/debian/ lenny main contrib non-free                                                                  
deb-src http://ftp.ua.debian.org/debian/ lenny main                                                                               
                                                                                                                                  
deb http://security.debian.org/ lenny/updates main contrib non-free                                                               
deb-src http://security.debian.org/ lenny/updates main                                                                            
                                                                                                                                  
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free                                               
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

Обновляем систему

# aptitude update && aptitude upgrade

Устанавливаем необходимое ПО

# aptitude install apache2 apache2-mpm-prefork apache2-doc php5 libapache2-mod-php5 php5-cli php5-common php5-mysql php5-gd php5-ldap php-fpdf mysql-server 
mysql-client libmysqlclient15off libpcre3 libpcre3-dev ntpdate squid samba krb5-user winbind make 

При установке MySQL необходимо будет ввести пароль пользователя root, в дальнейшем он понадобится для создания пользователя от имени которого будет производится работа SAMS. При установке krb5-user в окне конфигурации необходимо нажать Enter.

Настраиваем синхронизацию времени с контроллером домена

# ntpdate ad.kontora.local
# crontab -e
*/59 * * * * /usr/sbin/ntpdate ad.kontora.local

Настройка

Php

Изменяем конфигурационный файл

# nano /etc/php5/apache2/php.ini

Приводим параметры

safe_mode
safe_mode_exec_dir
disable_functions

к виду

safe_mode = On
safe_mode_exec_dir = "/usr/share/sams/bin"
disable_functions =

Kerberos

# mv /etc/krb5.conf /etc/krb5.conf.bak
# touch /etc/krb5.conf
# nano /etc/krb5.conf

Приводим конфигурационный файл к следующему виду:

[logging]
Default = FILE:/var/log/krb5libs.log
Kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = KONTORA.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac

[realms]
KONTORA.LOCAL = {
kdc=ad.kontora.local:88
default_domain=kontora.local
}

[domain_realm]
kontora.local = KONTORA.LOCAL
.kontora.local = KONTORA.LOCAL
KONTORA.LOCAL = KONTORA.LOCAL
.KONTORA.LOCAL = KONTORA.LOCAL

[kdc]
Profile = /var/kerberos/krb5kdc/kdc.conf

[appdefaults]
Pam = {
Debug = true
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = false
krb4_convert = false
}

Проверяем правильность работы Керберос:

# kinit Administrator@KONTORA.LOCAL

Вводим пароль администратора домена. Если не выдало ошибок, проверяем наличие тикета

# klist

После проверки удаляем тикет

# kdestroy

Samba

# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# touch /etc/samba/smb.conf
# nano /etc/samba/smb.conf

Приводим конфигурационный файл к следующему виду:

[global]
workgroup = KONTORA
realm = KONTORA.LOCAL
server string = Proxy
security = ADS
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
os level = 0
local master = No
domain master = No
dns proxy = No
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes

Перезапускаем сервисы

# /etc/init.d/samba restart
# /etc/init.d/winbind restart

Проверяем работоспособность:

# testparm

Вводим прокси сервер в домен

# net ads join -U Administrator

Проверяем получение доменных групп и пользователей

# wbinfo -g
# wbinfo -u

Nsswitch

# mv /etc/nsswitch.conf /etc/nsswitch.conf.bak
# touch /etc/nsswitch.conf
# nano /etc/nsswitch.conf

Приводим конфигурационный файл к следующему виду:

passwd: files winbind compat
group: files winbind compat
shadow: files winbind compat

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

Проверяем работоспособность

id KONTORA\\Administrator

Ntlm

Добавляем пользователя proxy в группу winbindd_priv, для того чтобы у Squid был доступ к авторизациям пользователей

# gpasswd -a proxy winbindd_priv

Rejik

Скачиваем необходимые файлы Rejik

# mkdir /usr/src/rejik
# cd /usr/src/rejik
# wget http://rejik.ru/download/redirector-3.2.8.tgz
# wget http://rejik.ru/download/banlists-2.x.x.tgz
# wget http://rejik.ru/download/www.tgz
# wget http://rejik.ru/download/dbl-2.0.tgz

Распаковываем Rejik

# tar -zxvf redirector-3.2.8.tgz
# cd redirector-3.2.8
# nano Makefile

Изменяем параметры файла сборки

SQUID_USER=nobody на SQUID_USER=proxy
SQUID_GROUP=nogroup на SQUID_GROUP=proxy

Компилируем Rejik и устанавливаем его в систему

# make
# make install

Устанавливаем Бан листы

# tar -zxvf banlists-2.x.x.tgz
# mv banlists /usr/local/rejik3/

Создаем файлы логов Rejik и выставляем на них права

# touch /var/log/squid/redirector.log
# touch /var/log/squid/redirector.err
# chown proxy:proxy /var/log/squid/redirector.log
# chown proxy:proxy /var/log/squid/redirector.err
# chown -R proxy:proxy banlists/*

Редактируем конфигурационный файл Rejik

# cd /usr/local/rejik3
# cp redirector.conf.dist redirector.conf
# nano redirector.conf

Изменяем пути к логам Rejik

error_log /var/log/squid/redirector.log 
error_log /var/log/squid/redirector.err

Дальнейшая настройка Rejik сводится к добавлению списков блокировок. Это все подробно описано на http://www.rejik.ru

Squid

# mv /etc/squid/squid.conf /etc/squid/squid.conf.bak
# touch /etc/squid/squid.conf
# nano /etc/squid/squid.conf

Приводим конфигурационный файл к следующему виду:

#Определяем параметры аутентификации пользователей
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=S-1-5-21-139329950-3031665859-43222392-1267
auth_param ntlm children 15
auth_param ntlm keep_alive on
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=S-1-5-21-139329950-3031665859-43222392-1267
auth_param basic children 15
auth_param basic realm Proxy Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

#Определяем имена acl в зависимости от адресов
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl ntlm proxy_auth REQUIRED

#Наша локальная сеть
acl localnet src 192.168.1.0/24

#Перечисляем порты, которые смогут проходить через прокси 
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         # multiling http
acl CONNECT method CONNECT

#Параметры изменяемые SAMS (Не удалять!)

#  TAG: acl
#  TAG: http_access
#  TAG: delay_class

#Определяем доступы в зависимости от адресов
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#Разрешаем локальной сети ходить в интернет
http_access allow localnet ntlm
http_access deny all
icp_access allow localnet
icp_access deny all
http_port 3128
hierarchy_stoplist cgi-bin ?

#Выделяем память под кешируемые объекты
cache_mem 64 MB

#Задаем максимальный размер файла в памяти
maximum_object_size_in_memory 64 KB
memory_replacement_policy lru
cache_replacement_policy lru

#Определяем кеш на диске
#Первая цифра размер директории кеша, две следующие это 
# число директорий 1-го уровня и в них количество, 
# определенное третьей цифрой, директорий 
cache_mem 64 MB

#Задаем максимальный размер файла в памяти
maximum_object_size_in_memory 64 KB
memory_replacement_policy lru
cache_replacement_policy lru

#Определяем кеш на диске
#Первая цифра размер директории кеша, две следующие это 
# число директорий 1-го уровня и в них количество, 
# определенное третьей цифрой, директорий 
# непосредственно для файлов кеша
cache_dir ufs /var/spool/squid  100 16 256
store_dir_select_algorithm least-load

#Задаем максимальный размер закешированного файла
maximum_object_size  8 MB
cache_swap_low 90
cache_swap_high 95
logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

#Указываем местонахождение лог файлов
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/run/squid.pid
strip_query_terms off
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

#Задаем имя сервера в случае ошибки DNS
visible_hostname proxy.kontora.local

#Задаем язык отображения ошибок
error_directory /usr/share/squid/errors/Russian-1251
check_hostnames on
coredump_dir /var/spool/squid

#Программа редиректор
redirect_program        /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf

Где S-1-5-21-139329950-3031665859-43222392-1267 — SID, который принадлежит группе Internet

Нельзя удалять:

#  TAG: acl #  TAG: http_access #  TAG: delay_class

Sams использует данные теги для добавления своих параметров

Sams

Скачиваем и устанавливаем SAMS

# mkdir /usr/src/sams
# cd /usr/src/sams
# wget http://nixdev.net/release/sams/debian/lenny/sams_1.0.5_i386.deb
# wget http://nixdev.net/release/sams/debian/lenny/sams-web_1.0.5_all.deb
# wget http://nixdev.net/release/sams/debian/lenny/sams-doc_1.0.5_all.deb
# dpkg -i sams_1.0.5_i386.deb sams-web_1.0.5_all.deb sams-doc_1.0.5_all.deb

Активируем SAMS при загрузке системы

# nano /etc/init.d/sams

Приводим строку

SAMS_ENABLE=false к виду  SAMS_ENABLE=true

Задаем пользователя и его пароль для работы с БД SAMS

# mysql -u root -p

mysql> GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "samspasswd";
mysql> GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "samspasswd";
mysql> exit

Изменяем конфигурационный файл SAMS

# nano /etc/sams.conf

И приводим его к следующему виду

[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=samspasswd
MYSQLVERSION=5.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr
SQUIDPATH=/usr/sbin
#SQUIDGUARDLOGPATH=/var/log
#SQUIDGUARDDBPATH=/etc/squid
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=192.168.1.2
LDAPBASEDN=kontora.local
LDAPUSER=Administrator
LDAPUSERPASSWD=Pa$$w0rd
LDAPUSERSGROUP=Users
REJIKPATH=/usr/local/rejik3
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=0

Создаем БД SAMS

# cd /usr/share/sams/mysql
# mysql -u root -p < sams_db.sql
# mysql -u root -p < squid_db.sql

Создаем символическую ссылку на SAMS в корневой директории веб сервера

# ln -s /usr/share/sams /var/www/sams

Задаем права

# chown -R www-data:www /usr/share/sams
# chown -R www-data:www /etc/sams.conf
# chmod 777 /usr/share/sams/data

Перезапускаем сервис

# /etc/init.d/sams restart

Веб интерфейс будет доступен по адресу http://<IP сервера>/sams/

Вход под администратором:

Логин: admin
Пароль: qwerty

Вход под аудитором

Логин: auditor
Пароль: audit

На этом установка завершена. Настройка SAMS для работы с пользователями очень подробно описана в встроенной документации.

Начальная

 
manuals/debian/nastrojka_squid_s_avtorizaciej_polzovatelej_v_ad_pod_upravleniem_debian_lenny.txt · Последние изменения: 04/11/2010 11:35 От Алексей
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki