Содержание страницы
Заметки в процессе установки
Аутентификация
Подготовка
Round-Robin записи в DNS для котроллеров домена Active Directory
У многих используется несколько котроллеров домена Active Directory.
В данном случае 2 контроллера dc1.notdev.local – 192.168.10.11 и dc2.notdev.local – 192.168.10.12. Для повышения отказоустойчивости работы сервисов которые нуждаются в указании конкретного сервера, соответствующие записи Round-Robin, dc.notdev.local – 192.168.10.11 и dc.notdev.local – 192.168.10.12, что позволят указывать dc.notdev.local в роли сервера аутентификации.
PTR запись в DNS для прокси сервера
Создайте на DNS серверах, PTR-запись прокси сервера.
Для использования Kerberos-аутентификации необходимо убедиться, что на серверах DNS присутствует PTR-запись для каждого контроллера домена Active Directory.
Установить локальные DNS сервера
Отредактируйте nano /etc/resolv.conf
search notdev.local
nameserver 192.168.10.11
nameserver 192.168.10.12
Настройка Kerberos-аутентификации
Данная настройка необходима когда у вас есть, контроллер домена Active Directory, который будет выполнять аутентификацию пользователей.
При использовании данного типа аутентификацию нельзя использовать прозрачный порт
Синхронизация времени с контроллером домена
apt install -y ntp ntpdate
Добавляем в секцию server ntp.your-provider.example свои сервера времени
Отредактируйте ntp.conf, для Debian 9/10/11 /etc/ntp.conf, а Debian 12 /etc/ntpsec/ntp.conf
# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example server dc1.notdev.local server dc2.notdev.local
Останавливаем службу NTP, выполняем синхронизацию с указанным сервером и запускаем службу NTP.
service ntp stop ntpdate dc.notdev.local # ntpdate[10465]: adjust time server 192.168.10.11 offset +0.048560 sec service ntp start
Состояние активного NTP-сервера отображается командой.
ntpq -p # remote refid st t when poll reach delay offset jitter #============================================================================== #-dc1.notdev.loc XX.XX.XX.XX 2 u 506 512 377 0.711 +52.723 6.169 #-dc2.notdev.loc YY.YY.YY.YY 3 u 474 512 377 1.148 +22.318 7.211
Создание keytab-файла для сервиса Squid
Подключитесь к контроллеру домена Active Directory. В оснастке Domains Users and Computers создайте пользователя с именем squid с паролем qwerty123. Запустите командную строку или PowerShell от имени администратора и выполните одну из команд.
Достаточно создать keytab-файл используя шифрование RC4-HMAC-NT
ktpass -princ HTTP/[email protected] -mapuser [email protected] -pass qwerty123 -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out squid.keytab
Но можно создать используя все доступные алгоритмы для большей совместимости
ktpass -princ HTTP/[email protected] -mapuser [email protected] -pass qwerty123 -crypto ALL -ptype KRB5_NT_PRINCIPAL -out squid.keytab
ktpass -princ HTTP/<имя сервера с сервисом Squid в нижнем регистре>@<realm Active Directory в верхнем регистре> -mapuser squid@<realm Active Directory в верхнем регистре> -crypto <тип шифрования, рекомендуется указать RC4-HMAC-NT или ALL для совместимости> -ptype KRB5_NT_PRINCIPAL -pass <пароль пользователя squid> -out squid.keytab
Должен быть ТОЛЬКО ОДИН пользователь, сопоставленный одной записью SPN (HTTP/<имя сервера с сервисом Squid в нижнем регистре>@<realm Active Directory в верхнем регистре>). Если несколько разных пользователей сопоставленных с записью SPN, то проверка подлинности Kerberos будет ВСЕГДА НЕУДАЧНОЙ.
Скопируйте файл squid.keytab в директорию /etc/squid/
Установка необходимых пакетов
apt install -y krb5-config krb5-user libsasl2-modules-gssapi-mit ldap-utils
Резервная копия Kerberos
cp /etc/krb5.conf{,.bak}
Отредактируйте nano /etc/krb5.conf
[libdefaults] default_realm = NOTDEV.LOCAL default_keytab_name = /etc/squid/squid.keytab dns_lookup_kdc = yes dns_lookup_realm = yes kdc_timesync = 1 ccache_type = 4 ticket_lifetime = 24h forwardable = true proxiable = true # Windows 2003 #default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 #default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 #permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 # Windows 2008 with AES default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 # Windows 2012 R2 with DES3 #default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 #default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 #permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 [realms] NOTDEV.LOCAL = { kdc = dc1.notdev.local kdc = dc2.notdev.local admin_server = dc1.notdev.local admin_server = dc2.notdev.local default_domain = notdev.local } [domain_realm] .notdev.local = NOTDEV.LOCAL notdev.local = NOTDEV.LOCAL
Проверка аутентификации
kinit [email protected]
#Password for [email protected]: klist
#Ticket cache: FILE:/tmp/krb5cc_0 #Default principal: [email protected] # #Valid starting Expires Service principal #04/21/2022 19:36:42 04/22/2022 05:36:42 krbtgt/[email protected] #renew until 04/22/2022 19:36:36 kdestroy
kinit -kV -p HTTP/proxy.notdev.local
#Using default cache: /tmp/krb5cc_0 #Using principal: HTTP/[email protected] #Authenticated to Kerberos v5 klist
#Ticket cache: FILE:/tmp/krb5cc_0 #Default principal: HTTP/[email protected] # #Valid starting Expires Service principal #04/21/2022 19:46:46 04/22/2022 05:46:46 krbtgt/[email protected] #renew until 04/22/2022 19:46:46 kdestroy
Основной модуль аутентификации
Ввиду модульной структуры нашего прокси сервера опишем основной файл /etc/squid/conf.d/00.auth.conf, в котором перечислены различные методы аутентификации, часть указанных параметров будет рассмотрено ниже более подробно.
Отредактируем /etc/squid/conf.d/00.auth.conf
# Kerberos authentication
include /etc/squid/conf.d/kerberos.auth
# NTLM authentication
#include /etc/squid/conf.d/ntlm.auth
# Basic authentication via LDAP or NTLM
include /etc/squid/conf.d/basic.auth
# сколько пользователь будет оставаться аутентифицированным, со времени его последнего запроса
authenticate_ttl 1 hour
# Проверка группы доступа в домене
external_acl_type Internet ttl=300 negative_ttl=60 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g Internet -D NOTDEV.LOCAL
# Определяем группы доступа
acl Internet external Internet
# Авторизация требуется ОБЯЗАТЕЛЬНО, без нее никого не пускать
acl auth proxy_auth REQUIRED
# Доступ через принадлежность группе
http_access allow Internet
# Доступ c авторизацией, усиленная авторизация
http_access deny !auth
http_access allow auth
В данном файле указан перечень общих параметров которые могут быть использованы для большинства типов аутентификации
Настройка Squid для использования Kerberos-аутентификации
Можно использовать два метода с использованием keytab-файла и без него.
-i -d отладка
-r не использовать @<realm Active Directory в верхнем регистре> в учетной записи-s может иметь несколько вариантов HTTP/[email protected] = HTTP/proxy.notdev.local = GSS_C_NO_NAME (AUTO)
Параметр auth_param negotiate keep_alive off
Если у вас возникают проблемы с запросами PUT/POST, когда вы используете Negotiate схему аутентификации, вы можете попробовать выключить эту опцию. Но это может привести, к тому, что Squid будет закрывать соединения, если браузер спрашивает, какие схемы аутентификации поддерживает прокси.
# Negotiate Kerberos #auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -k /etc/squid/squid.keytab -r -s HTTP/[email protected] auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -r -s GSS_C_NO_NAME auth_param negotiate children 100 startup=10 idle=10 auth_param negotiate keep_alive on
Так же необходимо создать acl и укажите что требуется обязательная аутентификация и добавить перед правилом http_access deny all
acl auth proxy_auth REQUIRED http_access deny !auth http_access allow auth
Если необходимо обеспечивать ограничение пользователей, по принадлежности к группам безопасности в домене Active Directory, то необходимо добавить соответствующую обработку, ACL и запрет, размещенный перед правилом http_access deny all
Проверка принадлежности учетной записи к группе Internet
/usr/lib/squid/ext_kerberos_ldap_group_acl -a -g Internet -D NOTDEV.LOCAL
user1
#OK
Теперь можем добавлять необходимое правило
external_acl_type Internet ttl=300 negative_ttl=60 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g Internet -D NOTDEV.LOCAL acl Internet external Internet http_access deny !Internet
Перезапустите службу Squid
service squid restart
Текущее содержание модуля kerberos.auth
# Negotiate Kerberos
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -r -s GSS_C_NO_NAME
auth_param negotiate children 100 startup=10 idle=10
auth_param negotiate keep_alive on
Настройка NTLM-аутентификации
Рекомендуется использовать Kerberos-аутентификацию для обеспечения безопасности передачи данных. Используйте NTLM-аутентификацию, только если невозможно использовать Kerberos-аутентификацию. Если вы используете NTLM-аутентификацию, необходимо включить протокол Samba версии 2.
Установка сервиса Samba
Чтобы установить сервис Samba и пакеты, необходимые для работы сервиса Samba, выполните одну из следующих команд в зависимости от используемой операционной системы:
apt install -y samba winbind
Установите разрешения, чтобы учетная запись proxy пользователя могла читать samba winbindd_privileged.
Требуется добавить пользователя proxy в группу winbindd_priv:
usermod -a -G winbindd_priv proxy
Создаем резервную копию
cp /etc/samba/smb.conf{,.bak}
Отредактируйте nano /etc/samba/smb.conf
Приводим файл smb.conf к следующему виду
workgroup = <NetBIOS-имя домена Active Directory>
netbios name = <NetBIOS-имя сервера со службой Squid>
realm = <realm Active Directory в верхнем регистре>
[global] workgroup = NOTDEV netbios name = PROXY security = ADS realm = NOTDEV.LOCAL encrypt passwords = yes bind interfaces only = yes winbind nss info = rfc2307 winbind use default domain = yes winbind enum users = yes winbind enum groups = yes idmap config *:backend = tdb idmap config *:range = 10000-80000 idmap config NOTDEV:backend = rid idmap config NOTDEV:range = 10000-80000 log file = /var/log/samba/samba.%m log level = 9
Добавление прокси сервера в домен Active Directory
Процедура добавления сервера со службой Squid весьма простая. В процессе потребуется использовать учетную запись и пароль администратора домена или пользователя с правами администратора домена.
net ads join -U admin #Enter admin's password: #Using short domain name -- NOTDEV #Joined 'PROXY' to dns domain 'notdev.local'
Проверьте добавление сервера с сервисом Squid в домен Active Directory
net ads testjoin #Join is OK
Перезапустите необходимые службы
service smbd restart service nmbd restart service winbind restart
Проверить получение данных с контроллера домена, список пользователей, групп безопасности, аутентификацию пользователей, проверка доверия для домена
wbinfo -u wbinfo -g wbinfo -a admin wbinfo -t
Настройка Squid для использования NTLM-аутентификации
Ниже приведены необходимые настройки
Протоколы squid-2.5-ntlmssp и gss-spnego, работают они одинаково, но имеют некоторые особенности, которые не документированы. Параметр –require-membership-of позволяет указать какой группе пользователь в домене должен присутствовать что бы удовлетворять требование аутентификации.
auth_param ntlm program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-ntlmssp –domain=<NetBIOS-имя домена Active Directory> –require-membership-of=<NetBIOS-имя домена Active Directory><группа пользователей>
# NTLM authentication #auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=gss-spnego --domain=NOTDEV --require-membership-of=NOTDEV\Internet
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --domain=NOTDEV --require-membership-of=NOTDEV\Internet auth_param ntlm children 50 startup=10 idle=10 auth_param ntlm keep_alive off
Так же необходимо создать acl и укажите что требуется обаятельная аутентификация и добавить перед правилом http_access deny all
Правила создаются один раз, для всех методов аутентификации
acl auth proxy_auth REQUIRED http_access deny !auth http_access allow auth
Перезапустите службу Squid
service squid restart
Текущее содержание модуля ntlm.auth
# Negotiate NTLM authentication
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --domain=NOTDEV --require-membership-of=NOTDEV\Internet auth_param ntlm children 50 startup=10 idle=10 auth_param ntlm keep_alive off
Настройка Basic-аутентификации
Настройка Squid для использования Basic-аутентификации через Active Directory
При использовании Active Directory в роли сервера аутентификации можно воспользоваться несколькими методами
- Если вы настраивали NTLM-аутентификацию можно использовать auth_param basic program /usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic
- LDAP-аутентификацию auth_param basic program /usr/lib/squid/basic_ldap_auth
auth_param basic program /usr/lib/squid/basic_ldap_auth -R -d -b “<LDAP объект (домен, группа или организационная единица) в формате DN>” -D “<имя пользователя>@<домен Active Directory>” -w “<пароль пользователя>” -f “sAMAccountName=%s” -h <IP-адрес контроллера домена Active Directory>
Проверка LDAP-аутентификации
/usr/lib/squid/basic_ldap_auth -R -b "dc=notdev,dc=local" -D "[email protected]" -w "qwerty123" -f "sAMAccountName=%s" -h dc.notdev.local
squid qwerty123
#OK
# Basic authentication via LDAP auth_param basic program /usr/lib/squid/basic_ldap_auth -R -b "dc=notdev,dc=local" -D "[email protected]" -w "qwerty123" -f "sAMAccountName=%s" -h dc.notdev.local
# Basic authentication via NTLM #auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --domain=NOTDEV --require-membership-of=NOTDEV\Internet
auth_param basic children 50 startup=10 idle=10 auth_param basic realm "SQUID Proxy Server Basic authentication!" auth_param basic casesensitive off auth_param basic credentialsttl 1 hours
Настройка Squid для использования Basic-аутентификации используя файл passwd
Обычная аутентификация из файла с логином паролем. Создаем файл где будут хранится логин и пароль
htpasswd -c создать файл, для этого может потребоваться установить apache2-utils
apt install apache2-utils
htpasswd -c /etc/squid/passwd user01
htpasswd /etc/squid/passwd user02
htpasswd /etc/squid/passwd user03
Назначаем права на файл
chown -R proxy:proxy /etc/squid/passwd
Настройка Squid
# Basic authentication via file passwd
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 50 startup=10 idle=10
auth_param basic realm "SQUID Proxy Server Basic authentication!"
auth_param basic casesensitive off
auth_param basic credentialsttl 1 hours
Так же необходимо создать ACL и укажите что требуется обаятельная аутентификация и добавить перед правилом http_access deny all
Правила создаются один раз, для всех методов аутентификации
acl auth proxy_auth REQUIRED http_access deny !auth http_access allow auth
Перезапустите службу Squid
service squid restart
Текущее содержание модуля basic.auth
# Basic authentication via file passwd
#auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
# Basic authentication via LDAP auth_param basic program /usr/lib/squid/basic_ldap_auth -R -b "dc=notdev,dc=local" -D "[email protected]" -w "qwerty123" -f "sAMAccountName=%s" -h dc.notdev.local
# Basic authentication via NTLM (SMB) #auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --domain=NOTDEV --require-membership-of=NOTDEV\Internet
auth_param basic children 50 startup=10 idle=10 auth_param basic realm "SQUID Proxy Server Basic authentication!" auth_param basic casesensitive off auth_param basic credentialsttl 1 hours
Дополнительные настройки
- Как установить и настроить Squid 4.XX
- Фильтрация ресурсов — черный и белые списки
- Модульная конфигурация Squid 4.XX
- Аутентификация пользователей в Squid 4.XX – Kerberos, NTLM и Basic
- Мониторинг пользовательской активности Squid 4.XX – SqStat
-
Отчетность пользовательской активности Squid 4.XX – LightSquid
Дополнительная информация