Squid на практике. Авторизация Squid через mysql_acl

О чем этот текст?

Если на предприятии есть Интернет, значит это кому-нибудь нужно. Организовать доступ пользователей предприятия в Интернет - простая задача. Однако она имеет множество решений, простых и не очень. Сложных и очень сложных. Тяжелых и требующих титанических усилий. Невероятных и невыполнимых. Этот материал рассказывает об одном из вариантов - авторизация с помощью приложения mysql_acl_0.1. Как видно из названия, авторизация будет на основе базы данных MySQL. Установка модуля производилась на OpenSUSE, но должно пойти и на других *nix.

Особая благодарность

Пользователю evgeniy. За предоставленный оригинальный текст и разрешению на его публикацию на нашем проекте. Оригинал публикации.

Обращение к тебе от Автора оригинала

Так уж получилось, в силу жизненных обстоятельств изучал в школе немецкий. Кроме того модуль mysql_acl_0.1 имеет достаточно много возможностей о которых вы сами можете узнать на сайте проекта модуля http://onebithq.com/root/squid/mysqlacl

Примечание

Прежде чем рвануть в бой убедись, что ты понимаешь назначение следующих тегов:

И проверить наличие установленного MySQL.

Основная часть

В первую очередь скачивай модуль с http://onebithq.com/root/download/squid/mysqlacl. Распаковывай и смотри. По вкусу исправляй пути в Мakefile, и в define.h, либо вообще ничего не исправляй, если все устраивает.При сборке понадобиться базовый пакет разработки Suse и libmysqlclient-devel.Собираем, make, устанавливаем make install. Файл конфигурации(mysql_acl.conf) у нас живет в /etc/squid а модуль mysql_ acl живет в /usr/libexec. Переименовывай исходный mysql_acl.conf в нем куча полезных примеров и настраивай. Самая простая настройка ниже с комментариями:

адрес сервера MySQL

hostname localhost

Имя базы данных MySQL по умолчанию: 'mysql_acl'. Название какое ты сам выбрал. Создание базы смотри ниже.

database test

пользователь базы данных по умолчанию: www. Пользователя нужно будет создать. Для теста можешь из под root, но это небезопасно.

username www

Пароль пользователя для базы данных, по умолчанию:

squidpassword squid

mysqld socket по умолчанию:

mysqld_socket /tmp/mysqld.sock

для SUSE:

mysqld_socket /var/run/mysql/mysql.sock

порт базы mysql:

mysqld_port 3306

проверка IP и разрешения на выход в инет

squidparams %SRCsqlquery default eq,direct,break select 1 from users where ipuser="%SRC" and activ="1"
sqlquery default eq,direct select 0

вариант с авторизацией по логину и паролю

squidparams %LOGIN %PASSWDsqlquery default eq,direct,break select 1 from users where login="%LOGIN" and password="%PASSWD"
sqlquery default eq,direct select 0

Любым удобным для тебя способом создавай таблицу пользователей в MySQL. Примерный вариант можешь сделать как у нас или добавить что-нибудь. Или вообще ничего не создавать если у тебя уже есть она.

CREATE TABLE users(
id int(11) NOT NULL auto_increment,
login varchar(16) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default 'NO NAME',
ipuser varchar(32) NOT NULL default '0.0.0.0',
activ tinyint(1) NOT NULL default '1',
PRIMARY KEY (id))ENGINE=INNODB;

Для теста добавь тестовый логин и IP пользователя, если предполагается авторизация по логину и паролю то и пароль соответственно. На всякий случай если не понял предыдущее предложение - оба варианта:

INSERT INTO users (login, password, ipuser)VALUES('user1','paswuser1','192.168.0.5')

Переходи к тестированию: в каталоге с собранным mysql_auth выполняй последовательно:

1. Запуск программы - ./mysql_acl
2. Просто Enter результат -- ERR
3. Комбинацию из цифр 12345.. -- ERR
4. Любой IP которого нет в базе -- ERR
5. IP в базе 192.168.0.5 результат - ОK
6. Меняем в состояние в поле activ с 1 на 0 192.168.0.5 результат - ERR
7. Если используется логин/пароль все аналогично.

Модуль работает осталось подружить его с Squid.

В squid.conf добавить

Вариант 1: Доступ по IP MySQL

external_acl_type mysql_acl %SRC /usr/libexec/mysql_acl
acl acl_mysql external mysql_acl squidparams

Вариант 2: доступ по логину/паролю MySQL

external_acl_type mysql_acl %LOGIN %PASSWD /usr/libexec/mysql_acl
acl acl_mysql external mysql_acl squidparams

Разрешаем подключение по IP (База данных MySQL)

http_access allow acl_mysql

Перезапускай Squid, должно работать!

 




Ссылки:

К содержанию
squid.conf по-русски по секциям
squid.conf по-русски по тэгам
Анализатор логов Squid

© Copyright 2004-2017 - CMS Made Simple
Сайт работает на CMS Made Simple version 1.4.1

© Все печеньки Break-people.ru принадлежат авторам проекта.

Яндекс цитирования Рейтинг@Mail.ru Яндекс.Метрика