На сервере AD создаем пользователя squid и kerberos тикет для него:
ktpass -princ HTTP/proxy.domain.com@DOMAIN.COM -mapuser squid@DOMAIN.COM -crypto rc4-hmac-nt -pass "password" -ptype KRB5_NT_PRINCIPAL -out C:\proxy.keytab
где proxy.domain.com - fqdn имя сервера squid, доступное на сервере и клиенте.
Перемещаем тикет proxy.keytab на сервер squid в /etc/squid.
Меням привилегиии на него:
sudo chown proxy:proxy /etc/squid/proxy.keytab sudo chmod 440 /etc/squid/proxy.keytab
На сервере squid устанавливаем kerberos клиент:
sudo apt-get install krb5-user
Редактируем /etc/krb5.conf:
[logging]
default = FILE:/var/log/krb5.log
[libdefaults]
default_realm = DOMAIN.COM
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
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
[realms]
DOMAIN.COM = {
kdc = domain.com
admin_server = domain.com
default_domain = DOMAIN.COM
}
[domain_realm]
.domain.com = DOMAIN.COM
domain.com = DOMAIN.COM
Проверяем keytab:
sudo kinit -V -k -t /etc/squid/proxy.keytab HTTP/proxy.domain.com
должно быть:
Authenticated to Kerberos v5
Добавляем при запуске squid переменные в /etc/default/squid:
echo export KRB5_KTNAME=\"/etc/squid/proxy.keytab\" | sudo tee -a /etc/default/squid echo export KRB5RCACHETYPE=none | sudo tee -a /etc/default/squid
Добавляем в squid доступ пользователей по аутентификации через kerberos:
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth auth_param negotiate children 10 auth_param negotiate keep_alive on acl auth proxy_auth REQUIRED http_access deny !auth http_access allow auth http_access deny all
Для детального лога /var/log/squid/cache.log о проблемах аутентифакции, меняем:
auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -d
Устанавливаем msktutil:
sudo apt-get install msktutil
http://wiki.squid-cache.org/ConfigExamples/Authenticate/Kerberos
http://www.theadmin.ru/linux/squid/proksi-server-squid-v-active-directory-s-kerberos-autentifikaciej/
http://forum.ixbt.com/topic.cgi?id=76:10320
http://manpages.org/negotiate_kerberos_auth/8
Используем с помощью bind пользователя в AD:
auth_param basic program /usr/lib/squid/basic_ldap_auth -R -b "dc=dmain,dc=com" -D "cn=squid,ou=service,dc=domain,dc=com" -W /etc/squid/squid.pwd -f sAMAccountName=%s -h domain.com auth_param basic children 20 auth_param basic realm Squid AD acl auth proxy_auth REQUIRED http_access deny !auth http_access allow auth http_access deny all
Проверяем basic_ldap_auth:
sudo /usr/lib/squid/basic_ldap_auth -R -b "dc=domain,dc=com" -D "cn=squid,ou=service,dc=domain,dc=com" -W /etc/squid/squid.pwd -f sAMAccountName=%s -h domain.com login pass OK
Для проверки пользователей на принадлежности к группе в squid.conf через ldap добавляем:
#Groups external_acl_type ldap_users ipv4 ttl=600 negative_ttl=600 children-max=30 protocol=3.0 %LOGIN /usr/lib/squid/ext_ldap_group_acl -P -R -K -b "dc=domain,dc=com" -D squid@domain.com -W "/etc/squid/squid.pwd" -f "(&(sAMAccountName=%u)(|(memberOf=CN=%g,OU=SERVICE,DC=domain,DC=com)(memberOf=CN=%g,OU=GROUPS,DC=domain,DC=com)))" -h domain.com
Для проверки запустим:
/usr/lib/squid/ext_ldap_group_acl -P -R -K -b "dc=domain,dc=com" -D squid@domain.com -W "/etc/squid/squid.pwd" -f "(&(sAMAccountName=%u)(|(memberOf=CN=%g,OU=SERVICE,DC=domain,DC=com)(memberOf=CN=%g,OU=GROUPS,DC=domain,DC=com)))" -h domain.com
на запрос вводить логин и группу для проверки (через пробел), пример:
user group1 OK user group2 ERR
Для проверки пользователей на принадлежности к группе в через kerberos устанавливаем:
apt install libsasl2-modules-gssapi-mit
и добавлем в squid.conf:
#Groups external_acl_type ldap_users ipv4 ttl=600 negative_ttl=600 children-max=30 protocol=3.0 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -l "(&(sAMAccountName=%u)(|(memberOf=CN=%g,OU=SERVICE,DC=domain,DC=com)(memberOf=CN=%g,OU=GROUPS,DC=domain,DC=com)))" -D DOMAIN.COM
Для проверки запустим:
export KRB5_KTNAME=/etc/squid/proxy.keytab /usr/lib/squid/ext_kerberos_ldap_group_acl -a -i -l "(&(sAMAccountName=%u)(|(memberOf=CN=%g,OU=SERVICE,DC=domain,DC=com)(memberOf=CN=%g,OU=GROUPS,DC=domain,DC=com)))" -D DOMAIN.COM
на запрос вводить логин и группу для проверки (через пробел), пример:
user group1 OK user group2 ERR
Выходить в интернет через прокси (192.168.10.112):
cache_peer 192.168.10.112 parent 3128 0 proxy-only no-query no-digest no-netdb-exchange default never_direct allow all
По умолчанию кэш лежит в /var/squid/cache/ иначе в директории указаной в опции cache_dir.
Останавливаем squid и удаляем кэш:
sudo service squid stop sudo rm -rf /var/cache/squid/*
создаем новый кэш и запускаем squid:
sudo squid -z sudo service squid start
На примере www.domain.com:
squidclient -h 127.0.0.1 -m PURGE http://www.domain.com
Ограничение шири на канала на пользователя 1024kbps, со списком исключений по домену (noslowspeed.acl):
acl noslowspeed dstdomain "/etc/squid/noslowspeed.acl" delay_pools 2 delay_class 1 1 delay_class 2 4 delay_access 1 allow noslowspeed delay_access 1 deny all delay_access 2 allow all delay_parameters 1 -1/-1 delay_parameters 2 -1/-1 -1/-1 -1/-1 128000/128000 #1024kbps = *1000/8
http://habrahabr.ru/post/168515/
https://habrahabr.ru/post/267851/
http://wiki.squid-cache.org/Features/SslBump
Просмотр лога в реальном времени и удобочитаемой датой:
perl -p -e 's{^([\d]+\.[\d]+)(.*$)}{localtime($1).$2}e'
Преобразование времени с помощью awk:
awk -F. -v OFS=. '{if($1!=p)t=strftime("%F %T",p=$1);$1=t;print}'
По умолчанию в squid.conf задан как:
http_access allow localhost manager http_access deny manager
Задать пароль 'secret' на все операции с менеджером кэша:
cachemgr_passwd password secret all
http://wiki.squid-cache.org/Features/CacheManager
http://www.squid-cache.org/Doc/config/cachemgr_passwd/
Доступ к кэшу через cgi скрипт:
sudo apt install squid-cgi
Для доступа к cgi через web (http://proxy.domain.com/cachemgr) необходимо настроить web сервер.
Инструмент командной строки для выполнения web запросов и отправки запросов менеджеру кэша Squid.
Установка:
sudo apt install squidclient
ERROR: Negotiate Authentication validating user. Error returned 'BH gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. '
Помогает отключение кэша ответов:
KRB5RCACHETYPE =none
redirect_program /usr/bin/adzapper.wrapper redirect_children 30