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 |

Після заповнення форми тиснемо кнопку "Create Database" і спостерігаємо за роботою скрипта. По завершенню створення таблиць буде виведено запрошення перейти до адмін-панелі 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/
Результат - на скріншоті:

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

Подальше налаштування вже залежить від конфігурації мережі. Я ж тільки напишу перелік пунктів, які потрібно налаштувати по черзі:
Налаштування 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 та насолоджуємося результатом:

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 для цього користувача не рахує трафік (чи вважається трафік, коли зустрічається велика літера в середині або кінці логіну не перевіряв). Якщо ж ім'я користувача написано малими літерами – все нормально.