среда, 28 августа 2019 г.

Настройка прокси сервера на CentOS7 + SQUID + SAMS2+ AD

Итак снова новая задача 😋
Потребовалось быстро развернуть прокси сервер с контролем доступа.
Первое что пришло мне в голову, когда то давно видел связку Linux и SAMS.
Но вот опыта развертывания никакого не было. 😇
Порывшись в интернете я пришел к неутешительному выводу. Проект SAMS  больше не поддерживается к сожалению. 👿 Но запустить его все же возможно, правда с большими оговорками но работает. То что работает меня вполне устроило на первое время.
Итак поехали.



В интренете была найдена замечательная статья
https://serveradmin.ru/nastroyka-proksi-servera-na-centos-7-squid-ad-sams2/
В этой статье все описано достаточно по шагам и понятно. Но статью нужно читать очень внимательно и делать все то же очень внимательно. В процессе тестирования возникли некоторые глюки, исправления которых я буду писать сразу ниже.
По сути я перенесу сюда содержимое этой статьи со своими комментариями, поэтому все права принадлежат вышеуказанным авторам по ссылке.
Первым делом поднимаем сервер на CentOS7. Настраиваем ему статический адрес и устанавливаем имя, с которым будем вводить его в домен.
Хочу обратить внимание. Что на каждом этапе надо двигаться шаг за шагом и получать положительный результат. В случае возникновения ошибок устранять их нужно сразу на этом этапе.
В процессе настройки будет отключен SELINUX (Я не настолько гуру в Linux, поэтому проще было его выключить)
Первым делом обновляем и ставим необходимые утилиты
#yum update
Перезагружаем
#reboot
Устанавливаем сетевые утилиты и MC
#yum install net-tools
#yum install bind-utils
#yum install mc

Отключаем SELINUX

#mcedit /etc/sysconfig/selinux

меняем значение

SELINUX=disabled

Чтобы изменения вступили в силу, перезагружаемся:

 #reboot

Настраиваем временные пояса

#timedatectl set-timezone Asia/Almaty

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

#systemctl stop firewalld && systemctl disable firewalld

По идее нужно еще установить и настроить iptables, но с этим я постараюсь разобраться и написать об этом чуть позже

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

#yum -y install samba-winbind samba-winbind-clients pam_krb5 krb5-workstation ntp ntpdate

Для продолжения настройки вам необходимо знать следующие вещи — FQDN имя контроллера домена, его ip адрес и учетную запись с правами на ввод компьютера в домен.

#ntpdate winsrv.xs.local

Где winsrv.xs.local полное имя контроллера домена

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

#systemctl enable ntpd
#systemctl start ntpd

Настройка времени необязательна, но при рассинхронизации времени между прокси и контроллером домена более 5 минут могут возникнуть возникнуть глюки. Связаны они с логикой работы протокола Kerberos.

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

#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.

Вводим машину в домен

#net ads join -U administrator

Где administrator это учетная запись домена, которой делегированы права на введение в домен.
Вводим пароль и ждем. Если все нормально то сервер будет введен в домен.
Теперь нужно запустить и добавить в автозагрузку 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'

В данном случае control — имя пользователя домена, pass — его пароль.
Получаем ответ

plaintext password authentication succeeded
challenge/response password authentication succeeded

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

#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

#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

Не забудьте указать свой домен. XS
Дальше находим в конфиге строку:

http_access allow localnet

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

http_access allow auth

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

#systemctl start squid
#systemctl enable squid

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

#cat /var/log/squid/access.log | grep control

В данном случае 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 -
В таком виде конфигурация сервера уже вполне рабочая, можно пользоваться, подключать пользователей. Но это неудобно. Нужно средство для удобного управления списками доступа и просмотра статистики пользователей.

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

Настраиваем web сервер
Устанавливаем 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

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

 #systemctl enable mariadb.service
 #systemctl start mariadb

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

#/usr/bin/mysql_secure_installation

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

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

Теперь можно проверить работу веб сервера. Описывать не стану, потому как это сделать очень много написано. Для начала просто зайти в браузере по адресу сервера и можно увидеть страницу приветствия Apache

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

#yum -y install wget
#cd /root

И вот здесь отличие от оригинальной статьи. Дело в том, что если скачать исходники с гита оригинального проекта по адресу  https://github.com/PavelVinogradov/sams2/archive/master.zip ,  встроенный редиректор будет работать криво. На некоторые сайты зайти будет невозможно. Они будут посылать Вас с ошибкой 404. А без этого редиректора сам SAMS не имеет смысла так как запрещать и перенаправлять он не сможет.
Спасибо человеку, который откликнулся в той же статье в комментариях и исправил ошибки. Поэтому я приведу команду на скачивание сразу форкнутой версии
Продолжаем

#wget https://github.com/lex270/sams2/archive/master.zip

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

#yum -y install unzip
#unzip master.zip

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

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

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

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

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

#sh ./configure

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


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

#make install

Но команда будет выполнена с ошибкой. Это связанно с внутренней ошибкой инсталлятора


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

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

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

#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 адрес администратора, если доступ будет нужен только с его компьютера, что собственно я и рекомендую сделать.
Удалим конфиги которые SAMS инсталлятор создал. Они не рабочие

#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

Ищем следующие строки и подставляем свои данные

ODBCSOURCE=sams_mysql
DB_USER=root
DB_PASSWORD=rootpass
SQUIDCACHEFILE=access.log

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

Нажимаем Run setup program >>


Проходит проверка требований.


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




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



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

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

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


Теперь немного отойдем от последовательности указанных в статье.
Выполним следующий шаг
Добавляем в /etc/squid/squid.conf вверх, после строк, которые мы добавляли при настройке squid следующие комментарии с метками (Прямо как написано # TAG ):

# 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

Теперь нам нужно запустить демон 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

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


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


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

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

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



Попутно на всякий случай проверьте остальные настройки. Я кое-что подредактировал под свои нужды. Сохраняете настройки и снова перезапускаете сквид через самс. Проверяем файл конфигурации squid.conf.
Дальнейшую настройку SAMS я описывать не буду остановлюсь лишь на некоторых моментах.
Если создаем список запретов и редиректов, то обработчиком должен стоять внутренний редиректор 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 -

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

Вот в принципе и все.

Баги.
1. Не работает авторизация. Пускает любого пользователя без пароля в мордочку SAMS. Если у пользователя есть права смотреть статистику, то любой пользователь может зайти и посмотреть.
2. Когда обращаются к запрещенному адресу по https редиректор не выводит страничку блокировки а просто будет сообщено что соединение сброшено. Не страшно но все же возникает ощущение недопиленности.
3. В одном из отчетов не показывается адреса https, но траффик считается и в суммарном отчете он показывается.
На этом пока все.

Комментариев нет:

Отправить комментарий

При обновлении VCenter 6.7 до VCenter 7.0 ошибка Host not found

 Всем доброго времени суток! При обновлении VCenter 6.7 до версии 7.0 пришлось столкнуться со следующей ошибкой при обновлении , точнее в пр...