Proxy-сервер SQUID web-интерфейс для администрирования SAMS SAMS+REJIK с аунтентификацией по NTLM
Настраиваем связку SQUID SAMS+REJIK с аунтентификацией по NTLM (proxy sams)
.
Так как есть ДОМЕН под управление Win 2003 Server, и нужна авторизация пользователя под своей учетной записью и так же вести логи и предоставлять информацию начальству в случаи надобности.
Авторизация пользователей будет по NTLM.
Для всего нам понадобится apache, php, mysql, сам squid, proxy sams, samba.
Все это нам предстоит установить, или обновить.
Для начало ставим скопом apache, php, mysql:
$ aptitude install apache2 apache2-doc apache2-utils ssl-cert mysql-server libmysqlclient15-dev libapache2-mod-php5 php5 php5-common php5-dev php5-mcrypt php5-imagick php5-mysql
Для того, чтобы пользователи могли проходить NTLM аутентификацию, необходимо настроить авторизация через Active Directory, и здесь вы будем использовать samba, kerberos, winbind, pam. Настраиваем и введем наш сервер в домен:
1. Устанавливаем и настраиваем Kerberos:
$ aptitude install krb5-doc krb5-user krb5-config
в конце процесса установки, установщик спросит у наc два параметра:
What are the Kerberos servers for your realm?
имя Kerberos cервера для realm NS.DOMAIN (имя realm определено автоматически)
[ master.ns.domain ]
What is the administrative server for your Kerberos realm?
имя cервера паролей для NS.DOMAIN Kerberos realm
[ master.ns.domain ]
на оба запроса вводим наш адрес домен-контроллера(DC)
Далее правим /etc/krb5.conf и приводим его к такому виду (EXAMPLE.COM — наш master.ns.domain ):
$ nano /etc/krb5.conf
[libdefaults]
default_realm = EXAMPLE.COM# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
…. ……….. ……..
[realms]
EXAMPLE.COM = {
kdc = EXAMPLE.COM
admin_server = EXAMPLE.COM
}[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
[login]
krb4_convert = true
krb4_get_tickets = false[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5dc.log
admin_server = FILE:/var/log/ksadmind.log
Так же можно добавить несколько записей kdc,если это необходимо, так вторым kdc вполне может быть вторичный контроллер домена Active Directory например kdc = ad1.example.com и тд.
Проверяем, берем пользователя из AD:
$ kinit admin@EXAMPLE.COM
Password for admin@EXAMPLE.COM: *****
$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin@EXAMPLE.COM
Valid starting Expires Service principal
08/24/10 07:51:34 08/24/10 14:31:34 krbtgt/EXAMPLE.COM@EXAMPLE.COM
Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached
2. Устанавливаем и настраиваем SAMBA:
$ aptitude install winbind samba
Теперь настраиваем winbind, для этого правим файл /etc/samba/smb.conf.
$ cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
$ nano /etc/samba/smb.conf
[global]
dos charset = cp866
unix charset = KOI8-R
workgroup = EXAMPLE (прописными)
realm = EXAMPLE.COM (прописными)
server string = SQUID-PROXY
security = ADS
auth methods = winbind
allow trusted domains = No
password server = *
log level = 1
log file = /var/log/samba/samba.%m
max log size = 50
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
os level = 0
preferred master = No
local master = No
domain master = No
dns proxy = No
ldap ssl = no
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = Yes
strict locking = No
client NTLMv2 auth = Yes
client lanman auth = No
client plaintext auth = No
#winbind separator = +
winbind enum users = Yes
winbind enum groups = Yes
winbind refresh tickets = Yes
encrypt passwords = yes
Проверяем конфигурацию SAMBA:
$ testparm
testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
Далее правим файл nsswitch.conf
$ nano /etc/nsswitch.conf
…… ……
passwd: compat winbind
group: compat winbind
shadow: compat winbindhosts: files dns
networks: filesprotocols: db files
services: db files
ethers: db files
rpc: db filesnetgroup: nis
Поcле редактирования /etc/samba/smb.conf, не забываем реcтарт samba+winbind
$ /etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start
Stopping the Winbind daemon: winbind.
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
Starting the Winbind daemon: winbind.
Теперь заведем наш сервер в домен:
$ net ads join -U administrator
Enter administrator’s password:
Using short domain name — EXAMPLE
Joined ‘COMP’ to realm ‘example.com’
Проверить, видит ли Samba группы,пользователей домена можно так:
$ wbinfo -u
В ответ выдаст список пользователей в домене.
группы:
$ wbinfo -g
3. Ставим,настроиваем сам squid:
$ aptitude install squid
Так как сам конфиг squid’а заслуживает описания отдельной статьи, а может и не одной, поэтому выложу свой кофиг, правда напильником он не обработан, но нам все завелось, все заремленное удалил:
$ cp /etc/squid/squid.conf /etc/squid/squid.conf_back
………… …..
# Параметры ntlm для аутентификации через браузер
auth_param ntlm program /usr/bin/ntlm_auth —helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 50
auth_param ntlm keep_alive onauth_param basic program /usr/bin/ntlm_auth —helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
………. …
acl _sams_default proxy_auth «/etc/squid/default.sams»
… …
acl Localnet src 192.168.100.0/24
acl ALL src 0.0.0.0/0.0.0.0
#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 SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl purge method PURGE
acl CONNECT method CONNECT
….
http_access allow _sams_default
http_access allow Localnet
…
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
…. . . .
http_access allow localhost
….. …
http_access deny ALL
…… …
icp_access allow localnet
icp_access deny all
….. …….
http_port 3128
… . . ..
hierarchy_stoplist cgi-bin ?
………… …..
access_log /var/log/squid/access.log squid
…….. ………..
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
…………. ………
acl shoutcast rep_header X-HTTP09-First-Line ^ICY\s[0-9]
upgrade_http0.9 deny shoutcast
…… . . .. .
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
….. ……
delay_pools 1
delay_class 1 2
delay_access 1 allow _sams_default
delay_access 1 deny all
delay_parameters 1 64000/64000 64000/64000
……… …….
hosts_file /etc/hosts
. . …….
coredump_dir /var/spool/squid
Создаем кэш:
$ squid -z
2010/09/07 11:28:55| Creating Swap Directories
Если squid не cможет запуститься по каким либо причинам, он выводит сообщения об ошибках прямо на консоль.Детальный лог будет лежать в /var/log/squid/cache.log.
4. Установливаем SAMS, берем последнюю версию proxy sams собранную в пакеты для Debian (etch/lenny) и Ubuntu (hardy/jaunty) вы можете по адресам:
http://nixdev.net/release/sams/ubuntu/
http://nixdev.net/release/sams/debian/lenny/
Выбираем свою архитектуру процессора (32х или 64х битная), и устанавливаем 3 пакета:
sams — конфигурационный файл и все исполняемые файлы демонов
sams-web — web-интерфейс для управления работой sams и squid
sams-doc — документация к sams
Рекомендуется устанавливать все 3 пакета выбранной версии: Для 32х битных систем:
$ wget -c "http://nixdev.net/release/sams/debian/lenny/sams_1.0.5_i386.deb"
$ dpkg -i sams_1.0.5_i386.deb
$ wget -c "http://nixdev.net/release/sams/debian/lenny/sams-web_1.0.5_all.deb"
$ wget -c "http://nixdev.net/release/sams/debian/lenny/sams-doc_1.0.5_all.deb "
$ dpkg -i sams-web_1.0.5_all.deb sams-doc_1.0.5_all.deb
Заходим и читаем, там все просто расписанно по шагам
$ nano /usr/share/doc/sams/README.Debian
Для работы SAMS необходимо создать пользователя sams в БД MySQL (Create SAMS user in database):
$ mysql -u root -p
mysql> GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "yourpassword";
mysql> GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "yourpassword";
Создаем таблицы SAMS (tables in database):
$ mysql -u root -p < /usr/share/sams/mysql/sams_db.sql
$ mysql -u root -p < /usr/share/sams/mysql/squid_db.sql
После этого правим конфиг SAMS /etc/sams.conf, все параметры я расписал:
$ nano /etc/sams.conf
# имя базы данных SAMS
SQUID_DB=squidlog
# имя базы данных, где SAMS хранит информацию, полученную из логов SQUID
SAMS_DB=squidctrl
# адрес хоста, где стоит MySQL
MYSQLHOSTNAME=localhost
# имя пользователя MySQL, от которого будет работать SAMS
MYSQLUSER=sams
# пароль этого же пользователя в MySQL
MYSQLPASSWORD= Ваш_пароль_пользователя_sams
# наша установленная версия MySQL
MYSQLVERSION=5.0
# имя файла логов SQUID
SQUIDCACHEFILE=access.log
# директория, где лежит конфиг SQUID
SQUIDROOTDIR=/etc/squid
# директория, где лежит файл логов SQUID
SQUIDLOGDIR=/var/log/squid
# путь к кэшу SQUID
SQUIDCACHEDIR=/var/spool/squid
# путь, где лежит SAMS
SAMSPATH=/usr
# путь, где лежит SQUID
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/etc/squid
# Если вы хотите использовать NTLM или AD авторизацию и у вас есть имена пользователей на руссокм языке, то перекодирования имен пользователей из используемой кодировки в dos-866
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
# используем авторизацию в Active Directory, редактируем эти пункты
LDAPSERVER=ip адрес или имя сервера Active Directory
# ваш домен
LDAPBASEDN=EXAMPLE.COM
# имя пользователя, входщего в группу администраторы домена
LDAPUSER=usernameadmin
# пароль
LDAPUSERPASSWD=passward
# группа, в которую входят пользователи доменаю Для AD это обычно Users
LDAPUSERSGROUP=Users
# использовать редиректор REJIK
REJIKPATH=/usr/local/rejik
# Команда, выполняемая при нажатии на кнопку (SAMS->"Shutdown proxy server").
# Данная команда добавлена для удобства удаленного выключения прокси сервера.
SHUTDOWNCOMMAND=shutdown -h now
# Номер прокси-сервера SQUID, зарегистрированного в SAMS.
# SAMS поддерживает возможность управлениями несколькими прокси серверами SQUID.
CACHENUM=0
Редактируем /etc/init.d/sams и изменяем SAMS_ENABLE="false" на "true".
$ nano /etc/init.d/sams
SAMS_ENABLE=true
Настройка Apache и PHP:
Пакет sams-web уже содержит конфигурационный файл для web-сервера apache для работы SAMS по адресу http://<адрес сервера>/sams/.
Редактируем конфиг PHP /etc/php5/apache2/php.ini:
$ nano /etc/php5/apache2/php.ini:
C версии 1.0 SAMS работает в safe_mode php
Настриваем php для работы в режиме safe mode, для этого выставляем параметр safe_mode:
safe_mode = On
так же SAMS для некоторых функций WEB интерфейса использует системные команды, например wbinfo.В режиме safe_mode php блокирует доступ к системным командам.Php позволяет выполнять системные команды, расположенные в каталоге,заданном параметром safe_mode_exec_dir.Изменяем этот параметр:
safe_mode_exec_dir = "/usr/share/sams/bin"
Далее разрешаем исполнение системных скриптов из кода php.Ищем в файле конфигурации параметр и убираем из него запрет вызова функций phpinfo system shell_exec exec:
disable_functions = "chdir,dl,ini_get_all,popen,proc_open,passthru,pcntl_exec"
Перезапускаем службы:
$ /etc/init.d/apache2 restart
$ /etc/init.d/sams start
Ставим Режик
Для начало ставим библиотеку pcre, в дистрибутивах Debian и Ubuntu библиотека разбита на две части: libpcre3 libpcre3-dev, нужны обе.
$ aptitude install libpcre3 libpcre3-dev
Берем с офсайта http://www.rejik.ru/index_ru_11_1.html последнию версию на момент написания это redirector-3.2.8
$ wget http://www.rejik.ru/download/redirector-3.2.8.tgz
$ tar -xzf redirector-3.2.8.tgz
$ cd redirector-3.2.8
Скачиваем банлисты:
$ wget http://www.rejik.ru/download/banlists-2.x.x.tgz
$ $ tar -xzf banlists-2.x.x.tgz
Смотрим под каким пользователем работает squid, и что за группа (для Debian и Ubuntu это proxy:proxy)
$ nano /etc/squid/squid.conf
cache_effective_user proxy
cache_effective_group proxy
или
$ ps aux | grep squid
Открываем для редактирования Makefile и правим значения SQUID_USER и SQUID_GROUP на нашего пользователя и группу (proxy:proxy).
Собираем и устанавливаем
$ make
$ make install
Перемещаем туда наши бан листы:
$ mv banlists /usr/local/rejik3/
Переходим в каталог куда он установился
$ cd /usr/local/rejik3/
Редактируем конфиг:
$ cp /usr/local/rejik3/redirector.conf.dist /usr/local/rejik3/redirector.conf
в конфиге путь к логам указан в ту же папку куда установлен и сам rejik (/usr/local/rejik3/),
для удобства переношу логи в папку (/var/log/squid) и создаю там лог-файлы которые прописанны в конфиге:
$ cd /var/log/squid
$ touch redirector.log redirector.err
Ставим права:
$ chown proxy:proxy redirector.log (redirector.err)
Меняем наши пути:
$ nano /usr/local/rejik3/redirector.conf
error_log /var/log/squid/redirector.err
change_log /var/log/squid/redirector.log
Так же выставляем на папку banlists права (proxy:proxy):
$ chown -R proxy:proxy banlists/*
Из папки /usr/local/rejik3/tools запускаем:
$ ./check-redirector
http://127.0.0.1/ban/porno.html 127.0.0.1/- - GET
Идем в наши логи и смотрим - для нас важна в redirector.log строчка:
2010-09-20 16:19:09 [26671] Redirector start and working (3.2.8)
если что смотрим что он хочет и исправляем.
Продолжения следует ....
Читаем еще:
- Долгожданный релиз Samba 4.0 с поддержкой Active Directory
- SAMBA: аудит операций с файлами и контроль обращений
- Samba и авторизация через Active Directory
- Настройка прокси-сервера Squid +sams+ncsa на Ubuntu 10.04
- FTP сервер на базе vsftpd и MySQL в Debian (Ubuntu)
Бывает при настройке выскакивает ошибка:
$ wbinfo -p
Ping to winbindd failed
could not ping winbindd!
$ wbinfo -t
checking the trust secret via RPC calls failed
Could not check secret
Идем и смотрим логи в чем проблема, и на ходим в /var/log/samba/samba.winbindd
такие строки:
Вот что вычитал из источников в интеренет по этому поводу:
Права доступа на каталог /var/run/samba/winbindd_privileged
Они должны быть 750(rwx-r-x—).
Группой владельца должна быть группа squid.
НЕ НАДО добавлять никаких «ЛИШНИХ» прав.
в моем случаи группы squid нету вместо ее proxy:
$ chown -R root:proxy /var/run/samba/winbindd_privileged
$ /etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start
и все порядке:
$ wbinfo -t
checking the trust secret via RPC calls succeeded
В том же логе:
добрый запнулся на $ nano /etc/krb5.conf
все настроил но при попытке запросить пользователя он пишет
root@proxy:/# kinit bryksin@mmk.local
kinit: Cannot contact any KDC for realm ‘mmk.local’ while getting initial credentials
[libdefaults]
default_realm = MMK.LOCAL
# The following krb5.conf variables are only for MIT Kerberos.
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
[realms]
MMK.LOCAL = {
kdc = DC1.MMK.LOCAL
admin_server = DC1.MMK.LOCAL
}
[domain_realm]
.mmk.local = MMK.LOCAL
mmk.local = MMK.LOCAL
[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5dc.log
admin_server = FILE:/var/log/ksadmind.log