Страница 1 из 12

Статья squid+AD

Добавлено: 2007-11-06 14:56:48
Alex Keda
http://www.lissyara.su/?id=1375
сабж. Бета. Просьба кому нелень почитать и покритиковать.

Re: Статья squid+AD

Добавлено: 2007-11-06 15:41:02
Alex Keda
чёрт.
в новости неглядя пустил.
бета резко переросла в релиз :(

Re: Статья squid+AD

Добавлено: 2007-11-06 17:23:22
BlackCat
Пара вопросов.
Насколько спасает кеширование? Т.е. при какой загрузке уже стоит задуматься о кешировании.
Чем больше оно помагает: ускорение или экономия трафика.

Re: Статья squid+AD

Добавлено: 2007-11-06 19:08:28
Al
Статья - сог.Очень даж вовремя! коментов и объяснений бы побольше.
А есть возможность квотировать трафик??

Re: Статья squid+AD

Добавлено: 2007-11-06 19:28:53
Alex Keda
ребят - в статье написано всё что сделал и понял...
кэширование - поправил хелпер перловый, чтоб писал в лог - раз в два часа по группам пробегается для каждого узера и всё.
квот нет - для этого средств нет никаких штатных.

Re: Статья squid+AD

Добавлено: 2007-11-06 19:46:56
-cat-
В статье используется конфиг от старых версий SQUID,
1. в 2.6 немного изменилась структура файла в порядке расположений опций.
2. для редиректора необходимо указывать

Код: Выделить всё

url_rewrite_program
, вместо

Код: Выделить всё

redirect_program
.
Надо бы сделать уточнения. :)

Re: Статья squid+AD

Добавлено: 2007-11-06 19:48:40
Alex Keda
конфиг писался с пустого файла руками - поэтому ничё не используется :)
Данный конфиг работает на 2.6 и 3.0 - на 2.5 не пашет.

Re: Статья squid+AD

Добавлено: 2007-11-06 19:57:48
-cat-
Естественно работает :) , я и не писал что не будет работать. Просто не факт что в дальнейших версиях будет работать.
Для 2.5, насколько помню, чтобы работало для авторизации необходимо было добавлять

Код: Выделить всё

auth_param ntlm keep_alive on

Re: Статья squid+AD

Добавлено: 2007-11-08 9:21:25
freeman
Всразу добавлю комментарий, чтобы заранее отсечь возможные вопросы, NTLM аутентификацию паролей в русской раскладке сделать рабочей вроде никому не удавалось (по крайней мере я спрашивал не раз за последний год =) ).

Re: Статья squid+AD

Добавлено: 2007-11-08 9:40:19
Alex Keda
зато с первго разу понимают - если пароль русский - инета нет.
быстро приучаются нормальный делать :)

Re: Статья squid+AD

Добавлено: 2007-11-08 10:17:33
gmn
lissyara писал(а):зато с первго разу понимают - если пароль русский - инета нет.
быстро приучаются нормальный делать :)
У меня для NTLM используется fakeauth, поэтому на счет русских паролей не скажу точно.
Но только помню, что в одной из предпоследних версий сквида 2.6 был баг. Писал в bugzilla, в общем, исправляли.

Re: Статья squid+AD

Добавлено: 2007-11-08 10:47:55
gmn
А теперь всего по немножку :)

Работает squid 2.6 на такой железке:
Intel(R) Xeon(R) CPU 5110 @ 1.60GHz
hw.physmem: 3748466688
Трафик через сквид порядка 20 Мбит/сек и обслуживается порядка 2500 юзеров (в рабочее время порядка 300 запросов в секунду, бывают пики до 500).
LA на сервере в рабочее время порядка 0,8-1,2.
Кеш, как я писал, aufs, потому что вычитал в списках рассылок сквида:
"if you have FreeBSD5 or higher, you can use aufs, which should be faster and doesn't require SHM tuning."
Используются: авторизация в АД, пулы, разные списки доступов.
Касательно авторизации в AD, то для NTLM - fakeauth (реально не авторизирует, но принимает от браузера логин юзера (потом проверяется наличие этого логина в определенных группах безопасности).
Для basic-авторизации - LDAP.
Для работы с группами в AD - LDAP.
Время кеширования результатов поиска в LDAP (ключевые слова ttl. У меня позитивный кеш 2 часа (негативный час). Т.е. если юзер запросил URL, а я потом его из группы выкинул (переместил в другую), то доступ изменится у него через 2 часа):

Код: Выделить всё

external_acl_type ldap_group ttl=7200 negative_ttl=3600 children=20 protocol=3.0
Списки контроля доступа раньше были в сквиде (acl bad_sites ... и т.д.).
Загрузка сервера была намного больше, чем теперь, процессом squid.
Вынес все acl-ки в базу MySQL и в сквиде их подключил как external_acl_type.
Что это дало?
А это процентов на 30-40 разгрузило сервер (как оказалось, MySQL быстрее regexp-ы считает, чем сквид).
Получил некую гибкость управления списками доступа без перезапуска прокси - внес запись в опр. табличку (для табличек сделал примитивный интерфейс на php) - через заданное в acl-ке TTL уже мое правило применится. И прокси рестартовать не надо.
Авторизация в AD + группы из AD еще используются для помещения юзеров в определнные пулы.
Например, пулы по домену назначения - сайты явно по работе - cisco.com, microsoft.com, sun.com ... - отдельный пул с хорошей скоростью.
Для UA-IX отдельный пул со своими лимитами.
Только чтобы юзеры попадали в пулы - обязательно для них должны быть описаны права доступа ранее, т.е. http_access allow ...
В сквиде 2.6 не совсем юзеры попадают в пул, а IP-адреса их ПК (но в пул попадает IP-шник согласно логину юзера).
В сквиде 3 появились два новых типа пулов, которые, как я понял, позволяют уже в пулах оперировать не IP-адресами, подсетями, а именно данными авторизировавшихся пользователей (их логинами т.е.). Но, к сожалению, пока у меня не получилось.
Поэтому, работает squid 2.6 stable 16 сейчас и довольно успешно.
Если интересны какие-либо моменты более детально - пишите. Опишу подробнее.
И если вдруг у кого-то получилось подружить squid+icap с пулами - поделитесь как :)

Re: Статья squid+AD

Добавлено: 2007-11-08 11:06:44
Alex Keda
выкатывай конфиг.
инетерсно :)

Re: Статья squid+AD

Добавлено: 2007-11-08 11:12:52
-cat-
По поводу ACL MySQL поподробнее, особенно интересно с regexp? ведется поиск в базе, или вываливается список.

Re: Статья squid+AD

Добавлено: 2007-11-08 11:52:17
gmn
Ок. Конфиг такой ...:

Код: Выделить всё

visible_hostname ***
hostname_aliases ***.internal
dns_testnames www.google.com
httpd_suppress_version_string on
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl mgrcache src ***
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.1/255.255.255.255
acl proxy_ip src 172.16.** 127.0.0.1
http_access allow proxy_ip manager
http_access allow mgrcache manager
http_access allow localhost mgrcache
http_access deny manager
shutdown_lifetime 5 seconds
#dns_nameservers 127.0.0.1

dns_timeout 2 minutes
positive_dns_ttl 8 hours
negative_dns_ttl 1 minute
negative_ttl 5 minutes
request_timeout 2 minutes
client_lifetime 8 hours
authenticate_ttl 6 hour
half_closed_clients off
client_db off
balance_on_multiple_ip off
relaxed_header_parser on
collapsed_forwarding on

acl purge method PURGE
http_access allow purge localhost


http_port 172.16.*.*:3128
cache_mgr admin@domain
cache_effective_user squid
cache_effective_group squid
#logfile_rotate 0
icon_directory /usr/local/etc/squid/icons
error_directory /usr/local/etc/squid/errors/Russian-koi8-r
acl snmppublic snmp_community public
acl monitor src 127.0.0.1 172.16.*.*
snmp_port 3401
snmp_access allow snmppublic monitor
snmp_access deny all
coredump_dir /var/log/squid
debug_options ALL,1
forwarded_for off # mask real local network adress (X-Forwarded-For: ).


#cache_dir diskd /opt/squidcache 40960 16 128 - больше 23, помоему, всеравно не рос кеш.
cache_dir aufs /opt/squidcache 20960 16 128

access_log syslog:LOG_LOCAL7 squid

cache_log /var/log/squid/cache.log
buffered_logs off
cache_store_log none
cache_swap_low 70
cache_swap_high 90
cache_mem 500 MB
memory_pools on
memory_pools_limit 120 MB
maximum_object_size 20 MB
minimum_object_size 0 KB
maximum_object_size_in_memory 48 KB
request_header_max_size 12 KB
request_body_max_size 0 KB
ipcache_size 32768
ipcache_low 80
ipcache_high 95
fqdncache_size 1024000
#GDSF. Стремится удержать маленькие полулярные объекты (растет hitrate, падает byterate).
#LFUDA. hitrate падает, byterate - растет.
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF
emulate_httpd_log off
log_fqdn off

quick_abort_pct 95 #(если клиент оборвал запрос, а уже получено больше чем pct процентов объекта, то докачать)
mime_table /usr/local/etc/squid/mime.conf
pid_filename /tmp/squid.pid
ftp_user anonymous@
ftp_passive on


#Suggested default:
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440

refresh_pattern -i      \.gif$                 10080   90%     43200
refresh_pattern -i      \.(jpg|jpeg|png|bmp)$  10080   90%     43200
refresh_pattern -i      \.swf$                 10080   90%     43200
refresh_pattern         .                      1440    50%     22160


#################### ACL ##########################################
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https, snews
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
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
acl local dstdomain "/usr/local/etc/squid/acl/common/localdomains.txt"
acl QUERY urlpath_regex cgi-bin \? price
acl QUERYDST dstdom_regex -i training\.naumen\.ru tools\.cisco\.com rapidshare dealers\. hightechsoft\.de
no_cache deny QUERY
no_cache deny QUERYDST
no_cache deny local
http_access allow all local

acl work_time time 09:00-20:00
acl weekend time AS
#A - Saturday
#S - Sunday

# MultiMedia
acl media urlpath_regex -i \.mp3$ \.avi$ \.mpeg$ \.mpg$ \.rm$ \.wmv$ \.wav$ \.kar$ \.mid$ \
    \.avi\.zip$ humor anekdot \.avi;type Games \.flv$

## JAVA, K-Frame
acl JVM browser Java/1.4 Java/1.5 Java/1.6 K-Frame
http_access allow JVM all

# WinAmp Agent - for ShotCast audio block.
acl winamp browser regexp Winamp NSPlayer Windows-Media-Player
http_access deny winamp

# UA-IX
external_acl_type uaixdst ttl=28800 negative_ttl=28800 children=20 protocol=3.0 %DST /usr/local/etc/squid/extacl/uaix.pl
acl uaix external uaixdst uaix

# External ACL for DST URL's
external_acl_type baddsthost ttl=3600 negative_ttl=3600 children=40 protocol=3.0 %DST /usr/local/etc/squid/extacl/baddst.pl

acl block-domain            external baddsthost blockdomain
acl block-path              urlpath_regex -i "/usr/local/etc/squid/acl/block/block-path.txt"
acl worktime-block-domain   external baddsthost worktimeblockdomain
acl rabota_sites            external baddsthost rabotasites

deny_info ERR_NO_MP3 worktime-block-domain
deny_info ERR_NO_MP3 work_time

acl dstdomains_without_auth external baddsthost dstdomainswithoutauth
http_access allow dstdomains_without_auth

# 3268 - порт Global Catalog-а. Отвечает быстрее, чем 389 (ldap).
###########-------------------------------------------------------------------------------------------
auth_param ntlm program /usr/local/libexec/squid/fakeauth_auth
auth_param ntlm keep_alive on
auth_param ntlm children 200

auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -v3 -P \
    -b "DC=DOMAIN,DC=COM" \
    -f "(&(objectclass=user)(!(objectclass=computer))(sAMAccountName=%s))" \
    -D "CN=ldapreaduser,OU=***,DC=DOMAIN,DC=COM" -w "password" -H ldap://ip_ldap_server:3268
auth_param basic children 15
auth_param basic realm Squid
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
##########--------------------------------------------------------------------------------------------

external_acl_type ldap_group ttl=7200 negative_ttl=3600 children=20 protocol=3.0 %LOGIN \
    /usr/local/libexec/squid/squid_ldap_group -S -R -v3 -P \
    -b "DC=DOMAIN,DC=COM" \
    -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=Squid,DC=DOMAIN,DC=COM))" \
    -D "CN=ldapreaduser,OU=***,DC=DOMAIN,DC=COM" -w "password" -H ldap://ip_ldap_server:3268

# ICQ
acl icqnet dst 64.12.0.0/16 205.188.0.0/16
acl ICQ dstdomain .icq.com .aol.com .mirabilis.com
deny_info ERR_ICQ ICQ
acl icqusers external ldap_group SQUID-ICQUSERS

tcp_outgoing_address 172.16.*.*

acl rabota_users external ldap_group SQUID-RABOTAUSERS
acl workers external ldap_group SQUID-WORKERS
acl uaonly external ldap_group SQUID-UAONLY
acl downloaders external ldap_group SQUID-DOWNLOADERS
acl allowallusers external ldap_group SQUID-ALLOWALL

# --------------------------------------
acl authusers proxy_auth REQUIRED
# --------------------------------------

##-- Allow all users --##
http_access allow authusers allowallusers

# Deny:
http_access allow worktime-block-domain weekend
http_access deny worktime-block-domain work_time
http_access deny block-domain
http_access deny block-path

#-- Rabota sites
deny_info ERR_ACCESS_DENIED_MY_POLICY rabota_sites
http_access allow rabota_sites rabota_users
http_access deny rabota_sites

# allow for UA-IX (чтобы пул uaix работал).
http_access allow workers uaix
http_access allow JVM uaix
http_access allow downloaders uaix
http_access allow allowallusers uaix

# ICQ
http_access allow authusers icqusers ICQ
http_access allow authusers icqusers icqnet CONNECT
http_access deny CONNECT ICQ
http_access deny ICQ

#-----------###
http_access allow authusers workers
http_access allow authusers downloaders
http_access allow authusers uaonly uaix work_time
http_access allow authusers uaonly !work_time

#### POOLs
delay_pools 5
delay_class 1 3
delay_class 2 3
delay_class 3 3
delay_class 4 3
delay_class 5 3

delay_parameters 1 ***
delay_parameters 2 ***
delay_parameters 3 ***
delay_parameters 4 ***
delay_parameters 5 ***

# POOL for cisco, microsoft, etc ...
delay_access 1 allow dstdomains_without_auth
delay_access 1 deny all

# UA-IX
delay_access 2 deny media
delay_access 2 allow uaix
delay_access 2 deny all

# WORKERS
delay_access 3 deny media
delay_access 3 allow workers
delay_access 3 allow JVM
delay_access 3 deny all

# Pool for downloaders
delay_access 4 deny media
delay_access 4 allow downloaders
delay_access 4 allow allowallusers
delay_access 4 deny all

# Pool for MEDIA FILES
delay_access 5 allow media
delay_access 5 deny all

http_access deny all
Скрипты на Perl приблизительно такие:

Код: Выделить всё

#!/usr/bin/perl

# Disable output buffering
$|=1;

#---mysql
use DBI;
$mysqlsrv="127.0.0.1";
$mysqlport="3306";
$login="login";
$password="password";
$basaname="squid_acl";
$dbh=DBI->connect("DBI:mysql:database=$basaname;host=$mysqlsrv;port=$mysqlport", $login, $password,{PrintError => 0, RaiseError => 0});

#MAIN
while (<STDIN>){
    $url=$_; chomp $url;
    @data=split (" ",$_);
    $url=$data[0];$table=$data[1];
    $query=("select `url` from `$table` where '$testurl' regexp `url` limit 1;");
    $sth=$dbh->prepare($query); $sth->execute;
    @row = $sth->fetchrow_array;
    if ($#row < 0) {print "ERR\n";} else { print "OK\n";};
};

$sth->finish;
$dbh->disconnect();
#END

Re: Статья squid+AD

Добавлено: 2007-11-08 11:58:33
gmn
На данный момент (squid uptime почти 7 суток (приходилось перезапускать из-за изменений в конфиге)):

Код: Выделить всё

SIZE   RES WCPU COMMAND
1615M  1517M 0.00% squid

Код: Выделить всё

load averages:  0.77,  0.94,  0.88
Mem: 1953M Active, 1107M Inact, 306M Wired, 140M Cache, 112M Buf, 5008K Free
Swap: 4096M Total, 124K Used, 4096M Free
Можно сквиду больше отдать памяти, но проблемы были ...
Сейчас такие параметры /boot/loader.conf

Код: Выделить всё

kern.maxdsiz="2G"
kern.maxssiz="512M"
kern.dfldsiz="1500M"
kern.maxusers="512"

Re: Статья squid+AD

Добавлено: 2007-11-08 13:21:25
gmn
gmn писал(а):
lissyara писал(а):зато с первго разу понимают - если пароль русский - инета нет.
быстро приучаются нормальный делать :)
У меня для NTLM используется fakeauth, поэтому на счет русских паролей не скажу точно.
Но только помню, что в одной из предпоследних версий сквида 2.6 был баг. Писал в bugzilla, в общем, исправляли.
Да, перепроверил.
Установил тестовому юзеру русский пароль.
Через IE (т.е. NTLM-аутентификация) в инет выходит.
QIP (с использованием NTLM-аутентификации на прокси) подключается.

Re: Статья squid+AD

Добавлено: 2007-11-10 13:20:00
bakake
gmn писал(а):auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -v3 -P \
-b "DC=DOMAIN,DC=COM" \
-f "(&(objectclass=user)(!(objectclass=computer))(sAMAccountName=%s))" \
-D "CN=ldapreaduser,OU=***,DC=DOMAIN,DC=COM" -w "password" -H ldap://ip_ldap_server:3268
Я правильно понимаю, что LDAP-поиск тыкается не совсем к AD?

Re: Статья squid+AD

Добавлено: 2007-11-10 14:00:35
gmn
bakake писал(а):
gmn писал(а):auth_param basic program /usr/local/libexec/squid/squid_ldap_auth -R -v3 -P \
-b "DC=DOMAIN,DC=COM" \
-f "(&(objectclass=user)(!(objectclass=computer))(sAMAccountName=%s))" \
-D "CN=ldapreaduser,OU=***,DC=DOMAIN,DC=COM" -w "password" -H ldap://ip_ldap_server:3268
Я правильно понимаю, что LDAP-поиск тыкается не совсем к AD?
Нет, неправильно.
AD - это LDAP + еще куча свякой всячины.
Так вот у AD есть, как бы, два каталога - LDAP и Global Catalog.
По сути, это одно и тоже. Только в GC записывать нельзя.
И, если у вас не один домен, а лес, то в GC можете взять инфу о других доменах.
В общем, Global Calalog - порт 3268.
А дальше учите матчасть по Microsoft Active Directory.

Re: Статья squid+AD

Добавлено: 2007-11-10 15:10:52
bakake
А без ldapreaduser разве нельзя обойтись? Не то чтобы сильно принципиально, но держать специального пользователя с открытым паролем как то не очень изящно.

Re: Статья squid+AD

Добавлено: 2007-11-10 15:39:33
gmn
bakake писал(а):А без ldapreaduser разве нельзя обойтись? Не то чтобы сильно принципиально, но держать специального пользователя с открытым паролем как то не очень изящно.
Можно :)
Один из вариантов - править реестр на контроллерах домена и разрешать анонимный доступ к каталогу.
Не думаю, что это лучшый вариант :)
AD не разрешает анонимный доступ к LDAP. Поэтому нужен пользователь, от которого и будет выполняться доступ к LDAP.
По умолчанию (в AD) любой авторизированный пользователь имеет право на чтение необходимых вам атрибутов.
ldapreaduser - это я так назвал аккаунт. Назовите по другому ...

Re: Статья squid+AD

Добавлено: 2007-11-15 10:01:41
freeman
А кто как проверку http трафика антивирусом(и) использует ? Очень хотелось бы узнать что сейчас самое стабильное :?

Re: Статья squid+AD

Добавлено: 2007-11-15 10:36:59
gmn
Пробовал и HAVP+clamav и DrWeb-ICAP - мощности сервера не хватает.
Так толком и не протестировал :(
После нового года выпишут новый сервер отдельно под антивирус - вот тогда потестирую ...
Разработчики DrWeb рекомендовали Squid3 с ICAP + новый DrWeb-icap 4.44

Re: Статья squid+AD

Добавлено: 2007-11-15 12:25:59
aspr05
Всем доброго времени суток.
Подскажите плиз....
Есть squid-2.6.STABLE13
samba-3.0.24-7
кусок squid.conf

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=domainnname\\group1
auth_param ntlm children 10
auth_param ntlm keep_alive on

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=domainname\\group2
auth_param basic children 10
auth_param basic realm Proxy-Server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off

Вопрос в следующем:
если комп в домене и пользователь в group1 то авторизация проходи на ура.
если компьютер не в домене, но он есть в group1 то он может авторизоваться на squid если набрать domainname\user и passwd
а если он только в group2 то авторизация не проходит. Подскажите в чём может быть дело, почти весь интернет перерыл ответа найти не могу.

Re: Статья squid+AD

Добавлено: 2007-11-15 12:42:16
gmn
aspr05 писал(а): auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=domainnname\\group1

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=domainname\\group2

Вопрос в следующем:
если комп в домене и пользователь в group1 то авторизация проходи на ура.
если компьютер не в домене, но он есть в group1 то он может авторизоваться на squid если набрать domainname\user и passwd
а если он только в group2 то авторизация не проходит. Подскажите в чём может быть дело, почти весь интернет перерыл ответа найти не могу.
Разница в "ntlm + group1" и "basic + group2".
"если набрать ..." - то это уже basic-аутентификация. И если юзер не входит в группу 2, то в инет его не пустит.
Юзеров из группы 1 пустит только (!) при NTLM-аутентификации, т.е. ПК в домене (и юзер залогинен в домен) и браузер IE или FF.
Но если юзер входит только в группу 1 и попытается выйти в Инет через Оперу - не получится.
Opera NTLM не умеет. Будет basic-аутентификая. А там уже группа 2 ...
Кажется, правильно вопрос понял? ...