Настройка корпоративного Proxy-сервера Squid v2.7
13.10.2010 - 14:01
Кроме галочек по дефолту выбираем:
После установки squid просит добавить его в rc.conf:
MAC-адреса узнаем с помощью команды arp:
Список доменов, сайтов к которым разрешен доступ на прямую:
Для "пользователей" вместо не информативного Access Denied, отредактировал:
Красиво не правда ли?
Смотрим поднялся ли?
Говорим браузеру "использовать proxy-сервер", указываем в данном случае 192.168.0.1 порт 3128.
Статистику снимаем с помощью анализатора логов Sarg.
Необходимо было дать пользователям интернет, разграничить по скоростям, кэширование трафика, фильтр контента. Для этих целей я использую Squid прокси-сервер.
И так, после обновления портов начинаем установку:
[root@router /]# cd /usr/ports/www/squid
[root@router /usr/ports/www/squid]# make config
[root@router /usr/ports/www/squid]# make config
[X] SQUID_DELAY_POOLS - включаем делей пулы (встроенный шейпер сквида)
[X] SQUID_ARP_ACL - раздаем интернет юзерам по MAC-адресам.
[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
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
[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 #Лымарь Виталий
....
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]
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$
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
.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>
<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>
Красиво не правда ли?
Создаем swap раздел для proxy-сервера:
#squid -z
2010/08/10 14:40:17| Creating Swap Directories
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]#
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]#
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 ~]#
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.
- Войдите на сайт для отправки комментариев
- Версия для печати
А как включить прозрачный режим ?
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
прикольно сделано =)))
Да, точно! Исправим.