Дано:
Ubuntu 18.04.2 LTS
Squid Cache: Version 3.5.27
Устанвливаем:
apt-get install squid3
Сохраним конфигурацию:
cd /etc/squid/ mv squid.conf squid.conf.back
Создадим blacklist:
vk\.ru
ok\.ru
game
porn
teens
xxx
anonim
tube
cloud
disk
proxfree\.com
anonymouse\.org
Создадим whitelist:
(\.)?itsketch\.ru
export KRB5_KTNAME
KRB5RCACHETYPE=none
export KRB5RCACHETYPE
Создаём технологическую УЗ в домене с запретом смены пароля, неограниченным сроком действия и без предварительной провенрки подлиннисти Kerberos.
И в cmd создаём .keytab:
ktpass /princ HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. /mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. /crypto RC4-HMAC-NT /ptype KRB5_NT_PRINCIPAL /pass i8wx6NzLssM4 /out C:\squid.keytab
Копируем полученный ketytab файл в /etc/squd/. Далее пробуем получить билетик по принципалу HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
kinit -kV -p HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
и если ошибок не было, то klist покажет что-то вроде этого:
Default principal: HTTP/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Valid starting Expires Service principal
10.09.2019 10:31:06 10.09.2019 20:31:06 krbtgt/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
renew until 11.09.2019 10:31:06
Устанавливаем, возможно, необходимые либы:
apt-get install libsasl2-modules-gssapi-mit ldap-utils libsasl2-modules-ldap krb5-user krb5-config libpam-krb5 libpam-winbind libnss-winbind cyrus-sasl-gssapi libauthen-sasl-cyrus-perl libsasl2-2 libgsasl7 libsasl2-modules-gssapi-heimdal libgsasl7 sasl2-bin libsasl2-modules-ldap libsasl2-modules squid-helpers
И проверяем работоспособность хелпера:
/usr/lib/squid/ext_ldap_group_acl -R -d -b "dc=regions,dc=domain,dc=loc" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -W /etc/squid/aduser regions.domain.loc
Вводимые параметры - это имя пользователя и группа, через пробел. Параметр -W содержит путь до файла с паролем пользователя ldap_user_ro.
Если всё работает и пользователь находится в группе, по вывод будет примерно таким:
ext_ldap_group_acl.cc(584): pid=24794 :Connected OK
ext_ldap_group_acl.cc(727): pid=24794 :group filter '(&(objectclass=user)(sAMAccountName=user)(memberOf=cn=mm,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))', searchbase 'dc=regions,dc=domain,dc=ru'
OK
Далее правим конфигурационный файл (пример рабочего конфига):
auth_param negotiate program /usr/lib/squid3/negotiate_kerberos_auth -d -s HTTP/vm-uadmsquid.regions.domain.loc
auth_param negotiate children 20 startup=0 idle=1
auth_param negotiate keep_alive off
external_acl_type ldap_verify %LOGIN /usr/lib/squid/ext_ldap_group_acl -R -b "dc=regions,dc=domain,dc=loc" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Groups,OU=nsk,DC=regions,DC=domain,DC=loc))" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -K -W /etc/squid/aduser regions.domain.loc
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.1.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src 10.2.6.0/23
acl localnet src 10.3.6.0/24
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
append_domain .regions.domain.loc
acl url_filtred src 10.1.0.0/16
acl url_filtred src 10.2.6.0/23
acl url_filtred src 10.3.6.0/24
acl url_filtred src 192.168.5.0/24
acl inet-full external ldap_verify inet-full
acl inet-middle external ldap_verify inet-middle
acl inet-short external ldap_verify inet-short
acl sbis dstdomain .sbis.ru
acl sufd dstdomain .roskazna.local
acl aris dstdomain .ariscommunity.com
acl SSL_ports port 443
acl SSL_ports port 8530 #WSUS
acl SSL_ports port 8006 # Proxmox
acl SSL_ports port 7071 # Zimbra Admin
acl SSL_ports port 8443 # Mail
acl SSL_ports port 9443 # Sber
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 blacklist url_regex -i "/etc/squid/blacklist"
acl whitelist url_regex -i "/etc/squid/whitelist"
acl auth proxy_auth REQUIRED
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
http_access allow url_filtred sbis
http_access allow url_filtred sufd
http_access allow url_filtred aris
http_access allow url_filtred
http_access allow inet-full
http_access deny blacklist url_filtred
http_access allow inet-middle !blacklist
http_access deny inet-short !whitelist
#http_access allow localnet
http_access allow auth
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
cache_dir ufs /var/spool/squid 100 16 256
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
cache_mem 1024 MB
maximum_object_size_in_memory 1 MB
logfile_rotate 31
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