Авторизация 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, должно работать!