понедельник, 14 сентября 2009 г.

Настройка системы учета трафика на основе netams-3.4.2c

Начальник захотел узанть статистику по пользователям сети, типа - кто чего, сколько и в какое время. Встал вопрос об установке и настройке системы учета трафика (биллинга). Ну вот собственно как я это делал.
Все команды задавал от прав пользователя root
1. Скачал netams-3.4.2c с официального сайта http://netams.com/files/netams-3.4.2c.tar.gz
Для установки потребуются:
- MySQL или (postgreSQL) - сервер БД для хранения статистики
- Apache - Web-сервер, чтобы пользователи и начальник могли смотреть статистику не вдаваясь в подробности.
Как настраивать эту связку я уже описывал в статье
2. Устанавил недостающие пакеты набрав команду:
'apt-get install libc6-dev libmysqlclient15-dev libapache2-mod-perl2 php5 php5-mysql binutils cpp gcc g++ make libssl-dev ibnet-telnet-perl libdbd-mysql-perl libdbi-perl libdate-calc-perl libgd-graph-perl'
3. Устанавил библиотеку libpcap
'apt-get install libpcap0.8-dev'
4. По умолчанию библиотека libipq.a не устанавливается. Поэтому пришлось поставить:
'apt-get install iptables-dev'
5. Поставил пакет который включает в себя файл lhash.h
'apt-get install libcurl3-openssl-dev'
Если какого-то пакета в стандартной поставке Debian не найдется, то придется воспользоваться репозиторием из Интернета http://www.debian.org/distrib/packages#search_packages. Только вот текущая стабильная версия уже Lenny, а если нужна платформа Etch, то берем пакеты OldStable.
Для сборки пакета со всеми его возможностями необходимо поставить ВСЕ вышеуказанные пакеты!
6. Расппаковал архив, в каталог /usr/src/netams-3.4.3c
'tar -zxvf netams-3.4.2c.tar.gz /usr/src'
7. Перешел в каталог usr/src/netams-3.4.2c
'cd /usr/src/netams-3.4.2c'
8. Сконфигурировал пакет
'./configure.sh'
Напишет что-то типа:
##########################################################
## Configuring NeTAMS for build targets... ##
Linux operating system...
Will have LIBIPQ support
Optional features: Use_cli_enable BW_limit Fast_FW_checks Layer7_filter Hash_database
Will have MYSQL support
[ /usr/lib /usr/include/mysql ]
Will have BILLING service
Will have DEBUG flag set
Will have RADIUS support
## Configuration file was built. ##
##########################################################
Обратил внимание на строчку Will have MYSQL support [ /usr/lib /usr/include/mysql]. Всё бы ничего, да вот при таком раскладе конфигурации скомпилированный модуль netams не увидел базу MySQL.
Я долго не мог понять в чем же дело и в конце концов просто сменил в файле Rules.Make
LIB+ = -lmysqlclient –L/usr/lib на LIB+ = -lmysqlclient –L/usr/lib/mysql
И так скомпилировал…
Замечу, что ежели смена конфигурации была уже после того, как однажды был скомпилирован модуль командой make, то после внесенных исправлений в файле Rules.Make необходимо очистить собранный ранее модуль модуль командой:
'make distclean && make'
После чего собственно и компилирую модуль
'make && make install'
9. Переименовал пример конфига собственно в конфиг:
'cp /etc/netams.conf.sample /etc/netams.conf'
Замечание: на многих сайтах, где описывают установку Netams файл конфигурации обзывают netams.cfg.example и netams.cfg. Так вот в версии 3.4.2с эти файлы называются netams.conf.sample и netams.conf соответственно (см. файл Rules.Make, опция CONFIG_FILE_NAME).
10. В FAQ официального сайта написано "Специально создавать базу данных не нужно (MySQL)." Но! Только в том случае если у пользователя root нет пароля. Тогда Netams все сделает сам. В моем же случае, устанавливая mysql, я закрыли пользователя root паролем, поэтому необходимо создать базу самостоятельно. Все это я делаю из консоли:
'mysql -u root -p '
mysql>connect netams;
mysql>grant select,insert,delete,update,create on netams.* to netams;
mysql>grant select,insert,delete,update,create on netams.* to netams@localhost;
mysql>set password for 'netams'@'localhost'=password('****');
mysql>set password for 'netams'@'%'=password('****');
mysql>flush privileges;
mysql>\q
11. Правлю netams.conf под свои нужды:
#NeTAMS version 3.4.1 (template config)
debug none
language ru
user name admin real-name Admin password 123 email admin@note.by permit all
#services configuration
service server 0
login local
listen 20001
max-conn 6
service processor 0
lookup-delay 60
flow-lifetime 300
policy oid 06521A name allip target proto ip
policy oid 06521B name www target proto tcp port 80 81 21 22 443
policy oid 06521C name mail target proto tcp port 25 110
policy oid 06521D name isq target proto tcp port 5190
policy oid 06521E name local-traffic target file /etc/local.txt
policy oid 06521F name perring target file /etc/perring.txt
restrict all pass local pass
unit group oid 09521A name HomeNet acct-policy %local-traffic %perring www mail isq allip
unit user oid 05E69A name devilja password 102 ip 192.168.1.2 description "Violentiy Dmitry app.206" parent HomeNet acct-policy %local-traffic %perring www mail isq allip
unit user oid 05E69B name tiran password 103 ip 192.168.1.3 description "Bykov Ruslan app.411a" parent HomeNet acct-policy %local-traffic %perring www mail isq allip
unit user oid 05E69C name demon password 104 ip 192.168.1.4 description "Rendov Dmitry app.212" parent HomeNet acct-policy %local-traffic %perring www mail isq allip
unit net oid 0E4B33 name LAN ip 192.168.1.0/24 acct-policy %local-traffic %perring www mail isq allip
storage 1 all
service storage 1
type mysql
user netams
password ********
host localhost
dbname netams
service data-source 1
type libpcap
source eth0
rule 11 "ip"
service quota 0
policy ip
notify soft {owner}
notify hard {owner} admin
notify return {owner}
storage 1
service alerter 0
report oid 06100 name rep1 type traffic period day detail simple
smtp-server localhost
service html 0
path /var/www/netams/stat
run 10min
htaccess yes
client-pages all
url http://192.168.1.1/netams/
language ru
service scheduler
oid 08FFFF time 10min action "html"
#end
В конфигурации я отметил важные места. Все остальное можно почерпнуть с официального сайта - http://netams.com/doc/doc_services.html
Для быстрой проверки работоспособности запустил netams
'netams –l'
Замечание: Ключ – l создает и дописывает сообщения о работе в лог-файл (по умолчанию это /var/log/netams.log)Проверяю список процессов
'ps aux | grep netams'
Вижу netams, знач все нормально.
12. Замечание: стартовый скрипт, который собирается и устанавливается в init.d с названием netams.init.d у меня напрочь отказался управлять Netams-ом. Поэтому я взял за основу файл стартового скрипта для Linux из /usr/src/netams/addon/netams-linux-stratup.sh:
'cp /usr/src/netams/addon/netams-linux-stratup.sh /etc/init.d/netams.sh'
И дописал его до удобоваримого вида:
#! /bin/sh
### BEGIN INIT INFO
# Provides: netams.sh
# Required-Start:
# Required-Stop:
# Default-Start: 3
# Default-Stop:
# Short-Description: Run /etc/init.d/netams.sh if it exist
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
daemondir=/usr/local/sbin
path_to_etc=/etc
case "$1" in
start)
sleep 3;
/bin/mkdir -p /var/run/netams
if [ -x $daemondir/netams ]; then
if [ -f $path_to_etc/netams.conf ]; then
$daemondir/netams -lf $path_to_etc/netams.conf >/dev/null
echo ""
echo "NeTAMS 3.4.2 started..."
fi
fi
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
killall netams
rmdir /var/run/netams
echo ""
echo "NeTAMS 3.4.2 stoped..."
;;
*)
echo "Usage: $0 start | stop"
;;
esac
Я не настраивал пока админку и NaWt. Но если кому то интересно – читайте форум http://netams.com/doc/doc_services.html

понедельник, 1 июня 2009 г.

Установка LAMP (Linux Apache+MySQL+PHP)

Все команды выполнялись от прав root'a.

Решил настроить LAMP под Debian'ом.

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:
* Linux — операционная система GNU/Linux;
* Apache – веб-сервер;
* MySQL — СУБД;
* PHP — язык программирования, используемый для создания веб-приложений.
Акроним LAMP может использоваться для обозначения:

1.Инфраструктуры веб-сервера
2.Парадигмы программирования
3.Пакета программ
Хотя изначально эти программные продукты не разрабатывались специально для работы друг с другом, такая связка стала весьма популярной, в первую очередь из-за своей низкой стоимости (все её составляющие являются открытыми и могут быть бесплатно загружены из Интернета). Набор LAMP входит в состав большинства дистрибутивов GNU/Linux и предоставляется многими хостинговыми компаниями. (Взято с http:/ /ru.wikipedia.org).

1. Устанавливаю apache и php - 'apt-get install apache2 php5 libapache2-mod-php5 php5-gd' если кто пожелает использовать php4, ставит командой - 'apt-get install apache2 php4 libapache2-mod-php4 php4-gd'.

Конфигурационные файлы Apache находятся по пути '/etc/apache2/apache2.conf', а папка веб-сайта по умолчанию - '/var/www'.

2. Проверяю корректность установленного php, для чего создаю файл test.php в папке /var/www - 'touch /var/www/test.php'. Затем радактирую созданный файл — 'nano /var/www/test.php' до следующего вида:

Просматриваю в браузере — 'http:\ \ip_setevoi_LAN\test.php' или http:\ \localhost\test.php', скрипт должен выдать подробную информацию о настройках php.

3. Настраиваю Apache,для чего редактирую файл — 'nano /etc/apache2/sites-enabled/000-default' В начале файла добавляю опции ServerAdmin и ServerName, а также нахожу опцию AllowOverride и измению её с значения None на All. Закомментировал RedirectMatch. Т.е. Получилось следующее:
NameVirtualHost *
ServerAdmin admin@server.ex
ServerName "www.server.ex"
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# RedirectMatch ^/$ /apache2-default/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Далее исправляю кодировку по-умолчанию с UTF-8 на Windows-1251 — 'nano /etc/apache2/conf.d':
AddDefaultCharset Windows-1251.

4. А вот теперь довожу конфигурацию Apache «напильником» до ума, «обрезая» настройки по самое не хочу — 'nano /etc/apache2/apache2.conf':
KeepAlive on
KeepAliveTimeout 5
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxClients 20
MaxRequestsPerChild 10000

Настройки достаточны для локальной сети из 30 машин исключительно для просмотра статистики. Если кому-то понадобятся другие настройки надеюсь приведенная ниже информация позволит лучше разобраться в настройках.

MaxClients

Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients. Значение MaxClient не долно быть слишком маленьким (иначе много клиентов останутся необслуженными), но и не стоит устанавливать слишком большое количество - лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / максимальный размер порожденного процесса или потока. Для статических файлов apache использует около 2-3 Мб на процесс, для динамики (php, cgi) - зависит от скрипта, но обычно около 16-32 Мб.Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

MinSpareServers, MaxSpareServers, и StartServers

Т.к. создание потока, и особенно процесса - дорогая операция, apache создает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум). Если значение MinSpareServers слишком маленькое и неожиданно приходит много запросов, apache вынужден будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers слишком велико, apache будет сильно нагружать систему этими процессами, даже если количество клиентов минимально.
Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это - сигнал того что MinSpareServers слишком мало.

MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда (ну кроме случаев остановки сервера или краха этого процесса/потока). Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет вынужден создавать новые дочерние процессы, в то же время это поможет избавиться от проблем с утечкой памяти в дочерних процессах (что очень возможно например если вы используете нестабильную версию php).

KeepAlive и KeepAliveTimeout

KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это особенно полезно для html-страниц с большим количеством изображений. Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для подобных случаев рекомендуется устанавливать KeepAlive в On. Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели слишком долго в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.

5. Перезапускаю Apache - '/etc/init.d/apache2 force-reload'

6. Устанавливаю MySQL - 'apt-get install mysql-server mysql-client php5-mysql' или 'apt-get install mysql-server mysql-client php4-mysql' для php4.

7. По умолчанию mysql создает пользователя root без пароля. Установил пароль для пользователя root.
server:/# mysql
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('пароль') WHERE user='root';
mysql> FLUSH PRIVILEGES;

8. Устанавливаю phpMyAdmin - 'apt-get install phpmyadmin', который ставится в папку - '/etc/phpmyadmin'.

phpMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL. phpMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный интерфейс. (Взято с http:/ /ru.wikipedia.org).

У меня в дистрибутиве Lenny phpMyAdmin сам подключился модулем к Apache. Возможно в дистрибутиве Etch придется подключить его руками, для чего надо редактировать файл 'nano /etc/apache2/apache2.conf', дописав в конце конфига:
Include /etc/phpmyadmin/apache.conf

9. Перезапускаю Apache - '/etc/init.d/apache2 restart'.
Доступ к настроенному phpMyAdmin можно осуществить набрав в браузере 'http:/ /localhost/phpmyadmin' с сервера.

PS. У меня на работе отсутствует статический IP для входа на сервер с Interneta, а пользователи выходят в интернет через Squid, т.е. Если кто-то из пользователей захочет войти в LAMP набрав IP сервера, его запрос будет отправлен по 80 портому в Squid который в свою очередь вернет ответ что хост не найден. Пришлось поправить настройки Apache, заставив его обрабатывать запросы по порту 8080, и создать виртуальный хост.

Отрадактировал файл 'nano /etc/apache2/httpd.conf' прописав в нем:
Listen 8080
т.е. указал чтоы Apache слушал порт 8080.

Я создал файл с настройками виртуального хоста 'touch /etc/apache2/sites-enabled/@statistica.conf' следующего содержания — 'nano /etc/apache2/sites-enabled/@statistica.conf':

DocumentRoot /var/www/
ServerName server.ex
AllowOverride All
Order allow,deny
allow from all
192.168.0.1 — адрес сетвой карты смотрящей в локальнуюсеть, и присваиваю ему имя — server.ex.

Далее включаю обработку виртуального хоста в Apache – 'nano /etc/apache2/apache2.conf' добавив:
Include /etc/apache2/sites-enabled/

Теперь чтобы из локальной сети попасть на созданный хост нужно набрать в браузере 'http:/ /192.168.0.1:8080' или 'http:/ /server.ex:8080'.

PSPS. Все манипуляции описанные в PS. производились в дистрибутиве Lenny.

среда, 13 мая 2009 г.

Настройка прозрачного прокси-сервера Squid

Все команды выполнялись от прав пользователя root.
Настроил на работе сервер для предоставления доступа пользователем 2-х локальных сетей в интернет. И естественно, получилось так, что пользователь который первым поставил файл\файлы на закачку, забирал всю «ширину» канала себе, следовательно Интернет для остальных представлял собой жалкое зрелище: страницы долго открываются, часто происходит обрыв сессий и т.д. Поэтому было решено установить прозрачный прокси-сервер – Squid3 с редиректом – SquidGuard для ограничения доступа к нерабочим ресурсам, обрезания рекламы и т.д. Операции по установке и настройке данной связки я тут и опишу:
1. Устанавливаем Squid — 'apt-get install squid3'. После установки останавливаем его, ибо нужно сконфигурировать его под наши нужды - '/etc/init.d/squid3 stop'.
2. Устанавливаем редирект SquidGuard – 'apt-get install squidguard'.
3. Собственно редактируем файл прокси-сервера — '/etc/squid3/squid.conf', должно получится примерно следующее:
# минимальная конфигурация
# у меня в фале 'deny_inet_hosts1' хранятся IP адреса не имеющие доступа в интернет
# как оказалось сквид всеравно пробрасывал их в интернет, пришлось прикрутить
# этот список к Squid'у
acl bn1 src "/etc/deny_inet_hosts1"
# описываем сети
acl Net1 src 192.168.0.1
# а тут описываем привилегированных пользователей админов и начальство
acl Admins src 192.168.0.17 192.168.0.2 192.168.0.21 192.168.0.22 192.168.0.3 192.168.0.33 192.168.0.35
acl manager proto cache_object
# описываем локалхост
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
# описываем запрет к отвлекающим от работы сайтам
acl zapret dstdomain .vkontakte.ru .odnoklassniki.ru .my.mail.ru .blogs.mail.ru .horo.mail.ru .news.mail.ru .games.mail.ru .auto.mail.ru .map.mail.ru .rabota.mail.ru .travel.mail.ru .lady.mail.ru .deti.mail.ru .realty.mail.ru .video.mail.ru .cards.mail.ru .pogoda.mail.ru .afisha.mail.ru .mobile.mail.ru .soft.mail.ru .otvet.mail.ru .chat.mail.ru .sowbiz.mail.ru .torg.mail.ru .love.mail.ru .foto.mail.ru .content.mail.ru .odnoklasniki.ru .adobe.com .radio.tut.by .blog.tut.by .i.tut.by .update.icq.com
################# PORTS ##################
# Открываем нужные порты
acl SSL_ports port 443 563
#acl SSL_for_client_banks port 910 8443 4500
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
#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 Jabber_ports port 5222 #jabber
acl Pop_ports port 110 #
acl Smtp_ports port 25 #
acl Icq_ports port 5190 #
# разрешаем соединение типа CONNECT для нужных протоколов
acl CONNECT method CONNECT
#http_access allow CONNECT Jabber_ports
http_access allow CONNECT Icq_ports
http_access allow CONNECT Pop_ports
http_access allow CONNECT Smtp_ports
############### ACCESS CONTROLL############
# назначаем права доступа
# пропускаем sqstat
http_access allow manager localhost
http_access deny manager
# запрещаем досуп к сайтам
http_access deny zapret
# зарубаем все порты кроме safe_ports
http_access deny !Safe_ports
# зарубаем конект кроме как к SSL
http_access deny CONNECT !SSL_ports
# блокирум IP адреса не имеющие доступа в интернет
http_access deny bn1
# разрешаем инет сетям
http_access allow Net1
icp_access deny all
htcp_access deny all
# админам выделяем всю ширину канала
# выделяем на все подсети максимальный канал (-1), каждому пользователю даем
# скорость максимум в 5 Кб\сек после того, как он скачает на максимальной
# скорости первые 300 Кб файла
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow Admins
delay_access 1 deny all
delay_class 2 2
delay_parameters 2 -1/-1 5000/300000
delay_access 2 allow Net1
delay_access 2 deny all
http_access allow all
############### NETWORK OPTIONS #############
# настройка порта для прокси
http_port 3128 transparent
##### OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM #####
# pfghtoftv r'ibhjdfnm CGI-скрипты
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
########### MEMORY CACHE OPTIONS ###########
# размер ОЗУ под кэш (по default 8 Мв)
cache_mem 32 MB
# ############ DISK CACHE OPTIONS ###############
# Max размер объекта записываемого в кэш
maximum_object_size 16384 KB
# Место кэша и размер 50 Гб 16 директорий 1-го уровня 256 2-го
cache_dir ufs /var/spool/squid3/cache 50000 16 256
# Адрес пользователя ответственного за очистку переполненого кэша
#cache_mgr root@test.ru
# Пользователь от имени какого работает Squid
cache_effective_user proxy
# Разрешаем управлять кэшем с помощью cachemgr.cgi с паролем "passwd"
#cachemgr_passwd passwd all
################ LOGFILE OPTIONS ####################
# Лог доступа к кэшу
cache_access_log /var/logs/squid3/access.log
# Лог работы кэша
cache_log /var/logs/squid3/cache.log
# Лог работы менеджера кэша
cache_store_log none
# Ротация логов
logfile_rotate 10
#mime_table /etc/squid3/mime.conf
#pid_filename /var/run/squid3.pid
########## OPTIONS FOR FTP GATEWAYING ##############
# Под этим юзером ходим в Ftp
#ftp_user vasa@pupkin.ru
# Разрешаем пассивный режим работы FTP
ftp_passive on
ftp_sanitycheck on
ftp_list_width 32
########## OPTIONS FOR URL REWRITING ##################
# Путь до редиректора
#redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
# Кол-во одновременных запусков редиректов
#redirect_children 5
########### OPTIONS FOR TUNING THE CACHE ##############
# Оставляем как есть
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
############ ERROR PAGE OPTIONS ###############
# Отсюда берем файлы стандартных сообщений об ошибках
error_directory /usr/share/squid3/errors/Russian-koi8-r
# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то всеравно продолжить скачивание
quick_abort_pct 60
# Время жизни запросов завершившихся ошибкой "connection refused" "404 Not Found"
negative_ttl 1 minutes
# Включить отправку сообщений об ошибках
#email_err_data on
# кому писать
#<А hrеf="mаilto:%w%W" mcе_hrеf="mаilto:%w%W">%w
################# DNS OPTIONS ###################
dns_testnames server.ex
# Путь к файлу hosts
hosts_file /etc/hosts
# Время жизни успешного DNS запроса.
positive_dns_ttl 6 hours
# Время жизни DNS запроса с ошибкой
negative_dns_ttl 5 minutes
############## MISCELLANEOUS ######################
# Место откуда берутся страницы с ошибками, сюда же ложим и свои
coredump_dir /var/spool/squid3
# Поддержка нестандартных Http запросов
half_closed_clients on
# Включать ли IP адрес клиента в заголовок Http запроса
forwarded_for on
# Вкл. сбор статистики по каждому клиенту
client_db on
4. Создаем необходимые директории и назначаем права доступа пользователям.
'mkdir /var/spool/squid3/cache' – тут у меня будет лежать кэш
'mkdir /var/log/squid3' — тут у меня будут лежать логи
Теперь необходимо обеспечить доступ пользователя от имени которого будут осуществлять доступ Squid к этим папкам. Узнать это можно командой 'cat /etc/squid3/squid.conf | grep cache_effectiv', должно выдать что-то похожее на это:
cache_effective_user proxy
т.е. получается что Squid работает от имени пользователя — proxy. Разрешаем этому пользователю доступ к созданным папкам ' chown -R proxy /var/spool/squid3/cache /var/log/squid3'.
5. В директории /var/log/squid3 создаем иерархию директорий для хранения кэша – '/usr/sbin/squid3 -z'.
6. Вот так у меня настроен squidguard
# путь к базе
dbhome /var/lib/squidguard/db
# путь к логам
logdir /var/log/squid
# рабочее время
time workhours {
weekly mtwhf 09:00 - 18:00
}
# создаем группы
src admin {
ip 192.168.0.3 192.168.0.33
# user root foo bar
within workhours
}
src lan {
ip 192.168.0.2 192.168.0.4-192.168.0.32 192.168.0.34-192.168.0.254 192.165.15.2-192.165.15.254
}


dest porno {
domainlist porn/domains
urllist porn/urls
log /var/log/squid/porno.log
}
dest warez {
domainlist warez/domains
urllist warez/urls
log /var/log/squid/warez.log
}
#dest ads {
#domainlist ads/domains
#urllist ads/urls
#}
dest spy {
domainlist spyware/domains
urllist spyware/urls
log /var/log/squid/spawere.log
}
dest hack {
domainlist hacking/domains
urllist hacking/urls
log /var/log/squid/hacking.log
}
dest drag {
domainlist drugs/domains
#urllist drugs/urls
log /var/log/squid/narkota.log
}
# указываем правила
acl {
admin {
pass any
}

lan within workhours {
pass !porno !warez !spy !hack !drag all
}
#else {
# pass any
# }

default {
pass none
}
}
7. Запускаем Squid — '/etc/init.d/squid3 start' и проверяем лог — /var/log/squid3/cache.log, если все нормально должны получить что-то вида:
8. Создаем правило в iptables для перенаправления локального трафика с 80 порта на порт Squid'а — 3128:
/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.0/24 -p tcp -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128