SQUID SAMS - гнучкість в керуванні доступом

Налаштовано черговий маршрутизатор. Начебто роботу вже завершено. Але "високе начальство" вирішує, що потрібно повністю контролювати трафік. Для контролю контенту лише один варіант – проксі-сервер. Вибір зупинився на досить потужному інструменті – SQUID. Тим більше, що до нього можна "прикрутити" такий інструмент, як SAMS (Squid Account Manager Sams).

Але про все по порядку.

Відштовхуватимемося від того, що Apache, PHP5 і MySQL вже встановлені та налаштовані.

Приступимо безпосередньо до встановлення проксі-сервера Squid

#cd /usr/ports/www/squid && make install clean && rehash

Опції збирання встановлюю наступні:

Options for squid 2.7.7_4

# squid -z 2010/03/16 19:42:23 Creating Swap Directories

Додамо Squid до /etc/rc.conf

#echo '# Proxy-server' >> /etc/rc.conf #echo 'squ' >> /etc/rc.conf

Власне, запуск Squid:

# sh /usr/local/etc/rc.d/squid start Starting squid.

Перевіряємо, чи є Squid у процесах:

#ps-ax grep squid 3675 ?? Is 0:00.00 /usr/local/sbin/squid -D 3677 ?? S 0:00.37 (squid) -D (squid)

Squid запущено та працює. Приступимо до встановлення та налаштування безпосередньо SAMS.

#cd /usr/ports/www/sams && make install clean && rehash

Після завершення встановлення скопіюємо запропонований приклад конфігураційного файлу безпосередньо до файлу конфігурації:

#cp /usr/local/etc/sams.conf.sample /usr/local/etc/sams.conf

Далі керуємо конфігураційний файл до наступногостану:

# cat /usr/local/etc/sams.conf

ім'я бази даних, де SAMS зберігає інформацію, отриману з логів SQUID SQU >

# ім'я бази даних SAMS SAMS_DB = squidctrl

ім'я користувача MySQL, від імені якого буде працювати SAMS MYSQLUSER=sams

# пароль цього користувача MySQL MYSQLPASSWORD= you_password_here

# версія встановленого MySQL-сервера MYSQLVERSION = 5.0

# Ім'я файлу логів SQUID SQU >

шлях до директорії, де лежить конфіг SQUID SQU >

шлях до директорії, де лежить файл логів SQUID SQU >

шлях до кешу SQUID

# необхідний роботи функції відновлення файлів з кешу SQUID SQU >

шлях, куди встановлений SAMS SAMSPATH = / usr / local

шлях, де лежить SQUID SQU >

# і у вас є імена користувачів українською мовою,

# потрібна присутність цього пункту: RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout

# шлях до редиректора REJIK REJIKPATH=/usr/local/rejik

# Команда, що виконується при натисканні на кнопку SAMS "Shutdown proxy server"

# Ця команда додана для зручності віддаленого вимкнення проксі сервера. SHUTDOWNCOMMAND=/sbin/shutdown -h now # Номер проксі-сервера SQUID, зареєстрованого в SAMS.

# SAMS підтримує можливість керування кількома проксі серверами SQUID

# (На даний момент тільки команда на реконфігурування).

Подальше налаштування буде виконано з веб-інтерфейсу. Щоб "дістатись" до нього, необхідно додати наступний блок в httpd.conf:

Alias ​​/sams "/usr/local/share/sams/"

AllowOverride AuthConfig Options Indexes MultiViews Order allow,deny Allow fromall

Також необхідно, щоб PHP працював у Safe Mode. Для цього у php.ini виставляємо наступні змінні:

safe_mode = On safe_mode_exec_dir = "/usr/local/share/sams/bin"

Перевіримо, чи не припустилися помилок при конфігуруванні, і якщо все в порядку, то перезапускаємо демон httpd:

# apachectl configtest Syntax OK# apachectl graceful

sams

Після заповнення форми тиснемо кнопку "Create Database" і спостерігаємо за роботою скрипта. По завершенню створення таблиць буде виведено запрошення перейти до адмін-панелі SAMS:

sams

Додаємо в /etc/rc.conf рядок запуску SAMS:

#echo '# Squid Account Manager Sams' >> /etc/rc.conf #echo 'sams_enable="YES"' >> /etc/rc.conf

Власне, запуск SAMS

# sh /usr/local/etc/rc.d/sams start Starting sams.

Почнемо конфігурування через веб-інтерфейс. Для цього в рядку браузера введемо наступну URL: http:// IP_proxy_servera /sams/

Результат - на скріншоті:

local

Для початку налаштуємо панель "під себе". Для цього переходимо до розділу "WEB interface settings" і тиснемо іконку зміни налаштувань (гайковий ключ внизу сторінки). Для себе я виставив змінні в наступні значення (на скріншоті, що додається):

local

Подальше налаштування вже залежить від конфігурації мережі. Я ж тільки напишу перелік пунктів, які потрібно налаштувати по черзі:

Налаштування SAMS

SAMS -> Адміністрація SAMS -> Налаштування SAMS

Підрахунок трафіку користувачів:

Рахувати трафік:[Повний]

Перетворювати імена DNS[ ]

Рівеньдеталізації записів у журналі[3]

Домен за замовчуванням(залишаємо порожнім)

Виберіть скрипт, який використовується для надсилання повідомлення при відключенні користувачів: [NONE]

Спосіб автентифікації користувача:[IP]

Налаштування samsdaemon

Перевіряти наявність команди на реконфігурування squid кожні[5] секунд

Обробляти логі SQUID[X]

використовуючи:[Запускати обробник логів через N хвилин]

обробляти через[1] хвилин

Автоматично очищати лічильники трафіку користувачів[X]

Шлях до wbinfo:[/usr/bin]

Файл перенаправлення запиту[http:// your.ip.address /sams/icon/classic/blank.gif]

Дорога до каталогу, де лежать файли заборони запиту[http:// your.ip.address /sams/messages]

Редиректор[вбудований SAMS]

Включити обмеження швидкості доступу користувачів (delaypool)[X]

Зберігати дані про трафік у базі за останні[6] місяців

[Зберегти зміни]

SAMS -> Шаблони користувачів

Створення нового шаблону

Назва шаблону:[Users]

Об'єм трафіку користувача шаблону за замовчуванням (Mb):[0]

Швидкість каналу всього шаблону (byte/s):[100000000]

Швидкість каналу для всього шаблону (byte/s):[1250000]

Період ліміту трафіку[місяць]

Пн Вт Ср Чт Пт Сб Вськ

0:00 - 23:59

[Додати шаблон]

SAMS -> Шаблони користувачів -> Users

[x] Banners

[x] Counters

[ ] Доступ заборонено всім URL

[x]

[x] Porno

[x] Localdomains

Обсяг трафікустандартного користувача шаблону (Mb):[0]

Швидкість каналу всього шаблону (byte/s):[100000000]

Швидкість каналу для окремого користувача (byte/s):[1250000]

Період ліміту трафіку[місяць]

Пн Вт Ср Чт Пт Сб Вськ

0:00 - 23:59

[Зберегти зміни]

Користувачі -> Додати користувача

Користувач:[user0]

Домен:[залишаємо порожнім]

Ім'я:[ Username_here ]

По-батькові:[ Username_here ]

Прізвище:[ Username_here ]

Група:[Users]

Дозволений трафік (Мб)[0]

Користувач активний:[x]

Шаблон:[Users]

[Додати користувача]

Локальні домени

писок містить домени, дані щодо доступу до яких користувачів НЕ ЗАВОДЯТЬСЯ в базу логів SQUID. Трафік користувачів за цим доменом не враховується. приклад: linux.perm.ru - трафік з домену linux.perm.ru до бази не вноситься 192.168.0.10 - трафік з хоста 192.168.0.10 до бази не вноситься 192.168. 24 або 192.168.0.0/255.255.255.0 - трафік з підмережі 192.168.0.x до бази не вноситься

SQUID -> Реконфігурування SQUID -> Реконфігурувати

Останній штрих. Додамо останнім рядком до конфігураційного файлу Squid:

redirect_program /usr/local/bin/samsredir

Перезапускаємо Squid, щоб зміни набули чинності.

#sh /usr/local/etc/rc.d/squid restart

Далі у web-інтерфейсі керування задаємо список URL, доступ до яких має бути заблокований, реконфігуруємо Squid та насолоджуємося результатом:

local

P.S. Обробка "напилком"

Післяостаточного налаштування, з'ясувалося, що не працює заборона доступу типу розширення файлу. Уточнив у всезнаючого гугля, і виявилося, що ця проблема існує не тільки в мене. Як варіант вирішення проблеми – створити списки "Заборона доступу за регулярними виразами". Наприклад, щоб заборонити доступ до файлів формату mp3, необхідно додати наступне регулярне вираз:

\..+\/.+\.mp3([\W_]$)

В "System Information" не відображається використання пам'яті та свопу:

Як виявилось, це наслідок того, що SAMS спочатку призначався для Linux. "Лікується" це наступними діями.

Зміна запитів free на top:

1. Правимо /usr/local/share/sams/bin/freemem до наступного стану:

# cat /usr/local/share/sams/bin/freemem

STR=`top grep Mem:` echo $STR

2. Правимо /usr/local/share/sams/bin/freeswap до наступного стану:

# cat /usr/local/share/sams/bin/freeswap

STR=`top grep Swap:` echo $STR

3. Правимо /usr/local/share/sams/src/configtray.php:

# ***** Пропущено ***** #

$a=explode(" ",$value); for($i=1;$i# ***** Пропущено ***** #

# ***** Пропущено ***** #

$a=explode(" ",$value); for($i=1;$i# ***** Пропущено ***** #

Результат (у мене зрушили і некоректно відображаються поля свапа, оскільки: Swap: 2048M Total, 2048M Free):

Squid підтримує так званий "прозорий" режим. Тобто не доводиться налаштовувати кожного клієнта окремо, а можна завернути всіх на проксю примусово. Для цього потрібно внести зміни в налаштування Squid та фаєрвол ipfw. Спочатку змінимо налаштування Squid, для цього в /usr/local/etc/squid/squid.conf, знайдемо рядок:

http_port 3128

і замінимо її на

http_port 3128 transparent

Для того, щоб зміни набули чинності, перестартуємо Squid:

#sh /usr/local/etc/rc.d/squid restart

Налаштування ipfw зводиться до додавання наступного правила:

ipfw add15 fwd127.0.0.1,3128 tcp from192.168.0.0/24 не маю dst-port 80 in recvfxp0

  • у мене номер правила 15, у вас може бути інший;
  • 127.0.0.1,3128 - сокет локалхоста, на якому запущений squ <ВАЖЛИВО! Натрапив на цікавий баг. Якщо ім'я користувача починається з великої літери,Username наприклад, то Squid для цього користувача не рахує трафік (чи вважається трафік, коли зустрічається велика літера в середині або кінці логіну не перевіряв). Якщо ж ім'я користувача написано малими літерами – все нормально.