четверг, 28 июля 2011 г.

Exim + группы рассылки в Active Directory.

Давно уже сделана была фича (если не ошибаюсь в начале 2010 года), но только сейчас дошли руки написать заметку и включить ее в конфигурационных файлах.
Суть: ищется в AD группа рассылки (grouptype=2) и если в поле «Эл. адрес» значение совпадает с текущим обрабатываемым адресом, то составляется список из почтовых адресов членов данной группы, обрабатываемых отдельно. Применение: организация рассылки сообщений для нескольких пользователей, используя один адрес.

Был добавлен следующий функционал, а именно условие по которому на адреса данной группы могут писать ТОЛЬКО пользователи из определённых подсетей (свои подсети, подсети партнеров и т.п.) ИЛИ если в описании группы AD есть какое-то ключевое слово (public). Т.е., по умолчанию на адрес группы рассылки могут писать только пользователи «серых» бадмовских подсетей, если вам необходимо, чтобы на этот адрес писали извне — просто добавьте в поле «Description (описание)» в Active Directory слово public ИЛИ добавьте подчеть клиента/клиентов в файл /etc/exim/allow_send_to_adgroup.

Итак, данный роутер у меня вставляется ПОСЛЕ роутера dnslookup и ДО роутера ldapuser, что вполне логично. Переменные:
ldap_default_servers = <; 172.ХХ.***:3268 ; 10.1.***:3268
LDAP_AD_BINDDN =${quote_ldap:CN=exim,CN=Users,DC=****,DC=com}
LDAP_AD_PASS =123123
LDAP_AD_BASE =DC=********,DC=com
LDAP_AD_RCPT =user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?mail?sub?\
(&\
(|\
(objectclass=user)(objectclass=person)\
)\
(!(userAccountControl:1.2.840.113556.1.4.803:=2))\
(mail=${quote_ldap:$local_part}@${quote_ldap:$domain})\
)


Файл со списками подсетей, которым разрешено писать на групповые адреса (указываются в основном частные "серые" подсети, хотя можно указать и "белые" - выбор за Вами).
cat /etc/exim/allow_send_to_adgroup
#10.0.0.0/8
172.16.0.0/12


Немного о данном роутере. Роутер redirect не имеет опции transport, потому как при срабатывании генерирует один (или ни одного) или несколько адресов. Данные адреса либо возвращаются в начало процесса роутинга, либо передаются указанному роутеру (см. опцию redirect_router). В поле data возвращается список адресов для обработки. Поиск среди групп рассылки, для которых в поле «Эл. адрес» указан заданный адрес для проверки, результат, возвращаемый функцией ldapm — список DN, разделенных запятыми. Для данного списка применяется функция sg, которая заменяет символы ", " (запятая и пробел) на \n. Затем этот список DN\nDN\n подается на вход функции map, которая для каждого DN вытягивает поле mail. Полученный список mail\nmail\n подается на вход функции sg, которая заменяет \n на ", " (запятую и пробел).
Условие, написанное мной намного проще. ЛИБО адрес IP-адрес отправителя является разрешенным (входит в указанные в файле allow_send_to_adgroup диапазоны), ЛИБО для заданного эл. адреса ищется поле описание (description) группы, и если оно совпадает с заданным мной ключевым словом (в данном случае - public), то роутер отправляется искать данные для редиректа (собственно, все те действия, что описаны выше).

adsi_group_check:
driver = redirect
domains = +local_domains
allow_defer
condition = \
${if or{ \
{ eq {${lookup ldap{ \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?description?sub?\
(&\
(objectClass=group)\
(grouptype=2)\
(mail=${quote_ldap:${local_part}@${domain}})\
)\
}}}{public}}\
{match_ip{$sender_host_address}{iplsearch;/etc/exim/allow_send_to_adgroup}}\
}\
}
data = ${sg{${map {<\n \
${sg{${lookup ldapm { \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE?member?sub?\
(&\
(objectClass=group)\
(grouptype=2)\
(mail=${quote_ldap:${local_part}@${domain}})\
)\
}}}{\N, \N}{\n}}} \
{${lookup ldap{ \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///${quote_ldapdn:$item}?mail?base?}} \
}}}{\N\n\N}{, } \
}
redirect_router = ldapuser


Проверка:
usr/sbin/exim -bt -bh 85.XX.XX.18 testgroup
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing testgroup@**********.ua
calling system_aliases router
system_aliases router declined for testgroup@********.ua
calling userforward router
userforward router declined for testgroup@*******.ua
********.ua in "+local_domains"? yes (matched "+local_domains" - cached)
********.ua in "+local_domains"? yes (matched "+local_domains" - cached)
calling adsi_group_check router
routed by adsi_group_check router
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
routing test@*********.ua
*********.ua in "+local_domains"? yes (matched "+local_domains")
calling ldapuser router
routed by ldapuser router
test@***********.ua
<-- testgroup@***********.ua
router = ldapuser, transport = dovecot_delivery

Может возникнуть вопрос — почему использовалась конструкция -bh 85.XX.XX.18?
Потому как при проверке условия в переменной $sender_host_address должен быть указан адрес отправителя, а в нашем случае он пуст, следовательно, такая проверка не пройдет.

Теперь небольшое howto как сделать группу рассылки:

1. создать в Active Directory группу рассылки

2. назначить ей e-mail адрес, опционально, внести в поле Description слово public.
3. добавить в данную группу нескольких пользователей

4. отправить на данный адрес письмо
5. проверить, что письмо получено всеми членами группы.

Инвентаризация. Где посмотреть в Linux какое железо установлено.

Небольшая памятка для себя.

Как узнать общий объем оперативной памяти:
cat /proc/meminfo | grep Total | head -1

Как узнать какие процессоры установлены и их характеристики:
cat /proc/cpuinfo

Как посмотреть параметры видеокарты
xdpyinfo
glxinfo
xvinfo


Как получить список PCI-устройств и их характеристик:
/sbin/lspci -v

Как не разбирая корпус посмотреть модель материнской платы:
sudo dmidecode

Краткая информация о SCSI-устройствах:
cat /proc/scsi/scsi

Более подробная информация о конкретном SCSI-устройстве:
sudo hdparm -i /dev/sda

среда, 27 июля 2011 г.

Обновление прошивки на Dlink DES-3010FL.

Недавно попала в руки такое устройство — Dlink DES-3010FL. Нужно было настроить разделение vlanов, приходящих от провайдера по 2-3 портам. Т.е. от провайдера приходит trunk (tagged)-порт с несколькими vlan, нужно отдать один untagged-порт для инэт-сервера, один-для cisco-роутера. Вот такая замечательная задача.
Схема подключения:
Распаковываем, подключаем консольный порт к компьютеру. Скачиваем документацию по устройству.
Настраиваем minicom (9600, 8 бит данных, 1 стоповый бит и отсутствие контроля по четности) или putty, кому что нравится.
Далее следует нажать клавишу Enter в полях Имя пользователя (User name) и Пароль (Password), т.к. по умолчанию они не заданы.
Show switch — смотрим информацию об устройстве
Настраиваем ip-адрес — config ipif System ipaddress 10.1.19.126 /8
На ftp-сервере ftp.dlink.ru имеется новая прошивка.
Чтобы обновить установленную версию программного обеспечения для коммутаторов серии DES/DHS-3000, сначала нужно обновить версию PROM до 30xx_prom_1.01.009.had, а только затем обновлять версию текущего программного обеспечения коммутатора. В противном случае коммутатор может работать некорректно.
Скачиваем нужные файлы для прошивки:
wget -с ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES_3000_BootPROM/30xx_prom_1.01.009.had
wget -c ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES3000_V4.20.027.had
Перегружаем коммутатор — reboot
нажимаем ‘#’(SHIFT + 3), чтобы перейти в режим обновления до полной загрузки новой версии программного обеспечения.
Изменяем скорость в бодах на 115200bps (Ctrl+a+Z, выбираем пункт изменить скорость порта в minicom), затем с помощью протокола zModem загружаем 30xx_prom_1.01.009.had (Ctrl+a+Z, выбираем пункт S, загрузка файлов). После завершения загрузки произойдет автоматическая перезагрузка системы.
После завершения перезагрузки коммутатора остаётся загрузить новое программное обеспечение с помощью сервиса TFTP (предварительно поднял tftpd и положил в нужную папку переименованный файл с прошивкой).
После успешного обновления и перезагрузки, логинимся и наблюдаем
Литература:
ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Description/DES-30xx_UG_R3_RUS.pdf
ftp://ftp.dlink.ru/pub/Switch/DES-3000%20Series/Firmware/DES_3000_BootPROM/DES-3000_HOWTO_upgrade_PROM_code.doc

суббота, 16 июля 2011 г.

VMware+RHEL6: BAR 13 can't allocate io resource

Имеется VMware ESXi 4.1u1, в нем запущена виртуалке с RHEL6.1. В лог-файле /var/log/messages заметил такие ошибки, штук 7-8
vRHEL kernel: pci 0000:00:15.7 BAR 13 can't allocate io resource.
Что же за устройства сидят на PCI-шине по такому адресу:
#lspci
00:11.0 PCI bridge: VMware PCI bridge (rev 02)
*****
00:15.5 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.6 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.7 PCI bridge: VMware PCI Express Root Port (rev 01)
*****
Слишком много, надо убрать минимум половину - меньше устройств - меньше грузиться будет, меньше памяти выделять и т.п.

Выключаем виртуалку.
Находим vmx-файл (конфигурационный файл) виртуалки vRHEL.vmx в моем случае.
ОБЯЗАТЕЛЬНО делаем резервную копию этого файла.
cp vRHEL.vmx vRHEL.vmx.good
Редактируем файл, убирая лишние записи
pciBridgeX.present = "TRUE" 
pciBridgeX.virtualDev = "pcieRootPort"
pciBridgeX.functions = "8"
pciBridgeX.pciSlotNumber = "YY" 
, где X=0..., я убрал сначала половину, потом все данные устройства.
Обязательно проверьте, что убрали ВСЕ строчки о  pciBridgeX, т.е. если убираете pciBridge1.present, то  убираете все строки с pciBridge1, иначе  может не запуститься виртуалка.
В моем случае после редактирования забыл удалить pciBridgeX.pciSlotNumber, после этого попытка запустить виртуалку закончилась ошибкой "Unable to allocate PCI sound adapter. Too many PCI devices already configured."