Установка, настройка squid на FreeBSD и анализатора логов-sarg

Коротко о сути:
Прокси-сервера squid будет установлен и настроен не на шлюзе, а на обычном пк с FreeBSD в сети. Этот сервер надо будет прописывать в используемом браузере, однако в итоге мы получим статистику трафика по каждому IP в сети и ускорим загрузку посещённых страниц за счёт сохранённого кэша. Авторизация отсутствует, настройки минимальны, статистику(посещённые ресурсы, объём скачанного, графики) можно будет смотреть в браузере.
Установка будет происходить на FreeBSD версии 8.2. Сетевые интерфейсы следующие (их можно посмотреть коммандой ifconfig) :
em0: flags=8843 metric 0 mtu 1500
options=9b
ether 08:00:27:9f:bb:b8
inet 172.23.96.100 netmask 0xffffff00 broadcast 172.23.96.255
media: Ethernet autoselect (1000baseT )
status: active
lo0: flags=8049 metric 0 mtu 16384
options=3
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3

Здесь нас интересует интерфейс em0 c IP 172.23.96.100 и маской 255.255.255.0. У вас они, скорее всего, будут отличаться, поэтому попутно в конфигах меняйте на свои адреса.
Сначала в ядро добавим фаервол ipfw (о сборке ядра уже рассказывал здесь), если исходники ядра устанавливали то:
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/sq
ee /usr/src/sys/i386/conf/sq

дописываем:
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
options IPFIREWALL_FORWARD
options IPDIVERT
options DUMMYNET

собираем, устанавливаем ядро:
cd /usr/src
make buildkernel KERNCONF=sq
make installkernel KERNCONF=sq

ни в коем случае не перезагружаемся, если находитесь далеко от консоли. В противном случае начнёт выполняться правило фаервола — по умолчанию всё блокировать.

в /etc/rc.conf вписываем:
firewall_enable="YES"
firewall_script="/etc/rc.firewall"

сразу как временное решение делаем:
cp /etc/rc.firewall /etc/rc.firewall_0
echo # > /etc/rc.firewall
ee /etc/rc.firewall

вписываем:
/sbin/ipfw -f flush
/sbin/ipfw -q add 00100 allow all from any to any via lo0
/sbin/ipfw -q add 00101 allow all from any to 127.0.0.0/8
/sbin/ipfw -q add 00102 allow all from 127.0.0.0/8 to any

/sbin/ipfw -q add 00200 allow all from any to any

Смысл фаервола с такими правилами конечно пропадает, но написание нормальных правил — это отдельная тема.
Теперь и перезагрузиться можно:
reboot

Фаервол пока оставим в покое, он стартует, работает, а нужное правило допишем позже.
Перед установкой squid, обновим порты по статье.

ставим squid:
cd /usr/ports/www/squid
make config

выбираем пункты:
Options for squid 2.7.9
[ ] SQUID_KERB_AUTH Install Kerberos authentication helpers
[ ] SQUID_LDAP_AUTH Install LDAP authentication helpers
[ ] SQUID_NIS_AUTH Install NIS/YP authentication helpers
[ ] SQUID_SASL_AUTH Install SASL authentication helpers
[ ] SQUID_DELAY_POOLS Enable delay pools
[ ] SQUID_SNMP Enable SNMP support
[ ] SQUID_CARP Enable CARP support
[X] SQUID_SSL Enable SSL support for reverse proxies
[X] SQUID_PINGER Install the icmp helper
[ ] SQUID_DNS_HELPER Use the old ‘dnsserver’ helper
[ ] SQUID_HTCP Enable HTCP support
[ ] SQUID_VIA_DB Enable forward/via database
[ ] SQUID_CACHE_DIGESTS Enable cache digests
[X] SQUID_WCCP Enable Web Cache Coordination Prot. v1
[ ] SQUID_WCCPV2 Enable Web Cache Coordination Prot. v2
[ ] SQUID_STRICT_HTTP Be strictly HTTP compliant
[X] SQUID_IDENT Enable ident (RFC 931) lookups
[ ] SQUID_REFERER_LOG Enable Referer-header logging
[X] SQUID_USERAGENT_LOG Enable User-Agent-header logging
[ ] SQUID_ARP_ACL Enable ACLs based on ethernet address
[ ] SQUID_PF Enable transparent proxying with PF
[X] SQUID_IPFILTER Enable transp. proxying with IPFilter
[ ] SQUID_FOLLOW_XFF Follow X-Forwarded-For headers
[ ] SQUID_AUFS Enable the aufs storage scheme
[ ] SQUID_COSS Enable the COSS storage scheme
[X] SQUID_KQUEUE Use kqueue(2) instead of poll(2)
[ ] SQUID_LARGEFILE Support log and cache files >2GB
[ ] SQUID_STACKTRACES Create backtraces on fatal errors

Устанавливаем:
make BATCH=yes -C/usr/ports/www/squid install clean

установилось:
post-installation information for squid-2.7.9:

o You can find the configuration files for this package in the
directory /usr/local/etc/squid.

o The default cache directory is /var/squid/cache.
The default log directory is /var/squid/logs.

Note:
You must initialize new cache directories before you can start
squid. Do this by running «squid -z» as ‘root’ or ‘squid’.
If your cache directories are already initialized (e.g. after an
upgrade of squid) you do not need to initialize them again.

o The default configuration will deny everyone but local networks
as defined in RFC 1918 access to the proxy service.
Edit the «http_access allow/deny» directives in
/usr/local/etc/squid/squid.conf to suit your needs.

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.

Note:
If you just updated your Squid installation from 2.6 or earlier,
make sure to check your Squid configuration against the 2.7 default
configuration file /usr/local/etc/squid/squid.conf.default.

Additionally, you should check your configuration by calling
‘squid -f /path/to/squid.conf -k parse’ before starting Squid.

===> Compressing manual pages for squid-2.7.9
===> Registering installation for squid-2.7.9
===> SECURITY REPORT:
This port has installed the following binaries which execute with
increased privileges.
/usr/local/libexec/squid/pinger

This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/libexec/squid/pinger
/usr/local/sbin/squid

This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/squid

If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type ‘make deinstall’
to deinstall the port if this is a concern.

For more information, and contact details about the security
status of this software, see the following webpage:
http://www.squid-cache.org/
=== Cleaning for perl-5.12.3
=== Cleaning for squid-2.7.9

далее:
rehash
cp /usr/local/etc/squid/squid.conf /usr/local/etc/squid/squid.conf_0
ee /usr/local/etc/squid/squid.conf

стираем всё и вписываем:
visible_hostname name.domen.com
# name.domen.com - имя хоста сервера
http_port 3128 transparent
# 3128 - номер порта прокси-сервера
cache_effective_user squid
cache_effective_group squid
cache_dir ufs /var/squid/cache 250000 64 512
#/var/squid/cache - директория с кэшем
# 250000 - объём в мегабайтах для Кеша
# 64 - число каталогов первого уровня
# 512 - число каталогов второго уровня
cache_access_log /var/squid/logs/access.log squid
# /var/squid/logs/access.log - файл статистики
acl LocalNet src 172.23.96.0/24
acl all src 0.0.0.0/0.0.0.0
http_access allow LocalNet
http_access deny all

в правила фаервола /etc/rc.firewall вписываем:
/sbin/ipfw -q add 00300 fwd 127.0.0.1,3128 tcp from any to any 80 via em0

перезапускаем фаервол:
/etc/rc.d/ipfw restart

если apache не установлен. то ставим (можно посмотреться статью). Выполняем:
cd /usr/ports/www/apache22
make config

из опций я убрал только пункт IPV6 и поставил mysql. Остальное оставил без изменений.

Устанавливаем:
make BATCH=yes -C/usr/ports/www/apache22 install clean
rehash

правим конфиг апача:
ee /usr/local/etc/apache22/httpd.conf

дописываем туда:
ServerName 127.0.0.1

Там же я закомментировал модуль mod_unique_id ибо ругалось:
[дата] [alert] (EAI 8)hostname nor servname provided, or not known: mod_unique_id: unable to find IPv4 address of "имя хоста"
но впринципе этот модуль можно было вообще не ставить при make config в /usr/ports/www/apache22.

создаём:
ee /usr/local/etc/apache22/Includes/squid_stat.conf

С таким содержимым:

команды, freebsd, настройка, установка, сервер, server, ubuntu

здесь
/usr/local/www/squid_stat — директория, которую мы укажем ниже, в конфиге анализатора логов сквида — sarg.

создаём эту директорию:
mkdir -p /usr/local/www/squid_stat

в /boot/loader.conf добавим строчку:
accf_http_load="YES"

добавляем в /etc/rc.conf для автозапуска:
apache22_enable="YES"
squid_enable="YES"

подгружаем подуль:
kldload accf_http

стартуем апач22:
apachectl start

проверяем стартанул или нет:
ps ax | grep httpd

первый раз стартуем сквид, чтобы создались директории для свопа:
squid -z
2011/05/19 17:44:49| Creating Swap Directories

а теперь простой старт:
/usr/local/etc/rc.d/squid start

проверяем стартанул squid или нет:
ps ax | grep squid
1075 ?? Ss 0:00.00 /usr/local/sbin/squid -D
1077 ?? R 0:00.81 (squid) -D (squid)

Если после старта прокси-сервера, вы внесли в его конфиг изменения, то заставить squid перечитать конфиг можно так:
squid -k reconfigure

Устанавливаем анализатор логов сквида, чтобы хоть как то визуально оформить статистику:
make BATCH=yes -C/usr/ports/www/sarg install clean
rehash
cp /usr/local/etc/sarg/sarg.conf /usr/local/etc/sarg/sarg.conf0
ee /usr/local/etc/sarg/sarg.conf

Дописываем туда:
access_log /var/squid/logs/access.log
#access_log взят из настроек squid (/usr/local/etc/squid/squid.conf)
temporary_dir /tmp
#временная папочка
output_dir /usr/local/www/squid_stat
# директория из /usr/local/etc/apache22/Includes/squid_stat.conf

Запускаем вручную
sarg

создадутся файлы в /usr/local/www/squid_stat

Примечание:
Как то раз после установки sarg и попытке его запустить, увидел ошибку:
/usr/local/bin/sarg: Permission denied.
Посмотрев:
ls -la /usr/local/bin

увидел:
-rw-r--r-- 1 root wheel 255276 Jul 2 21:23 sarg

сразу видно, что файл не исполняемый и надо выполнить:
chmod +x /usr/local/bin/sarg
После этого sarg запустился.

Ну а если sarg запустился нормально сразу, что в основном и происходит (описанное в Примечании — исключение), то можно идти на http://172.23.96.100/squid_stat/ и посмотреть веб-интерфейс.
ставим в крон /etc/crontab в полночь ежедневно:
0 0 * * * root /usr/local/bin/sarg

На этом минимум окончен, можно у клиентов прописывать адрес прокис севера в настройках браузера и статистика начнёт накапливаться

Добавить комментарий