Главная > Debian, В помощь sysadmin'y > Proxy-сервер SQUID web-интерфейс для администрирования SAMS SAMS+REJIK с аунтентификацией по NTLM

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 winbind

hosts: files dns
networks: files

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

netgroup: 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 on

auth_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)

если что смотрим что он хочет и исправляем.

Продолжения следует ....

Читаем еще:

  1. 9 Ноябрь 2010 в 19:58 | #1

    Бывает при настройке выскакивает ошибка:
    $ 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
    такие строки:

    …. lib/util_sock.c:create_pipe_sock(1949)
    invalid permissions on socket directory /var/run/samba/winbindd_privileged
    open_winbind_socket: Success

    Вот что вычитал из источников в интеренет по этому поводу:
    Права доступа на каталог /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

    В том же логе:

    …. winbindd/winbindd_cache.c:initialize_winbindd_cache(2374)
    initialize_winbindd_cache: clearing cache and re-creating with version number 1

  2. devilscry
    6 Сентябрь 2012 в 16:07 | #2

    добрый запнулся на $ 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

  1. Пока что нет уведомлений.
Необходимо войти на сайт, чтобы написать комментарий.
#

//