Тематические термины: Squid, AD, CentOS.
Инструкция подразумевает, что у нас уже есть рабочий Squid-сервер. В противном случае, настраиваем, используя инструкцию Установка и настройка Squid на CentOS.
Наш сервер будет принимать как наиболее безопасную Kerberos-авторизацию, так и NTLM. Для компьютеров в домене будет поддерживаться прозрачная LDAP-аутентификация. Все команды выполняются на примере системы Linux CentOS 7.
Интеграция с Active Directory требует минимального расхождения времени с контроллером домена. Устанавливаем утилиту chrony:
yum install chrony
Запускаем службу для синхронизации времени:
systemctl enable chronyd –now
Задаем имя сервера следующей командой:
hostnamectl set-hostname proxy.domain.local
* где proxy — имя сервера; domain.local — доменное имя, используемое в сети.
Открываем консоль управления пользователями и добавляем нового со стандартными правами. От этой учетной записи будут выполняться запросы к AD DS.
В своем примере мы создаем пользователя squid.
Учетная запись должна быть размещена по пути, в котором присутствуют названия только на латинице. Подразделения и контейнеры не должны быть на русском.
В двух словах, данный файл позволяет установить легитимность нашего Linux-сервера. Создается он на контроллере домена и копируется на последний.
Для создания файла переходим на контроллер домена и от имени администратора запускаем Powershell или обычную командную строку. Вводим:
ktpass /princ HTTP/[email protected] /mapuser [email protected] /crypto ALL /ptype KRB5_NT_PRINCIPAL /pass “password” /out C:\proxy.keytab
* где proxy.domain.local — полное имя нашего squid-сервера; DOMAIN.LOCAL — наш домен; [email protected] — учетная запись в AD для выполнения запросов (создана на шаге выше); password — пароль, который будет задан пользователю (должен соответствовать требованию AD).* регистр важен.
В нашем примере, после выполнения команды на контроллере домена в корне диска С появится файл proxy.keytab. Его копируем на Linux-сервер, например, при помощи WinSCP.
Устанавливаем следующие пакеты:
yum install cyrus-sasl-gssapi krb5-workstation krb5-devel
Открываем конфигурационный файл Kerberos:
vi /etc/krb5.conf
Редактируем следующие строки:
[libdefaults] … default_realm = DOMAIN.LOCAL ..
[realms] DOMAIN.LOCAL = { kdc = 192.168.0.15 kdc = 192.168.0.16 kdc = 192.168.0.17 admin_server = domain.local }
* DOMAIN.LOCAL — наш домен; kdc — перечень контроллеров домена; admin_server — первичный контроллер (в данном примере будет использоваться случайный).
Проверяем настройки krb, запросив тикет:
kinit domainuser
При правильных настройках мы увидим на подобие:
Ticket cache: KEYRING:persistent:0:0Default principal: [email protected]
Valid starting Expires Service principal15.05.2018 10:08:33 15.05.2018 20:08:33 krbtgt/[email protected] renew until 22.05.2018 10:08:30
Проверяем keytab-файл, который мы перенесли на сервер с контроллера домена:
kinit -V -k -t /etc/squid/proxy.keytab HTTP/[email protected]
* где /etc/squid/proxy.keytab — путь до keytab-файла; HTTP/[email protected] — принципал, который был задан при создании файла.
И снова:
Картина, примерно, следующая:
Ticket cache: KEYRING:persistent:0:krb_ccache_9MN6pt8Default principal: HTTP/[email protected]
Valid starting Expires Service principal16.05.2018 09:35:20 16.05.2018 19:35:20 krbtgt/[email protected] renew until 23.05.2018 09:35:20
Зададим файлу следующие права:
chown squid:squid /etc/squid/proxy.keytab
chmod u+rwx,g+rx /etc/squid/proxy.keytab
yum install samba-winbind samba-winbind-clients pam_krb5 krb5-workstation
Конфигурируем
authconfig –enablekrb5 –krb5kdc=domain.local –krb5adminserver=domain.local –krb5realm=domain.LOCAL –enablewinbind –enablewinbindauth –smbsecurity=ads –smbrealm=domain.LOCAL –smbservers=domain.local –smbworkgroup=domain –winbindtemplatehomedir=/home/%U –winbindtemplateshell=/bin/bash –enablemkhomedir –enablewinbindusedefaultdomain –update
* где domain.local — это наш домен, domain — домен в сокращенной нотации. Регистр важен.* если после ввода команды мы увидим ошибку Job for winbind.service failed because the control process exited with error code. See “systemctl status winbind.service” and “journalctl -xe” for details — игнорируем ее. Она возникает из-за того, что наш сервер еще не в домене.
Добавляем сервер в домен:
net ads join -U administrator
* где administrator — учетная запись в AD с правами на ввод компьютеров в домен.
Разрешаем автозапуск winbind и запускаем его:
systemctl enable winbind
systemctl start winbind
Проверяем, что наш сервер умеет обращаться к службе каталогов:
* первая команда проверяет возможность отправлять запросы на контроллер домена; вторая — выводит список групп, находящихся в каталоге.
Для скрипта запуска squid добавим следующее:
vi /etc/default/squid
KRB5_KTNAME=/etc/squid/proxy.keytabexport KRB5_KTNAME
* в данном случае, мы задаем переменную KRB5_KTNAME, в которой указан путь до кейтаб файла.
Открываем конфигурационный файл squid:
vi /etc/squid/squid.conf
И добавляем:
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -d -s HTTP/[email protected]auth_param negotiate children 20auth_param negotiate keep_alive on
auth_param ntlm program /usr/bin/ntlm_auth –diagnostics –helper-protocol=squid-2.5-ntlmssp –domain=DOMAINauth_param ntlm children 10auth_param ntlm keep_alive off
* где /usr/lib64/squid/negotiate_kerberos_auth — путь до библиотеки аутентификации по kerberos, ее путь может отличаться — это зависит от версии системы; HTTP/[email protected] — учетная запись в keytab.
Также настраиваем, чтобы squid требовал аутентификацию. Для этого в секции acl добавим:
acl auth proxy_auth REQUIRED
Далее это:
http_access allow localnet
Меняем на:
http_access allow auth
* в нашем случае acl localnet использовалась для предоставления доступа.
Проверяем настройки конфигурационного файла:
squid -k parse
И если ошибок нет:
squid -k reconfigure
Для проверки на сервере открываем лог:
tail -f /var/log/squid/access.log | grep admins24
* admins24 — учетная запись в AD, от которой будем проверять работу squid.
Теперь на клиентском компьютере заходим в систему под нашей учетной записью (в данном примере, admins24) и грузим любой сайт.
На сервер в логах должны появиться записи, примерно, такого вида:
1526474100.078 240 192.168.1.16 TCP_TUNNEL/200 934 CONNECT syndication.twitter.com:443 admins24 HIER_DIRECT/134.144.40.72 –1526474100.743 45 192.168.1.16 TCP_TUNNEL/200 559 CONNECT login.vk.com:443 admins24 HIER_DIRECT/187.244.139.145 –
Ранее, мы предоставили доступ к сети Интернет любому пользователю Active Directory. Теперь ограничим доступ с помощью групп AD DS.
Для начала, создаем 2 группы пользователей, например:
Теперь на прокси-сервере открываем конфигурационный файл squid:
Добавляем после настройки аутентификации:
external_acl_type squid_users_from_ad_krb ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected]external_acl_type squid_superusers_from_ad_krb ttl=300 negative_ttl=60 %LOGIN /usr/lib64/squid/ext_kerberos_ldap_group_acl -g [email protected]external_acl_type squid_users_from_ad_ntlm %LOGIN /usr/lib64/squid/ext_wbinfo_group_acl -d
* где
В секции acl:
#acl auth proxy_auth REQUIREDacl squid_users_acl_krb external squid_users_from_ad_krbacl squid_superusers_acl_krb external squid_superusers_from_ad_krbacl squid_users_acl_ntlm external squid_users_from_ad_ntlm squidusersacl squid_superusers_acl_ntlm external squid_superusers_from_ad_ntlm squidsuperusers
* предыдущую acl для общей аутентификации комментируем.
В секции allow:
#http_access allow auth
http_access allow squid_superusers_acl_krbhttp_access allow squid_superusers_acl_ntlm
http_access allow squid_users_acl_krbhttp_access allow squid_users_acl_ntlm
* разрешаем доступ для созданных ранее acl; предыдущее разрешение для всех пользователей AD запрещаем. На данном этапе разницы между пользователями групп squidusers и squidsuperusers нет — позже мы настроим ограничение доступа к сайтам, где будем применять разные группы для предоставления различных прав.
Перечитываем конфигурацию прокси-сервера:
Мы рассмотрим простой пример блокировки двух сайтов. Доступ к ним будет ограничен в рабочее и ночное время для пользователей группы squidusers. Пользователи группы squidsuperusers будут иметь полный доступ ко всем сайтам.
В разделе с ACL добавим 2 строки:
acl BLOCKED url_regex -i “/etc/squid/denysite”acl BLOCKED_ACCESS time 18:00-23:59
* в данном примере мы создаем acl BLOCKED для сайтов, доступ к которым будем блокировать; список сайтов будем хранить в файле /etc/squid/denysite. Второй acl BLOCKED_ACCESS будем использовать для предоставления доступа к заблокированным сайтам, но с промежуток с 18:00 до 23:59.
Теперь преобразовываем к следующему виду, ранее созданные правила для доступа:
http_access allow BLOCKED BLOCKED_ACCESShttp_access deny BLOCKED
* как видим, мы добавили правила блокировки после пользователей группы squidsuperusers — таким образом, на последних они не будут распространяться. Данные правила разрешают заблокированные сайты в указанный ранее промежуток времени и блокируют доступ к сайтам, перечисленным в файле /etc/squid/denysite.
Создаем файл /etc/squid/denysite:
vi /etc/squid/denysite
facebook.comvk.com
* в данном примере мы блокируем доступ к социальным сетям facebook и ВКонтакте.
Перечитываем конфигурацию squid:
Возникает при попытке создать keytab на контроллере домена.
Причина: учетная запись, которая используется в ключе /mapuser находится в одном из подразделений, названных с применением кириллицы.
Решение: перенесите учетную запись для связывания в подразделение, названное на латинице, например, CN=Users,dc=domain,dc=local.
Другие инструкции по SQUID, которые могут показаться интересными:
1. Установка и настройка SAMS2 на CentOS
2. Установка и настройка SARG для анализа логов SQUID на CentOS
3. Настройка SquidGuard на CentOS 7
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies