Настройка прокси сервера на CentOS 7 (squid+AD+sams2)

Когда у меня появилась необходимость настроить полноценный прокси сервер на базе CentOS 7, оказалось, что в интернете почти нет актуальной информации на эту тему. Статьи в целом есть, но большинство из них про 6-ю версию, плюс нету полноценной связки с active directory. В своей статье я восполню тематический пробел.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Введение

Существует проверенная временем связка для прокси сервера - squid + sams. Я настраивал ее еще лет 8 назад на Freebsd. Недавно у меня появилась необходимость настроить что-то подобное на CentOS 7, и я с удивлением обнаружил, что ничего принципиально нового с тех пор не появилось. Никакой более удобной и информативной web панели к squid не придумали.

Так что будем настраивать проверенный временем набор программ. Ко всему прочему, удобнее его сразу интегрировать с виндовым доменом, для простой авторизации на прокси с помощью учетных записей домена. Так проще будет смотреть статистику и давать доступ. Особенно это актуально, если у вас есть терминальные пользователи, работающие с одного ip. Здесь у вас вообще нет других вариантов, если вам нужна статистика и ограничение доступа по пользователям.

Приступим к настройке. В своей работе я буду подразумевать, что вы установили и настроили centos по моим рекомендациям. Советую ознакомиться с материалом. Это позволит здесь не тратить время на второстепенные настройки, которые не имеют прямого отношения к теме статьи.

Добавление CentOS 7 в домен Windows

Здесь нужно быть очень внимательным. Это сложный и не любимый мной момент, так как все очень сильно привязано к версиям системы и софта. Порой какой-нибудь точки или регистра достаточно, чтобы ничего не работало. Так вышло и у меня, когда я готовил этот материал.

Я без проблем ввел компьютер в домен, прошел все проверки, но потом в squid напрочь отказывалась работать ntlm авторизация. Все на вид выглядело нормально, но не работало. Я несколько раз восстанавливал виртуалку и начинал все сначала, перечитав практически все, что смог найти по теме в рунете и буржунете. В какой-то момент все заработало. Я зафиксировал результат и несколько раз проверил последовательность действий и отточил ее до каждого шага. Проверил несколько раз на чистой системе. По крайней мере на момент написания статьи конфигурация на 100% рабочая, если аккуратно повторить все мои действия. Приступаем.

Сначала остановим и отключим firewalld:

# systemctl stop firewalld && systemctl disable firewalld

Это не значит, что его не надо настраивать. Сейчас другая тема статьи, для локализации проблем необходимо убрать все, что теоретически может мешать при неправильной настройке. Firewall нужно настраивать и у меня есть подробная инструкция по настройке iptables. Рекомендую с ней ознакомиться и аккуратно настроить iptables, когда все получится со squid.

Установим софт для добавления сервера в домен windows:

# yum -y install samba-winbind samba-winbind-clients pam_krb5 krb5-workstation ntp ntpdate
Для продолжения настройки вам необходимо знать следующие вещи - FQDN имя контроллера домена, его ip адрес и учетную запись с правами на ввод компьютера в домен.

Первым делом вручную синхронизируем часы компьютера с контроллером домена:

# ntpdate winsrv.xs.local

Добавляем наш контроллер в список серверов для обновления в файле /etc/ntp.conf, запускаем ntp и добавляем в автозагрузку:

# systemctl enable ntpd
# systemctl start ntpd
Синхронизация времени с контроллером домена не является обязательным действием. Но в случае расхождения времени более чем на 5 минут, будут возникать проблемы, которые на первый взгляд будут неочевидными и решать их трудно. Поэтому на всякий случай процедуру лучше провести. Очень подробно о настройке времени в CentOS 7 рассказано отдельно.

Выполняем команду для передачи настроек керберосу:

# authconfig --enablekrb5 --krb5kdc=winsrv.xs.local --krb5adminserver=winsrv.xs.local --krb5realm=WINSRV.XS.LOCAL --enablewinbind --enablewinbindauth --smbsecurity=ads --smbrealm=XS.LOCAL --smbservers=winsrv.xs.local --smbworkgroup=XS --winbindtemplatehomedir=/home/%U --winbindtemplateshell=/bin/bash --enablemkhomedir --enablewinbindusedefaultdomain --update

Команда вся идет в одну строчку. Скопируйте ее сначала в текстовый файл и подредактируйте под свои параметры. Проверьте, что нигде не пропали и не добавились лишние пробелы, либо какие-то еще символы, тире должно быть двойным перед параметром. В данном случае:

  • xs - название домена
  • winsrv - имя контроллера домена
  • winsrv.xs.local - полное имя домена

Вывод после работы команды будет такой:

Job for winbind.service failed. See 'systemctl status winbind.service' and 'journalctl -xn' for details.
getsebool: SELinux is disabled

Это нормально. Обращаю внимание, что SELinux у меня отключен.

Теперь заводим машину в домен:

# net ads join -U administrator
Enter administrators's password:
Using short domain name -- XS
Joined 'PROXY' to dns domain 'xs.local'

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

Теперь нужно запустить и добавить в автозагрузку winbind:

# systemctl start winbind
# systemctl enable winbind

Проверяем, все ли у нас корректно работает. Для начала проверим наличие доверительной учетной записи сервера на КД:

# wbinfo -t 
checking the trust secret for domain XS via RPC calls succeeded

Все в порядке. Теперь проверяем, может ли наш сервер получать списки пользователей и групп. Первая команда выводит список всех групп домена, вторая - всех пользователей:

# wbinfo -g
# wbinfo -u

Проверим авторизацию пользователя через winbind:

# wbinfo -a XS\\control%'pass'
plaintext password authentication succeeded
challenge/response password authentication succeeded

В данном случае control - имя пользователя домена, pass - его пароль. Успешная проверка выглядит так, как у меня.

Теперь запросим билетик кербероса:

# kinit administrator@XS.LOCAL

Дальше вводите пароль. Если ошибки не выскочило, значит все в порядке. Проверим билет командой:

# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: administrator@XS.LOCAL

Valid starting Expires Service principal
12/04/2015 23:19:33 12/05/2015 09:19:33 krbtgt/XS.LOCAL@XS.LOCAL
renew until 12/11/2015 23:19:29

Все в порядке, проверки прошли. Мы полностью подготовили сервер к авторизации пользователей доменными учетными записями.

Настройка SQUID с ntlm авторизацией через домен

Дальше будет попроще. Если на предыдущем этапе вы все сделали правильно, то squid заработает без проблем. Устанавливаем его:

# yum -y install squid

Открываем файл конфигурации /etc/squid/squid.conf и добавляем в самое начала следующие параметры:

auth_param ntlm program /usr/bin/ntlm_auth --diagnostics --helper-protocol=squid-2.5-ntlmssp --domain=XS
auth_param ntlm children 10
auth_param ntlm keep_alive off
acl auth proxy_auth REQUIRED

Не забудьте указать свой домен. Обращаю внимание на первую строку. В большинстве инструкций в интернете она выглядит немного не так, в ней нет дополнительных параметров. Без них у меня ntlm авторизация не хотела работать, я очень долго ее мучал.

Дальше находим в конфиге строку:

http_access allow localnet

Комментируем ее, она позволяет получить доступ всем компьютерам из локальной сети. После этой строки добавляем новую:

http_access allow auth

Разрешаем доступ только тем, кто прошел авторизацию. Запускаем squid и добавляем в автозагрузку:

# systemctl start squid
# systemctl enable squid

Все, можно идти проверять. Открываем браузер у какого-нибудь компьютера и указываем в качестве прокси ip адрес сервера, порт 3128. Пробуйте выйти в интернет.

Как понять, что все работает правильно:

  1. Пользователя должно пустить в интернет.
  2. В лог файле сквида должна быть информация об имени пользователя, который получает доступ. У меня это выглядит примерно вот так при открытии страницы яндекса:
# cat /var/log/squid/access.log | grep control

1449261311.346 9 10.1.4.189 TCP_MISS/304 438 GET http://yastatic.net/islands/_/S1-qWWyv85yFAtoHVvuxJXpOKA4.svg control HIER_DIRECT/178.154.131.217 -
 1449261311.351 11 10.1.4.189 TCP_MISS/200 622 GET http://yastatic.net/www/_/_/y/ljN5poHcx67T3HSZuHbvf2NNk.png control HIER_DIRECT/178.154.131.217 image/png
 1449261311.404 9 10.1.4.189 TCP_MISS/304 440 GET http://yastatic.net/morda-logo/i/disaster/metro11072015.png control HIER_DIRECT/178.154.131.217 -
 1449261311.488 97 10.1.4.189 TCP_MISS/302 355 GET http://kiks.yandex.ru/fu control HIER_DIRECT/213.180.204.143 -
 1449261311.507 9 10.1.4.189 TCP_MISS/304 341 GET http://kiks.yandex.ru/system/fc07.swf control HIER_DIRECT/213.180.204.143 -

В данном случае control - доменная учетная запись.

У нас получилась полностью дефолтная конфигурация, в которую мы просто добавили ntlm авторизацию и разрешили доступ в интернет только для тех, кто эту авторизацию прошел. Если компьютер находится не в домене, то при работе через прокси выскочит окно с авторизацией, в которую нужно будет ввести данные от учетной записи домена, чтобы получить доступ в интернет.

В таком виде конфигурация сервера уже вполне рабочая, можно пользоваться, подключать пользователей. Но это неудобно. Нужно средство для удобного управления списками доступа и просмотра статистики пользователей.

Установка и настройка sams2 в CentOS 7

И вот мы подошли  самому главному и трудному. Когда я решил написать статью на эту тему, я подозревал, что установить sams2 в CentOS 7 будет тяжело, но не думал, что настолько. Пришлось разбить работу на два этапа. Первый этап мы уже прошли, а со вторым мне пришлось поковыряться не один день, пока все не получилось так, как хотелось.

Трудности тут с тем, что проект sams2 давно заброшен, под CentOS 7 он вообще не планировался, готового пакета нет. Есть только старые пакеты для 6-й версии и исходники. Я буду собирать sams2 из исходников и очень аккуратно опишу все этапы, по которым прошел. Столкнулся с множеством ошибок, пришлось немного править исходники, чтобы собранные версии нормально работали. Потом с настройками много нюансов, которые нигде не описаны, пришлось ковыряться самому.

Если все сделать по инструкции с сайта разработчика, то в CentOS 7 ничего не получится. Там как минимум есть 2 бага, которые не позволят собрать работающие программы и провести нормально установку.

В итоге у меня получилась конфигурация sams2, которая импортирует пользователей из AD, создает списки доступа к сайтам и позволяет отдельным пользователям блокировать различные сайты, плюс ведет статистику по пользователям в удобном виде.

Это тот функционал в sams2, который я настроил у себя и проверил. Возможно работает что-то еще, нужно проверять. Не все заявленные функции самс работают из коробки, их нужно с костылями настраивать и проверять. Я добился удовлетворяющего меня результата и остановился на этом.

Приступаем к работе. Нам нужно настроить web сервер для работы интерфейса sams. Можно воспользоваться моей инструкцией, можно чем-то еще. Не обязательно ставить apache, можно настроить на nginx и php-fpm, либо на lighttpd. Я для простоты все сделаю на апаче. Останавливаться подробно не буду на каждом из этапов, все описание есть в первой ссылке абзаца. Привожу только команды.

Устанавливаем httpd:

# yum install -y httpd

Добавляем в автозапуск и запускаем:

# systemctl enable httpd
# systemctl start httpd

Устанавливаем php и некоторые модули:

yum install -y php
yum install -y php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd

Устанавливаем mariadb

yum install -y mariadb mariadb-server mariadb-devel

Обращаю внимание на последний пакет. Без него установить sams2 не получится, хотя его наличие в списке необходимых пакетов не очевидно. Я сначала его не установил и при сборке самс не видел у меня установленного сервера mysql.

Добавляем в автозапуск и запускаем:

# systemctl enable mariadb.service
# systemctl start mariadb

Задаем пароль рута:

# /usr/bin/mysql_secure_installation

Подключаем репозиторий epel и устанавливаем phpmyadmin. Это не обязательно, но мне с ним удобнее:

# yum -y install epel-release
# yum -y install phpmyadmin

Все подготовительные работы сделаны. Убедитесь, что у вас нормально работает веб сервер и скрипты php. Я не буду на этом останавливаться. Так удобнее будет для вас. Если сейчас не проверить веб сервер, то потом, если у вас недостаточно опыта в работе, вы не поймете, что у вас не работает - сам самс или что-то другое. Лучше все подготовить и проверить по отдельности.

Скачиваем исходники sams2 в домашний каталог root. Все работы будут проделываться под этой учетной записью.

# yum -y install wget
# cd /root
# wget https://github.com/PavelVinogradov/sams2/archive/master.zip

Ставим unzip и распаковываем архив:

# yum -y install unzip
# unzip master.zip

Исходники программы лежат в папке /root/sams2-master. В ней ищем папку src и файл proxy.h. Его нужно будет отредактировать. Открываем редактором, ищем все строчки со значением enum и правим их:

# mcedit /root/sams2-master/src/proxy.h

Было так:

enum TrafficType

меняем на

enum TrafficType: long

И так все строчки с этим значением. Их должно быть 5 штук. Сохраняем файл и закрываем. Если не внести эти изменения и собрать исходники как есть, то sams2daemon будет падать с ошибкой:

kernel: sams2daemon[27541]: segfault at ffffffffffffffe8 ip 00007fc54880944b sp 00007ffc8da37d20 error 5 in libstdc++.so.6.0.19[7fc54874b000+e9000]

Это связано с тем, что CentOS 7 64-x битная система, а из этих исходников программа нормально собирается только на 32-х битных системах.

Теперь установим необходимые для сборки пакеты:

# yum -y install autoconf automake libtool pcre-devel libstdc++-devel gcc-c++

Переходим в каталог с исходниками и начинаем компиляцию:

# cd /root/sams2-master
# make -f Makefile.cvs

Запускаем скрипт автоматической конфигурации:

# sh ./configure

Он должен отработать без ошибок и в конце вывести полезную информацию:

компиляция sams2 из исходников

Сохраните пути, они позже пригодятся во время настройки. Обратите внимание на подчеркнутые строки. Без первой строки не будет поддержки mysql, без второй не заработают списки запрета доступа. Убедитесь, что все в порядке с ними.

Выполняем установку sams2:

# make install

У меня она почему-то проходит с ошибкой:

ошибка установки sams2

Суть ошибки в этой строке:

chmod: cannot access '//usr/local/share/sams2/data': No such file or directory

Я не знаю, почему инсталлятор не может создать эту папку сам. Хотя проблема возможно просто в ошибке в исходниках, в пути почему-то стоят два слеша в начале. Я просто руками создал эту директорию и заново запустил установку:

# cd /usr/local/share/sams2/
# mkdir data
# cd /root/sams2-master
# make install

Установка прошла успешно. Добавляем директорию с web интерфейсом sams2 в httpd. Для этого идем в директорию с конфигурациями и рисуем следующий файл настроек для самса:

# mcedit /etc/httpd/conf.d/sams2.conf
Alias /sams2 /usr/local/share/sams2
<Directory /usr/local/share/sams2/>
 AddDefaultCharset UTF-8
 <IfModule mod_authz_core.c>
  <RequireAny>
   Require ip 10.1.3.0/24 10.1.4.0/24
  </RequireAny>
 </IfModule>
</Directory>

10.1.3.0/24 10.1.4.0/24 - подсети из которых будет доступ к web интерфейсу. Можете просто указать ip адрес администратора, если доступ будет нужен только с его компьютера.

Удаляем те конфиги, которые самс сгенерировал автоматически, я с ними не мог зайти на сайт, не стал разбираться почему, просто сделал быстро сам настройки:

# rm /etc/httpd/conf.modules.d/doc4sams2.conf
# rm /etc/httpd/conf.modules.d/sams2.conf

Перезапускаем httpd:

# systemctl restart httpd

Теперь если зайти по адресу htpp://ip-сервера/sams2 вы увидите сообщение:

Invalid query: Access denied for user 'apache'@'localhost' (using password: NO)

Это нормально. Пока так и должно быть.

Редактируем конфигурационный файл sams2.conf:

# mcedit /usr/local/etc/sams2.conf
DB_ENGINE=MySQL
DB_SERVER=localhost
SAMS_DB=sams2db
ODBC=0
PDO=0
ODBCSOURCE=sams_mysql
DB_USER=root
DB_PASSWORD=rootpass
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
WBINFOPATH=/usr/local
SAMSPATH=/usr/local
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidguard
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=1

В качестве пользователя mysql указываем пока рута. Сохраняем файл и идем снова в веб-интерфейс, обновляем страничку. У вас должна загрузиться следующая информация:

install sams2 на CentOS 7

Нажимаем Run setup program >> . И получаем сообщение об ошибке:

sams2 ошибка

При этом в логе httpd следующая информация:

# cat /var/log/httpd/error_log

PHP Parse error: syntax error, unexpected '$configbuttom_7_log_2' (T_VARIABLE) in /usr/local/share/sams2/lang/lang.EN on line 1100, referer: http://10.1.4.14/sams2/index.php

Это очередной баг самс2. Чтобы его исправить, открываем на редактирование файл /usr/local/share/sams2/lang/lang.EN идем на строку 1100 и после нее убираем все пробелы перед последующими строками:

# mcedit /usr/local/share/sams2/lang/lang.EN

Делаем так:

баг в sams2

Сохраняем файл, идем в веб интерфейс и перезагружаем страничку. Должны увидеть форму выбора языка. Выбираем русский:

sams2 setup

Проходит проверка требований. У меня такие результаты:

проверка установки sams2

Создаем базу данных. Убедитесь, что пользователя и базы данных для самс, которые вы будете указывать, у вас еще нет в mysql, иначе получите ошибку. Заполняете данные для root и для нового пользователя:

создание базы данных для sams2

Установка прошла успешно:

успешная установка sams2

Теперь нужно снова отредактировать файл sams2.conf и заменить пользователя mysql на только что созданного:

# mcedit /usr/local/etc/sams2.conf

Проверим работу веб интерфейса. Переходим снова по адресу http://ip-сервера/sams2. Мы должны увидеть окно авторизации. Нажимаем снизу на Авторизация администратора SAMS и вводим пользователя admin, пароль - qwerty. Открывается главное окно системы:

главная страница sams

Теперь нам нужно запустить демон sams2daemon. Создадим скрипт запуска. Для этого идем в папку /root/sams2-master/redhat и редактируем файл init.d:

# mcedit /root/sams2-master/redhat/init.d

Находим там значение  __CONFDIR и меняем его на /usr/local/etc/, значение __PREFIX меняем на /usr/local/bin/. У вас должны получиться 2 измененные строки следующего вида, остальные оставляем как есть:

[ -f /usr/local/etc/sams2.conf ] || exit 0
DAEMON=/usr/local/bin/sams2daemon

Копируем скрипт запуска в папку /etc/init.d:

# cp /root/sams2-master/redhat/init.d /etc/init.d/sams2

Запускаем демон:

# /etc/init.d/sams2 start
Starting sams2 (via systemctl): [ OK ]

Если будут какие-то ошибки, то смотрите общий лог messages.

На этом установка sams2 закончена. Можно приступать к настройке. Здесь она может отличаться, в зависимости от того, что вы хотите получить. Добавим в sams пользователей из домена. Для этого заходим в веб интерфейс и идем в раздел Авторизация. Убираем все галочки, оставляем только NTLM и жмем Конфигурировать. Появляется новый подпункт NTLM. Заходим в него и нажимаем снизу на отвертку и ключ:

настройка ntlm авторизации в sams2

Заполняем настройки. В моем случае они выглядели вот так:

подключение к AD в sams2

Если все правильно ввели, то при нажатии на кнопку Тестировать NTLM-подключение вы увидите список пользователей и групп домена.

Чтобы добавить пользователей домена в качестве пользователей самс, необходимо в разделе NTLM снизу нажать на кнопку с домиком и подписью Регистрация новых пользователей, входящих в домен Windows. Выбрать через контрол всех пользователей, которых хотите добавить и нажать Добавить.

добавление пользователей в sams2

Они появятся в списке пользователей:

пользователи в sams2

Чтобы не было ограничения по трафику (вряд ли оно кому-то нужно в наше время), необходимо отредактировать соответствующий параметр в шаблоне Default.

Теперь нужно применить сделанные настройки. Для этого идем в раздел SQUID -> Proxy server и жмем снизу на вторую кнопку слева со стрелочками. Нажимаем на Реконфигурировать. В случае успеха увидите надпись:

перезапуск squid через web интерфейс sams

На всякий случай можно проверить конфиг squid. Там должны появиться только что созданные acl. В моем случае появились следующие строки в конфигурации. Пошел проверять конфиг и обнаружил, что там ничего не появилось. Это связано с тем, что sams редактирует конфиг сквида, ориентируясь на комментарии с метками TAG:. В CentOS 7 после установки конфиг сквида очень сокращен, в нем почти нет комментариев, представлена минимальная конфигурация. Указанных меток там тоже нет, нам их нужно добавить самим. Добавляем в /etc/squid/squid.conf следующие комментарии с метками:

# TAG: acl

# TAG: url_rewrite_access

# TAG: url_rewrite_program

# TAG: url_rewrite_children

# TAG: delay_pools

# TAG: delay_class

# TAG: delay_access

# TAG: delay_parameters

# TAG: http_access

# TAG: http_access2

# TAG: icp_access

Обязательно пустая строка после каждой метки. Теперь заново перезапускаем squid через веб интерфейс самса. Должны появиться изменения в конфиге. У меня добавились следующие строки:

# TAG: acl
acl Sams2Time1 time MTWHFAS 23:00-23:59
acl Sams2Template1 proxy_auth admin51
acl Sams2Template1 proxy_auth control

# TAG: http_access
# Setup Sams2 HTTP Access here
http_access allow Sams2Template1 Sams2Time1

Обращаю внимание на параметр на acl Sams2Time1. По-умолчанию там указан временной интервал с 23:00 до 23:59. В соответствии с этими настройками доступ в интернет будет предоставлен только в это время. Подозреваю, что это ошибка автора, но мне пришлось потратить некоторое время, чтобы понять, почему правильная на первый взгляд конфигурация не работает. Если вам не нужен этот параметр, то уберите вообще временной интервал, либо исправьте его на 00:00-23:59.

Для корректной работы конфигурации необходимо убрать все остальные acl и http_access от предыдущей конфигурации squid, когда самс еще не был установлен.

Еще у меня были добавлены следующие строки:

# TAG: url_rewrite_access
acl Sams2Proxy dst your.ip.address
url_rewrite_access deny Sams2Proxy

Из-за значения your.ip.address сквид писал об ошибке конфигурации. Чтобы самс писал сюда нормальное значение в виде ip адреса сервера, необходимо изменить его настройки. Делается это в разделе SQUID -> Proxy server, снизу кнопочка с отверткой и ключом. Нажимаем на нее и изменяем снизу 2 настройки, указывая свой ip адрес:

настройка sams2

Попутно на всякий случай проверьте остальные настройки. Я кое-что подредактировал под свои нужды. Сохраняете настройки и снова перезапускаете сквид через самс. Проверяем файл конфигурации squid.conf:

# cat squid.conf | grep Sams2Proxy
acl Sams2Proxy dst 10.1.4.14

В строке появился реальный адрес и сквид больше не ругается на ошибку конфигурации.

Сейчас можно проверять работу. Заходим добавленными пользователями на компьютеры домена, указываем настроенный прокси сервер и серфим. Через некоторое время проверяем статистику в sams. Должны побежать килобайты:

подсчет трафика пользователей

Теперь добавим ограничение для доступа к некоторым сайтам. Для этого идем в раздел Запрет доступа по URL и создаем новый список. Я создал список social и добавил в него адрес социальных сетей для теста: vk.com и ok.ru:

создание списка на запрет доступа к сайту в sams2

Теперь нужно подключить этот список шаблону по-умолчанию. Идем в шаблон Default, заходим в редактирование и ставим галочку напротив списка social:

подключение списка запретов в sams2

Сохраняем изменения шаблона и перезапускаем конфигурацию сквида. Идем к пользователям и проверяем запрет:

запрет доступа по URL

При попытке открыть запрещенный сайт, пользователь получит сообщение о запрете. Реализован этот функционал с помощью встроенного в самс редиректора. Никакие другие редиректоры в sams2 не работают. Но как по мне, так и этого достаточно. Что делать если у вас по какой-то причине не работает запрет доступа, как это было у меня?

В первую очередь надо проверить настройки прокси сервера в самс, там где мы указывали ip адрес сервера. Должен быть выбран редиректор встроенный в SAMS. Путь к каталогу, где лежат файлы запрета запроса у меня указан http://10.1.4.14/sams2:

настройка редиректора в sams

Я не знаю, почему именно такой путь должен быть, я указал наугад, так как по-умолчанию там стоял вообще не существующий адрес. И у меня заработало. Некоторое время я проковырялся с этим параметром, потому что в настройках httpd разрешил доступ к алиасу /sams2 только с машины администратора. А при запрете адреса пользователя редиректит на этот же алиас, и если он не имеет к нему доступа, то просто получает ошибку соединения в браузере и не понятно, то ли сработал запрет, то ли сайт недоступен, то ли с интернетом какие-то проблемы. В общем, было неудобно.

Дальше у меня были проблемы с тем, что сам редиректор не запускался. Я сначала скомпилировал исходники без редактирования под 64 бита, и демон не стартовал. Проверить, запущен ли он можно просто по списку процессов. Если все в порядке, то должен быть запущен  sams2daemon и несколько sams2redir. Проверить можно просто:

# ps ax | grep sams
22721 ? S 0:01 /usr/local/bin/sams2daemon -l syslog
28498 ? S 0:00 (sams2redir)
28667 ? S 0:00 (sams2redir)
28860 pts/1 R+ 0:00 grep --color=auto sams

Если у вас по какой-то причине сам редиректор не запускаются, запустить его можно вручную:

# /usr/local/bin/sams2redir

После запуска у вас будет доступен терминал для ввода. Тут же можно проверить, как отрабатываются запреты. Вводите адрес сайта, пользователя, запрос GET и смотрите результат. Вот как выглядит реакция на нормальный сайт, доступ к которому разрешен:

http://ya.ru 10.1.4.189 control - GET
http://ya.ru 10.1.4.189 control - GET

То есть вы вводите первую строку и редиректор тут же выводит точно такую же сам. А вот какая реакция должна быть на сайт под запретом:

http://vk.com 10.1.4.189 control - GET
http://10.1.4.14/sams2/blocked.php?action=urldenied&id=control 10.1.4.189 control -

Идет редирект на страничку blocked.php. Для разбора ситуации можно пойти в логи апача и посмотреть, что там есть на эту тему. Я так заметил, что у пользователей нет доступа к этому адресу, так как он был закрыт настройкой веб сервера. Отмечу еще для справки, что список заблокированных сайтов sams2 хранит в своей базе в таблице url. Возможно вам пригодится эта информация во время отладки.

Вот все, что касается настройки sams2 под CentOS 7. Надеюсь вам будет полезна эта информация. Бесплатных продуктов, аналогичных самсу я лично не знаю, поэтому ничего лучше не нашел, как использовать в очередной раз его, хоть и с такими большими трудностями пришлось столкнуться во время настройки. Но на выходе получился вполне рабочий вариант.

Заключение

Пришло время подвести итог того, что мы сделали. Проведена большая работа по настройке прокси сервера на базе CentOS 7. Были выполнены следующие шаги:

  1. Сервер был введен в домен Windows для настройки авторизации доменных пользователей на прокси сервере.
  2. Настроен прокси сервер squid для работы с доменными учетными записями.
  3. Собран из исходников многофункциональный web интерфейс для управления squid - sams2 самой последней на текущий момент версии.

Первые два этапа сами по себе позволяют полноценно пользоваться прокси сервером, но не дают удобства и гибкости настройки. Иногда это и не нужно и можно не заморачиваться с установкой и настройкой sams. Как ни крути, но установка достаточно хлопотная и нет гарантии, что через некоторое время после смены версий каких-нибудь пакетов или исходников, не появятся новые нюансы, которые не будут отражены в этой статье. С ними придется разбираться заново.

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

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

170 комментариев

  1. Евгений

    Здравствуйте Zerox, как можно исправить эту ошибку?

    samsdaemon[2194]: ***ERROR: squidlogline.cpp:232 Input string has more then 10 fields (41)

  2. Приветствую !

    настраиваю подобный сервер, столкнулся с проблемой: sams2 не считает трафик. все счетчики по нулям.
    пробовал разные виды авторизации, ncsa, ntlm. На squid авторизация проходит, логи пишутся.
    centos7+squid3.5+sams2
    пробовал sams2 от "lex270", не помогло
    может кто сталкивался с такой проблемой ? несовместимость squid35 и sams2 ?

    • Алексей

      В команде "# ntpdate winsrv.xs.local" слово "local" остается? Вместо него не нужно подставлять какое-либо название или адрес? Выводится ошибка "Error resolving DOMEN.YN11.local: Name or service not known (-2)"

      • Алексей

        А после команды:
        "authconfig – enablekrb5 – krb5kdc=authconfig – enablekrb5 – krb5kdc=DOMEN.YN11.local – krb5adminserver=DOMEN.YN11.local – krb5realm=DOMEN.YN11.local – enablewinbind – enablewinbindauth – smbsecurity=ads – smbrealm=YN11.local – smbservers=DOMEN.YN11.local – smbworkgroup=XS – winbindtemplatehomedir=/home/%U – winbindtemplateshell=/bin/bash – enablemkhomedir – enablewinbindusedefaultdomain – update – krb5adminserver=DOMEN.YN11.local – krb5realm=DOMEN.YN11.local – enablewinbind – enablewinbindauth – smbsecurity=ads – smbrealm=YN11.LOCAL – smbservers=DOMEN.YN11.local – smbworkgroup=YN11 – winbindtemplatehomedir=/home/%U – winbindtemplateshell=/bin/bash – enablemkhomedir – enablewinbindusedefaultdomain – update"
        вывелась ошибка "authconfig: unexpected argument"

  3. Станислав

    ПОМОГИТЕ плиз
    [root@rrocket ~]# systemctl status winbind
    ● winbind.service - Samba Winbind Daemon
    Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2019-11-19 16:32:24 MSK; 59s ago
    Docs: man:winbindd(8)
    man:samba(7)
    man:smb.conf(5)
    Main PID: 1018 (winbindd)
    Status: "winbindd: ready to serve connections..."
    CGroup: /system.slice/winbind.service
    ├─1018 /usr/sbin/winbindd --foreground --no-process-group
    └─1262 /usr/sbin/winbindd --foreground --no-process-group

    Nov 19 16:32:21 rrocket systemd[1]: Starting Samba Winbind Daemon...
    Nov 19 16:32:24 rrocket winbindd[1018]: [2019/11/19 16:32:24.005133, 0] ../source3/winbindd/winbindd_cache.c:3160(initialize_winbindd_cache)
    Nov 19 16:32:24 rrocket winbindd[1018]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
    Nov 19 16:32:24 rrocket systemd[1]: Started Samba Winbind Daemon.
    Nov 19 16:32:24 rrocket winbindd[1018]: [2019/11/19 16:32:24.068637, 0] ../lib/util/become_daemon.c:138(daemon_ready)
    Nov 19 16:32:24 rrocket winbindd[1018]: daemon_ready: STATUS=daemon 'winbindd' finished starting up and ready to serve connections

  4. Автор большая просьба обновить эту статью под CentOS 8
    Т.к. pam_krb5, ntp, ntpdate как минимум в репозитории 8-ки нет

    • Там много чего нет. Изменения приличные. Я не вижу большого смысла сейчас обновлять на Centos 8. На 7-й работает хорошо, поддержка еще будет долго. Можно пользоваться.

  5. Максим

    После установки sams2 (еще до сетапа на этапе вебинтерфейса) выдает:
    Forbidden

    You don't have permission to access /sams2/index.php on this server.

    Помогите, что не так сделал?

  6. А возможно ли интегрировать Squid в ad через sssd, и какие хелперы при этом задействовать?

  7. День добрый. Появилась проблема, не могу решить 2 день.
    Необходимо пользователю запретить весь интернет, кроме одного определённого сайта и что то не выходит.
    Добавил необходимый сайт в белый список. Пробовал в настройках шаблона выставить галочку "Доступ запрещен ко всем URL" и поставить галочку в необходимый белый список - не пускает. Если запрет не ставить - пускает везде.
    Если подскажите как реализовать хотелку - буду крайне признателен

    • Забыл сказать, что необходимый сайт находится в домене .рф - названиесайта.рф. С сайтами на латинице - всё прекрасно работает.

  8. Спасибо вам огромное за ваши статьи. Я начинаю осваивать linux самостоятельно, и ваши детальные описание помогают реализовывать задумки, и через это мотивируют развиваться и изучать дальше. Удачи вам во всех ваших начинаниях.

  9. Автор, респект за статью!
    Не получается настроить редирект. Делаю все по инструкции, но когда перехожу на запрещенный URL, в окне браузера отображается пустая страница с сообщением "Попытка соединения не удалась".
    Не могу разобраться... :(

    • Еще раз пробежался по всем настройкам, проверил работу программы редиректа. Демон редиректа работает, в консоли запросы сайтов отрабатывает корректно, запрещенные сайты блокирует.
      Заново запустил браузер Mozilla Firefox.
      Попробовал в браузере открыть страницу с информацией о блокировке:
      http://192.168.0.4/sams2/blocked.php?action=urldenied
      Страница открывается, показывает картинку и текст блокировки. Вроде все ОК.
      Захожу браузером на запрещенный сайт, в моем случае vk.com, вижу пустую страницу с сообщением "Попытка соединения не удалась".
      Запускаю в браузере приватное окно, перехожу на сайт vk.com и чудо, вижу информацию о блокировке сайта.
      Запускаю окно в браузере в обычном режиме, чищу куки браузера, захожу на vk.com и чудо, вижу информацию о блокировке сайта.
      Проблема решена.
      Автору еще раз спасибо за грамотную статью!!!

  10. Анатолий

    Это мой второй комментарий к этой статье. Прокси успешно работает с сентября 2018 года, есть одно неудобство.

    В веб-интерфейсе в настройках я включил опцию "Автоматически создавать новых пользователей", и когда новый пользователь домена обращается к прокси - он создаётся, в веб-интерфейсе самса появляется, активен. Но пускать в интернет этого пользователя начинает только после того, как я вручную нажму "реконфигурировать squid". Приходится каждый раз после добавления нового пользователя лезть в веб-интерфейс самс и вручную "включать ему интернет". Хочется исключить этот момент из рабочей рутины.

    Это баг или фича или я был где-то невнимателен?

    Приходит в голову решение просто поставить в крон команду squid -k reconfigure на каждые 5 минут, но некоторая костыльность смущает

    • Это не баг и не фича, как я понимаю, а просто реализовано как есть. Sams сам не перечитывает конфиг squid, а это требуется для принятия изменений. squid -k reconfigure на каждые 5 минут, это, конечно, костыль, но если не приводит к каким-то проблемам, то можно и оставить.

      Другое простое решение мне в голову не приходит. Можно, конечно, написать скрипт, который будет лазить в базу sams, смотреть там наличие нового пользователя и реконфигурировать squid только при появлении пользователей. Но тут уже надо будет потрудиться, чтобы написать и отладить, хотя ничего особо сложного и нет.

      • Анатолий

        Этот костыль, кстати, не работает )
        Я сначала написал комментарий, а потом пошёл пробовать.

        Всё логично - для того, чтобы команда squid -k reconfigure применяла изменения - они сначала должны быть внесены в конфиг сквида, а они вносятся только по нажатию кнопки "реконфигурировать" в веб-интерфейсе.

        Спасибо за ответ!

        • Самое простое, чтоб автоматически реконфигурировать SQUID, это засунуть в CRON такой скрипт
          ---------------
          #!/bin/bash
          /usr/bin/mysql -usams2user -pXXX sams2db -e "INSERT INTO reconfig (s_proxy_id, s_service, s_action) VALUES('1', 'squid', 'reconfig');"

  11. Анатолий

    Это мой второй комментарий к этой статье. Прокси успешно работает с сентября 2018 года, есть одно неудобство.

    В веб-интерфейсе в настройках я включил опцию "Автоматически создавать новых пользователей", и когда новый пользователь домена обращается к прокси - он создаётся, в веб-интерфейсе самса появляется, активен. Но пускать в интернет этого пользователя начинает только после того, как я вручную нажму "реконфигурировать squid". Приходится каждый раз после добавления нового пользователя лезть в веб-интерфейс самс и вручную "включать ему интернет". Хочется исключить этот момент из рабочей рутины.

    Это баг или фича или я был где-то невнимателен?

  12. Добрый день! При вводе в домен в конце выходит ошибка. Как исправить ее?

    # net ads join -U 777
    Enter 777's password:
    Using short domain name -- LOCAL
    Joined 'DAZ' to dns domain 'local.net'
    No DNS domain configured for daz. Unable to perform DNS Update.
    DNS update failed: NT_STATUS_INVALID_PARAMETER

  13. Привет! Вопрос про встроенный в SAMS2 редиректор. При его использовании есть проблемы с некоторыми узлами, которые используют у себя перенаправления. Браузер или ругается на множественные перенаправления или некорректно отображает страницу. Со страниц https не редиректит. Это только у меня так? Debian8 в LXC, Squid 3.4.8-6, SAMS2-2.0.2.
    Собралось и установилось все без проблем.

  14. Доброго дня! Спасибо за статью автору.Все работает отлично, но есть такая проблема, когда я включаю функцию "net.ipv4.ip_forward = 1", и ставлю в браузере пользователя настройки прокси сервера на автоматический режим, открывается все сайты в том числе и запрещенные, и даже пользователь которого нет в sams может заходить в интернет, можете подсказать в чем проблема?

    • Так это не проблема. Вы включаете роутинг на сервере, плюс у вас наверняка настроен там же NAT. В итоге пользователи даже без настроек прокси, могут выходить через этот сервер в интернет. Автонастройка прокси у вас скорее вcего не работает, поэтому пользователи и получают прямой выход в интернет через сервер без ограничений.

      Чтобы так не было, настройте ограничение на прямой выход в интернет на firewall.

  15. Дмитрий

    Добрый день. Спасибо за статью все работает за исключением отображения трафика у пользователя. squid все считает но в sams не отображает трафик. в настройках sams видит лог файл и видит его размер. Подскажите куда копать

  16. Аноним

    Встроенный редирект не работает!?
    http://192.168.1.2/sams2/blocked.php?action=timedenied&id=192.168.1.3 192.168.1.3 control -

  17. Анатолий

    Очень благодарен за статью, я уж и не надеялся запустить самс на свежих линуксах. Сам бы не справился.

    Заметил глюк/баг самса - статистику по трафику считает более-менее правдоподобно, в списке пользователей весело набегают мегабайты, но если открыть статистику по конкретному пользователю - в неё попадают только http запросы, и трафик совсем скромный, сайтов без SSL уже совсем мало осталось. Отчёты по посещениям сайтов по времени - показывают всё нормально, отчёт с графиком потребления трафика - нормально, а вот последняя кнопка отчёта, где листик с синим шаром - игнорирует https.

    Не сказать, что для меня это критично, добавил еще SARG и смотрю правильные отчёты там. Но внутренний перфекционист сильно страдает )

  18. мне кажется в строке

    mcedit /etc/httpd/conf.d/sams2.conf должно быть mcedit /etc/httpd/conf.d/squid.conf ?

  19. Доброго дня! Столкнулся с одной проблемой, sams не пересчитает "Период ограничения трафика" на день. Например ставлю для каждого пользователя по 500МБ в день после превышения трафика отключается тут всё работает. А вот на завтрашний день всё ещё отключен у пользователя всё ещё нет доступ в интернет. По идеи на завтрашний день должен же работать потому что я вставляю период только на день.

  20. Михаил

    Аналогичная ошибка, как и у пользователя выше

  21. Эта на том шаге где написано Удаляем те конфиги, которые самс сгенерировал автоматически, а потjм перезапускаем httpd, дальше заходим на сайт где у вас ошибка типа - Invalid query: Access denied for user 'apache'@'localhost' (using password: NO), а уменя ошибка, которая Я указывал на вверху

  22. Аноним

    Эта на том шаге где написано Удаляем те конфиги, которые самс сгенерировал автоматически, а потjм перезапускаем httpd, дальше заходим на сайт где у вас ошибка типа - Invalid query: Access denied for user 'apache'@'localhost' (using password: NO), а уменя ошибка, которая Я указывал на вверху

  23. Привет у меня проблема. пытаюсь зайти на браузер http://proxy.office.local/sams2 - пишет you don't have permission to access /sams2/ on this server

  24. Аноним

    Братан проблема решилась путём изменение squid 3.5 на 2.5

  25. Здравствуйте! У меня хотя клиентская машина уже добавлена в Домене, всё равно после настройки прокси при подключение к интернету вылезает окно авторизация, вожу данные от пользователя, который создал в домене - любого вожу авторизация не проходить. Не знаю почему помогите пожалуйста. :)

  26. Алексей

    День добрый, возник трабл, может есть какие мысли?

    May 28 12:37:48 lgw-01 systemd: Starting SYSV: Startup/shutdown script for the SQUID Access Management System (SAMS)....
    May 28 12:37:48 lgw-01 sams2: Starting sams2: samsdaemon[32302]: ***ERROR: samsconfig.cpp:186 No proxyid defined. Check CACHENUM in config file.
    May 28 12:37:48 lgw-01 samsdaemon[32302]: ***ERROR: samsconfig.cpp:186 No proxyid defined. Check CACHENUM in config file.
    May 28 12:37:48 lgw-01 sams2: samsdaemon[32302]: ***ERROR: samsconfig.cpp:186 No proxyid defined. Check CACHENUM in config file.
    May 28 12:37:48 lgw-01 samsdaemon[32302]: ***ERROR: samsdaemon.cpp:302 No proxyid defined. Check CACHENUM in config file.
    May 28 12:37:48 lgw-01 sams2: [FAILED]
    May 28 12:37:48 lgw-01 systemd: sams2.service: control process exited, code=exited status=1
    May 28 12:37:48 lgw-01 systemd: Failed to start SYSV: Startup/shutdown script for the SQUID Access Management System (SAMS)..
    May 28 12:37:48 lgw-01 systemd: Unit sams2.service entered failed state.
    May 28 12:37:48 lgw-01 systemd: sams2.service failed.

  27. free-sa анализатор логов squida... если есть опыт то можно и что нибудь подобное... Sarg, lightsquid и пр.

  28. Добрый день. Я устанавливал фри-са на центос 6, а на 7 никак не могу найти информации. Нет ли у вас каких нибудь мыслей на этот счёт? Заранее спасибо.

  29. Добрый день. А есть ли мысли по поводу установки фри-са на центос7? На центос6 я установить смог, но на 7 никак не могу найти ничего. Может кто что знает?

  30. Александр

    Добрый день.

    Спасибо за статью. Установка прошла успешно. Всё запустилось.

    Пока что столкнулся с проблемой просмотра статистики самими пользователями.
    Когда псотрудник переходит по ссылке http://192.168.1.ххх/sams2/ то слева есть меню "Users"
    Так вот меню разворачивается не полностью и в нём никого нельзя выбрать.

    Как можно это исправить или подскажите, как можно иначе сотрудникам смотреть свой трафик?

  31. Здравствуйте! Отличная инструкция. Но у меня немного другая задача. Настроил прозрачный прокси squid. На СентОС7. Проблема с Https, в експлорере работает а в других браузерах, мозила, хром. никак. "Ошибка при установке защищенного соединения" или "таймаут". Ну ни как не могу победить.

    вот что в конфиге
    http_port 10.1.1.9:3130 intercept
    https_port 10.1.1.9:3131 intercept ssl-bump options=ALL:NO_SSLv3:NO_SSLv2 connection-auth=off cert=/etc/squid/squidCA.pem
    always_direct allow all
    sslproxy_cert_error allow all
    sslproxy_flags DONT_VERIFY_PEER
    ssl_bump peek all
    ssl_bump bump all

    Сертификат создавал так: openssl req -new -newkey rsa:1024 -sha256 -days 265 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
    Думаю что беда в сертификатах, так как IE работает со своими центрами сертификации.

    Использую вот такой iptables:
    *nat
    :PREROUTING ACCEPT [14100:2070250]
    :INPUT ACCEPT [0:0]
    :OUTPUT ACCEPT [233:14793]
    :POSTROUTING ACCEPT [233:14793]
    -A PREROUTING -s 10.1.0.0/20 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3130
    -A PREROUTING -s 10.1.0.0/20 -p tcp -m multiport --dports 443 -j REDIRECT --to-ports 3131
    -A POSTROUTING -s 10.1.0.0/20 -j MASQUERADE
    COMMIT
    *filter
    :INPUT DROP [6508:614096]
    :FORWARD DROP [0:0]
    :OUTPUT ACCEPT [11167:1907947]
    -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A INPUT -s 10.1.0.0/20 -p tcp -m multiport --ports 3130 -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -s 10.1.0.0/20 -p tcp -m multiport --ports 3131 -j ACCEPT
    -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
    -A FORWARD -p icmp -j ACCEPT
    -A FORWARD -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
    -A FORWARD -s 10.1.0.0/20 -p tcp -m multiport --ports 53,110,25,21 -j ACCEPT
    COMMIT

    Хелп ми плиз, уже лоб разбил об не пробиваемую стену.

  32. Здоров! Постараюсь кратко. ОС CentOS7, решил настроить SQUID по упомянутой выше ссылкой на blog.it-kb.ru. Там Ubuntu, но не велика разница. Практически все этапы конфига под CentOS адаптированы, кроме одного. Так вот когда 'squid -v', нет модуля 'wrapper', по пути /usr/lib/ папки squid нет совсем, а по /usr/lib64/squid/ модуль negotiate_wrapper_auth отсутствует, а всё остальное для аутентификации присутствует. В squid.conf не могу завести первый этап аутентификации 'NTLM и Kerberos', второй этап 'только NTLM' работает. Сам kinit отрабатывает удачно.
    В общем не могу на CentOS7 понять какая альтернатива в squid.conf в строке аутентификации для первого этапа 'auth_param negotiate program /usr/lib64/squid/negotiate_wrapper_auth(он отсутствует) --ntlm /usr/bin/ntlm_auth(это есть) --diagnostics --helper-protocol=squid-2.5-ntlmssp --kerberos /usr/lib64/squid/negotiate_kerberos_auth(это есть) -r -s HTTP/kva-ad01-squid.gav.com@GAV.COM'. В логе пишет "(squid-1): authenticateNegotiateHandleReply: *** Unsupported helper response ***, ' ' " когда не закоментирован первый этап аутен-ции. Гуглил трабл по CentOS, везде указывается squid -v без wrapper. В чем подвох?

  33. Спасибо за статью. Но может стоит немного изменить порядок. Поменять местами установку SQUID и подключение к домену. Поясню - я не слишком разбирающийся и делающий все по бумажке. Делал все как описано. Установка SQUID, запуск, проверка - все работает отлично. Перезагрузка - squid не стартует. Проверка статуса - пишет, что служба не запущена - "getpwnam failed to find userid for effective user 'squid'". Смотрю в пользователях - действительно нет. Пытаюсь добавить - пишет - уже есть такой пользователь. Пытаюсь удалить - пишет нет такого пользователя.
    Потом сообразил - (шутка от AD Win), что уже есть пара работающих squid-прокси под Free-BSD в других удаленных офисах компании, и соответственно (лень же путаться в именах, поэтому обозвали так-же) в AD Windows есть пользователь "sqiud", под которым проводиться проверка. Поэтому при установке SQUID система его просто не создавала - брала из AD.

    В общем поступил так - вначале установил "голый" SQUID, затем "воткнул" машинку в домен и настроил squid по вашим рекомендациям.

  34. нужна помощь. в глоб интеренет раздается с помощью iptables. встал вопрос что периодически необходимо по тому или иному сотруднику подавать статистику по активности в интернете. решил развернуть для этих целей squid, встал 3.5.20. для этого в iptables добавил правило:
    $IPT -t nat -A PREROUTING -d $WAN -p udp -m udp --dport 80 -j DNAT --to-destination $LAN_IP:3128
    в squid.conf внес правку:
    http_port 3128
    http_port LAN_IP:3128 intercept
    в итоге в логе squid пишет что старт нормальный, но вот по трафику все по нулям. в журнале тоже.
    В связи с чем вопрос какие правки нужно внести чтоб все работало как надо?

  35. Никита

    Добрый день. На предприятии поднял два сервера Server 2008 R2 (AD+DHCP+DNS) и на Centos 7 (Squid+SAMS2), все настроил, ввел пользователей работает идеально но заметил такую вещь, когда я пытаюсь с пользовательских компов пропинговать скажем yandex.ru или google.com то мне "При проверки связи не удалось обноружить узел yandex.ru. Проверте имя узла и повторите попытку.", а когдапингую c Centos7 пинги проходят. В чем может быть дело?

    • Это явно настройки firewall иди dns. Проверьте пинг не по имени сервера, а по ip напрямую, например 77.88.8.1 Так будет более понятно, в чем проблема.

      • Никита

        по ip пинги проходят с легкостью с клиентских машинок (windows 10), вот уже третий день копаюсь))) есть еще одна машинка на ней pfsens и пинги проходят идеально а вот на centos не хочет.

  36. Добрый вечер. Нужен помощь. Squid поднял в Hyper-V где AD Windows 2008R2(AD+DNS). Получается у меня один интерфейс. Есть Cisco ASA он и шлюз. Когда в ASA прописываю правило чтобы все пакеты проходили через Squid, клиентам пропадает интернет. Всем клиентам прописывал настройки прокси(192.168.10.56:3128).
    Windows 200R2 IP 192.168.10.55
    Squid IP 192.168.10.56
    Cisco ASA 192.168.10.249 + Public IP Address

  37. Связка squid+kerberos у меня работает с пк в домене .Т.е те кто не используют kerberos ,без проблем работают при вводе домена/логин и пароль .И вам не пришлось ставить winbind ?Мне важно,чтоб я мог так же ограничивать пользователй ,которые вне домена ,доступ к социалкам + статистика +логин и пароль брался из AD.

  38. Нужна авторизация через учетки AD (для ПК ,программ) вне домена . Бывает ,что некоторые программы не отрабатывают через kerberos и приходилось переводить на proxy + sams .
    По вашему опыту связка squid+AD+winbind+Sarg стабильная ?или стоит помучить sams для CentOS

    • Я последний раз использовал связку такую: squid+kerberos для прозрачной авторизации в AD. Те, кто не умею kerberos, используют ntlm. Управляется доступ с помощью групп в AD, статистика через lightsquid (мне просто эти отчеты больше нравятся). За основу брал вот эту статью - https://blog.it-kb.ru/2014/06/16/forward-proxy-squid-3-3-on-ubuntu-server-14-04-lts-part-1-install-os-on-hyper-v-generation-2-vm/
      Настраивается не очень просто, много нюансов, но удобство и стабильность работы меня устроили. Уж точно надежнее, чем с sams.

  39. если я правильно понял ,при использовании NTLM для авторизация в squid ,придется ставить winbind ?

    • В общем случае winbind нужен для работы с AD. Если будет авторизация в AD, то winbind нужен. Если без AD, то можно обойтись авторизацией basic от squid. Тогда ничего дополнительного не надо. Все учетки будут храниться в базе squid.

  40. от Squid не собираюсь отказываться,возник вопрос ..как сделать ,чтоб те пользователи которые не в домене ,просто вводили в браузере домен/пользователь и пароль . Такое возможно ,если да то каким образом ?

    • NTLM авторизация в squid, если не ошибаюсь, так и работает. Если компьютер не в домене, то пользователю в браузере будет предложено ввести доменную учетную запись. Если она у него есть, то он будет авторизован с ее помощью.

  41. Доброе время суток. Возник вопрос ,какое решение можно поднять для ПК которые не в домене (с ОС типа домашней или программ где нужно заполнять логин ,пароль)?
    В данный момент использую Sams + Squid+Sarg но т.к Sams уже оч давно не поддерживается и сам прокси на Ubuntu 10.04 .

    • Ничего лучше из бесплатного и не придумали. Альтернатив squid нет. И лучше sams я не видел админки для него.

  42. и еще

    [root@PROXYSRV old]# cat log.wb-CASE-20180108
    [2018/01/02 08:56:49.540015, 0] ../source3/winbindd/winbindd.c:280(winbindd_sig_term_handler)
    Got sig[15] terminate (is_parent=0)
    [2018/01/06 12:22:41.161764, 0] ../source3/libsmb/trusts_util.c:272(trust_pw_change)
    2018/01/06 12:22:41 : trust_pw_change(CASE): Verified old password remotely using netlogon_creds_cli:CLI[PROXYSRV/PROXYSRV$]/SRV[CONTROLLER/CASE]
    [2018/01/06 12:22:41.572878, 0] ../source3/libsmb/trusts_util.c:314(trust_pw_change)
    2018/01/06 12:22:41 : trust_pw_change(CASE): Changed password locally
    [2018/01/06 12:22:42.003820, 0] ../source3/libsmb/trusts_util.c:330(trust_pw_change)
    2018/01/06 12:22:42 : trust_pw_change(CASE): Changed password remotely using netlogon_creds_cli:CLI[PROXYSRV/PROXYSRV$]/SRV[CONTROLLER/CASE]
    [2018/01/06 12:22:42.007570, 0] ../source3/libsmb/trusts_util.c:363(trust_pw_change)
    2018/01/06 12:22:42 : trust_pw_change(CASE): Verified new password remotely using netlogon_creds_cli:CLI[PROXYSRV/PROXYSRV$]/SRV[CONTROLLER/CASE]

  43. Привет. Стакнулся с проблемой:

    1) [root@PROXYSRV squid]# less cache.log | grep WARNING
    2018/01/08 10:27:34 kid1| WARNING: All 5/5 redirector processes are busy.
    2018/01/08 10:27:34 kid1| WARNING: 5 pending requests queued
    2018/01/08 10:27:34 kid1| WARNING: Consider increasing the number of redirector processes in your config file.
    2018/01/08 11:05:58 kid1| WARNING: All 10/10 ntlmauthenticator processes are busy.
    2018/01/08 11:05:58 kid1| WARNING: 10 pending requests queued
    2018/01/08 11:05:58 kid1| WARNING: Consider increasing the number of ntlmauthenticator processes in your config file.
    2018/01/08 15:54:48 kid1| WARNING: All 5/5 redirector processes are busy.
    2018/01/08 15:54:48 kid1| WARNING: 5 pending requests queued
    2018/01/08 15:54:48 kid1| WARNING: Consider increasing the number of redirector processes in your config file.
    2018/01/09 09:23:45 kid1| WARNING: All 10/10 ntlmauthenticator processes are busy.
    2018/01/09 09:23:45 kid1| WARNING: 10 pending requests queued
    2018/01/09 09:23:45 kid1| WARNING: Consider increasing the number of ntlmauthenticator processes in your config file.

    2) [root@PROXYSRV squid]# less cache.log | grep ERROR
    2018/01/08 03:42:48 kid1| ERROR: NTLM Authentication validating user. Result: {result=BH, notes={message: NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL; }}
    2018/01/08 09:02:07 kid1| ERROR: NTLM Authentication validating user. Result: {result=BH, notes={message: NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL; }}
    2018/01/08 15:01:58 kid1| ERROR: NTLM Authentication validating user. Result: {result=BH, notes={message: NT_STATUS_UNSUCCESSFUL NT_STATUS_UNSUCCESSFUL; }}

    1) vim /etc/squid/squid.conf
    auth_param ntlm children 10 - это означает сколько юзеров?

    • В логе видно, что не хватает процессов, которые осуществляют авторизацию. Я уже немного подзабыл, что за параметр за это отвечает, давно не использую squid. Судя по ошибке, надо увеличить кол-во процессов для ntlm авторизации. Сейчас их 10 и их не хватает, образуется очередь.

  44. Добрый вечер. Proxy идёт вместе с шлюзом или как отдельный подсеть?

  45. Доброго дня! Спасибо за статью автору. Вопрос, кто нибудь столковался с непонятными ошибками но при этом всё работает.

    Dec 27 16:45:13 PROXYSRV DB_PASSW0[1296]: +++WARNING: Unknown cache result TCP_INM_HIT
    Dec 27 16:45:13 PROXYSRV DB_PASSW0[1296]: ***ERROR: squidlogparser.cpp:445 Unknown cache result

    И ещё это уже понятная ошибка :)
    Dec 27 08:57:23 [localhost] sams2: samsdaemon[1098]: ***ERROR: mysqlconn.cpp:57 mysql_real_connect: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
    При этом #after=network.target не помогло.

    • Непонятные ошибки у меня были и при этом все работало.

      А вторая ошибка явно говорит о том, что не может подключиться к сокету mysql. Либо прав не хватает, либо mysql не запущена.

  46. Алексей

    Добрый день!
    Все вроде бы ничего, но очень тормозит и интернет и http локальные ресурсы в сети при работе через прокси. Обычную интернет страницу открывает очень долго, как и внутренние ресурсы. В логах все чисто. В чем может быть дело?

  47. Огромное спасибо за Ваши статьи!
    После установки прокси, в системе появляются открытые порты ipv6:
    tcp6 0 0 :::3128 :::* LISTEN 1167/(squid-1)
    udp6 0 0 :::35816 :::* 1167/(squid-1)
    Подскажите, пожалуйста, можно ли как-то отключить использование ipv6 протокола в squid?

  48. Евгений

    насколько я понимаю, всё это вокруг архива с SAMS 2.0.0-b1 (Beta 1) (2010-02-26) взятого с githab?
    Тем кто сейчас до этого дочитает, предлагаю использовать последние имеющиеся оригинальные сборки (07.2016)
    sams2-2.0.2 debian x86_64
    sams2-2.0.2 rhel7 x86_64
    можно нагуглить.

  49. Добрый день, а подскажите необходимо на проксе сервере включать опцию ядра "net.ipv4.ip_forward = 1" или проксирование будет работать и без этой опции?
    и насколько я понимаю для работы сквида если заним ниже в локалке есть файрвол то на файрволле необходимо открыть 1328 порт только со стороны пользовательской сети? или необходимы и обратные полиси с прокси в пользовательскую сеть?

  50. Добрый день, все сделал по вашей статье и все работает, кроме статистики по пользователям по посещаемым ресурсам. Статистика молчит почему то.

  51. Даниил

    Добрый день.
    Все содержание acl располагается в squid.conf, например:

    acl Sams2Template6 proxy_auth user1
    acl Sams2Template6 proxy_auth user2
    acl Sams2Template7 proxy_auth user3
    acl Sams2Template7 proxy_auth user4

    Как сделать, чтобы acl хранился в отдельном файле?
    Просто взять и прописать acl Sams2Template7 proxy_auth /etc/squid/TEST.sams не помогает.
    Спасибо.

  52. net ads join -U admin1 Enter admin1's password:
    Using short domain name -- SRS
    Joined 'SQUID' to dns domain 'srs.lan'
    No DNS domain configured for squid. Unable to perform DNS Update.
    DNS update failed: NT_STATUS_INVALID_PARAMETER

    • Это не проблема. Просто вручную создайте на днс сервере "А" запись с именем сервера, который ввели в домен.

  53. Дмитрий

    Не знаю может нужно путь прописать к прокси-серверу, но вот знать бы где))

  54. Александр

    в Веб морду попал же?

    • Дмитрий

      Да, все запустилось, но после запуска sams2 вот такое вылазит:
      Job for sams2.service failed because the control process exited with error code. See "systemctl status sams2.service" and "journalctl -xe" for details.

      sams2.service - SYSV: Startup/shutdown script for the SQUID Access Management System (SAMS).
      Loaded: loaded (/etc/rc.d/init.d/sams2; bad; vendor preset: disabled)
      Active: failed (Result: exit-code) since Ср 2017-09-27 13:18:18 MSK; 1min 37s ago
      Docs: man:systemd-sysv-generator(8)
      Process: 2339 ExecStart=/etc/rc.d/init.d/sams2 start (code=exited, status=1/FAILURE)

      сен 27 13:18:18 localhost.localdomain systemd[1]: Starting SYSV: Startup/shutdown script for th.....
      сен 27 13:18:18 localhost.localdomain systemd[1]: sams2.service: control process exited, code=e...=1
      сен 27 13:18:18 localhost.localdomain sams2[2339]: Starting sams2: [СБОЙ ]
      сен 27 13:18:18 localhost.localdomain systemd[1]: Failed to start SYSV: Startup/shutdown script.....
      сен 27 13:18:18 localhost.localdomain systemd[1]: Unit sams2.service entered failed state.
      сен 27 13:18:18 localhost.localdomain systemd[1]: sams2.service failed.
      Hint: Some lines were ellipsized, use -l to show in full.

  55. Аноним

    Здравствуйте, такой вопрос:можно ли все это организовать, если веб-сервер и прокси-сервер находятся на разных машинах?

  56. Александр

    Ура) пошло) когда по ссылке вашей ставил https://github.com/lex270/sams2/archive/master.zip) спасибо за помощь)

  57. Александр

    Доброго времени суток!) Поставил по Вашему мануала, всё отлично встало) Только один вопрос, включён встроенный редиктор SAMS и когда открываешь обычные страницы, то есть http:// вот такая вот ошибка (этот сайт не в черном списке)

    The requested URL /192.168.1.27/192.168.1.271701GETmyip=192.168.1.31myport=3128 was not found on this server.

    Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

    когда открываешь сайты https:// все в порядке.

    Подскажите куда копать? в чем может быть проблема

    • to Александр
      Проблема с редериктом. Либо откатывайте squid до версии 3.2 или 3.3 (точнее не помню) либо исправляйте исходники. Еще может быть проблема с временным интервалами sams2 не дает удалить из шаблонов все временные интервалы, поэтому используйте 01.00-23.59 (в конфиг пропишется 00.00-23.59).

      Я форкнул проект SAMS2 на GIT и подправил нужные файлы https://github.com/lex270/sams2
      Исправление работы SAMS2 c прокси-сервером SQUID 3.5:
      1. Исправление samsredir.cpp - решает проблему нерабочего встроенного редиректора.
      Из-за проблемы редиректор не работал либо запрос выдвал ошибку 404 иногда с подстановкой
      в адресную строку записи вида myip=192.168.0.1 myport=3128
      2. Исправление файлов squidlogline.h, squidlogline.cpp и squidlogparser.cpp - добавление
      возможности обработавать ..._ABORTED,TAG_NONE, TCP_TUNNEL (на работу не влияет,
      но засоряется /var/log/messages)
      3. Исправление файла proxy.h
      Остальное без изменений

      Все остальное делайте по это статье.

      Автору статьи ОГРОМНОЕ спасибо!!!

      • Отлично, спасибо за исправления. Видно, самс2 все еще актуален. Надо будет обновить статью. Хотя сам я им больше не пользуюсь.

        • Мне он тоже особо не нужен. С SAMS проще управлять пользователям без знания linux пока я в отпуске или в командировке, а аналогов не нашел.

          • Я настраиваю сейчас с авторизацией через AD и группы доступа в этой же AD. А статистику генерю с помощью lightsquid. Получается почти так же удобно, и надежно. Жаль, не хватает времени написать статью. Один минус только - списки ограничений в текстовых файлах на сервере по ssh. Простого решения не придумал, как с ними работать людям без доступа к ssh. Если только через webmin, но тоже не очень решение.

            • Александр

              Спасибо, что откликнулись) у меня версия squid 3.5.20, я пробежался по исправлениям и у меня все поправлено уже было с вашими коментами) видимо исправили уже исходники. но не работает. попробую поставить squid 3.2 .

              • Александр

                Или какие предложения есть?

              • Ради эксперимента поднял centos с 0. squid 3.5.20. Установил все по этой статье (кроме дистра sams2-взял ссылку со своего форка https://github.com/lex270/sams2/archive/master.zip). Все норм. При установке с оригинального sams2 появляются ошибки подобные вашей. Но только при включенном редиректоре.
                Попробуйте отключить редиректор проблема пропадает (после отключения проверте конфиг squid на отсутствие sams2redir)?

  58. руслан

    systemctl status sams2.service -l
    ● sams2.service - SYSV: Startup/shutdown script for the SQUID Access Management System (SAMS).
    Loaded: loaded (/etc/rc.d/init.d/sams2; bad; vendor preset: disabled)
    Drop-In: /etc/systemd/system/sams2.service.d
    └─override.conf
    Active: failed (Result: exit-code) since Пн 2017-09-04 14:34:37 +05; 22s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 2776 ExecStart=/etc/rc.d/init.d/sams2 start (code=exited, status=1/FAILURE)
    Starting SYSV: Startup/shutdown script for the SQUID Access Manageme nt System (SAMS)....
    Starting sams2: .....[СБОЙ ]
    sams2.service: control process exited, code=exited status=1
    Startup/shutdown script for the SQUID Access M anagement System (SAMS)..
    Unit sams2.service entered failed state.
    sams2.service failed.

  59. руслан

    При добавлении сервер в домен net ads join -U administrator возникает ошибка: Failed to join domain: failed to lookup DC info for domain 'xxx.local' over rpc: Logon failure. Хотя сам контроллер домена пингуется с данного сервера и по коротокому и по длинному имени.

  60. Добрый день!! После всех проделанной работы. выходит ошибка Invalid query: Access denied for user 'root'@'localhost' (using password: YES). прописывал логин и пароль в файле mcedit /usr/local/etc/sams2.conf. нет результатов. Помогите плиз

  61. Александр

    Добрый день.

    Во время проверки SAMS2 выдал ошибку:
    Web-интерфейс SAMS требует права на запись в каталог ./data
    недоступен для записи
    Каталог ./data закрыт для записи. Чтобы продолжить установку, настройте разрешения вручную.

    Как я понимаю это папка по адресу: /usr/local/share/sams2/data
    Побывал давать права доступа apache и выставлял chmod -R 777, но безрезультатно.

    Подскажите, пожалуйста, какие права нужно установить

  62. Добрый день.
    Подскажите Вы Magick40 21.04.2017 at 10:48 решили свою проблему

  63. Добрый день, люди добрые.
    По статье все супер - настроил, все красиво, АВТОРУ РЕСПЕКТ. !!! НО !!!.....есть проблема , которая выше уже упоминалась автором "Али" про блокировку 80 порта..... перекопав просторы интернета, так и не нашел верного решения данной проблемы (Перенаправление портов, подмена rejik...все безуспешно).
    Есть у кого-нить какие наработки по данной проблеме с sams2 ?

  64. Ребят помогите.... Поставил все как в описании данной статье.
    Все работает супер. Но есть одна серьездная проблема ищу решение уже почти неделю....

    Проблема с sams2 redirect
    В настройках самс выбираю встроенные самс после завожу пользователя в список пытаюсь под ним зайти на e1.ru вылазит такая ошибка (Запрошенная страница, http://www.e1.ru/192.168.0.114/dgp13-003.domain.localivereshchakGETmyip=192.168.0.5myport=3128 не найдена. Воспользуйтесь картой сайта. Если Вы нашли эту ссылку на страницах нашего сайта, пожалуйста, сообщите на какой странице стоит неправильная ссылка по адресу info@corp.e1.ru.)

    Что это может быть подскажите. И как это можно решить (((((((((

    • Добрый день.
      Подскажите Вы Magick40 решили свою проблему?
      Точно такая же проблема.

  65. ребят помогите Ставлю на Centos 7 данную сборку.. Проблема такая правил конфиг /root/sams2-master/src/proxy.h

    поставил в пяти местах значение TrafficType: long но когда компелирую засыпает ошибками когда не ставлю эти значение конфиг норм. Но когда запускаю демона он не стартует и ошибка (апр 10 14:15:43 proxy.domain.local kernel: sams2daemon[2577]: segfault at ffffffffffffffe8 ip 00007fc24888549b sp 00007ffeddb1def0 error 5 in libstdc++.so.6.0.19[7fc2487c7000+e9000]

    2 проблема установил squid настроил по мануалу забил в обозреватель сои прокси сервер порт (в инет заходит но в файле cat /var/log/squid/access.log | grep control не чего нет)

  66. Ставил ClearOS - http нормально работает через весь зоопарк техники и шлюзы. Про Cisco вопрос отпадает.HTTP сразу появляется при выставлении в настройках Proxy server Редиректор - не использовать редиректор. При использовании встроенной Sams - сразу пропадает HTTP. Дело похоже в Sams2.

  67. Да, в данный момент сеть работает через шлюз Kerio на WinServ2012, HTTP нормально работает. Отключать надолго интернет и экспериментировать возможности нет, по вечерам разве что. Почитал другие твои статьи - шлюз,ClearOS - круто. Подкоплю теории ещё, сварганю полностью отдельную сетку для экспериментов, пообщаюсь с Linuxоводами с Ростелекома - и думаю всё-таки одолею:)
    Вчера ставил ClearOS - что-то зависла при обновлении на этапе установки, снова попробую. Если с ClearOS всё будет норм - отпадут многие вопросы и можно в нём посмотреть конфиги.

  68. Респект за труд!!! С Linux до этого вообще не работал. Много где было затыков - но в основном из-за своей невнимательности и незнания основ Linux. В принципе, почти всё по статье получилось - iptables,Squid,учётки с домена,Sams2. Вроде-бы всё хорошо, но когда браузер настроен через прокси порт 3128, где-то режется HTTP-трафик, с HTTPS всё норм. Весь мозг изломал-встал в ступор. Понятно,что где-то есть маленькая заковыка - но где!? Iptables отключал, конфиги Squida сравнивал и пробовал разные, делал прозрачным... На основном шлюзе отключал Kerio,у Kaspersky отключен сетевой экран. У оператора оборудование Cisco и где-то вычитал про несоответствие размеров пакетов - ставил разные...Кто может чем помочь!?

    • У тебя там такой зоопарк техники :)) Тут только на месте можно разобраться. Но вообще я первый раз вижу, чтобы не работал http, но работал https. Последний технически более сложен. А вообще без прокси http нормально работает?

      • Доброе утро столкнулся с проблемой при обновлении squid до версии 3.5. Перестали открываться многие страницы которые работают по https, то есть если открыть https://yandex.ru то он открывается а если набрать http://yandex.ru то выходит ошибка 404 не происходит автоматическое перенаправление...если оставляю дефолтный конфиг squid то все работает, как только передаю управление под SAMS и отключаю все дефолтные тэги и access'ы то начинается вот эта проблема. Помогите пожалуйста работа встала...служба безопасности обязала обновиться до 3.5

  69. Сергей

    Спасибо за статью! Работает.
    Вопрос: как заставить самс стартовать после mysql?

  70. Александр

    Обращаю внимание - если у кого вылезет ошибка при получении тикета Kerberos
    kinit: KDC reply did not match expectations while getting initial credentials
    То при запросе тикета домен писать большими буквами!
    kinit username@DOMAIN.COM

    • Спасибо тебе добрый человек, три часа потратил чтобы найти этот затык, пока комментарий не прочитал.

  71. Аноним

    В просторах ИНЕТА пишут что "Добавляем пользователя proxy в группу winbindd_priv для того чтобы у него был доступ в /run/samba/winbindd_privileged, иначе NTLM работать не будет" в статье такого нету, может дело в этом что у меня прокси не работает?

  72. Евгений

    Добрый день.
    Надеюсь на помощь, дошел до добавления в автозагрузку winbind, сижу под доменным пользователем, результат ниже:
    [kolupaevea@squid ~]$ systemctl start winbind
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
    Authentication is required to manage system services or units.
    Authenticating as: root
    Password:
    ==== AUTHENTICATION COMPLETE ===
    [kolupaevea@squid ~]$ systemctl enable winbind
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-unit-files ===
    Authentication is required to manage system service or unit files.
    Authenticating as: root
    Password:
    ==== AUTHENTICATION COMPLETE ===
    ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
    Authentication is required to reload the systemd state.
    Authenticating as: root
    Password:
    ==== AUTHENTICATION COMPLETE ===
    [kolupaevea@squid ~]$ wbinfo -t
    checking the trust secret for domain SAMBA via RPC calls failed
    failed to call wbcCheckTrustCredentials: WBC_ERR_WINBIND_NOT_AVAILABLE
    Could not check secret

    Что может быть не так?

    • Евгений

      если делать это под рутом:
      [root@squid ~]# systemctl start winbind
      [root@squid ~]# systemctl enable winbind
      [root@squid ~]# systemctl status winbind
      ● winbind.service - Samba Winbind Daemon
      Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
      Active: active (running) since Fri 2017-02-03 11:48:57 +04; 2h 10min ago
      Main PID: 1024 (winbindd)
      Status: "winbindd: ready to serve connections..."
      CGroup: /system.slice/winbind.service
      ├─1024 /usr/sbin/winbindd
      └─1025 /usr/sbin/winbindd

      Feb 03 11:48:55 squid systemd[1]: Starting Samba Winbind Daemon...
      Feb 03 11:48:57 squid systemd[1]: winbind.service: Supervising process 1024 which is not our child. We'll most likely not notice ...t exits.
      Feb 03 11:48:57 squid winbindd[1024]: [2017/02/03 11:48:57.374672, 0] ../source3/winbindd/winbindd_cache.c:3245(initialize_winbindd_cache)
      Feb 03 11:48:57 squid winbindd[1024]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
      Feb 03 11:48:57 squid systemd[1]: Started Samba Winbind Daemon.
      Feb 03 11:48:57 squid winbindd[1024]: [2017/02/03 11:48:57.415896, 0] ../lib/util/become_daemon.c:124(daemon_ready)
      Feb 03 11:48:57 squid winbindd[1024]: STATUS=daemon 'winbindd' finished starting up and ready to serve connections
      Hint: Some lines were ellipsized, use -l to show in full.
      [root@squid ~]# wbinfo -t
      checking the trust secret for domain SAMBA via RPC calls failed
      wbcCheckTrustCredentials(SAMBA): error code was NT_STATUS_NO_SUCH_DOMAIN (0xc00000df)
      failed to call wbcCheckTrustCredentials: WBC_ERR_AUTH_ERROR
      Could not check secret

      • Начать стоит с того, что проверить все конфиги. Потом еще раз завести компьютер в домен. Затем проверить доверие через:
        wbinfo -t
        Потом проверить билетик кербероса, потом авторизацию пользователей. Смотреть на ошибки, если будут и разбираться.

    • Да это все, что угодно может быть. Для решения проблем с winbind нет универсальных рекомендаций. Я иногда часами ковыряюсь, когда очередной сервер пытаюсь заставить нормально работать с доменными учетками.

  73. Владимир

    На команде

    authconfig --enablekrb5 --krb5kdc=server.lkivc.l --krb5adminserver=server.lkivc.l --krb5realm=SERVER.LKIVC.L --enablewinbind --enablewinbindauth --smbsecurity=ads --smbrealm=LKIVC.L --smbservers=SERVER.LKIVC.L --smbworkgroup=XS --winbindtemplatehomedir=/home/%U --winbindtemplateshell=/bin/bash --enablemkhomedir --enablewinbindusedefaultdomain --update

    выскочила ошибка предлагающая выполнить команду systemctl status winbind.service - вот результат. Система Centos7 свежеустановленная. Время перед этим нормально синхронизировалось с сервером server.lkivc.l (Win 2012r2)

    ● winbind.service - Samba Winbind Daemon
    Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
    Active: failed (Result: exit-code) since Чтв 2017-01-05 08:40:42 EET; 19min ago
    Process: 1401 ExecStart=/usr/sbin/winbindd $WINBINDOPTIONS (code=exited, status=1/FAILURE)
    Main PID: 1401 (code=exited, status=1/FAILURE)
    Status: "Starting process..."

    Янв 05 08:40:41 proxy.lkivc.l winbindd[1401]: [2017/01/05 08:40:41.965570, 0] ../source3/winbindd/winbindd_cache.c:3245(initialize_winbindd_cache)
    Янв 05 08:40:41 proxy.lkivc.l winbindd[1401]: initialize_winbindd_cache: clearing cache and re-creating with version number 2
    Янв 05 08:40:42 proxy.lkivc.l winbindd[1401]: [2017/01/05 08:40:42.036385, 0] ../source3/winbindd/winbindd_util.c:869(init_domain_list)
    Янв 05 08:40:42 proxy.lkivc.l winbindd[1401]: Could not fetch our SID - did we join?
    Янв 05 08:40:42 proxy.lkivc.l winbindd[1401]: [2017/01/05 08:40:42.036412, 0] ../source3/winbindd/winbindd.c:1408(winbindd_register_handlers)
    Янв 05 08:40:42 proxy.lkivc.l winbindd[1401]: unable to initialize domain list
    Янв 05 08:40:42 proxy.lkivc.l systemd[1]: winbind.service: main process exited, code=exited, status=1/FAILURE
    Янв 05 08:40:42 proxy.lkivc.l systemd[1]: Failed to start Samba Winbind Daemon.
    Янв 05 08:40:42 proxy.lkivc.l systemd[1]: Unit winbind.service entered failed state.
    Янв 05 08:40:42 proxy.lkivc.l systemd[1]: winbind.service failed.

    Подскажите пожалуйста как лечить. Заранее благодарен

  74. [root@squid ~]# /usr/bin/ntlm_auth --username=admin
    Password:
    NT_STATUS_OK: Success (0x0)

  75. добрый день! Все делал по Вашей статье. Сервер успешно завел в домен. sams работает. Большое спасибо.

    ntlm авторизация не получается. просит логин и пароль куда копать?

    • В первую очередь логи сквида надо смотреть на тему авторизации. Она через его стандартный функционал реализуется.

      • cat /var/log/squid/access.log

        1482631591.647 200 192.168.114.14 TCP_DENIED/407 4295 CONNECT incoming.telemetry.mozilla.org:443 - HIER_NONE/- text/html
        1482633545.606 23 192.168.114.14 TCP_DENIED/407 4185 CONNECT services.addons.mozilla.org:443 - HIER_NONE/- text/html
        1482633545.889 274 192.168.114.14 TCP_DENIED/407 4283 CONNECT services.addons.mozilla.org:443 - HIER_NONE/- text/html
        1482633545.908 0 192.168.114.14 TCP_DENIED/407 4213 CONNECT versioncheck-bg.addons.mozilla.org:443 - HIER_NONE/- text/html

        • Аноним

          тоже самое было, помогло отключение ipv6

          дописать в /etc/sysctl.conf:
          net.ipv6.conf.all.disable_ipv6 = 1
          net.ipv6.conf.default.disable_ipv6 = 1

          sysctl -p

          systemctl restart network

  76. Спасибо большое за статью, очень помогла. Возникли некоторые комментарии:

    1. Использовал для установки SAMS исходники с сайта SAMS (http://sams.perm.ru/) версии 2.0.2.
    По ходу в них исправлены три описанных в статье бага:

    "kernel: sams2daemon[27541]: segfault at ffffffffffffffe8 ip 00007fc54880944b sp 00007ffc8da37d20 error 5 in libstdc++.so.6.0.19[7fc54874b000+e9000]"

    "chmod: cannot access '//usr/local/share/sams2/data': No such file or directory"

    "PHP Parse error: syntax error, unexpected '$configbuttom_7_log_2' (T_VARIABLE) in /usr/local/share/sams2/lang/lang.EN on line 1100, referer: http://10.1.4.14/sams2/index.php"

    Используя эти исходники, описанных багов не возникло и действий по исправлению делать не пришлось.

    2. Не нашёл в статье, как добавить сервис SAMS в автозапуск(. После перезагрузки сервис автоматически не стартует.
    Сделал следующее:
    /sbin/chkconfig --add sams2
    /sbin/chkconfig sams2 on

    3. Сервис SAMS не стартует, если не ещё стартовал MYSQL. (В одном из комментариев уже указано)
    Для исправления сделал:
    systemctl edit sams2.service
    [Unit]
    After=mariadb.service
    'Esc' -> ':wq'

    4. Если в SAMS удалить все временные интервалы - в нет не пускает.

  77. чувак ты крут

  78. Потратил день на различные тесты, в общем ограничение скорости работает, но в конфиге не отображается, с чем это связано, как работает весьма не понятно, в остальном все просто замечательно. Единственное - вопрос: Я так понимаю, это настройка прозрачного прокси? И еще, было бы не плохо если в статью добавили как все же фильтровать и запрещать запросы по HTTPS (потому что многие соц. сети перешли на https в том числе и vk.com), вроде как ее смогли реализовать на прозрачном прокси, но толковой информации я так и не нашел, спасибо.

    • Нет, это не прозрачный прокси. Я через групповые политики указывал всем пользователям адрес прокси. Соответственно, https он тоже блокирует, можно закрывать социальные сети и т.д. В прозрачном режиме по-умолчанию squid не фильтрует https вообще никак. Для того, чтобы это работало, нужно патчить сквид. Я видел подобные примеры, у людей получалось, но задача эта не самая простая, но при большом желании можно сделать. Мне любопытно попробовать этот способ, но руки не доходят пока.

  79. Статья отличная, очень все доходчиво и просто!! Есть вопрос, ограничение скорости через SAMS как выглядит? я создал пул ограничение скорости, но ничего не поменялось, скорость осталась прежней, и squid.conf в delay_pools,class и т.д. ничего не появляется! Как работает пул ограничения и как его настроить правильно?

    • Кто-то уже жаловался на то, что ограничение скорости не работает. То ли в этой теме, то ли в теме про freebsd. Я этот функционал не проверял, поэтому ничего сказать не могу.

  80. Попробовал в общем прописать users, ситуация никак не изменилась, группы экспортируются пустые, после долгих мучений с SAMS и отсутствия какой-либо поддержки SAMS я снёс, настроил squid на авторизацию ntlm по доменной группе, и больше туда лазить нет никакого смысла, пользователей добавляю в группу в AD, статистику смотрю через lightsquid, в принципе большего мне не надо.
    Зы: автор видимо тоже забил на эту ветку...

    • Я сделал то же самое, только чуть посложнее и с авторизацией по kerberos, но ntlm тоже настроил. Групп сделал несколько с разными доступами и списками. Самс у меня продолжает работать там, где я его настроил. Но больше я его не хочу использовать. Слишком глючно и ненадежно.

      • Владимер, будет ли опубликована статья с авторизацией по kerberos и добавлением групп из AD?

  81. У меня синхронизация с AD при авторизации ntlm не работает, при импорте создаются пустые группы. А при запуске из командной строки команды на синхронизацию валится куча ошибок, видимо надо править скрипт syncfromntlm. При методе авторизации adld SAMS не видит группы созданные в домене на win2008r2, зато мигрированные из, или созданные в более старых доменах группы видит. Пришлось обмануть SAMS создав группу руками с таким же именем как в AD, и после включения синхронизации этой группы с AD все пользователи подтянулись в SAMS и даже добавились ACL в конфиг сквида, однако радость была недолгой. Все дело в том что подгрузившиеся пользователи из AD были в формате IvanovII, а сквид пользователей с символами в имени в верхнем регистре пускать в интернет отказался, не помог и параметр casensetive off. Я так понимаю он только для аутентификации "basic"? А вот если добавлять пользователей не из групп а по одному или же группой но созданной в более старых доменах чем win2008r2, опять же только при методе авторизации ntlm (как в статье), то все работает замечательно, но для меня такой вариант не подходит, это надо каждого пользователя заводить через веб интерфейс SAMS вручную. Попробую поставить в настройках ntlm группу users как автор указал в комментах, у меня там вообще прописана группа из AD с админскими правами, про gr_sams я наверное упустил?

  82. Добавлю полезный комментарий на статью в почте. Может кому-то пригодится:

    "Хотел добавить:
    1) самс после реконфига каждый раз ставит время 23:00-23:59. Так вот, если в самсе во "временных диапазонах" в шаблонах выставить время 01:00-23:59, то самс в конфиг будет добавлять уже 00:00-23:59. Что нам и нужно.

    2) при автозапуске демон самса не запускался - жаловался на то, что mysql еще не успел стартовать. Пришлось в скрипте mariadb.service убрать строку after=network.target, чтобы mysql стартовал сразу, а не ждал пока появится сеть.

    3) в настройках ntlm лучше ставить группу users вместо gr_sams, иначе при импорте групп пользователи не добавятся."

    • Здравствуйте! Можете рассказать по подробнее про after=network.target где его нужно убрать? Я не нашел скрипт mariadb.service, где оно находится? Спасибо большое за статью!!!

    • Станислав

      Здравствуйте ну подскажите где именно добавить сроку after=network.target как попасть в скрипт mariadb.service

  83. Всем добра!
    Спасибо за статью. Интересная и полезная.
    Интереснее было бы почитать если в качастве AD выступала Samba c базой LDAP и авторизацией kerberos для домена и прокси.

    • Мне бы тоже было интересно :)) Я настраивал связку squid + авторизация kerberos из Win AD и доступ пользователей на основе групп AD. Наработки есть, схема рабочая, но нет времени оформить в нормальную статью.

  84. Разобрался. Может кому пригодится.
    Привязка к группам:
    external_acl_type AD_Group ttl=1800 children-startup=10 children-max=60 ipv4 %LOGIN /usr/lib64/squid/ext_wbinfo_group_acl
    acl Internet external AD_Group Internet
    acl Internet_limit external AD_Group Internet_limit
    http_access allow Internet
    http_access allow Internet_limit

  85. Подскажите, пожалуйста, как без использования sams2 разрешить доступ в интернет только пользователям входящим в определенную группу AD?

    • Тут нет проблем. В интернете есть статьи по настройке squid с интеграцией в AD. Там все даже проще будет в настройке, чем с самсом. Нужно будет добавить сервер в домен, настроить сквид и в конфиге указать группу из домена, которой разрешен выход в интернет.

      Инструкцию по заведению сервера в домен можно использовать эту. Вам нужно только поискать про интеграцию сквида с AD. Там пара строчек в конфиге.

      • Сервер я успешно завел в домен. ntlm авторизацию настроил. Все делал по Вашей статье. Большое Вам за нее спасибо.

        Статей про интеграцию сквида с AD очень много, но большинство из них старые (2003, 2005 год) зачастую в них описывается настройка для Debian или Ubuntu. Попробовал сделать привязку к группе по нескольким статьям - не заработало.
        Если настройка интеграции с AD это всего пару строчек в конфиге, пожалуйста, подскажите мне их либо направьте на хорошую статью.

        • У меня нет под рукой готового рецепта. Можно установить самс, сделать все настройки, убедиться, что работает и подсмотреть, что он пишет в конфиг. Потом по аналогии то же самое сделать но уже без него.

  86. Доброго времени суток !

    Дорогой автор, имеется 3 (три) вопроса:

    1.
    У меня имеется Терминальный сервер, 54 тонких клиентов и около 18 обычных компов соответственно в AD все пользователи прописаны.
    Как ВЫ думаете будет ли возможно ограничить путем блокировки сайтов у отдельных пользователей ?
    допустим так:
    Пользователь Терм.сервера "А" - запретить сайт vk.com
    Пользователь Терм.сервера "В" - разрешить сайт vk.com
    Пользователь обыч.комп "С" - разрешить сайт vk.com

    2.
    Проброс портов как реализовать ?

    3.
    Отчетность ну там графики потребления инта и на каких ресурсах

    • 1. и 3. реализуются без проблем. Авторизация и учет пользователей ведется по их учетным записям в АД. Я сам много лет использовал самс с авторизацией в АД как раз для того, чтобы управлять терминальными пользователями.

      2. не понял, какое имеет отношение к прокси серверу. Пробросом портов занимается firewall или что-то другое, не squid. Конкретно в centos пробросить порты можно с помощью iptables. Примеры есть в моей статье на эту тему:

      //serveradmin.ru/nastroyka-iptables-v-centos-7/

  87. В общем, авторизация пользователей ntlm с логином из кириллицы не проходит (не пускает в нэт), через adld все нормально.

  88. Здравствуйте! Большое спасибо за инструкцию! Очень информативная. Пару месяцев назад пытался реализовать всё это дело но так и не получилось работающий SAMS на CentOS 7. Благо вы подоспели) За что вам большая благодарность.
    У меня вопрос: можно ли как-нибудь сделать авторизацию через AD для пользователей с учётными записями на кирилице?
    На латинице всё работает корректно. С русскими логинами к сожалению нет.

    • Думаю, что без правки исходников нет. Там есть еще по авторизациям некоторые проблемы. Например, если пароль длиннее 8-ми символов, то при авторизации пользователя для проверки своей статистики будут учитываться только первые 8 символов, а не весь пароль, если он длиннее. В общем, у самса много проблем и они больше не решаются.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar