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

среда, 30 октября 2013 г.

cron и mail - attachment вместо body

Скидываю на мыло некий лог (в кот. есть кириллица).
Отрабатываю из консоли - все ок, приходить письмо с логом в теле.
Сую в крон - текста нет, зато есть аттач.

Прикинул, что mail почему-то считает ввод бинарным. Видимо из-за нестыковок локалей.
Решил проблему добавлением в крон локали:

LANG=ru_RU.UTF-8
LANGUAGE=ru
LC_CTYPE=ru_RU.UTF-8
CONTENT_TYPE="text/plain; charset=utf-8"

0 19 * * * /root/logparse.pl | mail -r noreply@blabla.ru -s "Login report" mail0@gmail.com mail1@gmail.com; echo > /var/log/my.log

понедельник, 29 июня 2009 г.

Установка и настройка почтового сервера Postfix + Cyrus-imapd в Fedora

Итак, хочу наконец собрать всё в одну кучу.
Платформа - Fedora 11.
Обслуживаем вирт.домены, раздаём почту по POP3, IMAP, HTTP.


Сначала база:

1. Поставить Postfix, Сyrus-sasl, Сyrus-imapd

2. Подготовка:
Создать каталог для почты /var/mail/vhosts/домен
Создать пользователя и группу virtual, uid/gid 5000, сделать владельцем /var/mail/vhosts/


# mkdir /etc/mail/vhosts
# mkdir /etc/mail/vhosts/домен
# groupadd -r virtual -g 5000
# useradd -r -M virtual -u 5000 -g 5000
# chown -R virtual:virtual /var/mail/vhosts/


3. Настроить виртуальный домен:
Прописать вирт.домен в /etc/postfix/main.cf:

#Virtual domain
virtual_mailbox_domains = домен
virtual_mailbox_base = /var/mail/vhosts
# файл с адресами
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
# пользователь virtual, от которого доставляется почта
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
# файл с алиасами
virtual_alias_maps = hash:/etc/postfix/virtual
Внимание! Виртуальный домен не может быть указан в mydestination!!!

4. Настроить Cyrus-imapd:
добавить в /etc/imapd.conf

allowplaintext: 1
# sasl пользователь-админ
admins: cyrusadmin
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_sasldb_path: /etc/sasldb2
virtdomains: userid
# обслуживаемый виртуальный домен
loginrealms: домен
Прописать транспорт в /etc/postfix/main.cf:


# передача писем сайрусу
virtual_transport = lmtp:unix:/var/lib/imap/socket/lmtp


5. Настроить SASL:
В /usr/lib/sasl2/smtpd.conf вписать:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login cram-md5
(этим мы сказали, что используем плагин, смотрящий в базу /etc/sasldb2)

Прописать настройки SASL в /etc/postfix/main.cf:

#SASL
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
#Restrictions
# Это начальные разграничения, потом усилим
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
6. Создать ящики и SASL пользователей вирт.домена:
Ящики и алиасы (в т.ч. для создания групп):
в файле /etc/postfix/vmailbox указать ящики в формате

юзер@домен домен/юзер
в файле /etc/postfix/virtual указать алиасы в формате

юзер@домен адрес1 адрес2
SASL пользователи и ящики Cyrus-imapd:


создать sasl пользователей

# saslpasswd2 -c -u домен юзер


отдельно создать админа

# saslpasswd2 -c -u cyrusadmin


сделать ящики:

# cyradm --user cyrusadmin localhost
Password:
localhost.localdomain> cm user.юзер@домен
localhost.localdomain> sam user.юзер@домен cyrusadmin c

Таким образом создаётся ящик и даются права на него админу.


7. Создание сертификатов и ключей.

Создание сертификата центра сертификации:



cd /etc/pki/tls/
misc/CA -newca


Указываем неск. параметров, самый главный - Common name, там должно быть имя сервера.
Получим сертификат /etc/CA/cacert.pem
и закрытый ключ /etc/CA/private/cakey.pem

Создание закрытого ключа и сертификата для Postfix:


# openssl req -new -nodes -keyout postfix_private_key.pem -out postfix_private_key.pem -days 730
# openssl ca -policy policy_anything -out postfix_public_cert.pem -infiles postfix_private_key.pem
Теперь создаём каталог под ключи и кидаем туда ключи и права выставляем на закрытый ключ:


# mkdir /etc/postfix/certs
# mv postfix_private_key.pem /etc/postfix/certs/
# mv postfix_public_cert.pem /etc/postfix/certs/
# cp /etc/CA/cacert.pem /etc/postfix/certs
# chmod 600 /etc/postfix/certs/postfix_private_key.pem

Закидываем CA сертификат в хранилище:

cat /etc/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
Настраиваем Postfix - пишем в /etc/postfix/main.cf:

# TLS
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/certs/postfix_private_key.pem
smtpd_tls_cert_file = /etc/postfix/certs/postfix_public_cert.pem
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
tls_random_source = dev:/dev/urandom
smtpd_tls_loglevel = 2
smtpd_tls_received_header = yes

# разрешить auth plain только под TLS, при необходимости раскомментить:
#smtpd_tls_auth_only = yes

# для оптимизации TLS
smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s
Обращаю внимание на "smtpd_tls_auth_only = yes" - её лучше включить.


Проверка:

# openssl s_client -starttls smtp -connect localhost:25

Если выскочит что-то типа:

CONNECTED(00000005)
5552:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:601:
То проверяем в первую очередь правильность имён и пути в main.cf!


8. Теперь антивирус и спаморез.
Ставим Amavis, ClamAV и spamassassin.

В /etc/postfix/main.cf пишем:

# передача писем амавису на проверку
content_filter = amavisd-new:[127.0.0.1]:10024
В /etc/postfix/master.cf:


# amavisd-new LMTP
amavisd-new unix - - n - 2 lmtp
-o lmtp_data_done_timeout=1200s
-o disable_dns_lookups=yes


# smtpd демон, принимающий проверенную почту
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc_envelopes=yes


Качаем eicar и проверяем всё эту красоту, отправив вирь простым sendmail'ом.
Смотрим логи - там должно быть сообщение о пойманном вире.

Для автообновления баз антивируса:
в /etc/freshclam.conf комментим строку

#Example
в /etc/sysconfig/freshclam комментим:

#FRESHCLAM_DELAY=disabled-warn


Сам сервер готов. Остался веб интерфейс.

пятница, 8 мая 2009 г.

Админ cyrus-imapd'а

Себе на заметку, уже 3 раз на эти грабли наступил:
Админ сайруса - локальный пользователь! Если мы заводим виртуальные домены, то админ к ним отношения не имеет!
ЗЫ
Локальный не в смысле юниксовый, а SASL'овый без области.

среда, 3 сентября 2008 г.

Ограничения пересылки.

Как запретить определённым юзерам пересылать почту за пределы почтового домена:
Я ссылка на сабж.

To Engel:
Посмотри, это должно помочь или натолкнуть на какую-нибудь идею )

А вот мои домыслы:

Ограничение пересылки снаружи можно реализовать при помощи check_recipient_access:
Создаём табличку с адресами, на которые нельзя отправлять мыло снаружи (не забыв написать REJECT).
В smtpd_recipient_restrictions после permit_mynetwork вписываем check_recipient_access с нашей таблой и все дела.


среда, 6 августа 2008 г.

Cyrus-imap + TLS

Организация шифрования для сайруса - дело простое. Делаем закрытый ключ и сертификат и прописываем в /etc/imapd.conf:

tls_cert_file: /var/lib/imap/certs/cyrus_public_cert.pem
tls_key_file: /var/lib/imap/certs/cyrus_private_key.pem
tls_ca_file: /var/lib/imap/certs/cacert.pem
tls_ca_path: /var/lib/imap/certs/
естественно, пути могут отличаться, у юзера, от кот. работает сайрус, должны быть права на чтение этих файлов.

Ключ и сертификат делаем так же, как для Postfix'а.

понедельник, 4 августа 2008 г.

Postfix + Cyrus-imap

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

В /etc/postfix/main.cf говорим передавать почту сайрусу:

virtual_transport = lmtp:unix:/var/lib/imap/socket/lmtp


Важно! Добавьте юзера postfix в mail группу, иначе постфикс может ругаться на отсутствие прав на сокет, хотя на сокете права 777.

В дефолтный конфиг сайруса /etc/imapd.conf вписываем:

allowplaintext: 1
sasl_pwcheck_method: auxprop
sasl_auxprop_plugin: sasldb
sasl_sasldb_path: /etc/sasldb2
virtdomains: userid
loginrealms: домен


После этого создаём ящики вида user.username@domain
Логинимся на сервер, указывая имя с доменом.

воскресенье, 3 августа 2008 г.

Я прикрутил Cyrus-Imap

Прикрутил-таки к своему постфиксу сайрус..
Как - напишу позже.
Хотя одно скажу сейчас, пока не забыл:
Помни о директиве virtdomains: userid!
а то опять будешь не один день искать, почему ящики не создаются.
Остаётся теперь все данные засунуть в эсквель или лдап, прикрутить белку и радоваться )
Но на сегодня всё, устал..

Postfix + Virtual Domain

Переделал свой почтовый сервак - сделал виртуальный почтовый домен.
Пользовался этим и этим.
Что я сделал:

В /etc/postfix/main.cf вписал:

virtual_mailbox_domains = мой_домен
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual


Важно!
Удалил свой домен из параметра mydestination
т.к. виртуальные домены нельзя указывать как mydestination.

Далее сделал каталог /var/mail/vhosts, в нём - каталог с наванием домена.
Создал группу virtual и юзера virtual (с номерами 5000), сделал их владельцами /var/mail/vhosts.

В файлике /etc/postfix/vmailbox прописал пути к ящикам в формате user@domain.org domain.org/user
Сделал с файликом postmap.

Работает! )

воскресенье, 13 июля 2008 г.

Postfix + TLS

Здесь я буду постить результаты своих попыток прикручивания TLS к Постфиксу.

Для начала нам нужен сертификат нашего центра сертификации:

#cd /usr/share/ssl/misc
#./CA.pl -newca

В процессе создания говорим, что common name - имя нашего хоста.

Получаем каталог /usr/share/ssl/demoCA, в кот. есть файлик cacert.pem, ставим этот сертификат конкверором.

Делаем сертификат Постфикса:
из каталога /usr/share/ssl

#openssl req -new -nodes -keyout postfix_private_key.pem -out postfix_private_key.pem -days 730
#openssl ca -policy policy_anything -out postfix_public_cert.pem -infiles postfix_private_key.pem
если в процессе выполнения второй команды получаем ошибки открытия файлов - значит есть проблема с путями (т.к. путь к закрытому ключу сервера относительный, то имеет значение, откуда даётся команда).

Дальше делаем каталог /etc/postfix/certs, куда копируем /usr/share/ssl/demoCA/cacert.pem и созданные для постфикса закрытый ключ postfix_private_key.pem и сертификат postfix_public_cert.pem. Устанавливаем на ключ права 600.

Пишем в /etc/postfix/main.cf :

smtpd_use_tls = yes
tls_random_source = dev:/dev/urandom

smtpd_tls_key_file = /etc/postfix/certs/postfix_private_key.pem
smtpd_tls_cert_file = /etc/postfix/certs/postfix_public_cert.pem
smtpd_tls_CAfile = /etc/postfix/certs/cacert.pem

smtpd_tls_loglevel = 2
smtpd_tlsreceived_header = yes
Таким образом мы включили TLS, сказали, где генератор случайных чисел, сертификаты, а таже установили детальные логи для tls и добавление заголовков.

Внимание - грабли!

В /etc/postfix/master.cf раскомментируйте строку
tlsmgr unix - - n 1000? 1 tlsmgr
Иначе получите ошибки, вроде:
Jul 15 15:26:19 deck postfix/smtpd[3098]: initializing the server-side TLS engine
Jul 15 15:26:19 deck postfix/smtpd[3098]: warning: connect to private/tlsmgr: Connection refused
Jul 15 15:26:19 deck postfix/smtpd[3098]: warning: problem talking to server private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: connect to private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: problem talking to server private/tlsmgr: Connection refused
Jul 15 15:26:20 deck postfix/smtpd[3098]: warning: no entropy for TLS key generation: disabling TLS support
Убеждаемся, что всё работает:

#openssl s_client -starttls smtp -connect localhost:25
Если мы видим данные о сертификате и ожидание дальнейшего ввода - значит всё правильно.

А так, как ранее мы прикрутили к нашему серваку plaintext аутентификацию, то имеет смысл засунуть её под шифрование, /etc/postfix/main.cf:
smtpd_tls_auth_only = yes
Коннектимся телнетом и убеждаемся, что нам не предлагают аутентификацию, а только STARTTLS, опять коннектимся, используя openssl, потом приветствуем сервер и убеждаемся, что теперь аутентификация возможна.

для оптимизации шифрования добавляем в конфиг:

smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache
smtpd_tls_session_cache_timeout = 3600s

Продолжение следует...

четверг, 10 июля 2008 г.

Ссылки по теме Postfix + virtual users

Postfix Virtual Domain Hosting Howto
Настраиваем виртуальный почтовый хостинг с ипользованием Postfix и dovecot.

Postfix + SASL

Сразу оговорюсь, что всё как следует написано в Postfix SASL Howto, этот мануальчик я пишу на всякий случай. Мануал не будет "пошаговым" и подробным, только необходимое. Скорее всего, по мере моего продвижения в этой теме, пост будет пополняться.


Итак, предполагается, что сам постфикс и сасл уже стоят, а в конфиге постфикса прописаны всякие там myhosname и пр.
Пока рассмотрим механизм plain и использования sasldb (обычная берклевская БД).
В конфиге /etc/sasl2/smtpd.conf пишем:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login

В конфиге постфикса /etc/postfix/main.cf добавляем:

smtpd_sasl_auth_enable = yes
этим мы включаем аутентификацию.

Теперь надо указать, юзерам какой области (realm) разрешить аутентификацию, например для нашего хоста это будет:

smtpd_sasl_local_domain = $myhostname


Тогда постфикc в базе sasldb будет искать юзеров из домена myhostname, таким образом, правильно заводить юзеров надо так:

#saslpasswd2 -c -u `postconf -h myhostname` yakrevedko
Естественно, в качестве сасловской области можно прописать mydomain, тогда и юзеры должны быть соответствующие.

Чтобы постфикс мог обращаться к sasldb, надо его сделать хозяином файлика.

Теперь сделаем так, чтобы через наш сервак могли отправлять почту только прошедшие аутентификацию юзеры, за исключеним случая отправки писем нам самим:

smtpd_recipient_restrictions = permit_mynetworks, permit_auth_destination,
permit_sasl_authenticated,reject_unauth_destination
Возможность аутентификации для "ущербных" клиентов:

broken_sasl_auth_clients = yes
Пока вроде всё..

Ура!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Аааааааааааааааааа!!!!!!!!!!!!!!!!!
получилось!!!!!!!!!!!!!!!!!!!!!
235 2.7.0 Authentication successful
!!!
Наконец-то я завёл sasl аутентификацию. Долго у меня каменная чаша не выходила, а всё из-за того, что проморгал в манах строчку:
IMPORTANT: To get sasldb running, make sure that you set the SASL domain (realm) to a fully qualified domain name.
Ладно, пора спать идти, завтра напишу краткий ман по прикручиванию сасла к постфиксу.