Показаны сообщения с ярлыком exim. Показать все сообщения
Показаны сообщения с ярлыком exim. Показать все сообщения

среда, 6 февраля 2013 г.

Настройка exim для работы с redmine

Внезапно возникла задача поднять сабж.

1. Установить ruby.
sudo yum install ruby

2. Скопировать скрипт rdm-mailhandler.rb из поставки redmine в /usr/local/bin, сделать исполняемым.
sudo cp rdm-mailhandler.rb /usr/local/bin
sudo chmod +x /usr/local/bin/rdm-mailhandler.rb

3. Настройка exim:
Для роутеров имеет значение порядок:

itdesk_router:
        driver = accept
        domains = +local_domains
        local_parts = it-desk
        transport = itdesk_transport

itdesk_transport:
        driver = pipe
        command = /usr/local/bin/rdm-mailhandler.rb --url http://it-desk.DOMAIN --key SECRET --project tickets --unknown-user create
        delivery_date_add
        envelope_to_add
        return_path_add

Литература:
http://www.redmine.org/projects/redmine/wiki/RusRedmineReceivingEmails

среда, 7 сентября 2011 г.

Ошибка в логах exim при обновлении Clamav.

Собственно, получил ошибку в логах exim. Это произошло после обновления clamav со стороннего  репозитория atrpms.net, верней после удаления старой версии clamav и установки новой.
2011-09-07 11:08:45 1R1DBd-0004GU-3I malware acl condition: clamd: ClamAV returned: /var/spool/exim/scan/1R1DBd-0004GU-3I/1R1DBd-0004GU-3I.eml: lstat() failed: Permission denied. ERROR
Проблема с полномочиями. Clamav не может прочитать файлы в домашней директории exim. Смотрим:
# id exim
uid=93(exim) gid=93(exim) groups=93(exim),12(mail)
# id clamav
uid=497(clamav) gid=494(clamav) groups=494(clamav)
Добавляем clamav в группу exim.
# usermod -G exim clamav
Проверяем:
# id clamav
uid=497(clamav) gid=494(clamav) groups=494(clamav),93(exim)

Перезапускаем exim и clamav:
# service exim restart
# service clamav restart

четверг, 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. проверить, что письмо получено всеми членами группы.

среда, 25 мая 2011 г.

Установка exim в rhel 6 (Альтернативный способ)

В заметке http://jskyworker.blogspot.com/2011/02/exim-rhel-60.html я описал установку exim под RHEL 6 из исходников. Привожу еще один вариант, вроде немного полегче)).

Добавить репозиторий Atrpms:
1. импортировать gpg-ключ
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
или если не получилось
wget -c http://packages.atrpms.net/RPM-GPG-KEY.atrpms
rpm --import RPM-GPG-KEY.atrpms


2. добавить репозиторий
cat << EOF >> /etc/yum.repos.d/atrpms.repo
[atrpms]
name=RHEL $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/stable
enabled=1
gpgcheck=1

EOF

Установить пакеты

yum --enablerepo=atrpms -y install exim exim-mysql libspf2 libsrs_alt

Литература:
http://atrpms.net/documentation/install/

среда, 9 февраля 2011 г.

Установка exim в rhel 6.

Как вам известно Redhat заменила пакет exim на postfix. Печально, но не об этом будет заметка. Опишу, как установить из исходников последнюю версию exim. Ради спортивного интереса. Тесты проводил на машине, установленной в VirtualBox. Голая система, без X-ов, только базовые пакеты.

1. service postfix stop && chkconfig postfix off && mount /dev/cdrom /mnt
2. добавить exclude=postfix в yum.conf, чтоб при обновлении системы не обновлять пакет
3. cat << EOF > /etc/yum.repos.d/cdrom.repo
[cdrom]
name=cdrom
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0
EOF
4. yum -y install gcc gcc-c++ pcre-devel mysql-devel openldap-devel db4-devel ncurces-devel
5. скопировать exim-4.74.tar.bz2 libspf2-1.2.9.tar.gz libsrs_alt-1.0.tar.bz2 Makefile
6. распаковать, mv Makefile exim-4.74/Local
7. groupadd -g 93 exim, useradd -g exim -G mail -d /var/spool/exim -s /sbin/nologin -u 93 exim
8. cd libsrs_alt-1.0 && ./configure --disable-debug --enable-static && make && make install
9. cd libspf2-1.2.9 && ./configure --disable-debug --enable-static && make && make install
10. echo "/usr/local/lib" > /etc/ld.so.conf.d/spf.conf
11. ldconfig -v | grep spf, чтоб убедиться что ld подхватил путь
12. cd exim-4.74 && make && make install
13. cat <<EOF >> /var/lib/alternatives/mta
/usr/sbin/sendmail.exim
10
/usr/bin/mailq.exim
/usr/bin/runq.exim
/usr/bin/rsmtp.exim
/usr/bin/rmail.exim
/etc/pam.d/exim
/usr/bin/newaliases.exim
/usr/lib/sendmail.exim
/usr/share/man/man1/postfix.1.gz

EOF
14. cp /etc/pam.d/smtp.postfix /etc/pam.d/smtp.exim
15. ln -s /usr/sbin/exim /usr/lib/sendmail.exim
ln -s /usr/sbin/exim /usr/sbin/sendmail.exim
ln -s /usr/sbin/exim /usr/bin/rmail.exim
ln -s /usr/sbin/exim /usr/bin/mailq.exim
ln -s /usr/sbin/exim /usr/bin/newaliases.exim
15. alternatives --config mta, выбираем exim
16. конфигурируем/тестируем exim (скопировать конфиги в /etc/exim, скопировать скрипт запуска ...)
17. удаляем ненужные теперь пакеты yum -y erase gcc gcc-c++ pcre-devel mysql-devel openldap-devel db4-devel ncurces-devel