Настройка корпоративного Proxy-сервера Squid v2.7

13.10.2010 - 14:01

Необходимо было дать пользователям интернет, разграничить по скоростям, кэширование трафика, фильтр контента. Для этих целей я использую Squid прокси-сервер.
И так, после обновления портов начинаем установку:

[root@router /]# cd /usr/ports/www/squid
[root@router /usr/ports/www/squid]# make config
Кроме галочек по дефолту выбираем:
[X] SQUID_DELAY_POOLS - включаем делей пулы (встроенный шейпер сквида)
[X] SQUID_ARP_ACL - раздаем интернет юзерам по MAC-адресам.

[root@router /usr/ports/www/squid]# make install && make clean

После установки squid просит добавить его в rc.conf:

To enable Squid, set squid_enable=yes in either
/etc/rc.conf, /etc/rc.conf.local or /etc/rc.conf.d/squid
Please see /usr/local/etc/rc.d/squid for further details.

Добавляем:

echo 'squid_enable="YES"' >> /etc/rc.conf

Настраиваем конфиг сквида:

[root@router /]# cat /usr/local/etc/squid/squid.conf
# Интерфейс и порт на котором будет принимать запросы клиенты.
http_port 192.168.0.1:3128
http_port 127.0.0.1:3128

# Порт для ICP-запросов, если нет необходимости использовать иерархию proxy-серверов.
icp_port 0

#Приводит к человекочитаемому формату времени в логах сквида.
#emulate_httpd_log on

# Список значений через пробел при встрече которых в url не будет кэшироваться.
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?

# Список обьектов которые не будут кэшироваться.
no_cache deny QUERY

# Если кеш заполнен на 95%, то старые ебьекты будут удалены.
cache_swap_high 95

# Удаление старых кэшированных объектов будет остановлено при достижении 90%.
cache_swap_low 90

# Максимальный размер объекта который кэшируется.
maximum_object_size 16384 KB

# Минимальный размер объекта который кэшируется.
minimum_object_size 0 KB

# Максимальный размер объекта который хранится в ОЗУ.
maximum_object_size_in_memory 512 KB

# Размер кэша для IP.
ipcache_size 1024

# Максимальная заполненось кэша.
ipcache_high 95

# Минимальная заполненось кэша.
ipcache_low 90

# Объем ОЗУ для хранения кешируемых объектов.
cache_mem 64 MB

# Указываем где сохранять кэшируемые файлы. Определяем под кэш 100 мегабайт и создать 16 и 256 соответственно каталогов 1го и 2го уровня.
cache_dir ufs /usr/local/squid/cache 100 16 256

# Расположение файла лога обращения к кэшу.
cache_access_log /usr/local/squid/logs/access.log

# Расположение файла лога запусков процессов.
cache_log /usr/local/squid/logs/cache.log

# Место хранения логов записи объектов в дисквый кэш.
cache_store_log none

# Расположения файла с номером текущего процесса.
pid_filename /var/run/squid/squid.pid

# Аутентификаторы. Количество процессов авторизации запросов.
auth_param basic children 5

# Указывает текст, который будет выводиться с запросом авторизации.
auth_param basic realm Squid proxy-caching web server

# Указывает время хранения авторизации, по дефолту 2 часа.
auth_param basic credentialsttl 2 hours

# Указываем, что регистр введенных данных роли не играет.
auth_param basic casesensitive off

# Время жисни в минутах объекта в кеше.
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern .               0       20%     4320

# Использовать вместо DNS-серверов, которые определены в /etc/resolv.conf.
dns_nameservers 127.0.0.1

# Время жизни негативных DNS ответов.
negative_dns_ttl 5 minutes

### ПРАВИЛА ДОСТУПА - ACL ###
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 4443     #SSL HTTP
acl Safe_ports port 21          # ftp
acl Safe_ports port 70          # gopher
acl Safe_ports port 80          # http
acl Safe_ports port 210         # wais
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 Safe_ports port 443 4443    # https
#acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 563         # https, snews
acl Safe_ports port 5190        # ICQ
acl Safe_ports port 5222        # Jabber
#acl Safe_ports port 8000-8090   # http
acl ICQ port 5190               # ICQ

acl purge method PURGE
acl CONNECT method CONNECT

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

http_access deny !Safe_ports !ICQ

# Разрешаем пробрасывать соединения методом CONNECT.
http_access deny CONNECT !SSL_ports !ICQ

#Список доменов, сайтов к которым разрешен доступ на прямую.
acl direct_domain dstdomain "/usr/local/etc/squid/acl/freesites"
acl direct_ip dst 192.168.0.0/24
always_direct allow direct_domain
always_direct allow direct_ip
http_access allow direct_domain

# Досту в интернет без фильтра контента со скоростью 30kb/s.
acl good_allow arp "/usr/local/etc/squid/acl/speed/good_users.txt"
http_access allow good_allow

# Досту в интернет без ограничений 1Mbit/s.
acl full_allow arp "/usr/local/etc/squid/acl/speed/fullspeed.txt"
http_access allow full_allow

# Включаем фильтр контента для последующих групп, кроме !good_allow !full_allow.
acl porn url_regex "/usr/local/etc/squid/acl/porn.acl"
http_access deny porn !good_allow !full_allow

# Группа MAC-адресов, которая попадает под фильтр.
acl filter_allow arp "/usr/local/etc/squid/acl/speed/30kb.txt"
http_access allow filter_allow

# Запрещаем все, что не разрешено.
http_access deny all

# Разрешаем ответы на все запросы.
http_reply_access allow all

# Разрешаем всем доступ до ICP.
icp_access allow all

# Имя прокси-сервера, администратора кеша, фтп юзера.
visible_hostname proxy.localnet
err_html_text admin@localnet
cache_mgr admin@localnet
ftp_user anonymous@ftp.localnet

# Количество старых копий до создания нового лог-файла.
logfile_rotate 2

# Указываем каталог с шаблонами ошибок (выбираем нужный язык и кодировку).
error_directory /usr/local/etc/squid/errors/Ukrainian-1251

# Указываем где будет находится ядро.
coredump_dir /usr/local/squid/cache

# Путь к расположению иконок сквида.
icon_directory /usr/local/etc/squid/icons

# время на обслуживание клиента после получения сигналов SIGTERM или SIGHUP
# по умолчанию 30 сек, что очень долго.
shutdown_lifetime 5 seconds

# Говорим освобождать захваченную память.
memory_pools off

# Режем трафик по группам доступа
# Определяем 2 емкости для задержки трафика
delay_pools 2

# Пулы делятся на 3 класса:
# 1 класс: */* - определяет общую емкость для всех их этого класса.
# 2 класс: */* */* - определяет один общий поток и 255 отдельных для каждого ПК из сети класса С.
# 3 класс: */* */* */* - управляет общим потоком, потоком на всю подсеть и потоком для каждого хоста.

# 1-й пул 2-го класса
delay_class 1 2
# 2-й пул 2-го класса
delay_class 2 2

# Разрешаем группе filter_allow использовать 1-й пул.
delay_access 1 allow filter_allow
# Разрешаем группе good_allow использовать 1-й пул.
delay_access 1 allow good_allow
# Всем остальным запрещаем использовать 1-й пул.
delay_access 1 deny all
# Скорость задается в байтах, в данном случае говорим использовать для 1-го пула 2-го класса общую полосу 128Кбайт/128Кбайт
# на каждый хост выделять для загрузки файлов 30Кбайт, на серфинг использовать 128Кбайт.
# Также можно указать скорость "-1/-1" - это означает использовать полосу без всяких ограничений.
delay_parameters 1 131072/131072 30000/131072

# Так само по аналогии для 2-го пула:
delay_access 2 allow full_allow
delay_access 2 deny all
delay_parameters 2 131072/131072 131072/131072

Создадим файлы: good_users.txt, fullspeed.txt, port.acl, 30kb.txt.

[root@router /]# mkdir -p /usr/local/etc/squid/acl/speed/
[root@router /]# touch /usr/local/etc/squid/acl/speed/good_users.txt
[root@router /]# touch /usr/local/etc/squid/acl/speed/fullspeed.txt
[root@router /]# touch /usr/local/etc/squid/acl/speed/porn.acl
[root@router /]# touch /usr/local/etc/squid/acl/speed/30kb.txt
[root@router /]# touch /usr/local/etc/squid/acl/freesites

Текстовые файлы good_users.txt, fullspeed.txt, 30kb.txt, имеют такой синтаксис(MAC-ФИО):

....
00:1D:60:79:D3:63 #Лымарь Виталий
....

MAC-адреса узнаем с помощью команды arp:
[root@router /]# arp 192.168.0.32
shapoval.local (192.168.0.32) at 00:1d:60:90:f1:fd on vr0 [ethernet]

В файл porn.acl вносим запрещенные сайты, расширения файлов, и т.д:

letitbit
desposi
snaswallows
mamba
myfreepaysite
webcamz.vate.camz
playahtastethisbrazilianass
f2live4fun
vodcamz
hotxxxfeeds
worldwidecontent
\.mp3$
\.avi$
\.mpeg$
\.mpe$
\.mpg$
\.wav$
\.ogg$
\.vob$
\.mov$
\.[Aa][Vv][Ii]$
\.[Mm][Pp][Gg]$
\.[Mm][Pp][Ee][Gg]$
\.[Mm][Pp]3$
\.iso$

Список доменов, сайтов к которым разрешен доступ на прямую:
[root@router /]# cat /usr/local/etc/squid/acl/freesites
.local
.lo4
ya.ru

Для "пользователей" вместо не информативного Access Denied, отредактировал:
[root@router /]# cat /usr/local/etc/squid/errors/Ukrainian-1251/ERR_ACCESS_DENIED
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>info page</title>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
</head>
<body bgcolor="#000000" text="#c8c8c8" link="#c8c8c8">
<table align="center" border="0" width="640">
<tr><td align="center">
<h1>Содержимое данного сайта заблокировано для просмотра в сети.</h1>
<h2>Скорее всего этот сайт содержит <font color="red"> музыку</font>, <font color="red"> видео</font>, <font color="red">файлы MP3</font>, <font color="red">сайты развлекательного характера</font>, которые Вам не нужны для выполнения Ваших должностных обязанностей, но которые сильно загружают канал в интернет и мешают работе других сотрудников.
    Или же Вы были заблокированы в связи с просмотром страниц непроизводственного характера.</h2>
</table>
</body>
</html>

Красиво не правда ли? Laughing
22_0.png

Создаем swap раздел для proxy-сервера:

#squid -z
2010/08/10 14:40:17| Creating Swap Directories

Запускаем:

[root@router /usr/local/etc/rc.d]# ./squid start
Starting squid.
[root@router /usr/local/etc/rc.d]#

Смотрим поднялся ли?
[root@router /usr/local/etc/rc.d]# ps -A | grep squid
41407  ??  Is     0:00,00 /usr/local/sbin/squid -D
41409  ??  S      0:03,62 (squid) -D (squid)
[root@router /usr/local/etc/rc.d]#

[root@router ~]# sockstat | grep squid
squid    squid      15284 4  dgram  -> /var/run/log
squid    squid      15284 10 udp4   *:55014               *:*
squid    squid      15284 12 tcp4   192.168.0.1:3128     *:*
squid    squid      15284 13 tcp4   127.0.0.1:3128        *:*
squid    squid      15284 15 udp4   *:3401                *:*
squid    squid      15282 4  dgram  -> /var/run/log
[root@router ~]#

Говорим браузеру "использовать proxy-сервер", указываем в данном случае 192.168.0.1 порт 3128.
Статистику снимаем с помощью анализатора логов Sarg.

Ваша оценка: Нет Средняя: 4 (11 votes)

Комментарии:


А как включить прозрачный режим ?



by: ttys@jabbear.com

В файл porn.acl вносим запрещенные сайты, расширения файлов, и т.д:
не правильно указываете расширения файлов:
например avi заблочит сайт avia.ua
так будет правельнее =)
cat ./stop_files.txt
\.mp3$
\.avi$
\.mpeg$
\.mpe$
\.mpg$
\.wav$
\.ogg$

а вот [root@router /]# cat /usr/local/etc/squid/errors/Ukrainian-1251/ERR_ACCESS_DENIED
прикольно сделано =)))



Да, точно! Исправим.