SMS2Mail Forwader

Screenshot_2015-10-22-22-36-13

Сидел я вечером, пил чай с баранками и решил себя попробовать в роли Android Developer’а. Получилось у меня или нет — судить вам.

sms3-03

Итак, задача написать приложение которое пересылает все входящик СМС на указанный почтовый ящик. Естественно, основной функциаонал должна делать служба в фоне. А именно отслеживать входящие СМС и отправлять их на почтовый адрес. Ну и нужно было чтобы служба эта запускалась автоматически при включении/перезагрузке телефона.

Начал я с придумывания дизайна. Основное требования — максимальный минимализм =D. В результате получился вот такой макет, который вы видите слева.

Покодив пару вечеров получилась вот такая незамысловатая программа, скачать которую можно из Play Market: SMS2Mail Forwarder.

Кстати, хотел бы поблагодарить своего дизайнера Оксану Котибенко, которая вдохновившись идеей «для народа все должно быть Free«, нарисовала мне замечательное лого для приложения

Внедряем email-аутентификацию DKIM в Postfix за 5 минут

Работал у нас почтовый сервер для рассылки корреспонденции клиентам. И все бы ничего, но стал люд жаловаться, что не доходят письма или  в спам попадают. И хотя spf был настроен, все говорило о том, что пора нам к нашему Postfix прикрутить DKIM. Как гласит цитата откуда-то с хабра:

DKIM-подпись — это цифровая подпись, которая добавляется к заголовкам письма сервером отправителя, по которой сервер получателя может удостовериться, что отправитель письма соответствует полю From в заголовках письма. Если сервер получателя проверяет эту подпись, то по результатам проверки сервер может принять решение о том, как поступать с письмом: принять, отправлять в папку «Спам», отправить на дополнительную проверку или вовсе отказаться от приёма. Подписи DKIM проверяют и используют сами все ведущие почтовые службы, включая Яндекс и Mail.ru.

Для начала установим необходимый софт командой

aptitude install opendkim opendkim-tools

После установки необходимо отредактировать файл /etc/opendkim.conf, добавив в него строки

Canonicalization relaxed/relaxed
SyslogSuccess yes
KeyTable file:/etc/opendkim/keytable
SigningTable file:/etc/opendkim/signingtable
SoftwareHeader yes
LogWhy yes
ExternalIgnoreList file:/etc/opendkim/trusted
InternalHosts file:/etc/opendkim/trusted

Теперь создадим рабочий каталог,а в нем новый приватный и открытый ключ. Открытый ключ мы потом пропишем на нашем DNS-сервере.

mkdir /etc/opendkim/
opendkim-genkey -s mail -d example.com

В каталоге /etc/opendkim у вас должно появиться 2 новых файла. mail.private — это наш приватный ключ, которым мы будем подписывать письма. А mail.txt содержит публичный ключ. Список имеющихся ключей укажем в файле /etc/opendkim/keytable в формате «название домен:селектор:/путь/до/ключа». В нашем случае содержимое файла будет таким:

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

Теперь объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/opendkim/signingtable в формате «домен название-ключа».

example.com mail._domainkey.example.com

В файле /etc/opendkim/trusted необходимо прописать ваши доверенные узлы:

127.0.0.1
localhost
192.168.1.0/24

Зададим необходимые права, добавим пользователя postfix в группу opendkim. Это нужно чтобы postfix смог отправлять письма на подпись через сокет OpenDKIM. После чего перезапустим службу. Я рекомендую заглянуть в системный лог и убедиться, что нет ошибок при запуске службы.

chown opendkim /etc/opendkim -R
gpasswd -a postfix opendkim
service opendkim restart

Вторым этапом настроим postfix, чтобы он мог подписывать нашу почту. В main.cf необходимо добавить:

milter_default_action=accept
milter_protocol=2
smtpd_milters=unix:/var/run/opendkim/opendkim.sock
non_smtpd_milters=unix:/var/run/opendkim/opendkim.sock

Ну и опять рестарт/релоад

service postfix restart

Третьим и последним этапом мы настроим наш DNS сервер добавив в него TXT запись. Выведите содержимое файла mail.txt и используйте следующую пару ключ-значение для добавления новой записи в DNS.

Name: mail._domainkey.example.com.
Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

Для применения изменений в DNS может пройти несколько часов. Проверить DKIM-подпись вы можете отправив пиьсмо через свой сервер на ящик [email protected] Ответное письмо вы получите в виде отчета. Например:

=========================================================
Summary of Results
==========================================================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham

Полезные ссылки:

Hostname does not match the server certificate в Redmine

Приведу пример конфигурации почты в Redmine, где нет ошибки Hostname does not match the server certificate:

production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.server.com"
port: 25
tls: false
authentication: :plain
openssl_verify_mode: 'none'
enable_starttls_auto: false
domain: 'server.com'
user_name: '[email protected]'
password: 'examplepassword'

Expected kind of OpenSSL::SSL::SSLContext в Redmine

При установке нового redmine 2.3.0 и дальнейшей его конфигурации возникает ошибка при отправке почты:

(Expected kind of OpenSSL::SSL::SSLContext))

Лечится эта ошибка добавлением параметра enable_starttls_auto: false в redmine/config/configuration.yml.  Пример:

production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: "smtp.yandex.ru"
port: 25
authentication: :plain
domain: 'yandex.ru'
user_name: '[email protected]'
password: 'somepass'
enable_starttls_auto: false

Для версий redmine, начинающихся ниже 2.3 параметр будет openssl_verify_mode ‘none’. Не забываем перезапустить redmine.

Блокирование отправки email в Postfix

myszaИногда, вы можете столкнуться с задачей блокировки отправителей и получателей почты. В моем случаем данную процедуру мне было необходимо проделать для того, чтобы сервера разработчиков не слали тестовые письма на адреса клиентов.

Собственно в данном примере необходимо создать 2 файла sender_access и recipient_access, в которых и определим тех, кому / от кого запрещено отправлять почту.

В файле sender_access определяем «черный список» отправителей

[email protected] REJECT

В файле recipient_access определяем «черный список» получателей

[email protected] REJECT

После этого необходимо выполнить команду postmap, для того, чтобы сгенерировать *.db файлы, которые читает postfix.

 postmap hash:sender_access
 postmap hash:recipient_access

После этого в файл конфигурации необходимо определить в файле конфигурации main.cf параметры smtpd_sender_restrictions и smtpd_recipient_restrictions.

 smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access
 smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_access

Ну и в конце перезапустим postfix

/etc/init.d/postfix restart

Примеры отправки писем из консоли Linux

Иногда бывает просто необходимо отправить себе письмо. В данной заметке я покажу 2 маленьких примера. Но предварительно нам понадобится утилита uuencode. Если у вас она еще не установлена, то установите ее:

# RHEL, CentOS
yum install sharutils
# Debian, Ubuntu
apt-get install sharutils

В первом мы отправим простое письмо с текстом. А во втором — отправим письмо с вложением из консоли Linux:

#Простое письмо
mail -s "Example" [email protected] < text_file.txt

#Письмо с вложением
uuencode attachment_image.jpg attachment_image.jpg | mail -s "Example" [email protected]