Интеграция сетевых служб с LDAP

Автор: Andrey Afletdinov
Оригинал: http://sgb.irk.ru/~andrek/

Этот документ - попытка описать как под Linux можно упростить администрирование системы используя директории openLDAP.

Если у вас клиенты Windows пользуются почтой, и вы хотите чтобы пользователи сами меняли свои пароли, то установите сервер LDAP, включите поддержку LDAP на сервере SAMBA и авторизируйте mail сервер через LDAP сервер. И тогда пользователи стандартными средствами (панель управления/пароли) сами смогут менять свои пароли.

Содержание.

  1. bind
  2. sendmail
  3. samba
  4. адресная книга
  5. dhcp



Часть 1. DNS зоны в директориях OpenLDAP.

Первое, что необходимо - это переделать Bind, чтобы он понимал LDAP директории, для этого необходимо скачать архив bind-sdb-ldap. К моменту написания документа последние версии программ которые я использовал это bind-9.2.1 и bind-sdb-ldap-0.9.

Если у вас bind-9.2.2 и выше, то обратите внимание на папку contrib/sdb/ldap.
Распаковываем архивы.
Все ниже приведенные действия описаны в файле bin-sdb-ldap/INSTALL.

Копируем файлы ldapdb.c в директории bin/named и ldapdb.h в bin/named/include исходников BIND. Редактируем файл bin/named/Makefile.in добавляем строки:

DBDRIVER_OBJS = ldapdb.@O@
DBDRIVER_SRCS = ldapdb.c
DBDRIVER_INCLUDES = -I/usr/local/include
DBDRIVER_LIBS = -L/usr/local/lib -lldap -llber -lresolv

Редактируем файл bin/named/main.c:

Все.

Дальше конфигурируем и компилируем BIND так как нам это надо. Так же если выше приведенные действия Вам кажутся сложными, то уже готовый патч для версии BIND-9.2.1 лежит здесь.

Следующий этап - настройка файла named.conf и заполнение директорий LDAP. Для понимания LDAP сервером необходимых значений dns зон - копируем схему dnszone.schema в директорию схем LDAP сервера. Также следует включить схему cosine.sсhema в файл конфигурации slapd.conf.

Разберем на примере небольшую зону (sgb мой внутренний домен):

@       IN    SOA    book.sgb. root.book.sgb. ( 1 8H 2H 1W 1D)
        NS    book.sgb.

localhost     A    127.0.0.1
book          A    192.168.2.1
boss          A    192.168.2.11

Создаем группу DNS в директории LDAP (dc=sgb - это root_ldap директория, и это никак не связано с доменом sgb, просто совпадения :)

dn: ou=DNS,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: DNS
dns
Описание самой зоны sgb:
dn: zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: sgb
dns
dn: relativeDomainName=@,zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: @
nSRecord: book.sgb.
sOARecord: book.sgb. root.book.sgb. 1 8H 2H 1W 1D
dns
Описание записи A для localhost:
dn: relativeDomainName=localhost,zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: localhost
dNSClass: IN
aRecord: 127.0.0.1
dns
Описание записи A для book и boss аналогична:
dn: relativeDomainName=book,zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: book
dNSClass: IN
aRecord: 192.168.2.1
dns
dn: relativeDomainName=boss,zoneName=sgb,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: sgb
relativeDomainName: boss
dNSClass: IN
aRecord: 192.168.2.11
dns

Записываем в ldif файл и добавляем в директорию командой ldapadd. Так же для управления директориями можно установить программу с графическим интерфейсом.

Разберем обратную зону 2.168.192.in-addr.arpa:

@   IN  SOA    book.sgb. root.book.sgb. ( 1 8H 2H 1W 1D)
        NS     book.sgb.

1       PTR    book.sgb.
11      PTR    boss.sgb.
Описание зоны 2.168.192.in-addr.arpa:
dn: zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: 2.168.192.in-addr.arpa
dns
dn: relativeDomainName=@,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: @
nSRecord: book.sgb.
sOARecord: book.sgb. root.book.sgb. 1 8H 2H 1W 1D
dns
Описание записи PTR для book и boss:
dn: relativeDomainName=1,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: 1
pTRRecord: book.sgb.
dns
dn: relativeDomainName=11,zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb
objectClass: top
objectClass: dNSZone
zoneName: 2.168.192.in-addr.arpa
relativeDomainName: 11
pTRRecord: boss.sgb.
dns

Все просто. Полный HOWTO по заполнению dns зон в LDAP с примерами здесь.

Осталось заменить запись зон в named.conf. Если раньше было так:

zone "sgb" in {
    type master;
    files "db.sgb";
};
zone "2.168.192.in-addr.arpa" in {
    type master;
    files "db.2.168.192";
};

Заменяем:

zone "sgb" in {
    type master;
    database "ldap ldap://127.0.0.1/zoneName=sgb,ou=DNS,dc=sgb 178600";
};
zone "2.168.192.in-addr.arpa" in {
    type master;
    database "ldap ldap://127.0.0.1/zoneName=2.168.192.in-addr.arpa,ou=DNS,dc=sgb 178600";
};

Число 178600 это TTL для всех записей где неопределен dNSTTL.

Часть 2. Настройки Sendmail в директориях openLDAP.

Если вы используете sendmail из дистрибутива, то скорее всего он уже скомпилирован с поддержкой LDAP, проверяем:

sendmail -d0.1 -bv root | grep LDAP

В результате должны увидеть строку содержащей слово LDAPMAP. У меня на локальной машине стоит mandrake-8.2 и sendmail уже был собран с поддержкой LDAP.

В противном случае собираем sendmail из исходников. Для этого, перед компиляцией, необходимо добавить в файл devtools/Site/site.config.m4 следующие строки:

APPENDDEF(`confMAPDEF', `-DLDAPMAP')
APPENDDEF(`confLIBS', `-lldap -llber')
APPENDDEF(`confINCDIRS', `-I/usr/local/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/lib')

Соответственно должны быть уже установлены библиотеки openLDAP, измените путь usr/local там где они у вас находится. Настройка sendmail сводится к добавлению строк в файл конфигурации sendmail.mc, с последующим его преобразованием в cf.

-информация о сервере LDAP (ldap.sgb - сервер LDAP, dc=sgb root директория)
define(`confLDAP_DEFAULT_SPEC',`-h ldap.sgb -b dc=sgb')dnl
-для aliases
define(`ALIAS_FILE',`ldap:')dnl
-для access
FEATURE(`access_db',`LDAP')dnl

Если используем virtusertable, domaintable и т.д.,то для них тоже самое по аналогии с access. Ориентируемся по таблице:

FEATUREsendmailMTAMapName
access_db LDAP access
authinfo LDAP authinfo
bitdomain LDAP bitdomain
domaintable LDAP domain
genericstable LDAP generics
mailertable LDAP mailer
uucpdomain LDAP uucpdomain
virtusertable LDAP virtuser

Я кроме aliases и access ничего больше не использовал в связи с простотой моего локального сервера sendmail.

На стороне сервера LDAP необходимо добавить схему sendmail.schema в директорию схем и внести путь в конфигурационный файл slapd.conf.

Заполняем директории LDAP.

Создаем группу mail. В ней у нас будут находится все связанное с sendmail

dn: ou=mail,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: mail

Создаем группу aliases. В ней будут храниться записи aliases

dn: ou=aliases,ou=mail,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: aliases

Создаем группу access. В ней будут хранится записи access

dn: ou=access,ou=mail,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: access

Все эти записи, вносим в ldif файл и добавляем в каталоги LDAP комадой ldapadd, либо используем программы с графическим интерфейсом.

Aliases.

Разберем на примере файл aliases:

bin: root
daemon: root
games: root
nobody: root
system: root
manager: root
root: andrek

Описание записи bin

dn: sendmailMTAKey=bin,ou=aliases,ou=mail,dc=sgb
objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
sendmailMTAHost: boss.sgb
sendmailMTAAliasGrouping: aliases
sendmailMTAKey: bin
sendmailMTAAliasValue: root

Описание записи daemon

dn: sendmailMTAKey=daemon,ou=aliases,ou=mail,dc=sgb
objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAAlias
objectClass: sendmailMTAAliasObject
sendmailMTAHost: boss.sgb
sendmailMTAAliasGrouping: aliases
sendmailMTAKey: daemon
sendmailMTAAliasValue: root

В поле sendmailMTAHost указываем имя sendmail сервера, для которого действует альяс. Остальные альясы (games, nobody, manager и т.д.) вносим аналогично.

Access.

Разберем на примере файл access.

localhost.localdomainRELAY
localhost RELAY
127.0.0.1 RELAY
192.168.2 RELAY

Описание записи localhost.localdomain

dn: sendmailMTAKey=localhost.localdomain,
         ou=access,ou=mail,dc=sgb
objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAMap
objectClass: sendmailMTAMapObject
sendmailMTAMapName: access
sendmailMTAKey: localhost.localdomain
sendmailMTAMapValue: RELAY

Описание записи 192.168.2

dn: sendmailMTAKey=192.168.2,ou=access,
     ou=mail,dc=sgb objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAMap
objectClass: sendmailMTAMapObject
sendmailMTAMapName: access
sendmailMTAKey: 192.168.2
sendmailMTAMapValue: RELAY

Остальные записи (localhost, 127.0.0.1 и т.д.) также аналогичны.

Virtusertable, mailertable, domaintable и т.д.

Заносятся по аналогии с access. С изменением поля sendmailMTAKey (см. таблицу) и необходимых значений в sendmailMTAKey и sendmailMTAValue. Так же это все достаточно хорошо описано с примерами в документации к sendmail.

Учетные записи пользователей

На сервере sendmail достаточно включить авторизацию пользователей LDAP:

После этого добавление пользователей сведется к добавлению учетных записей в каталог LDAP. Администратору останется только прописать нужные альясы на пользователей.

Часть 3. Интеграция сервера SAMBA-2.2.X в директории LDAP.

1. Действия на стороне LDAP сервера.

Копируем из исходников samba схему .../examples/LDAP/samba.schema в каталог схем сервера LDAP. Также для ее правильной работы необходимы cosine.schema и inetorgperson.schema, добавляем соответствующие записи в slapd.conf.

Установите доступ на чтение полей (lmpassword, ntpassword) только администратору.

Редактируем файл slapd.conf:

access to dn=".*,dc=sgb" attr=lmPassword
by dn="cn=admin,dc=sgb" write
by self write
by * auth

access to dn=".*,dc=sgb" attr=ntPassword
by dn="cn=admin,dc=sgb" write
by self write
by * auth

Перезапускаем LDAP, для принятия изменений.

2. Действия на стороне Samba сервера.

Устанавливаем пакеты openldap, openldap-client, openldap-devel. Перекомпилируем Самбу с опциями --with-ldapsam. В конфигурационном файле smb.conf, определяем следующие опции:

[global]
ldap server = ldap.sgb
ldap suffix = dc=sgb
ldap admin dn = cn=admin,dc=sgb
ldap filter = (&(uid=%u)(objectclass=sambaAccount))
ldap port = 389
ldap ssl = no

Таким образом SAMBA будет взаимодействовать с сервером LDAP от имени учетной записи администратора LDAP. Лучшим решением будет создание отдельной учетной записи (samba_admin) на сервере LDAP, которая имееет право на чтение-запись необходимых полей. Запускаем сервер samba, и сохраняем пароль администратора командой:

smbpasswd -w пароль admin

Все! Дальше работаем с ним удаленно.

3. Действия на стороне компьютера сисадмина.

Устанавливаем пакет openldap-client. Создаем smb клиентов. Для каждого достаточно создать что нибудь похожее на это:

dn: uid=sandy,ou=Users,dc=sgb
objectClass: top
objectClass: posixAccount
objectClass: sambaAccount
homeDirectory: /home/sandy
uidNumber: 502
gidNumber: 502
uid: sandy
pwdLastSet: 1036581625
logonTime: 0
logoffTime: 2147483647
kickoffTime: 2147483647
pwdCanChange: 0
pwdMustChange: 2147483647
displayName: SandySandy
cn: SandySandy
rid: 2004
primaryGroupID: 2005
lmPassword: B3174F63722E157EAAD3B435B51404EE
ntPassword: 6AAB3EA1D7A717FF9A3BFC222B846A7B
acctFlags: [UX]
loginShell: /bin/false

Обратите внимание на Account Flags ( U - пользовательский аккаунт, D - учетная запись заблокирована, N - без использования пароля, W - машинная учетная запись).

Записать в ldif файл, и добавить информацию в директорию LDAP. По теории проверенной практикой пользователь sandy уже может подключиться к sambe.

Этот трудоемкий путь нам не подойдет, скачиваем пакет скриптов smbldap-tools, либо если у вас samba одна из последних версий смотрим в examples/LDAP/smbldap-tools. В нем уже есть набор необходимых утилит:

Названия говорят сами за себя. Для того чтобы ими воспользоваться необходимо отредактировать значения в smbldap_conf.pm:

#
# UID and GID starting at...
#
$UID_START = 2000;
$GID_START = 2000;

#
# Slave LDAP : needed for read operations
#
$slaveLDAP = "ldap.sgb";

#
# Master LDAP : needed for write operations
#
$masterLDAP = "ldap.sgb";

#
# LDAP Suffix
#
$suffix = "dc=sgb";

#
# Where are stored Users
#
$usersou = q(Users);
$usersdn = "ou=$usersou,$suffix";

#
# Where are stored Computers
#
$computersou = q(Computers);
$computersdn = "ou=$computersou,$suffix";

#
# Where are stored Groups
#
$groupsou = q(Group);
$groupsdn = "ou=$groupsou,$suffix";

#
# Credential Configuration
#
# Bind DN used
$binddn = "admin";

#
# Bind DN passwd used
$bindpasswd = "secret";

# Login defs
#
# Default Login Shell
#
$_userLoginShell = q(/bin/bash);

#
# Home directory prefix (without username)
#
$_userHomePrefix = q(/home/);

#
# Default User (POSIX and Samba) GID
#
$_defaultUserGid = 2000;

#
# Default Computer (Samba) GID
#
$_defaultComputerGid = 553;

#
# The UNC path to home drives location without the username last extension
# (will be dynamically prepended)
$_userSmbHome = q(\\a\homes);

#
# The UNC path to profiles locations without the username last extension
# (will be dynamically prepended)
$_userProfile = q(\\a_\profiles\);

#
# The default Home Drive Letter mapping
# (will be automatically mapped at logon time if home directory exist)
$_userHomeDrive = q(H:);

#
# Allows not to use smbpasswd (if $with_smbpasswd == 0 in smbldap_conf.pm) but
# prefer mkntpwd... most of the time, it's a wise choice :-)
$with_smbpasswd = 0;
$smbpasswd = "/usr/bin/smbpasswd";
$mk_ntpasswd = "/usr/local/sbin/mkntpwd";

и т.д.

Обратите внимание на последний параграф - используется утилита mkntpwd. Ее исходники есть в smbldap-tools. Так же группы Users, Group, Computers должны быть уже созданы:

dn: ou=Users,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: Users

dn: ou=Group,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: Group

dn: ou=Computers,dc=sgb
objectClass: top
objectClass: organizationalUnit
ou: Computers

4. Пользователи меняют сами свои пароли.

Устанавливаем и настраиваем пакет скриптов smbldap-tools, на севере SAMBA. В конфигурационный файл smb.conf добавляем строки:

passwd program = /usr/local/bin/smbldap-passwd.pl %u
unix password sync = yes
passwd chat = *new*password* %n\n *new*password* %n\n *updated*successfully*

Обратите внимание на passwd chat. Эти значения нам возвращает smbldap-passwd.pl при смене пароля.

После этого, перегружаем сервис для принятия изменений. Теперь пользователи могут сами поменять свои пароли через сервис панель управления-пароли.

5. Мусорная корзина

С самого начала создания файлового сервера, моим пользователям, "любители хранить самое ценное в мегабайтных корзинах", нехватало именно этого - мусорной сетевой корзины. Сначало я не задавался этим вопросом: в виндовсе нет, значит и в самбе тоже нет и написал скрипт для архивации /home. Но каково было мое удивление когда изучая материалы по examples/LDAP и мимолетом осматривая остальные каталоги - увидел знакомое слово recycle.

Вся ниже следующая информация взята из examples/VFS/recycle/README

Необходимый нам модуль recycle.so собран в каталоге recycle.

Настройка сводится к добавлению ресурсу следующих строк:

vfs object = /usr/share/samba-2.2.6/recycle.so
vfs options = /etc/samba/recycle.conf

Пример recycle.conf:

# Название recycle bin относительно ресурса
name = .recycle/%U

# максимальный размер файла (0 без проверки)
maxsize = 0

# KEEP_DIRECTORIES = сохранить иерархию директорий
# VERSIONS = создавать копии идентичных файлов
# TOUCH = touch access date of files moved into the recycle bin
mode = KEEP_DIRECTORIES|VERSIONS|TOUCH

# пропускать файлы:
exclude = *.tmp|*.temp|*.o|*.obj|~$*

# пропускать папки:
excludedir = /tmp|/temp|/cache

# Add file extensions of files where no versioning is wanted (i.e. copy # 1...)
# only valid when mode=VERSIONS is set
noversions = *.doc|*.xls|*.ppt

Запускаем самбу, и наслаждаемся.

Так же могут быть интересны модули audit.so block.so.
audit.so - модуль ведения логов на следующие операции:

block.so - модуль блокировки символических ссылок.

Часть 4. Адресная книга.

После того как будет заведена база пользователей, можно воспользоваться услугами адресной книги. Я воспользовался клиентом KMail для проверки, после непродолжительного поиска в список попали все пользователи включая и samba пользователей. Но с незаполнеными полями mail, address и т.д. Что не трудно исправить, добавив схему inetorgperson.schema и заполнив соостветствующие поля.

Часть 5. DHCP.

Скачиваем последнюю версию пакета dhcp.
Скачиваем патч для dhcpd.
На момент написания документа последняя версия dhcpd-3.0.1rc11.

Если у вас более свежая версия посетите сайт разработчиков, и загрузите необходимый патч.

Перед компиляцией раскомментируем строку #define LDAP_CONFIGURATION в файле includes/site.h. Запускаем ./configure. Добавляем в файл linux-2.2/server/Makefile слово -lldap в LIBS= линию.

Все эти действия описаны в readme.ldap. Далее make и make install.

Содержание нового конфигурационного файла dhcpd.conf будет таким:

ldap-server "ldap.sgb";
ldap-port 386;
ldap-username "cn=dhcp,dc=iarz";
ldap-password "blabla";
ldap-base-dn "dc=iarz";
ldap-method dynamic;

Действия на стороне ldap сервера.

Копируем файл contrib/dhcp.schema в каталог схем, и добавляем необходимые записи в slapd.conf. Ограничим права на информацию только для администратора dhcp.

access to dn=".*,ou=dhcp,dc=iarz"
by dn="cn=dhcp,dc=iarz" write
by self write
by * auth

Создаем пользователя dhcp и группу dhcp где будет хранится нужная информация, вот примерный ldif файл:

dn: cn=dhcp,dc=iarz
objectClass: top
objectClass: person
sn: DHCP Administrator
cn: dhcp

dn: ou=dhcp,dc=iarz
objectClass: top
objectClass: organizationalUnit
ou: dhcp

Незабудьте задать пароль для пользователя dhcp.

Далее загружаем информацию зон dhcp в ldap. Рассмотрим на примере небольшой (старый) файл конфигурации dhcp.conf:

option domain-name "iarz";
option domain-name-servers ns.iarz;
ddns-update-style interim;

default-lease-time 32400;
max-lease-time 64800;

key DHCP_UPDATER {
    algorithm HMAC-MD5.SIG-ALG.REG.INT;
    secret SgBXABCDEFGHIJKLMNB75A==; }

zone iarz. {
    primary 127.0.0.1;
    key DHCP_UPDATER; }

zone 0.0.192.IN-ADDR.ARPA. {
    primary 127.0.0.1;
    key DHCP_UPDATER; }

subnet 192.168.1.0 netmask 255.255.255.0 {
    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    range dynamic-bootp 192.168.1.60 192.168.1.90; }

subnet 192.168.2.0 netmask 255.255.255.0 {
    option routers 192.168.2.1;
    option subnet-mask 255.255.255.0;
    range dynamic-bootp 192.168.2.60 192.168.2.90; }

Для его трансформации в ldif файл, можно воспользоваться перловым скриптом (находится тамже), но он не дает той гибкости необходимой нам.

Как делал я: смотрел в генеренный файл, писал свой и отслеживал ошибки в /var/log/message. Ниже приведен аналогичный ldif файл для загрузки:

dn: ou=dhcp,dc=iarz
objectClass: top
objectClass: organizationalUnit
ou: dhcp
dns
dn: cn=dhcp.iarz,ou=dhcp,dc=iarz
objectClass: top
objectClass: dhcpServer
cn: dhcp.iarz
dhcpServiceDN: cn=config, ou=dhcp, dc=iarz
dns
dn: cn=config,ou=dhcp,dc=iarz
objectClass: top
objectClass: dhcpService
objectClass: dhcpOptions
cn: config
dhcpPrimaryDN: cn=ns.iarz, ou=dhcp, dc=iarz
dhcpOption: domain-name "iarz"
dhcpOption: domain-name-servers ns.iarz
dhcpOption: nis-domain "iarz"
dhcpStatements: ddns-update-style interim
dhcpStatements: default-lease-time 32400
dhcpStatements: max-lease-time 64800
dhcpStatements: key DHCP_UPDATER
     { algorithm HMAC-MD5.SIG-ALG.REG.INT
dhcpStatements: secret SgBXABCDEFGHIJKLMNB75A==
dhcpStatements: } zone iarz.
     { primary 127.0.0.1; key DHCP_UPDATER
dhcpStatements: } zone 0.0.192.IN-ADDR.ARPA.
     { primary 127.0.0.1; key DHCP_UPDATER
dhcpStatements: } #


dns
dn: cn=192.168.1.0,cn=config,ou=dhcp,dc=iarz
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
cn: 192.168.1.0
dhcpNetMask: 24
dhcpRange: dynamic-bootp 192.168.1.60 192.168.1.90
dhcpOption: routers 192.168.1.1
dhcpOption: subnet-mask 255.255.255.0


dns
dn: cn=192.168.2.0,cn=config,ou=dhcp,dc=iarz
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
cn: 192.168.2.0
dhcpNetMask: 24
dhcpOption: routers 192.168.2.1
dhcpOption: subnet-mask 255.255.255.0
dhcpRange: dynamic-bootp 192.168.2.60 192.168.2.90
dns

Все, можно запускать service dhcp start. Если не пошло, читаем readme.ldap и /var/log/messages при запуске сервера. Здесь нет информации по присвоению ip-mac адресов, добавлю позже, но это не трудно поднять самим после ознакомления с документацией.

Часть 6. Proxy SQUID.

1. Авторизация используя модуль NTLM через Windows домен.
2. Авторизиция используя модуль LDAP.
...
Почти готово
Тестируем :)

Часть 7. Поднимаем SSL.

...


Ссылки на использованную документацию и программы.