Menu
SQUID и APACHE + kerberos NTLM авторизация + lightsquid на Debian9

SQUID и APACHE + kerberos NTLM авторизация + lightsquid на Debian9

Как поднять прокси сервер SQUID 3 и Apache2 на Debian9 с авторизацией в Active Directory и статистикой.

1. Обновить систему
apt-get update
apt-get dist-upgrade
2. Доустановить
apt-get install mc sudo ntp krb5-user squid libnet-ldap-perl libsasl2-modules-gssapi-mit libcgi-session-perl apache2 php net-utils lightsquid
3. Привести имена сетевых интерфейсов к нормальном виду
В /etc/default/grub в строке
“GRUB_CMDLINE_LINUX” вставить "net.ifnames=0 biosdevname=0"

Заодно поменять разрешение в tty для мелких мониторов

GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
GRUB_GFXMODE=1024x768x24
GRUB_GFXPAYLOAD_LINUX=keep
Применить
sudo grub-mkconfig -o /boot/grub/grub.cfg
или
update-grub2
Проверка
ifconfig -a
4. Прописать в /etc/hostname полное имя сервера proxy.domain.local
5. Прописать в /etc/hosts 192.168.1.2 proxy.domain.local proxy
6. Настроить ntp. В /etc/ntp.conf добавить свой сервер ntp
server 192.168.1.1
Проверка
ntpq -p
7. Прописать в локальных DNS сети прямую и обратную зоны для сервера
8. Создать в AD пользователя для squid. Например squid.
Установить у него password never expire и user cannot change password
OU с учетной записью должна быть на латинице, иначе получим Password set failed! 0x00000020 при создании keytab файла.
9. Создать keytab файл, запустив CMD от администратора на контроллере AD и выполнив:
ktpass /princ HTTP/proxy.domain.local@DOMAIN.LOCAL /mapuser DOMAIN\squid /crypto ALL /ptype KRB5_NT_PRINCIPAL /pass "yourpass" /out C:\temp\proxy.keytab
Перенести полученный файл с сервера AD на новый прокси сервер в /etc/squid
Если у пользователей уже был прописан какой-то прокси сервер, и влом менять его у всех, нужно сделать keytab файл для этого имени, прописать А запись в DNS и добавить имя в /etc/hosts.

10. Отредактировать /etc/krb5.conf

[libdefaults]
default_realm = DOMAIN.LOCAL
ticket_lifetime = 24h
dns_lookup_realm = false
dns_lookup_kdc = false
default_keytab_name = /etc/squid/proxy.keytab
forwardable = yes
clock_skew = 300

default_tgs_enctypes = des-cbc-crc rc4-hmac des-cbc-md5
default_tkt_enctypes = des-cbc-crc rc4-hmac des-cbc-md5
permitted_enctypes = des-cbc-crc rc4-hmac des-cbc-md5


[realms]
DOMAIN.LOCAL = {
kdc = pdc.domain.local
kdc = pdc2.domain.local
admin_server = PDC.DOMAIN.LOCAL
default_domain = DOMAIN.LOCAL
}

[domain_realm]
.domain.local = DOMAIN.LOCAL
domain.local = DOMAIN.LOCAL

Проверка получения билета:
kinit -V -k -t /etc/squid/proxy.keytab HTTP/proxy.domain.local@DOMAIN.LOCAL
Если получилось
Authenticated to Kerberos v5
Удаляем
kdestroy


11. Настрйока SQUID
Править скрипт запуска /etc/init.d/squid
Где-то до строки DAEMON=/usr/sbin/squid добавить:
KRB5_KTNAME=/etc/squid/proxy.keytab
export KRB5_KTNAME
KRB5RCACHETYPE=none
export KRB5RCACHETYPE
, где KRB5_KTNAME - указывает на keytab файл, KRB5RCACHETYPE=none - указывает керберосу не перезапрашивать данные авторизации пользователя в домене (если не указать, но процессы сожрут весь CPU и запросов в AD будет слишком много по каждому кэш-объекту в squid)

Создать в AD группу proxy-allow для полного доступа в интернет

Конфиг /etc/squid/squid.conf
##################################
# Настройка авторизации Kerberos #
##################################
# Параметры авторизации Squid в AD
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -s HTTP/proxy.domain.local
auth_param negotiate children 90
#auth_param negotiate children 80 startup=20 idle=5
auth_param negotiate keep_alive on
# Здесь задаются какие группы в AD будет использоваться при доступе в интернет для пользователей
external_acl_type proxy-allow ttl=3600 negative_ttl=60 %LOGIN /usr/lib/squid3/ext_kerberos_ldap_group_acl -a -g proxy-allow -D DOMAIN.LOCAL -S 192.168.1.1
######################################
# Обслуживаемые прокси-сервером сети #
######################################
# Правило указывающее доступ в интернет только через авторизацию Kerberos
acl auth proxy_auth REQUIRED
cache_mgr admin@domain.ru
#################################################
# Правила какие порты разрешены прокси-сервером #
#################################################
# Порт SSL для подключений по HTTPS-протоколу
acl SSL_ports port 443
# Список портов, к которым разрешен доступ через прокси-сервер по протоколу HTTP
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
################################################################
# Пути к файлам запрещающих, разрешающих определенные действия #
################################################################
acl Allowed_IPs src "/etc/squid/allowed_ips.txt"
# Группа в AD на которую не распространяются запреты
acl proxy-allow external proxy-allow
# Путь к белому списку сайтов
acl WhiteList dstdomain "/etc/squid/WhiteList.txt"
# Путь к черному списку сайтов
acl BlackList dstdomain "/etc/squid/BlackList.txt"
#########################
# Параметры DNS записей #
#########################
# Список DNS серверов(IP адреса), которые будут использоваться вместо тех, что определены в /etc/resolv.conf файле
dns_nameservers 192.168.1.1
#########################################
# Правила ограничений доступа клиентов #
#########################################
# Запретить доступ к портам, отсутствующим в списке выше
http_access deny !Safe_ports
# Запретить метод CONNECT не на SSL-порт
http_access deny CONNECT !SSL_ports
# Разрешить только локальное управление кэшем
http_access allow localhost manager
http_access deny manager
# Не ограничивать локальный доступ с сервера
http_access allow localhost

# разрешение без авторизации (для кривого софта, который не умеет правильно авторизоваться в прокси)
acl noauth dstdomain cbrates.rbc.ru
http_access allow noauth
# Доступ без авторизации с определенных IP
http_access allow Allowed_IPs
# Доступ в интернет без ограничения доступа
http_access allow proxy-allow !BlackList
# Блокировать запрещенные сайты
http_access deny BlackList
# Правила разрешающего доступ в интернет только авторизованным пользователям AD
#http_access allow auth
#http_access auth
# Блокирует все, что не было разрешено выше
http_access deny all !WhiteList
################################################
# Правила подключений клиентов к прокси-серверу#
################################################
# Подключения через прозрачный порт
# http_port 192.168.1.2:3130
# intercept options=NO_SSLv3:NO_SSLv2
# Подключение через указания прокси-сервера на строне клиента
http_port 192.168.1.2:3128
# options=NO_SSLv3:NO_SSLv2
# Подключение по HTTPS через прозрачный порт с параметрами подставки сертификата
#https_port 192.168.1.5:3129 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
# Укажем список блокируемых ресурсов (в файле домены вида .domain.com) и правила блокировки их
#acl blocked ssl::server_name "/etc/squid/BlackList.txt"
# Устанавливаем защищенное соединение и считываем заголовок HTTP
#acl step1 at_step SslBump1
#ssl_bump peek step1
# Закрываем соединение, если клиент заходит на ресурс указанные в blocked
#ssl_bump terminate blocked
ssl_bump splice all
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
#########################################
# Дополнительные параметры конфигурации #
#########################################
# Путь для дискового кеширования
cache_dir aufs /var/spool/squid 20000 16 256
# Путь сохранения дампов аварийного завершения
coredump_dir /var/spool/squid
# Время жизни объектов для протоколов FTP и GOPHER
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
# Нулевое время жизни для динамического контента
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
# Время жизни по умолчанию
refresh_pattern . 0 20% 4320
maximum_object_size 61440 KB
minimum_object_size 3 KB
cache_swap_low 90
cache_swap_high 95
# Максимальный размер объекта, сохраняемого в оперативной памяти
maximum_object_size_in_memory 512 KB
memory_replacement_policy lru
logfile_rotate 5

Создаем файлы
/etc/squid/BlackList.txt - запрещенные сайты
/etc/squid/WhiteList.txt - разрешенные пользователям вне группы proxy-allow сайты
/etc/squid/allowed_ips.txt - IP адреса без авторизации

Проверка конфигурации
squid -k parse
squid -k reconfigure
/etc/init.d/squid restart

Проверка пользователя в группе
/usr/lib/squid3/ext_kerberos_ldap_group_acl -a -d -i -g proxy-allow -D DOMAIN.LOCAL

При работе в прозрачном (transparent) режиме, аутентификация пользователей невозможна!

 

12. Apache2

apt-get install  libapache2-mod-auth-kerb

a2enmod auth_kerb

Можно использовать ранее созданный keytab сквида скопировав его в /etc/apache2

Добавить в конфигурацию хостинга


AuthType Kerberos
AuthName "domain.local"
KrbAuthRealms DOMAIN.LOCAL
KrbServiceName HTTP/proxy.domain.local
Krb5Keytab /etc/apache2/proxy.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd Off

# для всех доменных пользователей
require valid-user

# для выбранных доменных пользователей
# Require user user1@DOMAIN.LOCAL
KrbSaveCredentials Off
KrbVerifyKdc OFF

Перезапуск

service apache2 restart

13. lightsquid

Исправить /etc/apache2/sites-enabled/000-default.conf


ServerName proxy
# ServerAlias

<Location "/lightsquid/">
Options +ExecCGI
# Require local
Require ip 192.168.1.0/24



Require all granted
AuthType Kerberos
AuthName "BXOD B DOMEH DOMAIN.LOCA:"
KrbAuthRealms DOMAIN.LOCAL
KrbServiceName HTTP/proxy
Krb5Keytab /etc/apache2/proxy.keytab
KrbMethodNegotiate On
KrbMethodK5Passwd Off
# require valid-user
Require user user1@DOMAIN.LOCAL admin@DOMAIN.LOCAL
KrbSaveCredentials Off
KrbVerifyKdc OFF

ServerAdmin admin@domain.local
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

 

 

 


Раскомментировать строку в /etc/apache2/mods-enabled/mime.conf
AddHandler cgi-script .cgi .pl
Перезапустить апач:
a2enmod cgi
a2enconf lightsquid
service apache2 restart

Создать символическую ссылку на cgi lightsquid\
ln -s /usr/lib/cgi-bin/lightsquid/ /var/www/html/

Прописать в /etc/crontab
2 * * * * root perl /usr/share/lightsquid/lightparser.pl

 

14. Zabbix

#!/bin/bash

if [ "$(sudo service --status-all | grep squid | cut -c 4-4)" = "+" ]; then
echo 1
else
echo 0
fi

Lisolog 2019