ITСooky

IT-рецепты съедобные и не очень!

Считаем трафик и ограничиваем доступ в Интернет средствами Ipfw, Netams, Squid, Sams!

дата 04.10.2011

На шлюзе считаем трафик и ограничиваем доступ в Интернет — убираем рекламу, сокращаем потребление трафика (за счет общего кэша), ну и точно узнаем сколько у кого трафика — полезно для ловли спамеров и ботнетов!

Ингредиенты:
1. FreeBSD сервер подготовленный по рецепту Создаем шлюз на FreeBSD и Wi-Fi точку доступа!
2. Putty

Для начала для использования веб интерфейса надо установить APM (Apache + PHP + MySQL). Плюсы этой связки распространенность и хорошая документация, минусы вес от Apache нерациональное использование памяти (просто чудовищное) но на не загруженных системах это не особо критично!

Ставим MYSQL, причем версиях 5.0 потому что Netams стабильно работает только с этой версией! При установке соглашаемся на все, особого чего то выбирать не надо!

cd /usr/ports/databases/mysql50-server/
make install

А также нужен mysql-client

cd /usr/ports/databases/mysql51-server/
make install

Создаем базу и даем права на папку!

/usr/local/bin/mysql_install_db
chown -R mysql /var/db/mysql/
chgrp -R mysql /var/db/mysql/
а может не надо /usr/local/bin/mysqld_safe
/usr/local/bin/mysqladmin -u root password svoi_parol_dlya_mysql 

Добавляем в rc.conf

mysql_enable="YES"

Создаем файл my.cnf

vi /etc/my.cnf

добавляем в него строки

[mysqld]
max_connections=250
table_cache=750
query_cache_size=16M
thread_cache_size=180
query_cache_limit=1M
query_cache_size=48M
query_cache_type=1
tmp_table_size=128M
max_user_connections=15
net_retry_count=10
open_files_limit=10000

Стартуем

/usr/local/etc/rc.d/mysql-server restart

Заходим в консоль Mysql

mysql -u root -p

Выполняем команду

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'svoi_parol_dlya_mysql' WITH GRANT OPTION;

выходим

exit;

Устанавливаем Apache

cd /usr/ports/www/apache22
make install

При выборе параметров надо отметить
[X] Mysql

Вставляем в rc.conf

apache22_enable="YES"

Редактируем

vi /usr/local/etc/apache22/httpd.conf

Добавляем после строки

Directory "/usr/local/www/apache22/data"

текст

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

и изменяем там же AllowOverride на All это чтобы обрабатывались в каждой папке .htaccess

Находим «DirectoryIndex»
добавляем index.php index.html первым и на всякий случай index.htm

DirectoryIndex index.php index.html index.htm

Добавить в /boot/loader.conf:

accf_http_load="YES"

Набираем в консоли

/usr/local/etc/rc.d/apache22 start

Apache стартовал

Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.

Заходим в любом браузере на адрес нашего сервера у меня это http://192.168.1.107/
и видим вдохновляющею надпись

It works!

Теперь устанавливаем PHP5.3

cd /usr/ports/lang/php53/
make install

выбрать
[X] Apache

Далее устанавливаем

cd /usr/ports/lang/php53-extensions
make config

должны быть выбраны пункты
[X] MySQL
[X] SOAP
[X] OPENSSL (на всякий)
[X] GD

make install

Сидим над установкой соглашаемся на все что предлагает, если будет ругаться на python 2.5 установить его отдельно из портов и повторить.

Смотрим /usr/local/etc/apache22/httpd.conf
должно стоять

LoadModule php5_module libexec/apache22/libphp5.so

В папке /usr/local/etc/ лежать готовы варианты настроек копируем одну из них в

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Редактируем php.ini
Стоит увеличить размер памяти в некоторых настройках он мал

memory_limit = 128M

Общая рекомендация держать выключенным globals

register_globals = Off

Создаем тестовый файл

cd /usr/local/www/apache22/data/
vi phpinfo.php

вставляем

<?php print_r (phpinfo()); ?>

Перезагружаем Apache

/usr/local/etc/rc.d/apache22 restart

Заходим через браузер на http://айпи_вашег_сервера/phpinfo.php
и нам показывают версию PHP с установленными модулями.

Устанавливаем phpMyAdmin для работы с базами MySQL

Находим где у нас phpmyadmin и устаналиваем

whereis phpmyadmin
 phpmyadmin: /usr/ports/databases/phpmyadmin
cd /usr/ports/databases/phpmyadmin
make install

Установщик сообщает что кинул файлы в /usr/local/www/phpMyAdmin
Добавляем в конце httpd.conf

 Alias /phpmyadmin "/usr/local/www/phpMyAdmin/"

    <Directory "/usr/local/www/phpMyAdmin/">
        Options none
        AllowOverride Limit
        Order Deny,Allow
        Deny from all
        Allow from all
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
    </Directory>

Слегка редактируем настройки чтобы phpMyAdmin не выдавал предупреждения, они не на что не влияют но

cd /usr/local/www/phpMyAdmin
cp config.sample.inc.php config.inc.php
chgrp www config.inc.php
vi config.inc.php

В строке

$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

В пустых кавычках

= '';

пишем любую белеберду!
Расскоменчиваем строку

$cfg['DefaultLang'] = 'en';

В php.ini комментим все в директиве [MySQli]

Перегружаем Apache

/usr/local/etc/rc.d/apache22 restart

Заходим через браузер на http://айпи_сервера/phpmyadmin/ вводим пользователя root и пароль от root MySQL и все работает (причем гораздо красивее чем с мой последней установки) главное что не надо работать с консолью MySQL тут есть всё!

Устанавливаем Netams

cd /usr/ports/net-mgmt/netams/
make install

В первом окне выбираем DEBUG, MYSQL и CGI

Создаем файл netams.conf для NeTAMS

cd /usr/local/etc/
vi netams.conf

Приводим его к виду указываем рут пароль от mysql что нетамс смог создать себе базу и пароль админа самого NeTAMS — aaa.

#begin
debug none
language ru
user name admin real-name Admin password aaa email root@localhost permit all
#services configuration
service server 0
login local
listen 20001
max-conn 6
service processor
lookup-delay 60
flow-lifetime 180
policy name ip target proto ip
policy name www target proto tcp port 80 81 8080 3128 443
policy name ftp target proto tcp port 20 21
policy name pop3 target proto tcp port 110
policy name smtp target proto tcp port 25
policy name ipsec target proto esp
policy name rdp target proto tcp port 3389 5589 3390 5590 5593 37777
policy name ssh target proto tcp port 22
policy name sambatcp target proto tcp port 135 137 138 139 445
policy name sambaudp target proto udp port 135 137 138 139 445
policy name udp target proto udp
policy name tcp target proto tcp
restrict all drop local pass
unit group name WIFI acct-policy ip www ftp pop3 smtp rdp ssh ipsec sambatcp sambaudp udp tcp
unit group name SERVER acct-policy ipsec ip www ftp pop3 smtp rdp ssh ipsec sambatcp sambaudp udp tcp
unit host oid 0F37B4 name WLAN0 ip 10.10.30.1 acct-policy ip www ftp pop3 smtp rdp ssh ipsec sambatcp sambaudp udp tcp
unit host oid 03186C name RE0 ip 192.168.1.107 acct-policy ip www ftp pop3 smtp rdp ssh ipsec sambatcp sambaudp udp tcp
unit user oid 0D6EBD name WIFI000 ip 10.10.30.10 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0536F4 name WIFI001 ip 10.10.30.11 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 072376 name WIFI002 ip 10.10.30.12 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 07405B name WIFI003 ip 10.10.30.13 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 037797 name WIFI004 ip 10.10.30.14 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 095C10 name WIFI005 ip 10.10.30.15 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0A157C name WIFI006 ip 10.10.30.16 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 01AAEB name WIFI007 ip 10.10.30.17 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 03304A name WIFI008 ip 10.10.30.18 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0C4C79 name WIFI009 ip 10.10.30.19 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0B8C3C name WIFI010 ip 10.10.30.20 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0A3398 name WIFI011 ip 10.10.30.21 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 04CB38 name WIFI012 ip 10.10.30.22 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 0DFD5B name WIFI013 ip 10.10.30.23 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 00715D name WIFI014 ip 10.10.30.24 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
unit user oid 08F86B name WIFI015 ip 10.10.30.25 parent WIFI acct-policy ip www ftp pop3 smtp rdp ssh sambatcp sambaudp udp tcp
service storage 0
type mysql
user root
password svoi_parol_dlya_mysql
accept all
service data-source 1
type ip-traffic
source divert 199
layer7-detect urls
service quota
policy ip
notify soft owner
notify hard owner
notify return owner
service monitor 0
monitor to file /usr/netams/mon_netams.log
monitor unit WLAN0
monitor unit RE0
service alerter 0
report rep1 type traffic period day detail simple
smtp-server localhost
service html
path /usr/local/www/netams/stat
run 10min
url http://192.168.1.107/netams/
htaccess yes
client-pages all
account-pages none
language ru
service scheduler
oid 08FFFF time 10min action "html"
#end

Создаем папку для логов нетамс я делаю нестандартное место чтобы не переполнять папку var

cd /usr
mkdir netams

Добавляем /etc/rc.conf строку

netams_enable="YES"

Запускаем netmas

/usr/local/etc/rc.d/netams start

Смотрим на него

sockstat -4l | grep netams

root netams 1541 4 tcp4 127.0.0.1:20001 *:*
root netams 1541 7 div4 *:199 *:*

Заходим в нетамс телнетом имя и пароль у нас указаны в netams.conf в строке

user name admin real-name Admin password aaa email root@localhost permit all

имя: admin
пасс: aaa

telnet 127.0.0.1 20001

здесь надо выполнить команды

html
save
show version
show config
exit

В MySQL должна появится база netams. Для этого можно использовать phpMyAdmin но сделаем это последний раз через консоль!

mysql -u root -p
show databases;

+———————+
| Database |
+———————+
| information_schema |
| mysql |
| netams |
| test |
+———————+
4 rows in set (0.00 sec)

Создаем пользвателя для базы netams чтобы лишний раз не светит рут пароль от Mysql

grant all privileges on netams.* to 'netams'@'localhost' identified by 'pass_netams';
exit;

Прежде чем начать редактировать настройки NeTAMS надо его остановить

/usr/local/etc/rc.d/netams stop
vi /usr/local/etc/netams.conf

Приводим к виду строчки

type mysql
user netams
password pass_netams

Запускаем NeTAMS

/usr/local/etc/rc.d/netams start

Вдруг начинает кто-то ругаться на кодировку, оста наливаем netams, идем в phpMyAdmin и на главной странице меняем Сопоставление соединения с MySQL на latin8_swedish_ci!

Запускаем NeTAMS

/usr/local/etc/rc.d/netams start

Идем опять в телнет

telnet 127.0.0.1 20001

здесь надо выполнить команды

html
save
show version
show config
exit

Настраиваем ротацию логов NeTAMS в нем эта функция встроена но запускается в ручную, нужен скрипт для автоматизации!
На нашем сервере будет лежать скрипт на языке expect — устанавливаем её из коллекции портов (которую можно поставить с DVD)

cd /usr/ports/lang/expect
make install

Идем в папку /root и делаем файл

cd /root
vi netams_rotate

Вставляем туда текст

#!/usr/local/bin/expect -f
log_user 0
set timeout 300
spawn /usr/bin/telnet 127.0.0.1 20001
expect "Username:" {send "admin\r"}
expect "Password:" {send "aaa\r"}
send "rotate monitor 0\r"
expect "Rotating monitor file" {
system /bin/rm /usr/netams/mon_netams.log.*
send "exit\r"
}
exit

Тут указано имя и пароль от telnet NeTAMS и имя и папка с логами, проверьте чтобы совпадало с вашими значениями!

Чтобы скрипт запускался его надо сделать исполняемым

chmod 755 netams_rotate

Лезем в планировщик

crontab -e

Добавляем строчку которая будет запускать скрипт каждое 16-тое число месяца в 2 часа 37 минут, правила редактирования такие же как в vi

37 2 16 * * /usr/local/bin/expect -f /root/netams_rotate >> /dev/null 2>&1

В настройка ipfw разкомментируем строки которые будут заворачивать тарфик на нетамс

vi /etc/rc.firewall

Считаем на внутренном интерфейсе

${FwCMD} add divert 199 ip from any to any out xmit ${lanin}
${FwCMD} add divert 199 ip from any to any in recv ${lanin}

Считаем на внешнем интерфейсе, правила нетамс должны обрамлять натд так вес говорят

${FwCMD} add divert 199 ip from any to any out xmit ${lanout}
${FwCMD} add divert natd ip from any to any out via ${lanout}
${FwCMD} add divert natd ip from any to me in via ${lanout}
${FwCMD} add divert 199 ip from any to any in recv ${lanout}

Перезагружаем ipfw

/etc/rc.d/ipfw restart

Нетамс НЕдобавляет в конфиг апаче файл netams-apache-freebsd.conf делаем ручками

cp /usr/local/share/netams/netams-apache-freebsd.conf /usr/local/etc/apache22/Includes/netams-apache-freebsd.conf

надо дать права на скрипты нетамся

chmod -R +x /usr/local/www/netams/cgi-bin

И отредактировать файл добавить пароль к доступу к mysql и имя netams

vi /usr/local/www/netams/cgi-bin/config.cgi
$sql_login="netams";
$sql_password="pass_netams";

Перегружаем Apache

/usr/local/etc/rc.d/apache22 restart

Заходим через браузер на http://айпи_вашего_сервера/netams/ все работает!

Заходим на шлюз с Wi-Fi устройства и активно работает более 10 минут — потому что по нашим настройкам NeTAMS обрабатывает статистику каждые 10 минут!
Просмотр страницы начинаем всегда с адреса http://айпи_вашего_сервера/netams/ статистика пишет по часам всегда проверяйте актуальность по строке вверху страницы Время создания: 03.10.2011 14:03:37 обновлять имеет смысл только в период данного часа а после надо открывать с начала. Статистика скрыта её надо отрывать нажимая на collapse children и collapse policies вот пример:

У нас открыта группа GROUP: WIFI в ней статистика по всем устройства WI-FI
ip — Общий трафик прошедщий через группу
www, ftp… — это подсчет трафика на описанных нами портах
udp, tcp — это подсчет по видам трафика

Так выглядит статистика по клиентам Wi-Fi

В Netams включена опция авторизация через .htacess но она не работает видимо не учли особенностей Apache 22, надо самим запаролить вход
В начале создаем папку с файлом пароля

mkdir /usr/local/etc/htpswd/
cd /usr/local/etc/htpswd
/usr/local/sbin/htpasswd -c name.file name.user

New password: ******
Re-Type new password: ******
Adding password for user name.user

chmod 644 name.file

В конфиг апача22 в описание папки Netams добавляем строки в описание

vi /usr/local/etc/apache22/Includes/netams-apache-freebsd.conf

Приводим описание папки NeTAMS к виду

<Location /netams>
AuthType Basic
AuthName "***"
AuthUserFile /usr/local/etc/htpswd/name.file
Require user name.user


        Options Indexes FollowSymLinks MultiViews
        Order allow,deny
        allow from all
        DefaultLanguage ru
    AddDefaultCharset WINDOWS-1251
</Location>

Можно не указывать конкретного юзера написав

Require valid-user

Перезагружаем Apache

/usr/local/etc/rc.d/apache22 restart

Теперь у нас запрашивается пароль от юзера name.user

Устанавливаем SQUID

cd /usr/ports/www/squid
make config

Выбираем
[X] SQUID_DELAY_POOLS Enable delay pools
[X] SQUID_CARP Enable CARP support
[X] SQUID_WCCP Enable Web Cache Coordination Prot. V1 |
[X] SQUID_IDENT Enable ident (RFC 931) lookups
[X] SQUID_KQUEUE Use kqueue(2) instead of poll(2)
[X] SQUID_LARGEFILE Support log and cache files >2GB

И устанавливаем

make install

Редактируем конфиг Squid

vi /usr/local/etc/squid/squid.conf

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

http_port 127.0.0.1:3128 transparent

В конфиге меняем размера кеша до 10 гб

cache_dir ufs /usr/local/squid/cache 10000 16 256

Находим все сторчки со словом localnet и закрываем их #, чтобы свои не лезли в обход SAMS

Меняем в конфиге директории где сквид хранит данные, по умолчанию это var/squid и она быстро заполняется меняем на

cache_dir ufs /usr/local/squid/cache 10000 16 256
access_log /user/local/squid/logs/access.log squid
coredump_dir /usr/local/squid/cache

И строку где будет лежать в правильном месте squid.pid из-за этого масса проблем может быть если оставить как есть

pid_filename /var/run/squid/squid.pid

Создаем новые директории для данных sqiud (одна строка)

mkdir /usr/local/squid/ && mkdir /usr/local/squid/logs && mkdir /usr/local/squid/cache && chown squid:squid /usr/local/squid/ && chown squid:squid /usr/local/squid/logs && chown squid:squid /usr/local/squid/cache && chmod -R 777 /usr/local/squid/ 

Создаем директорию для sqiud.pid

mkdir /var/run/squid
chown squid:squid /var/run/squid

Редактируем файл запуска squid

 vi /usr/local/etc/rc.d/squid

Приводим строчку к виду

squid_pidfile=${squid_pidfile:-"/var/run/squid/squid.pid"}

Далее добавляем в /etc/rc.conf строку для автоматического запуска squid после перезагрузки

squid_enable="YES"
squid_pidfile="/var/run/squid/squid.pid"

Перезагружаемся

reboot

Создадим (SWAP) для прокси сервера Squid

/usr/local/sbin/squid -z

2011/10/03 15:10:27| Creating Swap Directories

Создаем ротацию логов сквида чтобы они не накапливались!
Лезем в планировщик

crontab -e

Добавляем строчку (тут наша папка где хранятся данные squid) которая будет запускаться скрипт каждое 21 число каждого месяца, правила редактирования такие же как в vi

* * 21 * * /usr/local/sbin/squid -k rotate && /bin/rm /usr/local/squid/logs/access.log.* /usr/local/squid/logs/cache.log.* /usr/local/squid/logs/store.log.*

В /etc/rc.firewall раскурваем строку, весь трафик с 80 порта отправляется на сквид

${FwCMD} add fwd 127.0.0.1,3128 tcp from ${netin} to any 80 via ${lanout}

Перезагружаем ipfw

/etc/rc.d/ipfw restart

Устанавливаем SAMS

cd /usr/ports/www/sams
make config
make install

Добавляем в /etc/rc.conf

sams_enable="YES"

Добавляем в /usr/local/etc/apache22/httpd.conf

Alias /sams "/usr/local/share/sams/"
<Directory "/usr/local/share/sams/">
    AllowOverride AuthConfig
        Options Indexes MultiViews
        Order allow,deny
        Allow from all
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</Directory>

Создаем и редактируем файл настроек, особенно надо проверить все пути

vi /usr/local/etc/sams.conf

Приводим к виду

[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD=sams123
MYSQLVERSION=5.0
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/usr/local/etc/squid
SQUIDLOGDIR=/usr/local/squid/logs
SQUIDCACHEDIR=/usr/local/squid
SAMSPATH=/usr/local
SQUIDPATH=/usr/local/sbin
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
SHUTDOWNCOMMAND=/sbin/shutdown -h now
CACHENUM=0

MYSQLUSER=sams — это еще не созданный юзер базы
MYSQLPASSWORD=sams123 — это его пароль

Перегружаем Apache

/usr/local/etc/rc.d/apache22 restart

Заходит на старницу SAMS http://айпи_нашего_сервера/sams/
Cогглашаемся на создание базы тут надо будет указать root пароль от Mysql и пароль для пользователя sams который мы в конфиге уже прописали (sams123).

База создана, САМС запустил веб интерфейс чтобы зайти надо ввести admin qwerty!
Но прежде надо исправить два файла в /usr/local/share/sams/src чтобы php работал правильно

configtray.php
webconfigtray.php

надо найти

function GetHostName()
$hostname=GetHostName();

и заменить на

function GetSamsHostName()
$hostname=GetSamsHostName();

Если вебморда SAMS ругается вот так в Настрйоках пользователя:

Warning: strftime() [function.strftime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Moscow' for 'MSK/3.0/no DST' instead in /usr/local/share/sams/src/usertray.php on line 336

То надо в php.ini задать

date.timezone = Europe/Moscow 

Для того что бы отображалась загруженность сервера меняем запрос free на top

vi /usr/local/share/sams/bin/freemem

Правим до такого состояния

STR=`top | grep Mem:`
echo $STR

Меняем запрос free на top

vi /usr/local/share/sams/bin/freeswap

Правим до такого состояния

STR=`top | grep Swap:`
echo $STR

Меняем далее

vi /usr/local/share/sams/src/configtray.php

находим

$a=explode(" ",$value);
  for($i=1;$i< 4;$i++)
     {
           $mem[$i-1]=$a[$i];
     }
  $a=explode(" ",$swapvalue);
  for($i=1;$i< 4;$i++)
     {
           $swap[$i-1]=$a[$i];
     }

меняем на

 $a=explode(" ",$value);
  for($i=1;$i< 4;$i++)
     {
     $mem[0]=$a[1]+$a[3]+$a[5]+$a[11]; //total mem
     $mem[1]=$a[1]; //Used mem
     $mem[2]=$a[11]; //Free mem
     }
  $a=explode(" ",$swapvalue);
  for($i=1;$i< 4;$i++)
     {
     $swap[0]=$a[1]; //total swap
     $swap[1]=$a[3]; //used swap
     $swap[2]=$a[5]; //free swap
     }

Свободный swap всё равно правильно показывать не будет пока не появится used

Находим в squid.conf секцию с TAG: url_rewrite_program
в конце описания находим строку # none и меняем её на:

url_rewrite_program /usr/local/bin/samsredir

разблокируем также последующие строку

url_rewrite_children 5

Перегружаемся

reboot

Настраиваем SAMS
Заходим SAMS http://айпи_нашего_сервера/sams/ вводим admin qwerty!
Идем в настройки SAMS administration там в низу гаечный ключ и молотов жмем туда и приводим страницу к виду:

Нажимаем в меню Users и добавляем юзеров описывая их IP и не забывая ставить галочку на актив вот так:

В Настройках Вебинтерфейса настраиваем все под себя, там же включается показ графиков. Так же редактируем Шаблоны Пользователей включая или выключая фильтры и обратите внимание ограничение по скорости! Так же есть ограничения на выкаченный трафик! Для действия изменения надо SAMS>SQUID реконфигурировать левый нижний значок — это надо делать каждый раз!

Можно загрузить все настройки и списки блокировок из файла, вот для нашей конфигурации
samsdb-14Apr2012-13-26-01.sql
В меню выбираем Сохранение Конфигурации > Восстановление конфигурации из файла и загружаем туда этот файл! Отмечаем все галочки! После установки проверьте настройки SAMS особенно IP вашего сервера.

Принцип блокировки рассмотрим на сайте mail.ru! Нам нужно заблокировать ссылки по которым вызывается реклама, для фото и swf это хорошо видно в Информации о странице (Firefox правая мыш). Проблема mail.ru в том что у них и свои матерьялы и гнилая реклама вызываются одинаково «r.mail.ru»,»rs.mail.ru»,»r2.mail.ru» если в SAMS в Перенаправленных их заблокировать то всё исчезнет! Но я этого не делал! У нас задача заблокировать только .swf для этого в SAMA предусмотрен язык регулряных выражений PERL который позволит описать этот тяжелый случай! Нам надо вычленить все ссылки с .swf, независимо от названия файла, из папок «rs.mail.ru»,»r2.mail.ru».

Идем в меню SAMS в Регулярные Выражения в Реклама нажимаем на r(s|2).mail.ru/w+.swf и правим его до:

r[s|2].mail.ru\/\w+\.swf

К сожалению файл конфигурации не сохраняет не традиционные символы, как обратный слеш, приходится руками!

Регулярные выражения срабатывают если имеются в теле всей ссылки!
[s|2] — в этом месте s или 2
\/ — значит тут обычный /
\w — любая цифра буква или ‘_’
+ — любое количество предыдущего значения
\. — значит тут обычная .
Проверять работоспособность регулярных выражений очень удобно тут!

Идем в SAMS>SQUID реконфигурировать левый нижний значок — это надо делать чтобы вступили в действия любые изменения! Ну и всё реклама swf у нас блокируется, это не дейтсвует на рекламу в jpg такие ссылки совподают с ссылками на сервисы mail.ru нам это не надо!

Вот пример действия фильтров — чтобы любовь к кошкам не заставляла наблюдать вот такое — особенно это критично на нетбуках и так места мала на экране!

Естественно блокировка срабатывает на всех устройствах. Иногда бывают артефакты, какие-то непонятки с кодировкой страницы запрета — но рекламного спама 100% нет.

Блокировка грязной рекламы работа творческая и неустанная — появляются новые рекламные ссылки и способы всё это надо отлавливать! Так же трудоемкая задача блокировать соц сети — мало их явно блокировать, еще надо выискивать и блокировать прокси серверы и всякие анонимайзеры — но их можно будет заметить в статистике пользователя! Но от захватившей всех сетей контекстной и баннерной рекламы очень просто очиститься — это позволяет не тратить время на рекламные ссылки (масса умельцев которые зарабатывают на ключевых словах в поиске выдавая страницы с рекламой оформленные как что-то стоящее), сокращает трафик отсекая тяжелую рекламу и деля на всхе кэш для больших коллективов это минус 20% трафика примерно, ну и закрытие вредоносных сайтов я бы сразу блокировал всё .cn .info!

P.S. Мой список блокировок!
Data 13Sep2013
В меню выбираем Сохранение Конфигурации > Восстановление конфигурации из файла и загружаем туда этот файл! Отмечаем галочку:

Список перенаправления запроса и запрета доступа. 

В настройках Шаблона включайте что нужно, далее в меню реконфигурируем SQUID.


UPD: Squid в режиме прозрачного прокси(transparent) не работает с https трафиком
— на то он и зашифрованный. К сожалению многие крупнейшие соц сети перешли на https (twitter, facebook, youtube — Российские пока не перешли). Есть способ читать и блокировать https tрафик http://habrahabr.ru/post/168515/ — но он не работает в режиме транспарент — надо на каждом ПК в каждой программе настраивать прокси сервер, и он не работает со всеми программами и устройствами.

И самое свинство когда в https начинает прятаться реклама. Но есть один 100% зверский способ заблокировать то что в https подпортив свой DNS сервер!

Если у вас DNS сервер как этот (ну у мен сейчас такой)
на сервере делаем, вводя пароль администратора домена, блокируем два мусорных URLа doubleclick.net 2mdn.net
samba-tool dns zonecreate SAMBA.ITCOOKY_VPS doubleclick.net
samba-tool dns add SAMBA.ITCOOKY_VPS doubleclick.net @ A 127.0.0.1
samba-tool dns add SAMBA.ITCOOKY_VPS doubleclick.net net A 127.0.0.1

samba-tool dns zonecreate SAMBA.ITCOOKY_VPS 2mdn.net
samba-tool dns add SAMBA.ITCOOKY_VPS 2mdn.net @ A 127.0.0.1
samba-tool dns add SAMBA.ITCOOKY_VPS 2mdn.net net A 127.0.0.1

И надо перезагрузить сервер — другого способа перегрузить SAMBA internel DNS я пока не нашел.

В результате реклама блокируется на её месте выдает сообщение об ошибки, потому что браузер не может получит IP от DNS который мы испортили залупленными записями!