четверг, 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."

среда, 22 июня 2011 г.

Non-volatile configuration memory is being accessed.

Сегодня зашел на маршрутизатор Cisco 870 серии, посмотрел running-config и чего-то дернуло меня глянуть на стартовый конфиг, сравнить насколько отличаются.
C871-IF#sh start
%% Non-volatile configuration memory is being accessed, Try again later

Интересная надпись. Почему нельзя посмотреть на конфиг в nvram? Данное сообщение выскакивает, когда несколько пользователей пытаются получить доступ к nvram, хоть на чтение, хоть на запись.

Лечение:
Команда sh users покажет кто еще работает с маршрутизатором
Команда clear line vty NUMBER сбросит пользователя с номером сессии NUMBER, полученного из вывода предыдущей команды.


Литература:
https://supportforums.cisco.com/docs/DOC-4924

понедельник, 20 июня 2011 г.

EXT4-fs (dm-0): Unaligned AIO/DIO on inode 90177549 by oracle; performance will be poor

Собственно, вылезло такое сообщение в /var/log/messages на сервере под RHEL 6.1. Сообщение вылезает нечасто, примерно раз в день. с разными номерами инодов. Особых проблем с производительностью я не заметил, прогнал с помощью dd запись/чтение больших файлов - вроде все нормально. на всякий случай связался с поддержкой RedHat, где вежливо объяснили, что во-первых железо не сертифицировано под RHEL6, а во-вторых:
a. This error is safe, and It will not cause filesystem corruption. In fact, the message was added when the code was made "corruption-safe"
b. This warning is throttled to only appear once per day in your logs, even if you encounter the problem much more often.
c. The code has been made corruption-safe, but as a consequence there may be a performance degradation depending on your workload.
d. If your testing shows that the performance is unacceptable, we can ask engineering to review the code and look for performance improvements, or try switching back to ext3 or RAW devices with Oracle ASM or similar.

Суммируя:
Сообщение НЕ указывает на то, что данные будут повреждены. Если производительность устраивает - не стоит париться. Если, наоборот, есть проблемы, то нужно откатиться к использованию ext3 или использовать Oracle ASM.

Литература:
http://www.spinics.net/lists/linux-ext4/msg22690.html

пятница, 17 июня 2011 г.

Squid 3 и ошибка NONE/417 при POST-запросе.

Сегодня столкнулся с такой интересной ошибкой на шлюзе под RHEL6 с squid3. Для отдела логистики купили супер-программу Benish Fleet Managment (система спутникового мониторинга, позволяющая контролировать местоположение автотранспорта и любых объектов интересующих клиентов - взято с их сайта). В программе есть возможность указать прокси-сервер, логин/пароль для авторизации. Прописал, запускаю, не работает. Выдает какую-то билиберду. В логах строчка "1308310455.273 0 dn-office111.office.com NONE/417 4679 POST http://91.1X.4X.X0:81/tavl/Tavlentry.asmx - NONE/- text/html"

Недолгое гугление указывает на необходимость добавить в /etc/squid/squid.conf
ignore_expect_100 on
которая позволяет НЕ отсылать ошибку 417 клиентам с кривой поддержкой HTTP/1.1.
По умолчанию данная опция выключена и squid игнорирует заголовки вида Expect: 1XX в запросе (согласно RFC 2616).
Вообщем кривой софт и техподдержка с заученной фразой "раз не конектится - значит проблемы у вас" были побеждены внесением в конфиг небольшого workaround. Насколько стабильно заработает - время покажет.

Литература:
http://www.squid-cache.org/Doc/config/ignore_expect_100/
http://www.ietf.org/rfc/rfc2616.txt