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

squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-06-21 11:05:06
AnT_R
Не могу разобраться с ситуацией уже полгода, прошу совета.
Группа 20..25 человек, terminal server под виндой + AD, половина ходит со своими буками. Всё за FreeBSD шлюзом (DHCP, DNS, www, mail, squid, nat на PIII-850, 512RAM, SCSI hdds, avr. CPU load <1%). Канал «наружу» слабый, платный и не слишком надежный. Я админ поневоле (далеко от специальности и вечное «нет времени»).
Задача такая:
Контролируемый доступ в сеть на основе AD паролей с любых машин и браузеров. Открытый доступ внутри локалки, к внешней почте (mail.ru etc) + желательно иметь доступ к TS из внешней сети.
Но: 1. Есть корпоративные приложения, не умеющее прокси.
2. Есть почтовые ящики за пределами локалки.
Из-за всего этого пока слепил так: ipfw явно закрыл часть портов (отдельная тема), на шлюзе поднял squid c ACL + AD-авторизацию + lightsquid, все остальное пнул ч-з nat. TS просто через порт-форвард выпускать наружу побаиваюсь, более безопасного решения пока не придумал.
Проблема: не могу настроить squid - процент попаданий не более 0,1% (в среднем 0.0, игры с настройками не помогли), часто ч-з прокси страницы практически не грузятся (timeout), в то время как напрямую легко… Про работу squid'a в сети нарыл много и хорошего, и плохого. Похоже, что у нас (пока?) плохое перевешивает.
Вопрос: есть простые варианты решения задачи без squid'a? Или все-таки добивать squid?

Конфиг сквида

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

#debug_options           ALL,3
tcp_outgoing_address	xx.xx.xx.21
#udp_outgoing_address	xx.xx.xx.21
udp_incoming_address	xx.xx.xx.21

http_port 		192.168.0.1:3128
http_port		127.0.0.1:3128	transparent
access_log		/usr/local/squid/logs/access.log

#cache_peer		ххх.yyy.ru	parent 3128 3130 no-query
cache_peer		ххх.yyy.ru	parent	3128 3130 no-query proxy-only 
#no-delay

cache_mem		600 MB
#cache_swap_low		97
#cache_swap_high		99

# добавлено 27.05.2010 после еще одной статьи
cache_swap_low		70
cache_swap_high		90
memory_pools		on
memory_pools_limit	200 Mb
maximum_object_size	1024 KB
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		1024
ipcache_low		90
ipcache_high		95

fqdncache_size		1024000
cache_replacement_policy	heap LFUDA
memory_replacement_policy	heap GDSF

# Добавлено 29.09.2009 после чтения статьи по оптимизации кэша /нифига не помогло 27.05.2010
reload_into_ims		on
refresh_pattern \.bz2$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.exe$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.gif$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.gz$           43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.ico$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.jpg$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.mid$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.mp3$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.pdf$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.swf$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.tar$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.tgz$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.zip$          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://ad\.                        43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://ads\.                       43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://adv\.                       43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://click\.                     43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://count\.                     43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://counter\.                   43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://engine\.                    43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://img\.readme\.ru             43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern http://userpic\.livejournal\.com   43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.ru/bf-analyze                    43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern \.ru/bf-si                         43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern /advs/                             43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern /banners/                          43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern /cgi-bin/iframe/                   43200   100%    43200 override-lastmod override-expire ignore-reload ignore-no-cache
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       80%     14400


cache_dir		ufs /usr/local/squid/cache 16384 16 256
#cache_dir		diskd /usr/local/squid/cache 4096 16 256 Q1=72 Q2=64  - сбоит :(
cache_store_log		none
#cache_store_log		none - указывает активность менеджера хранилища

#cache_access_log	
#cache_log		/dev/null

#useragent_log		none
#log_fqdn		off
ftp_list_width		50

dns_nameservers		xx.xx.xx.33
dns_testnames		www.ru
visible_hostname	www.myname.ru
hosts_file		/etc/hosts

#httpd_accel	host	vitrual
#httpd_accel	port	80
#httpd_accel_with_proxy	on
#httpd_accel_uses_host_header	on

#authenticate_program	/usr/lib/squid/ncsa_auth /etc/squid/passwd

append_domain		.myname.ru

forwarded_for		off

hierarchy_stoplist	cgi-bin ?
acl			QUERY	urlpath_regex	cgi-bin \?
no_cache		deny	QUERY

#-------------------------------------------------------------------------
# авторизация
#
#
# Native WinXX authorization
#
auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm keep_alive on

#Basic WinXX authrosation (для программ, которые не умеют native)
#
auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 2

#Заголовок окна авторизации
#
auth_param basic realm Пожалуйста, наберите свой логин и пароль в домене
auth_param basic credentialsttl 1 hours

#-------------------------------------------------------------------------
# Внешняя alc для разбивки по группам
external_acl_type	nt_group ttl=120	%LOGIN /usr/local/libexec/squid/wbinfo_group
#external_acl_type	nt_group ttl=120	%LOGIN /usr/local/libexec/squid/wbinfo_group.pl
#external_acl_type	nt_group ttl=120	%LOGIN /usr/local/libexec/squid/wbinfo_group.sh

# Просто пользователи
acl inet_users	external 	nt_group inet_users

# Пользователи с полным доступом
acl inet_full		external	nt_group inet_full

# Пользователи, которым разрешен метод Connect
acl inet_connect	external 	nt_group inet_connect

# ACL авторизации на прокси 
acl MET 		proxy_auth	REQUIRED

acl Safe_ports		port 80 81		# http
acl Safe_ports		port 21			# ftp
acl Safe_ports		port 443		# https, snews
#acl Safe_ports		port 1025-65535		# unregistered ports
acl Safe_ports		port 3128		# Squid
acl Safe_ports		port 5190		# ICQ
acl SSL_ports		port 443 563

acl CONNECT		method CONNECT
acl purge		method PURGE

acl manager		proto cache_object

#acl	all		src 0.0.0.0/0.0.0.0
acl localhost		src 127.0.0.1/255.255.255.255
acl localnet		src 192.168.0.0/255.255.255.0

#До сайтов, куда можно всем
acl mydomain_site	dstdomain "/usr/local/etc/squid/db/allow_all.txt"

#До сайтов, в адресе которых запр. слова
acl bad_url	url_regex	"/usr/local/etc/squid/db/deny_url.txt"

#Запрещенные доменные имена
acl deny_domains	dstdomain "/usr/local/etc/squid/db/deny_domains.txt"

#Для клиент-банка напрямую
acl client_banks	dst	"/usr/local/etc/squid/db/client_banks.txt"

#Сети, куда ходить не надо
acl bad_networks	dst	"/usr/local/etc/squid/db/bad_networks.txt"

# Выход для неавторизуемых
acl not_authorized	src	"/usr/local/etc/squid/db/not_authorized.txt"

# Настройки доступа для разбора причин отлупа
# у тех, кто не может открыть какой-то сайт
#deny_info	ERR_BAD_URL		bad_url
#deny_info	ERR_BAD_NETWORKS	bad_networks
#deny_info	ERR_DENY_DOMAINS	deny_domains
#deny_info	ERR_SAFE_PORTS		Safe_ports
#deny_info	ERR_SSL_PORTS		SSL_ports

# Пропускаем sqstat
http_access		allow	manager localhost
#http_access		allow	manager localhost localnet
http_access		deny	manager

# Выпускаем на неавторизуемые сайты
http_access		allow	client_banks

# Выпускаем всех неавторизованных???
#http_access		allow	not_authrized

# Выпускаем на сайт универа и отрубаем всех неавторизованных
http_access		allow	MET	mydomain_site

# Разрешаем доступ группе inet_full
http_access		allow	inet_full	all

# Блокируем все запрещенные куски в url
http_access		deny	bad_url

# Блокируем запрещенные сети
http_access		deny	bad_networks

# Блокируем запрещенные домены
http_access		deny	deny_domains

# Запрет соединений типа CONNECT на открытые порты
http_access		deny	CONNECT !SSL_ports

# Блокируем все порты, кроме открытых
http_access		deny	!Safe_ports

# Разрешаем инет обычным пользователям
http_access		allow	inet_users

# И запрещаем все остальное
http_access 		deny	all

#http_access		allow	purge localhost
#http_access		deny	purge
#http_access		deny	CONNECT !SSL_ports
#http_access 		deny	!localnet

# acl allow-url		dstdom_regex -i		"/etc/squid/allow-urls"
# acl allow-words		url_regex -i		"/etc/squid/allow-words"
# http_access		allow			allow-url
# http_access		allow			allow-words
# acl deny-url		dstdom_regex -i		"/etc/squid/deny-urls"
# acl deny-words		url_regex -i		"/etc/squid/deny-words"
# http_access		deny			deny-url
# http_access		deny			deny-words


#-------------------------------------------------------------------------

acl direct-domains	dstdomain -i "/usr/local/etc/squid/direct-domains"
#acl directs		dst  "/usr/local/etc/squid/directs"

always_direct		allow	direct-domains
#always_direct		allow	directs
always_direct		deny	all
#never_direct		allow	!direct-domains
#never_direct		allow	!directs
#never_direct		deny	all

#-------------------------------------------------------------------------

#acl snmppublic snmp_community public
#snmp_port 3401
#snmp_access allow localnet all


error_directory /usr/local/etc/squid/errors/Russian-koi8-r
#error_directory c:/squid/share/errors/English
PS. Другого железа не будет :)

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-06-21 12:43:30
_Попов
чета много всего так...

Алгоритм:
1. упрощать конфиг да минимума (это значит строчек в конфиге должно быть мало-мало), чтобы ВСЕ заработало, чего тебе надо из локалки в инет
2. усложнять, если оно тебе надо, но только после того, как заработает все.

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-06-21 15:25:04
AnT_R
_Попов писал(а):чета много всего так...

чтобы ВСЕ заработало, чего тебе надо из локалки в инет
Так и шел. От дефолтных. И ведь вроде работает все. Только всегда скорость отрывания просто ч-з нат выше, чем ч-з проксю, вплоть до 100% тайм-аутов ч-з сквида при нормальном открывании ч-з нат. При любых вариантах конфига. И уже с полгода не вычисляется причина оного поведения, т.к. в логах чисто и загрузка минимальная. Я уж грешу на то, что сквид порождает много запросов наружу, а у нас в сети задержки, вплость до потери части пинга обычное явление :( Может отсюда все проблемы. Сеть мне не перевернуть, приходится приспосабливаться. Отсюда, собственно и вопрос рисовался - может можно подобную задачу вообще БЕЗ сквида решить? Т.е. можно то можно, вопрос как это сделать не городя сложные биллинговые схемы.

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-06-21 15:43:03
manefesto
netams

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-11-24 23:27:43
JQ
Автор, лучше убей себя

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-11-25 10:00:54
snorlov
AnT_R
Я бы в конфиге написал бы

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

http_port       192.168.0.1:3128 transparent
а вот упоминание о 127.0.0.1 убрал бы.
При отваливании по тайм-ауту проблема может быть не только в squid'е но и в разрешение имен dns

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-11-25 12:14:07
AnT_R
Отчитаюсь:
за полгода проблемы с таймаутами рассосались после того, как пережив пару атак изнутри на корпоративные сервера и даже не отследив их(?!!) ITшники забегали и что-то опять поменяли в инфраструктуре или топологии, не вникал. TS пробросил через SSH (спасибо putty!), создав нужным людям учетки на шлюзе. Медленно, но проверить почту/вытащить файл хватает. "Хитрые" приложения пока гуляют ч-з нат, явного закрытия http/ftp портов в IPFW пока хватает. Пытался разобраться с netams, подергался и успокоился - за полгода lightsquid показал себя вполне рабочим вариантом, пока устраивает. Единственный минус - если в момент, когда он лопатит логи сквида, кто-то пытается отправить почту, то возникает задержка и иногда в это время переполняется кол-во хелперов у самого сквида и юзеру вылезает окно basic-auth, причем вводить пароль бесполезно, все равно не принимает. Через пару-тройку секунд все оживает само собой, так что терпимо. Хотя и странно - логи и кэш сквида лежат на быстром и выделенном специально под сквид диске.
Не решеной осталась одна важная проблема - малый cache hit. Вот тут ничего придумать не удалось :(( В итоге вернул эту чась конфига практически в дефолтное состояние.

Re: squid+AD+stat или альтернатива на слабом канале?

Добавлено: 2010-11-25 18:37:43
princeps
А сквид зачем, я таки не совсем понял - доступ в инет ограничивать по доменным учёткам?