Организация прокси на базе Squid
Способы применения прокси-серверов: обеспечение доступа с компьютеров локальной сети в Интернет, кэширование и сжатие данных, защита локальной сети от внешнего доступа. Администрирование и установка Squid Quickstart. Transparent HTTP caching/proxying.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 27.11.2013 |
Размер файла | 84,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
urllogin [-i] строка (регулярное выражение для login-части URL)
port порт ... (перечень портов)
в стандартной конфигурации определяется ACL Safe_port для интервала 1024-65535; это слишком слабое ограничение; лучше к безопасным портам отнести 32768-65535 (у меня все клиентские порты начинаются с 32768 и firewall эа этим следит), и отдельно всякие извращения перевода с русского на русский - 81, 82, 83, 88, 8000-8002, 8080-8083, 8091, 8100-8103, 8888
port порт1-порт2(интервал портов)
myport порт ... (перечень портов)
proto [HTTP | FTP | ...]
method [GET | POST | ... ] (в т.ч. собственный метод purge: acl PURGE method purge)
browser [-i] regexp (сопоставляется заголовок User-Agent)
referer_regex [-i] regexp (сопоставляется заголовок Referer)
ident username ... (строка REQUIRED сопоставляется любому непустому слову)
ident_regex [-i] regexp
src_as number ... (номера автономных систем - AS, делается запрос к whois.ra.net на поиск !gASномер)
dst_as number ... (не более 253 или поставить IP-адрес в as_whois; такой поток запросов RADB не выдерживает, так что надо сделать несколько раз squid restart, чтобы таблица адресов заполнилась)
proxy_auth username ... (можно использовать строку REQUIREDдля любого имени пользователя)
proxy_auth_regex [-i] regexp
snmp community string ...
maxconn число(больше чем указанное число соединений с одного и того же IP)
max_user_ip число(больше чем указанное число соединений одного пользователя с различных IP-адресов)
req_mime_type regexp (тип upload)
req_header имя-заголовка [-i] регулярное-выражение (сопоставляется указанный заголовок запроса)
rep_mime_type regexp (нельзя использовать в http_access)
rep_header имя-заголовка [-i] регулярное-выражение (сопоставляется указанный заголовок ответа)
external имя-типа параметры (использовать внешнюю программу, описанную в external_acl_type)
as_whois_server имя (whois сервер, используемый для получения номера AS; только при запуске или reconfigure; whois.ra.net aka whois.radb.net; лучше поставить IP адрес, иначе нельзя будет использовать более 250 AS)
права доступа
http_access allow|deny [!]aclname ... (кому разрешать доступ к прокси по HTTP; здесь и далее - логическое И)
http_reply_access allow|deny [!]aclname ... (какие ответы на запросы разрешить; http_reply_access allow all)icp_access allow|deny [!]aclname ... (кому разрешать доступ к прокси по ICP)
miss_access allow|deny [!]aclname ... (кому разрешить получать ответ MISS от нас)
cache_peer_access cache-host allow|deny [!]aclname ... (ограничить запросы к данному соседу - расширение для cache_peer_domain)
использование протокола ident
ident_lookup_access allow|deny [!]aclname
ident_lookup_access список-ACL (если запрос допускается ACL, то источник проверяется с помощью ident; по умолчанию "ident_lookup_access deny all" - по умолчанию ACL с именем all определяется так, что ему удовлетворяет любой запрос; чтоб запретить использовать ident совсем, можно компилировать с "--disable-ident")
параметры администрирования
cache_mgr email (почтовый адрес, на который будет послано письмо, если squid грохнется)
cache_effective_user nobody (если запустить squid от имени root, то поменять UID на указанный)
cache_effective_group nogroup
visible_hostname имя-хоста (это имя будет упоминаться в сообщениях об ошибках)
httpd_suppress_version_string off (подавлять выдачу номера версии Squid; появилась в 2.6)
unique_hostname уникальное-имя (если нескольким кешам дали одно и то же visible_hostname, то чтобы предотвратить циклы, надо определить каждому из них уникальное имя)
hostname_aliases имя ... (список синонимов для нашего имени хоста)
cachemgr_passwd password action action ... (задание пароля для действий по администрированию squid; чтоб запретить действие - поставьте пароль disable; чтоб разрешить действие без проверки пароля - поставьте пароль none, кроме действий config и shutdown; неполный список действий: 5min, 60min, asndb, authenticator, cbdata, client_list, comm_incoming, config, counters, delay, digest_stats, dns, events, filedescriptors, fqdncache, histograms, http_headers, info, io, ipcache, mem, menu, netdb, non_peers, objects, pconn, peer_select, redirector, refresh, server_list, shutdown, store_digest, storedir, utilization, via_headers, vm_objects; имя действия all - для всех действий)
параметры саморекламы, посылаемой в http://ircache.nlanr.net/Cache/Tracker
announce_period 0 day (0 означает - не посылать никогда)
announce_host tracker.ircache.net
announce_port 3131
announce_file имя-файла (дополнительно к стандартно информации - хост, порт - посылается этот файл)
параметры для работы в режиме ускорителя http-сервера
httpd_accel_host hostname (если нужна поддержка виртуальных хостов, в частности для transparent proxy, то вместо имени указать virtual)
httpd_accel_port port
httpd_accel_single_host off
httpd_accel_with_proxy on|off (по умолчанию кеширование для ускоряемого сервера выключено)
httpd_accel_uses_host_header on|off (для работы в прозрачном режиме требуется включить, иначе виртуальные сервера не будут правильно кешироваться, но т.к. squid не проверяет соответствие заголовка Head: и имени в URL, то это опасно. Я так понимаю, что можно подсовывать в кеш страницы с одного сервера под именем другого, затем когда нормальный пользователь запросит страницу с этого другого сервера, то он получит ее из кеша, куда она попала с первого сервера. Исправлено в 2.3)
преобразование заголовков и URL в запросах и ответах
forwarded_for on|off (если включено - по умолчанию - то squid будет вставлять IP-адрес или имя в заголовок перенаправляемых HTTP-запросов: "X-Forwarded-For: 192.1.2.3"; если выключено, то "X-Forwarded-For: unknown")
anonymize_headers allow|deny header_name ... (перечень заголовков, которые нуждаются в анонимизации; по умолчанию - ни один; можно использовать несколько строк, но все они должны иметь либо allow, либо deny; удален в 2.4)
header_access имя-заголовка allow | deny [!]acl (фильтрация заголовков запроса; введен в 2.4 вместо aninymize_headers; вместо имени заголовка запроса можно использовать ключевые слова All и Other (неизвестные заголовки); это нарушение протокола HTTP)
fake_user_agent none (если заголовок User-Agent фильтруется с помощь анонимизатора, то подставляется эта строка; удален в 2.4)
header_replace имя-заголовка строка (заменить заголовок на указанную строку; введен в 2.4 вместо fake_user_agent)
reload_into_ims on|off (при включении запросы типа no-cache или reload будут преобразовываться в If-Modified-Since; является нарушением стандартов; более гибкая настройка через refresh_pattern)
uri_whitespace strip (что делать с запросами, имеющими пробелы в URI)
strip - удалять пробелы
deny - сообщать Invalid Request
allow - передавать как есть
encode - кодировать в соответствии с RFC1738 и передавать дальше
chop - остаток после первого же пробела отбрасывать
broken_posts allow|deny acl ... (если запрос удовлетворяет acl и имеет тип PUT/POST, то squid посылает дополнительный CRLF после тела запроса, чтоб успокоить неправильно написанный сервер)
SNMP
snmp_port 3401 (порт, который слушает squid для SNMP запросов)
forward_snmpd_port 0 (если задан порт, то на него перенаправляются все SNMP-запросы; убрано в 2.3)
snmp_access allow|deny [!]aclname ... (кто будет допущен к SNMP порту, по умолчанию - никто)
snmp_incoming_address 0.0.0.0
snmp_outgoing_address 0.0.0.0
разное
mime_table /usr/local/squid/etc/mime.conf (явно не хватает .class, .pl, .map, .ico, .bmp, .js, .css, .mid)
pid_filename /usr/local/squid/logs/squid.pid (none, если не нужен)
max_open_disk_fds
offline_mode on|off (если включить, то squid будет брать объекты только из кеша и не будет пытaться обращаться к первоисточникам)
coredump_dir (по умолчанию в cache_dir)
redirector_bypass on | off (если включен и все редиректоры заняты, то не обрабатывать URI редиректором; если выключен и нет свободных редиректоров, то аварийное завершение - применяется, если редиректор используется для аутентификации)
chroot (делать chroot после разбора конфигурации; reconfigure работать не будет, если прислушиваемся к портам < 1024)
client_persistent_connections on (использовать постоянные соединения при общении с клиентами)
server_persistent_connections on (использовать постоянные соединения при общении с серверами)
persistent_connection_after_error off (не использовать постоянные соединения после получения ошибки)
balance_on_multiple_ip on (борьба с серверами, балансирующими траффик по нескольким IP и не умеющим сохранять сессию)
pipeline_prefetch on (если клиент работает в режиме pipeline, то запрашивать с сервера 2 объекта параллельно)
extension_methods (позволяет задать дополнительные нестандартизованные методы доступа HTTP - можно подсмотреть в cache.log)
ie_refresh off (борьба с неспособностью MS IE до 5.5 SP1 сделать полноценный refresh, снижает эффективность кеширования)
vary_ignore_expire off (позволяет squid игнорировать в некоторых случаях нулевое время хранения объекта - Expire: на текущее время)
параметры DELAY POOL, ограничивают интенсивность использования кеша для отдельных хостов и подсетей
delay_pools 0
delay_class номер-пула класс (д.б. ровно один пул каждого класса; классы: 1 - 3)
delay_access номер-пула allow|deny acl ...
delay_parameters pool aggregate network individual
delay_initial_bucket_level 50
интерфейс WCCP с маршрутизаторами Cisco (используется для прозрачного прокси и автоматического отключения при падении прокси; WCCPv1 в squid 2.3; WCCPv2 в squid 2.6)
wccp_router ip-адрес
wccp2_router ip-адрес
wccp_version 4 (для IOS 11.2 нужна версия 3)
wccp2_rebuild_wait
wccp2_forwarding_method
wccp2_return_method
wccp2_assignment_method
wccp2_service
wccp2_service_info
wccp2_weight
wccp_incoming_address IP-адрес
wccp_outgoing_address IP-адрес
wccp_address
wccp2_address
работа с БД digest
digest_generation on
digest_bits_per_entry
digest_rebuild_period
digest_rewrite_period
digest_swapout_chunk_size
digest_rebuild_chunk_procentage
Управление squid (Cache Manager)
Настройка прав доступа в squid.conf:
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl manager proto cache_object
acl managerhost src 1.2.3.4/255.255.255.255
http_access allow manager localhost
http_access allow manager managerhost
http_access deny manager
http_access allow all
cachemgr_passwd пароль команда
Управление squid с помощью программы client: /usr/local/squid/bin/client cache_object://localhost/команда
Управление squid с помощью cachemgr.cgi (лично я не пробовал и другим не советую):
cachemgr.cgi в /usr/local/squid/cgi-bin
конфигурация Apache
ScriptAlias /Squid/cgi-bin/ /usr/local/squid/cgi-bin/
ограничение доступа по адресу хоста
<Location /Squid/cgi-bin/cachemgr.cgi>
order deny,allow
deny from all
allow 1.2.3.4
</Location>
ограничение доступа по паролю
<Location /Squid/cgi-bin/cachemgr.cgi>
AuthUserFile /path/to/password/file
AuthGroupFile /dev/null
AuthName User/Password Required
AuthType Basic
require user cachemanager
</Location>
Сколько надо оперативной памяти
Требования к памяти:
72 байта на каждый объект
Disk buffers for reading and writing
Network I/O buffers
IP Cache contents
FQDN Cache contents
Netdb ICMP measurement database
Per-request state information, including full request and reply headers
Miscellaneous statistics collection
"Hot objects" which are kept entirely in memory
Причем большая часть используемой памяти не должна свопироваться (иначе работает безумно медленно). Например, при кеше в 7 ГБ (800 тысяч объектов) требуется 128 МБ оперативной памяти. При восстановлении оглавления кеша (после аварийной перезагрузки) требуется удвоенный объем.
Как уменьшить потребности:
попробовать GNU malloc или dlmalloc (./configure --enable-dlmalloc)
уменьшить cache_mem (пока не появятся сообщения в cache.log)
memory_pools off
уменьшить размер кеша (cache_swap) - единственный существенный способ
Алгоритмы замещения кеша (LRU, GDSF, LFUDA)
Squid поддерживает размер кеша между low и high, регулярно запуская процедуру удаления объектов (чем ближе мы к high, тем агрессивнее очистка). Вместо удаления можно использовать очистку файлов (truncate) пока хватает inode. Удаление производится асинхронно внешней программой unlinkd. Если объект тянется в данный момент, то он не удаляется. Если объект "отрицательно кеширован", то он удаляется. Если объект частный, то он удаляется. Алгоритмы замешения:
LRU. Если время с последнего использования объекта больше некой границы (threshold), то объект удаляется. Граница динамически вычисляется на основе заполненности кеша и low/high маркеров (начальное/максимальное значение задается в squid.conf). При стабилизации размера кеша граница представляет время полного заполнения (замещения) кеша в текущих условиях (типичное значение от 1 до 10 дней; если меньше 3 дней, то рекомендуется увеличить кеш).
GDSF. Стремится удержать маленькие полулярные объекты (растет hitrate, падает byterate).
LFUDA. hitrate падает, byterate - растет.
Сравнение алгоритмов проводится в
Enhancement and Validation of Squid's Cache Replacement Policy
Evaluating Content Management Techniques for Web Proxy Caches
Какие объекты кешируются
Кешируемость объектов в зависимости от кода возврата HTTP:
Caching Code
Successful 2xx
c 200 OK
201 Created
202 Accepted
c 203 Non-Authoriative Information *
E 204 No Content
205 Reset Content *
? 206 Partial Content *
Redirection 3xx
C 300 Multiple Choices
C 301 Moved Permanently
t 302 Moved Temporarily
- 303 See Other *
- 304 Not Modified
E 305 Use Proxy (proxy redirect) *
Client Error 4xx
E 400 Bad Request
- 401 Unauthorized
402 Payment Required *
E 403 Forbidden
E 404 Not Found
E 405 Method Not Allowed *
406 Not Acceptable *
- 407 Proxy Authentication Required *
408 Request Timeout *
409 Confict *
C 410 Gone *
411 Length Required *
412 Precondition Failed *
413 Request Entity To Large *
E 414 Request-URI Too Long *
415 Unsupported Media Type
Server Error 5xx
E 500 Internal Server Error
E 501 Not Implemented
E 502 Bad Gateway
E 503 Service Unavailable
E 504 Gateway Timeout *
505 HTTP Version Not Supported *
Notes:
* HTTP 1.1
c Cached unless a query response without expiry information
C Cached
E Negatively cached if no expiry headers
t Cached only if expiry information
- Not cached
Unless other said, the response code is not cached.
Кешируемость в зависимости от заголовков:
Responses with Cache-Control: Private are NOT cachable.
Responses with Cache-Control: No-Cache are NOT cachable.
Responses with Cache-Control: No-Store are NOT cachable.
Responses for requests with an Authorization header are cachable ONLY if the reponse includes Cache-Control: Public.
Responses with Vary headers are NOT cachable because Squid does not yet support Vary features.
Справедливый дележ канала (delay pool)
Пул - набор групп ведер определенного класса. Группа ведер - часть пула, привязанная к хосту, сети или одно на всех. Ведро - ограниченная емкость, в которую с ограниченной скоростью вливается внешний трафик, и из которой он раздается клиенту. Если ведро заполняется полностью, то запросы к серверу останавливаются, если пустеет, то увеличиваются (а клиент ждет).
Определены 3 класса пулов:
одно ведро на всех из этого класса
одно общее ведро и 255 отдельных для каждого хоста из C-сетки
255 ведер для каждой сетки (класс B) и отдельное для каждого хоста
Пример конфигурации:
delay_pools 3 # 3 delay pools
delay_class 1 1 # pool 1 is class 1
delay_class 2 1 # pool 2 is class 1
delay_class 3 3 # pool 3 is class 3
delay_access 1 allow staff
delay_access 1 deny all
delay_access 2 allow students
delay_access 2 deny all
delay_access 3 allow college
delay_access 3 deny all
delay_parameters 1 640000/640000
delay_parameters 2 64000/64000
delay_parameters 3 64000/64000 32000/64000 6400/32000
# total_rest/total_max net_rest/net_max ind_rest/ind_max
где
total - на всех
net - на подсеть
ind - на отдельный адрес
rest - скорость заполнения (байт/сек)
max - объем ведра (байт)
Ограничение для модемных клиентов, чтобы squid не подкачивал файл пока клиент еще не считал предыдущую порцию.
acl clients src адреса
delay_pools 1
delay_class 1 2
delay_access 1 allow clients
delay_access 1 deny all
delay_parameters 1 -1/-1 8000/4000
Прижать любителей MP3:
acl multimedia urlpath_regex -i \.mp3$ \.mpeg$ \.avi$ \.mov$
delay_pools 1
delay_class 1 1
delay_access 1 allow multimedia
delay_access 1 deny all
delay_parameters 1 16000/64000
quick abort д.б. установлен маленьким чтобы объект не качался на полной скорости после отпадения клиента (нет клиента для запроса - нет ограничений).
Squid как transparent proxy (только http)
В процессе участвуют маршрутизатор, Linux и Squid:
http-пакеты, бегущие мимо, должны отлавливаться маршрутизатором и переадресовываться на proxy-сервер. Как понять, что это http-пакет? Будем считать, что все пакеты, направленные на tcp/80, являются запросами на HTTP. Возникал вопрос: а может кешировать и другие порты? После обработки статистики (большой объем - 422MB, в ситуации с добровольным использованием proxy) выяснилось, что всего обращений было 3120260, из них HTTP - 92%. Из них на нестандартные порты - 2.3% (3128 - 0.05%, 8000 - 0.09%, 8001 - 0.13%, 8080 - 1.06%, 8081 - 0.15%, 8100 - 0.11%, 8101 - 0.46%). Я не вижу смысла бороться за 1%, разве что найду готовое решение ;)
Proxy-сервер уже стоит на пути этих пакетов (например, squid установлен на маршрутизаторе или firewall).
Cisco отлавливает такие пакеты и с помощью route-map перенаправляет их на proxy-сервер.
ОС proxy-сервера должна принимать эти пакеты, как родные, и перенаправлять к squid
linux 2.2.
конфигурация ядра:
CONFIG_EXPERIMENTAL=y # включен и так
CONFIG_NET=y # само собой
CONFIG_FIREWALL=y # чтобы иметь возможность тонко управлять маршрутизацией (несовместим с FAST_SWITCHING)
# CONFIG_IP_ALIAS is not set # у меня включено и вроде работает (при нехватке ОП зависает драйвер eth0, если ALIAS выключить, то прикладная программа)
CONFIG_INET=y # включен и так
# CONFIG_IP_MULTICAST is not set # а почему нельзя?
CONFIG_IP_FIREWALL=y # чтобы иметь возможность тонко управлять IP-маршрутизацией
CONFIG_IP_MASQUERADE=y # а необходимо ли это для transparent proxy?
CONFIG_IP_TRANSPARENT_PROXY=y
CONFIG_IP_ROUTER=y # необязательно, но может ускорить обработку пакетов
при загрузке включать ip_forward, ip_always_defrag (вставить в загрузочные скрипты: /etc/rc.d/init.d/network)
echo 1 > /proc/sys/net/ipv4/ip_forward # ядро д.б. сконфигурировано поддержкой /proc и sysctl)
echo 1 > /proc/sys/net/ipv4/ip_always_defrag # в ядре 2.2.12 указывается во время конфигурации
ipchains (ipfwadm в ядре 2.2 работать не будет)
ipchains -A input -p TCP -d 127.0.0.1/32 www -j ACCEPT
ipchains -A input -p TCP -d адрес-хоста/32 www -j ACCEPT
ipchains -A input -p TCP -d 0/0 www -j REDIRECT 3128
дополнительные правила для firewall и др.
squid д.б. скомпилирован так, чтобы он принимал эти пакеты, как родные.
linux 2.2 и squid 2.2. Происходит само собой.
squid д.б. сконфигурирован так, чтобы обрабатывать эти пакеты соответствующим образом.
http_port 3128 # redirect д.б. на этот порт
httpd_accel_host virtual # имитирует акселератор http-сервера, но не совсе нормально
httpd_accel_port 80 # а если перенаправляли не только 80 порт?
httpd_accel_with_proxy on # иначе при работе в режиме акселератора отключается кеширование
httpd_accel_uses_host_header on # иначе виртуальные домены будут неправильно кешироваться (см. замечание про безопасность)
Проблема. дырка в firewall: запрос приходит на прокси-сервер, который от своего имени (уже изнутри) лезет куда не надо.
Ссылки:
FAQ
The Compleat (sic) Idiot's Guide to Transparent Proxy with Linux and Squid
Формат журналов
Формат access.log (запись делается, когда клиент закрывает socket; для наших 300 тысяч запросов в день получается 60 MB в день!):
timestamp (unix time in ms)
elapsed (ms), если клиент "ушел, не попрощавшись", то здесь будет время потраченное на обнаружение данного факта, а не время реального обслуживания (иногда более получаса на маленький файл)
client IP address
type/HTTP reply code, где type:
TCP_HIT (верная копия объекта нашлась в кеше)
TCP_MEM_HIT
TCP_NEGATIVE_HIT
TCP_MISS (запрашиваемый объект не был в кеше)
TCP_EXPIRED (объект был в кеше, но старый)
TCP_CLIENT_REFRESH (клиент запросил reload - no-cache pragma)
TCP_REFRESH_HIT (объект в кеше был старым, был сделан IMS-запрос к источнику и тот вернул "304 Not Modified")
TCP_REFRESH_MISS (объект в кеше был старым, был сделан IMS-запрос к источнику и тот вернул обновленное содержание)
TCP_IMS_HIT (клиент выдал IMS-запрос, объект оказался в кеше и свежим)
TCP_IMS_MISS (клиент выдал IMS-запрос для просроченного объекта)
TCP_REF_FAIL_HIT (объект в кеше староват, но запросить новую копию не удалось)
TCP_SWAPFAIL (объект д.б. в кеше, но не смогли извлечь)
TCP_DENIED
UDP_...
ERR_CLIENT_ABORT
ERR_NO_CLIENTS
ERR_READ_ERROR
ERR_CONNECT_FAIL
ERR_...
size (bytes to client)
method (GET, POST, ...)
URL
ident ("-", если недоступен)
hierarhy data/Hostname
DEAD_NEIGHTBOR
DEAD_PARENT
LOCAL_IP_DIRECT
FIRST_PARENT_MISS
FIRST_UP_PARENT
PARENT_HIT (UDP-запрос к parent вернулся с подтверждением)
SINGLE_PARENT
PARENT_UDP_HIT_OBJECT (объект оказался у parent и поместился в UDP-ответе)
DIRECT (объект был запрошен с оригинального сервера)
...
тип содержимого (MIME тип/подтип)
Формат store.log:
time (unix format with ms)
action
RELEASE (удален из кеша)
SWAPOUT (сохранен на диск)
SWAPIN (был на диске, загружен в память)
HTTP reply code
HTTP Date: reply header
HTTP Last-Modified: reply header
HTTP Expires: reply header
HTTP Content-Type: reply header
HTTP Content-Length: reply header
реально полученное число байт (если не совпадает с предыдущим числом, объект не хранится)
HTTP метод (GET, POST, ...)
ключ доступа (обычно URL, частные объекты еще и последовательный номер и метод)
Еще можно собирать useragent.log, все HTTP-заголовки и отладочную информацию. Я собираю только access.log и этого очень много.
Время в журналах записывается в Unix-формате (число милисекунд с 1 января 1970 года), что неудобно. Преобразовать в человеческий формат можно, например, с помощью gawk: awk '{print strftime("%Y%m%d%H%M%S",$1), $2, $3, $4, $5, $6, $7, $8, $9, $10, $11}' (printlog.sh) или perl: s/^\d+\.\d+/localtime $&/e;
Squid не умеет работать с файлами, превышающими 2 ГБ, так что журналы надо регулярно чистить.
Обработка статистики
В комплекте поставки идут access-extract.pl, (увеличено MaxEntries до ...) получающая на стандартный ввод журнал access.log выдающая на стандартный выво промежуточный результат, и access-summary.pl (убрал выдачу ICP, которой у меня нет, за счет чего увеличил ширину колонки с именами хостов; в xsort изменил сортировку с COUNT на BYTES), делающая из него красивый отчет. Внутри используется squid-logs.pl. Его надо расширить новыми суффиксами имен файлов (bmp - Image; rm, mid, mp3 - Audio; pl, cgi, shtml, php, php3, phtml, asp, dll - Dynamic; rpm, cab, avc - Bundle; css - HTML; koi - Text; js - Software). За день получается 60МБ в access.log, поэтому у меня не хватает терпения дождаться результатов работы других процедур из комплекта.
Частота обращений к объектам извлекается из access.log с помощью (url_freq.sh)
awk '{print $7}' | sort | awk -f /usr/local/bin/count.awk | sort -nr +1
или без учета anchor и query-частей URL (url_freq_noq.sh)
awk '{print $7}' | awk -F'?' '{print $1}' | awk -F';' '{print $1}' | awk -F'#' '{print $1}' | sort | awk -f /usr/local/bin/count.awk | sort -rn +1
LightSquid - анализатор статистики использования squid и генератор отчётов. LightSquid 1.7.1 - набор скриптов на perl для анализа журналов, не требует СУБД, очень быстр. Состоит из скрипта lightparser.pl, преобразующего журналы squid в собственный набор данных и набора cgi-скриптов для генерации отчётов (безопасность скриптов неизвестна, обновление каждые 10 минут). Набор отчётов полон и очень удобен: отчёты по дням, месяцам и годам для всей организации, групп и отдельных пользователей с указанием трафика, доли трафика, использования кеша, популярных сайтах; пометки о превышении лимита, больших файлах и подозрительной доле POST/PUT; статистика по самым популярным сайтам и кто и когда их использовал; графики загрузки по дням для пользователей и всей организации; детальные графики по часам для каждого пользователя. Требуется perl, а для графических отчётов gd и perl-GD (взял из FC6).
Скрипт lightparser.pl быстр (20 тысяч строк на Xeon 1.6 GHz), самостоятельно разжимает архивы .gz и .bz2, данные для каждого дня помещаются в отдельный подкаталог в каталоге с отчётами, в котором данные для каждого пользователя помещаются в отдельный текстовый файл. Записи с кодом 4xx пропускаются. Некоторые URL приводятся к общей форме (mail.ru, spylog.com и др.). В качестве параметров можно указывать имя файла с журналом относительно каталога с журналами и ключевые слова "today", "yesterday" и дату в формате YYYYMMDD. Каталог report имеет относительно небольшой объём (у меня получилось 60 МБ на месяц), т.к. отчёты создаются по запросу.
Установка: создать каталог внутри подходящего сайта
развернуть архив в него, добавить в lightparser.pl свёртку vkontakte.ru, odnoklassniki.ru, youtube.com, ifolder.ru, rutube.ru, auto.ru, ganjawars.ru, maps.yandex.ru, loadup.ru, webfile.ru
отредактировать lightsquid.cfg
$cfgpath: путь к остальным файлам настройки (каталог-развёртывания)
$tplpath: путь к шаблонам страниц (каталог-развёртывания/tpl)
$langpath: путь к языковым файлам (каталог-развёртывания/lang)
$reportpath: путь к каталогу отчётов (каталог-развёртывания/report)
$logpath: путь к каталогу с журналами squid
$ip2namepath: путь к каталогу к подпрограммам преобразования ip в имена пользователей
$squidlogtype: тип журнала (для стандартного формата squid - 0)
$skipurl: регулярное выражение для отсечения некоторых URL из журнала
$ip2name: способ получения имени пользователя из журнала
simple - если имя пользователя в журнале отсутствует, то использовать IP адрес
squidauth - если в журнале присутствует имя пользователя, то преобразовать его (URLDecode), иначе использовать IP адрес
list - всегда извлекать имя пользователя по IP адресу из файла (я сделал модификацию, запронить users.txt)
squidlist2 - извлекать имя пользователя по IP адресу из файла (сетевые маски)
demo - если имя пользователя в журнале отсутствует, то DNS или IP
ip - всегда использовать IP адрес
dns - определять DNS имя по IP адресу
dhcp - извлекать имя пользователя из /etc/dhcpd.conf
$timereport: собирать статистику о временах доступа к сайтам; удваивает размер и время обработки (рекомендую убрать, пока начальник не заметил)
$lang: ru
$DecOutType: fine
$decdelimiter: " "
$showgroupid: 0
$showoversizelink: генерировать отчёт о пользователях, превысивших лимит
$showputpost: собирать статистику по POST
$putpostwarninglevel: подозрительно большой размер POST, в процентах
$userealname: преобразовывать идентификаторы пользователей в имена (файл realname.cfg)
$bigfilelimit: размер подозрительно больших файлов, которые попадут в отдельный отчёт
$perusertrafficlimit: пользователи скачавшие больше попадут в отдельный отчёт
$topsiteslimit: количество сайтов в отчёте наиболее популярных сайтов
$usertimelimit: количество сайтов в отчёте времени, потраченного пользователями
$graphreport: строить графики
$graphmaxuser: масштаб по вертикали месячных графиков отдельных пользователей
$graphmaxall: масштаб по вертикали месячных графиков
заполнить файл соответствия между именами и именами групп - group.cfg; поля разделяются табуляциями: имя пользователя, номер группы, имя группы
заполнить файл realname.cfg; поля разделяются табуляциями: имя пользователя, реальное имя пользователя
skipuser.cfg
поменять права для всех файлов на владельца процесса apache, но убрать права на запись
начальное заполнение каталога с отчётами
настроить apache на запуск cgi
<Directory "имя-каталога-разворачивания">
AddHandler cgi-script .cgi
AllowOverride All
Order deny,allow
Deny from all
Allow from откуда-можно-смотреть
</Directory>
опробовать доступ к сайту
добавить в crontab пользователя с достаточными правами ежедневный запуск:
lightparser.pl yesterday access.log.1.gz
lightparser.pl yesterday
sarg (Squid Analysis Report Generator)
SARG (ранее sqmgrlog) - Squid Analysis Report Generator. Отчёты создаются в формате html (по умолчанию - в /var/www/html), для графиков используется библиотека gd. Установка пакета sarg-2.2-1.el4.rf.i386.rpm на CentOS 4.3 и sarg-2.2.3.1-1.el5.rf.i386.rpm на CentOS 5.0 (x86-64 не работает). Требуется пакет gd, отчёты складываются в /var/www/sarg, настройка доступа для apache в /etc/httpd/conf.d/sarg.conf). Конфигурационный файл /etc/sarg/sarg.conf (символ '#' - начало комментария, каждый параметр на отдельной строке):
language Russian_UTF-8 # language Russian_koi8
access_log имя-файла (журнал access.log)
graphs yes
graph_days_bytes_bar_color blue|green|yellow|orange|brown|red
прочие настройки оформления графики (шрифт, цвет, размер, текст)
#password none
temporary_dir /tmp
output_dir /var/www/sarg/ONE-SHOT
output_email email-адрес (отчёт посылается по e-mail вместо создания графиков)
resolve_ip yes (преобразовывать IP адреса в имена)
user_ip yes (использовать в отчёте IP адреса вместо идентификаторов пользователей)
topuser_sort_field {USER | CONNECT | BYTES | TIME} {reverse | normal} (тип сортировки отчёта TopUser)
user_sort_field {USER | CONNECT | BYTES | TIME} {reverse | normal} (тип сортировки отчёта User)
exclude_users {имя-файла | none | indexonly} (файл содержит имена пользователей, которых не надо включать в отчёт)
exclude_hosts {имя-файла | none | indexonly} (файл содержит адреса хостов и сетей, которые не надо включать в отчёт: например, 192.168.10.0)
useragent_log none (отчёт по UserAgent)
date_format {e | u } (e - dd/mm/yy, u - mm/dd/yy)
per_user_limit имя-файла число-МБ (записывать в файл идентификаторы пользователей, превысивших указанный лимит)
lastlog число-сохраняемых-отчётов (0 - без ограничений)
remove_temp_files yes
index { yes | no | only } (создавать index.html)
index_tree { date | file }
overwrite_report no (перезаписывать отчёт, если отчёт за указанный день уже существует)
records_without_userid {ignore | ip | everybody } (что делать, если в строке журнала нет идентификатора пользователя; ignore - пропускать строку, ip - записывать ip, everybody - вместо userid записывать строку "everybody" )
use_comma {no | yes} (использовать запятую вместо десятичной точки)
mail_utility mail (какую программу использовать для посылки отчёта по почте)
topsites_num 100 (сколько сайтов включить в отчёт о самых популярных сайтах)
topsites_sort_order {CONNECT | BYTES} {D | A} (тип сортировки отчёта о самых популярных сайтах)
index_sort_order {D | A} (тип сортировки индекса)
exclude_codes имя-файла (/etc/sarg/exclude_codes, исключить записи с указанными кодами)
report_type перечень-отчётов-через-пробел
topusers (для самых "прожорливых" пользователей выводится имя пользователя (IP адрес), имена сайтов, число байт и т.д.)
topsites (для самых популярных сайтов выводится имя сайта, число соединений и загруженных байт)
sites_users (для каждого сайта перечисляется список заходивших на него пользователей)
users_sites (кто и куда ходил)
date_time (потребление трафика почасовое и посуточное)
denied (denied.log, куда пользователей не пустили: время, userid, IP-адрес, URL)
auth_failures (ошибки аутентификации)
site_user_time_date (sites, dates, times and bytes report)
downloads (download.log: для каждого загруженного файла выводится время, userid, IP-адрес, URL; см. download_suffix)
usertab имя-файла (none; файл содержит соответствие между userid/IP и реальным именем)
long_url no (вставлять в отчёт полный URL (не советую) или только имя сайта)
date_time_by { bytes | elap } (включать в почасовой отчёт байты или потраченное время)
charset Koi8-r (а для Russian_UFT-8?)
user_invalid_char "&/" (символы, недопустимые в userid)
include_users "список:пользователей:через:двоеточие" (включать в отчёт только указанных пользователей)
exclude_string "список:строк:через:двоеточие" (не включать в отчёт строки журнала, содержащие указанные строки)
show_successful_message {yes | no}
show_read_statistics yes (помогает скоротать время в ожидании завершения отчёта)
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
topuser_num 0 (0 - без ограничений; сколько пользователей включить в отчёт о самых популярных сайтах)
site_user_time_date_type { table | list } (отчёт site_user_time_date в виде таблицы или списка)
datafile имя-файла (сохранить отчёт в виде файла для дальнейшей обработки)
datafile_delimiter ";"
datafile_fields user;date;time;url;connect;bytes;in_cache;out_cache;elapsed
datafile_url {ip | name}
weekdays 0-6 (какие дни недели помещать в отчёт)
hours 0-23 (какие часы помещать в отчёт)
dansguardian* и squidguard*
show_sarg_info yes (выводить сылку на сайт автора в каждом отчёте)
show_sarg_logo yes
parsed_output_log none (имя каталога для сохранения полуобработанных данных)
parsed_output_log_compress /bin/gzip
displayed_values { bytes | abbreviation}
authfail_report_limit строк (10)
denied_report_limit строк (10)
siteusers_report_limit строк (0)
squidguard_report_limit строк (10)
dansguardian_report_limit строк (10)
user_report_limit строк (10)
www_document_root, block_it - для общения со squidGuard и ACL
external_css_file /var/www/sarg/sarg.css
download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,mdb,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"
ulimit максимальное-число-открытых-файлов ("none" для отключения ulimit)
ntlm_user_format { username | domainname+username }
Ключи запуска sarg:
-a имя-или-IP-адрес (ограничить отчёт указанным клиентом)
-b имя-файла (отчёт по UserAgent)
-c имя-файла (список исключений)
-d дд/мм/гггг-дд/мм/гггг (ограничить интервалом дат)
-e email-адрес (кому послать отчёт)
-e stdout (выдать отчёт на стандартный вывод)
-f имя-конфигурационного-файла
-g формат-даты-в-отчёте (e - dd/mm/yy, u - mm/dd/yy)
-i (формировать отчёт по пользователям и IP адресам)
-l имя-журнала-squid (можно указывать несколько раз, но в порядке возрастания даты; понимает сжатые файлы, но разжимает их в файл и забывает удалить)
-n (преобразовывать IP адреса в имена)
-o имя-каталога (куда записывать отчёты)
-p (использовать в отчёте IP адреса вместо идентификаторов пользователей)
-s имя-сайта (ограничить отчёт указанным сайтом)
-t ЧЧ:ММ:СС (ограничить отчёт по времени суток)
-u имя-пользователя (ограничить отчёт указанным пользователем)
-w имя-католога-для-временных-файлов
-x (отладочная печать на stdout; на неё действует language и charset)
-z (?)
Практика - программа глючная и медленная, точнее очень глючная (sites_users содержит какую-то ерунду; забывает удалять и закрывать файлы - требуется ulimit 60000; не все графики создаются; в результате пришлось разбить на 3 части, считающиеся в разные дни: полный список пользователей без подробностей, первые 10 пользователей с подробностями, первые 100 сайтов) и очень медленная (полный месячный отчёт - 180 GB трафика - обрабатывается в течение 2 часов). Версию 2.2.3 так и не удалось заставить работать. В результате отказался в пользу LightSquid. Сбор суммарной информации по использованию трафика пользователями за последний месяц:
time nice -19 sarg -d $(date --date "1 month ago" +%d/%m/%Y)-$(date --date "1 day ago" +%d/%m/%Y) \-x -z -l /squid/logs/access.log.5.gz ...
где /etc/sarg/sarg.conf содержит
graphs no
resolve_ip no
user_ip yes
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
index yes
overwrite_report yes
records_without_userid ip
report_type topusers
usertab /etc/sarg/usertab
privacy no
exclude_string имя-своего-домена
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
topuser_num 0
displayed_values bytes
user_report_limit 0
ulimit 60000
Сбор информацию куда ходил конкретный пользователь (10 самых "прожорливых" пользователей) за последний месяц (15 минут CPU):
time nice -19 sarg -f /etc/sarg/sarg.top10user.conf \
-d $(date --date "1 month ago" +%d/%m/%Y)-$(date --date "1 day ago" +%d/%m/%Y) \
[-a IP-адрес] -x -z -l /squid/logs/access.log.5.gz ...
где /etc/sarg/sarg.top10user.conf содержит
graphs no
user_ip yes
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
records_without_userid ip
report_type topusers users_sites
usertab /etc/sarg/usertab
privacy no
exclude_string имя-своего-домена
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE
topuser_num 10
displayed_values bytes
user_report_limit 10
ulimit 60000
Ссылки:
SARG
пакеты sarg для RedHat (dag)
redirector, как средство оптимизации
redirector - внешняя программа (небуфферизованный в/в), в цикле читает с stdin URL и пишет на stdout преобразованный URL (или пустую строку, если нет преобразований). Преобразование происходит после проверки ACL, но до проверки на присутствие в кеше. В 2.6 заменён на url_rewrite_program. Формат входной строки (поля, разделенные пробелами):
URL
ip-address/fqdn (если fqdn нет, то "-")
ident ("-", если нет)
method (GET, POST, ...)
urlgroup (в 2.6)
В качестве примера использования редиректора для уменьшения трафика в поставке приводится редиректор, производящий нормализацию URL (приведение к стандартному виду), что увеличивает вероятность попадания в кеш. А также редиректор преобразующий запросы на загрузку всяких там IE, Netscape и пр. с различных зеркал в запросы к локальному www-серверу (автор клянется, что это дает 15%). См. также про борьбу с баннерами.
Примеры redirectors:
SquidGuard
Squirm
Jesred (усовершенствованный Squirm)
Борьба с баннерами
Только не будем спорить о морали :) Но и в transparent режиме этого делать не надо. Поставьте себе локальный прокси и радуйтесь. Кстати, теми же методами можно бороться со счетчиками и порно.
Превращение банеров-картинок в рваные прямоугольники:
Насобирать "вредителей" (в виде регулярных выражений)
Заводим файлы в /usr/local/squid/etc:
banners_path_regex - по одному регулярному выражению на строку
banners_regex - по одному регулярному выражению на строку
banners_exclusion (это строки, трактуемые в предыдущих файлах как баннеры, но их лучше не трогать - JavaScript всякие)
В squid.conf
acl banners_path_regex urlpath_regex "/usr/local/squid/etc/banners_path_regex"
acl banners_regex url_regex "/usr/local/squid/etc/banners_regex"
acl banners_exclusion url_regex "/usr/local/squid/etc/banners_exclusion"
http_access deny banners_path_regex !banners_exclusion
http_access deny banners_regex !banners_exclusion
Замена рекламных банеров на пустое место. Если рваные прямоугольники оскорбляют эстетические чувства. Предполагается, что в исходных страницах заданы width и height, иначе страница поплывет (можно заменять банеры на картинки соответствующего размера, но это большой труд).
Насобирать "вредителей" (в виде регулярных выражений)
На своем http-сервере завести "заменитель" рекламных картинок void.gif
Настраиваем redirector в squid.conf (если он уже используется, то добавить к старому; м.б. еще настроить redirector_access):
redirect_program /usr/local/squid/bin/banners.pl
banners.pl (perl выбран для простоты демонстрации):
#!/usr/bin/perl (или где perl живет)
$|=1;
while (<>) {
s@регулярное-выражение@http://www.nospam.org/nospam.gif@;
print;}
К сожалению, использование "http_access deny" для блокировки JavaScript программ не получается (броузер не показывает страницу совсем). Поэтому приходится заменять реальный скрипт через redirect (см. выше) на что-нибудь безобидное (и каждый случай обрабатывать отдельно :(. Например, если исходный скрипт открывал окно с рекламой (<script src=...>), то вместо него подсовываем
<html><head>
<script language="JavaScript"><!-- window.close(); //--></script>
</head><body></body></html>
вместо tx3 (если он встроен страницу с помощью SSI, то не поможет, да и зачем тогда его резать?):
document.write(" ");
Ссылки:
Борьба с баннерами с помощью Squid'а
Фильтры
Копия классической статьи Ковалева (к сожалению, оригинал недоступен)
DansGuardian (фильтрация по содержимому, пакеты, для коммерческого использования платный)
РЕЖИК
SquidGuard
squidGuard и другие
squidGuard
squidGuard позволяет фильтровать и переадресовывать запросы по именам доменов, URL и регулярным выражениям. Позволяет группировать пользователей по IP адресам с заданием различных правил для различных групп с указанием времени суток. Возможно задание списка "хороших" сайтов. Домены и URL могут храниться в текстовых файлах или в формате Berkeley DB. Не фильтрует содержимое запросов и встроенные скрипты. GPL. Можно использовать бесплатно в любых целях, кроме продажи. К сожалению не изменялся с 2001 года (хотя есть заплатки от последователей и последователей).
Устанавливаю из готового пакета (/usr/bin/squidGuard, /etc/squid/squidguard.conf, /etc/logrotate.d/squidguard, /var/log/squidguard/, /usr/share/doc/squidguard-1.2.0/), пакета с чёрным списком (/etc/squid/squidguard-blacklists.conf; /etc/logrotate.d/squidguard-blacklists; /etc/squid/local/bad/; /etc/squid/local/good/; /var/lib/squidguard/: ads/, adult/, aggressive/, audio-video/, drugs/, forums/, gambling/, hacking/, local, mail/, /proxy/, violence/, warez/). Из исходных текстов устанавливается обычным путём (./configure; make; make install), требуется Berkeley DB 2.x. После установки необходимо настроить /etc/squid/squidguard-blacklists.conf и просмотреть входящие в комплект чёрные списки. После установки необходимо настроить права доступа к /var/log/squidguard, а после первого создания БД (ключ -C) настроить права доступа к /var/lib/squidguard и /etc/squid/local/. Настроить squid.conf:
redirector_bypass on
redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard-blacklists.conf
acl squidGuard ...
redirector_access allow squidGuard
Опции squidGuard:
-d (вывод ошибок на stderr)
-c имя-файла-настроек
-t yyyy-mm-ddTHH:MM:SS (?)
-C имя-файла | all (преобразовать текстовый файл в .bd, не забыть указать "-c имя-файла-настроек")
-u (слить изменения из файлов .diff в .bd)
Файл настройки описывает поименованные группы интервалов времени (используется при описании группы клиентов), группы пользователей (по IP адресам), группы URL (ссылки на текстовые файлы и БД), группы правил переадресации и группы ACL. Комментарии начинаются с '#'; имеется большой список зарезервированных слов (в частности: anonymous, user, userlist); нельзя ссылаться на описания групп вперёд; описания групп начинаются с тип-группы имя-группы {и завершаются '}'. В начале файла указываются имена используемых файлов:
logdir имя-каталога (в этом каталоге будут лежать файлы squidGuard.error и squidGuard.log; имя-каталога также используется как базовое имя для имён файлов, описываемых в директиве log)
dbhome имя-каталога (имя-каталога используется как база для имён файлов, со списками доменов, выражений и URL
Описание интервала времени (имя типа: time) состоит из перечня спецификаций (каждое на отдельной строке, при перекрытии интервалы объединяются), следующих видов (вместо года, месяца или дня можно указать '*'):
weekly sunday [...] [HH:MM-HH:MM]
date YYYY-MM-DD [...] [HH:MM-HH:MM ...]
date YYYY-MM-DD-YYYY-MM-DD [HH:MM-HH:MM ...]
Описание группы клиентов (имя типа: source) состоит из перечня адресов клиентов в следующих форматах (файл содержит на каждой строке IP адрес без ключевого слова "ip"; использование доменов требует log_fqdn в squid.conf; имена пользователей определяются по протоколу ident (доменные имена с обратной косой чертой не поддерживаются); спецификации одного типа объединяются, разных типов - пересекаются; группы могут пересекаться - приоритет имеет первая по тексту; имя журнала берётся относительно logdir):
ip адрес-хоста ...
ip адрес-сети/длина-маски ...
ip адрес-сети/маска ...
ip адрес-адрес ...
iplist имя-файла
domain имя-хоста ...
user имя-пользователя ...
userlist имя-файла
logfile имя-файла
Описание группы клиентов может иметь условие по времени:
source имя-группы-клиентов [within|outside имя-интервала-времени] {
...
} else {
...
}
Описание группы URL (имя типа: destination) состоит из перечня URL в следующих форматах (спецификации любых типов объединяются; группы могут пересекаться - приоритет имеет первая в директиве pass; в списках необходимо использовать только строчные буквы; включение имени домена включает все хосты во всех поддоменах этого домена; при включении URL в список из него необходимо удалить "http://www.", ":8080" и завершающее имя или "/"; в строке списка URL можно в качестве второго поля указать новый URL для перенаправления (это работает быстрее, чем rewrite); использование регулярных выражений сильно замедляет работу; имя журнала берётся относительно logdir):
domainlist имя-файла
urllist имя-файла
expressionlist имя-файла
redirect [302:]URL
logfile имя-файла
Описание группы URL может иметь условие по времени:
destination имя-группы [within|outside имя-интервала-времени] {
...
} else {
...
}
Описание группы правил переадресации (имя типа: rewrite) состоит из перечня правил замены URL в следующих форматах
s@исходное-регулярное-выражение@результат@[irR]
i - нечувствительность к регистру
r - переадресация будет видима клиенту (через код HTTP 302, Moved Temporarily)
R - переадресация будет видима клиенту (через код HTTP 301, Moved Permanently)
logfile имя-файла
Описание группы правил переадресации может иметь условие по времени:
rewrite имя-группы [within|outside имя-интервала-времени] {
...
} else {
...
}
Описание группы ACL (ровно одна непоименованная группа) содержит для каждой группы пользователей правила поведения фильтра в формате
имя-группы-клиентов [within|outside имя-интервала-времени] {
pass [!]имя-группы-URL ...
[rewrite имя-группы-переадресации]
[redirect [301:|302:]новый-адрес]
} else {
...
}
Имеется специальная группа пользователей default, в которую входят пользователи, не вошедшие ни в одну из остальных групп или вошедшие в группу, не имеющую ACL; здесь же задаются правило переадресации для групп клиентов, не имеющих собственных правил переадресации.
Имеется следующие встроенные группы URL
any - соответствует любому URL (эквивалент ".*")
all - синоним any
none - эквивалент !any
in-addr - "^[^:/]+://[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}($|[:/])"
Директива redirect (если URL блокируется фильтром, то какой-нибудь redirect должен быть обязательно определён) позволяет производить подстановку переменных (в поставке имеется шаблон squidGuard.cgi для создания красивых страниц с объяснением):
%a - IP адрес клиента
%n - имя хоста клиента
%i - имя пользователя согласно ident
%s - имя группы клиентов
%t - имя группы URL
%u - URL
%p - REQUEST_URI
Первый же сайт, на который я зашёл (rambler.ru), оказался в списках ads и adult.
Ссылки:
An ultrafast and free filter, redirector and access controller
squidGuard Patches
SquidGuard - ДЛЯ ВСЕХ
Приемы конфигурации
Простейшие случаи иерархии. Основной squid с консервативными настройками и вспомогательный с агрессивными настройками (антибаннер ;).
Консервативный:
ICP выключен
никаких соседей
maximum_object_size побольше
большой объем кеша на диске
стандартные (почти) настройки refresh_pattern
transparent proxy
Агрессивный:
ICP выключен
cache_peer основной parent 3128 3130 no-query default # если не нашел объект в своем кеше, то обращаться к parent, а не к источнику
prefer_direct off
hierarchy_stoplist - пустой
maximum_object_size побольше
очень небольшой объем кеша на диске (пробовал поставить нулевой размер и cache_peer ... proxy-only, но возникают проблемы при обработке ошибок)
собственно агрессивная настройка:
redirect
refresh
acl, http_access, deny_info
Закрыть доступ к какой-то информации для клиентов
badobjects - это произвольное имя ACL; ERR_ACCESS_DENIED - имя файла в /usr/lib/squid/errors/English или в подобном месте, вместо этого файла можно поставить для каждой ситуации свой файл; воздействие http_access зависит от места, в которое его поставить; если squid получает от parent TCP_DENIED, то он лезет напрямую:
acl badobjects url_regex регулярное-выражение
http_access deny badobjects
deny_info ERR_ACCESS_DENIED badobjects
Шаблон для борьбы с RealPlayer
http://[^/]+/SmpDsBhgRl
Как удалить объект из кеша
В squid.conf:
acl PURGE method purge
acl localhost src 127.0.0.1
http_access allow purge localhost
http_access deny purge
Теперь для каждого удаляемого объекта: client -m PURGE URI
Использование дополнительного канала для доступа в Интернет
Имеем маршрутизатор (Cisco) с двумя каналами доступа в Интернет через двух различных провайдеров. Клиентские компьютеры расположены в адресном пространстве одного из них, а хочется нагрузить оба канала на прием. Создаем файл as.list, содержащий список AS ,к которым мы хотим обращаться через второй канал. Конфигурируем squid:
acl all src 0.0.0.0/0.0.0.0
acl second dst_as "as.list"
cache_peer второй-squid parent 3129 0 no-query default (описываем вспомогательный squid как старший для нас)
cache_peer_access второй-squid allow second (обращаться к нему только, если сервер находится в AS из списка)
hierarchy_stoplist какой-нибудь-бред deny all (чтобы cgi-bin и QUERY тоже шли по этому маршруту)
never_direct allow second (не обращаться напрямую к серверам из AS списка)
never_direct deny all
Конфигурируем вспомогательный squid-сервер (можно даже на том же хосте - специально выбран нестандартный порт; только прямого доступа к нему давать не надо):
никаких соседей/icp/htcp
tcp_outgoing_address из адресного пространства второго провайдера
никакого кеширования
SNMP
Для сбора статистики с помощью встроенного агента SNMP Squid должен быть собран с ключом --enable-snmp. По умолчанию, squid слушает SNMP запросы на порту 3401 (вместо стандартного 161).
Для обеспечения прав доступа надо записать в squid.conf (не забывайте про сетевой экран):
acl snmppublic snmp_community имя-сообщества
# snmp_port 3401
snmp_access allow snmppublic localhost
MIB файл называется /usr/local/squid/share/mib.txt: надо убрать фигурные скобки со всем содержимым из описания модуля, положить его в /usr/share/snmp/mibs. Извлечение полного дерева объектов:
snmpwalk -p 3401 -m SQUID-MIB имя-хоста имя-сообщества squid
При описании использована форма записи SMIv2, хотя поддерживается только SNMPv1. Единственная переменная, определенная как read-write: cacheLoggingFacility (нечаянно?). trap отсутствуют. Все объекты лежат в поддереве iso.org.dod.internet.private.enterprises.nlanr.squid (1.3.6.1.4.1.3495.1):
...Подобные документы
Настройка списка контроля доступа для компьютерной сети, выходящей в интернет через прокси-сервер Squid. Использование и типы прокси-серверов, описание их архитектуры. Списки контроля доступа, идентификация, настройка конфигурации и запуск серверов.
курсовая работа [1,3 M], добавлен 26.08.2010Основные характеристики и особенности использования прокси-сервера в локальной сети. Способы выхода в Интернет из локальных сетей. Методы аутентификации прокси-сервером пользователя клиента, авторизация клиента для доступа к определенному контенту.
курсовая работа [887,9 K], добавлен 21.04.2019- Планирование локальной вычислительной сети предприятия в сфере транспортировки и установки оснащения
Определение логической и физической структуры предприятия. Реализация локальной вычислительной сети, согласно, построенной схемы и модели. Моделирование сети в Cisco Packet Tracer. Обеспечение доступа к Интернету. Установка и настройка серверов.
курсовая работа [3,8 M], добавлен 22.05.2019 История развития вычислительных сетей. Понятия рабочих групп и доменов. Подключение к Интернет через прокси-сервер локальной сети. Возможности администрирования операционных систем Windows. Организация локальной вычислительной сети в компьютерном классе.
курсовая работа [1,3 M], добавлен 23.05.2013Прокси-сервер UserGate как оптимальное решение, позволяющее администратору организовать работу пользователей локальной сети в Интернет. Структурно-функциональная схема организации. Определение задач автоматизации. Программное и информационное обеспечение.
курсовая работа [2,2 M], добавлен 03.07.2012Модификация системы управления пользователями прокси-сервера SQUID. Выбор средств разработки программного обеспечения. Структура базы данных MySQL. Построение web-интерфейса. Авторизация в системе управления пользователями, страница администрирования.
курсовая работа [456,2 K], добавлен 23.07.2011Соединение компьютеров в сеть. Разработка локальной вычислительной сети. Организация информационного обмена данными между рабочими станциями, организация доступа пользователей к ресурсам ЛВС. Имитационная и математическая модели модернизированной сети.
дипломная работа [2,8 M], добавлен 27.11.2012Обоснование модернизации локальной вычислительной сети (ЛВС) предприятия. Оборудование и программное обеспечение ЛВС. Выбор топологии сети, кабеля и коммутатора. Внедрение и настройка Wi-Fi - точки доступа. Обеспечение надежности и безопасности сети.
дипломная работа [2,4 M], добавлен 21.12.2016Разработка проводной локальной сети и удаленного доступа к данной сети с использованием беспроводной сети (Wi-Fi), их соединение между собой. Расчет времени двойного оборота сигнала сети (PDV). Настройка рабочей станции, удаленного доступа, сервера.
курсовая работа [2,0 M], добавлен 10.11.2010Способы связи разрозненных компьютеров в сеть. Основные принципы организации локальной вычислительной сети (ЛВС). Разработка и проектирование локальной вычислительной сети на предприятии. Описание выбранной топологии, технологии, стандарта и оборудования.
дипломная работа [2,3 M], добавлен 19.06.2013Создание локальной вычислительной сети, ее топология, кабельная система, технология, аппаратное и программное обеспечение, минимальные требования к серверу. Физическое построение локальной сети и организация выхода в интернет, расчет кабельной системы.
курсовая работа [749,1 K], добавлен 05.05.2010Назначение информационной системы. Требования к организации локальной сети, к системе бесперебойного питания сервера, к защите информации от несанкционированного доступа, к безопасности локальной сети, к web-сайту. Выбор серверной операционной системы.
дипломная работа [1,4 M], добавлен 22.12.2010Основные требования к созданию локальной сети и настройке оборудования для доступа обучающихся к сети Интернет. Принципы администрирования структурированной кабельной системы, его виды (одноточечное и многоточечное). Выбор сетевого оборудования.
дипломная работа [2,1 M], добавлен 11.07.2015Анализ административного программного обеспечения локальной сети. Структура сетевых операционных систем. Планирование и сетевая архитектура локальной сети. Использование сетевых ресурсов на примере предприятия, предоставляющего услуги Интернет-провайдера.
контрольная работа [112,5 K], добавлен 15.12.2010Token ring как технология локальной вычислительной сети (LAN) кольца с "маркерным доступом" - протокол локальной сети на канальном уровне (DLL) модели OSI. Логическая организация станций Token ring в кольцевую топологию с данными. Описание метода доступа.
лекция [168,8 K], добавлен 15.04.2014Классификация локальной вычислительной сети. Типы топологий локальной вычислительной сети. Модель взаимодействия систем OSI. Сетевые устройства и средства коммуникаций. Виды сетевых кабелей. Конфигурация компьютеров-серверов, техники рабочих станций.
курсовая работа [1,3 M], добавлен 05.01.2013Задачи, решаемые малым предприятием с использованием Интернет-ресурсов. Способы и схемы подключения к сети Интернет. Организация доступа к информации и требования к технологии управления сетью. Расчет суммарных затрат на разработку программного продукта.
дипломная работа [2,0 M], добавлен 17.10.2013Общий анализ структуры локальной вычислительной сети военного назначения. Необходимость повышения защиты информации путем использования дополнительных средств защиты. Создание виртуальных защищенных сетей в рамках локальной компьютерной сети объекта.
дипломная работа [1,2 M], добавлен 20.10.2011Сетевые операционные системы, их характеристика и виды. Функции программного обеспечения локальной компьютерной сети. Структура и функции прокси-сервера и межсетевого экрана. Базы данных в локальных сетях, электронная почта, системы удаленного доступа.
курсовая работа [43,9 K], добавлен 21.07.2012Проект локальной вычислительной сети, объединяющей два аптечных магазина и склад. Выбор топологии сети и методов доступа. Технико-экономическое обоснование проекта. Выбор сетевой операционной системы и разработка спецификаций. Смета на монтаж сети.
курсовая работа [501,4 K], добавлен 08.06.2011