вторник, 29 июня 2010 г.

Squid


Ну а сегодня, в качестве главного блюда, у нас прокси сервер Squid (кальмар).
Ну что тут сказать о сквиде можно написать не просто статью а наверно даже целую книгу.
Это один из самых популярных http и ftp прокси серверов на данный момент, и в общем-то он не зря пользуется такой славой, ведь по возможностям скорости работы и надежности ему очень сложно найти замену.
Для начала нам необходимо понять что такое ACL, для тех же кто не понял с первого раза я объясню на пальцах что это такое в конце поста.
И так без долгих разговоров приведу пример простенького конфига:

# какой адресс и порт слушает
http_port 192.168.0.1:3128
icp_port 0
#видимое имя
visible_hostname proxy
# не кэшировать скрипты
acl QUERY urlpath_regex cgi-bin/?
no_cache deny QUERY
# объем оперативки который кушает
cache_mem 1024 MB
# путь до кэша
cache_dir ufs /var/spool/squid 20000 16 256
# логи кэша
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
logfile_rotate 0
# фтп
ftp_user anonymous@
ftp_list_width 32
ftp_passive on
ftp_sanitycheck on
#днс

# ACL просто группы и порты
acl server src 192.168.0.1/32
acl users src 192.168.0.2-192.168.0.200/32
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl SSL_ports port 443 563
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443 563
acl CONNECT method CONNECT

# разрешаем доступ для асиэлок
http_access allow server
http_access allow users
http_access deny !Safe_ports
http_access deny all

#Запрещаем ICP-доступ всем
icp_access deny all

# редиректор у нас режик
redirect_program /usr/local/rejik3/redirector /usr/local/rejik3/redirector.conf

Вы наверняка обратили внимание на последнюю строчку.
Параметр redirect_program указывает на внешнюю программу (редиректор), которая отвечает за легитимность запросов.
Что такое режик, как его установить и использовать можно прочитать здесь, я же скажу что это довольно быстрый и легкий в настройке редиректор.
Ну и как обещал немного о ACL. В контексте сквида ACL - это просто списки. В списках этих могут содержаться например ваши пользователи или запрещенные сайты или например ip адреса машин с которых имеется доступ к web. Синтаксис очень простой:
acl "название списка" "его тип" "сам список" Например:
acl my_local_user src 192.168.0.25/32 или
acl banned_site dstdomain vkontakte.ru
Сами по себе ACLи не разрешают и не запрещают, они просто группируют объекты по какому либо признаку. А вот запрещает или разрешает параметр http_access:
http_access allow my_local_user
http_access deny banned_site
http_access deny all
Соответственно работают ACL до первого соответствия, с верху в низ. Так например если вы выше по тексту запретили какому то пользователю доступ с сайту (например к google)
а потом разрешили этот сайт всем то доступ к нему будут иметь все, кроме этого пользователя.
Если мы хотим чтобы сквид работал в режиме прозрачного прокси (когда настраойка браузера не требуется а прокси работает так словно его и нет{на самом деле то он есть и логи ведутся :) }) то в строке http_port 192.168.0.1:3128 надо дописать параметр transparent вот так :
http_port 192.168.0.1:3128 transparent
ну и соответственно настроить iptables (как это делается смотри соответствующий пост).
Теперь немного о логах и о том что с ними делать - ответ прост: обрабатывать. Сделать это можно например с помощью утилиты SARG или Mysar или lightsquid.
Что касается запуска сквида, то первый запуск необходимо выполнять следующим образом:
squid -z (этой командой сквид создаст директории необходимые ему для хранения кэша).
Ну вот вроде и все, конфиг что я привел на самом деле очень просто, так что у вас не должно возникнуть особых трудностей.
P.S. Конфиг сквида сам по себе очень неплохо документирован и там есть очень многое, так что RTFM. :)