Как я пытался авторизовать пользователей Squid'a c помощью серверов Novell
и что из этого вышло.
1. Что необходимо.
Компьютер с ОС Linux, на котором будет работать squid. Сервера Novell
Netware. Время. Руки. Мозги.
Для кэширующего прокси-сервера я использую Compaq Proliant 2500 с двумя
процессорами PPro 200мгц, 768мб памяти, 27гб RAID-5 (в общем, что под руку
попало). Такой машинки вполне хватает что бы обеспечивать интернетом маленькую
компанию, ежемесячно выкачивающую более 100гб траффика и еще остается
(загрузка около 10%). ОС - линукс Slackware, Gentoo, (далее по вкусу).
Вообще-то у меня много серверов Novell, но годятся только версии 5 или 5.1
(6-ки у меня нет) - мы же не хотим использовать IPX? Впрочем и с IPX все
работает. Даже на 4.х и 3.х . Говорят что годятся 4-ки с Netware-IP но у меня
этого зверя нет.
2. Подготовка.
На прокси-сервер устанавливаем, если там еще нет, пакет pam. Собираем
squid с поддержкой pam. Нам нужен squid-2.5STABLE1 или более свежий. Собираем
пакет ncpfs-2.2.3 (или более свежий) c опциями "--enable-pam --disable-ipx-tools
--disable-ipx". Пересобираем ядро с поддержкой ncpfs (а это зачем?).
3. Настройка.
В squid.conf добавляем:
auth_param basic program /path/to/pam_auth # мы используем модуль pam-аутенификации
auth_param basic children 5 # сколько их будет работать, однако 5 мне мало
auth_param basic realm Squid proxy-caching web server # как squid будет представляться при запросе пароля
auth_param basic credentialsttl 2 hours # без комментариев (потом в доках посмотрю)
Там же еще нужен acl, который бы сказал squid'у у кого собственно
спрашивать пароли. Надеюсь до этих изменений squid работал?
Правим /etc/pam.d/squid (или где он там):
auth required /lib/security/pam_ncp_auth.so ndsserver=SERVERNAME
session required /lib/security/pam_ncp_auth.so
Проверяем что ip адрес сервера SERVERNAME прописан в DNS или /etc/hosts.
SLP не работает, по крайней мере с текущими версиями программ. Любителям
файрволов: нам нужен доступ с прокси-сервера к серверу(ам) Netware по портам
524/tcp и 524/udp.
Убеждаемся, что [public] имеет права {browse, compare} по всему дереву
или нужной его части. Все.
4. Проверка.
Все должно уже работать, но на всякий случай:
Запускаем с консоли pam_auth, вводим через пробел имя пользователя (без
контекста!) и пароль. Желательно что бы это было имя и пароль самого главного
админа и побольше пользователей вокруг монитора собрать! В ответ нам должны
сказать OK. Если нет, добавляем в /etc/pam.d/squid опцию -d и после очередного
эксперимента внимательно изучаем логи.
После этого можно запускать squid и проверять все целиком.
5. Маленькие хитрости.
При этих настройках пользователям squid'а совсем не обязаиельно иметь
учетные записи в линуксе, достаточно быть зарегистрированными в NDS.
С пакетом ncpfs поставляются плагины для nwadmin'а. Здесь они нам не нужны.
Squid будет пускать всех, кто сможет зарегистрироваться в NDS. Если
надо пускать только избранных то создаем группу, например Squid.Orgunit.Org,
назначаем членами группы только тех, кому нужен интернет, и редактируем
/etc/pam.d/squid:
auth required /lib/security/pam_ncp_auth.so ndsserver=SERVERNAME/Squid.Orgunit.Org
Имя группы надо указать целиком, вместе с контекстом. Проверяем, что сервера,
которые будут авторизовать пользователей имеют реплику (без группы это было
необязательно, хватало и Subordinare Reference или как ее там).
Поскольку разрешение имени сервера происходит с помощью DNS, то можно
распределить нагрузку на несколько серверов прописав в DNS несколько
ip-адресов на SERVERNAME (SERVERNAME может не быть реальным именем сервера).
6. Удивительное рядом.
Выкинул поддержку ncpfs из ядра - все работает.
7. О грустном.
Данное решение совершенно бесплатно. И не ест лицензий. Что не идет на
пользу фирме Novell. Но уговорить начальство заплатить 30000 баксов за
лицензии BorderManager'а я никак не могу. И в итоге все катится в ...M$.