Announcement

Collapse
No announcement yet.

OpenDKIM + Postfix

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • OpenDKIM + Postfix

    OpenDKIM + Postfix
    В конце 2011 года разработчики проекта dkim-milter прекратили его поддержку и разработку. К счастью, на замену проекта dkim-milter пришел OpenDKIM, с помощью которого добавить DKIM-подпись в письма так же просто.


    Для этого нам потребуется сам Postfix и пакеты OpenDKIM. Установим все необходимые компоненты с помощью вашего пакетного менеджера:
    Code:
    aptitude install opendkim opendkim-tools
    Теперь нам нужно получить ключи, которые мы будем использовать для подписи писем. Ключи будем хранить рядом с конфигурационными файлами Postfix, но вы можете выбрать и другое место — это непринципиально.
    Code:
    mkdir /etc/postfix/dkim/
    Получим ключ для домена example.com и селектора mail: (Домен example.com необходимо заменить, на свой. Например vanila.org)
    Code:
    opendkim-genkey -D /etc/postfix/dkim/ -d example.com -s mail
    Эта команда создаст файлы /etc/postfix/dkim/mail.private и /etc/postfix/dkim/mail.txt, с секретным и публичными ключами соответственно. Публичный ключ нужно добавить в соответствующую TXT запись вашего домена.


    Файлам ключей обязательно нужно дать доступ для группы, в которой работает OpenDKIM:
    Code:
    chgrp opendkim /etc/postfix/dkim/*
    chmod g+r /etc/postfix/dkim/*
    В файл конфигурации /etc/opendkim.conf записываем:
    Code:
    Syslog yes
    SyslogSuccess yes
    # на время отладки включим расширенное логгирование
    LogWhy yes
    X-Header yes
    
    
    Canonicalization relaxed/relaxed
    # подпись и проверка подписей
    Mode sv
    # если только подписываем
    #Mode s
    
    
    # список ключей -
    KeyTable file:/etc/postfix/dkim/keytable
    # соответствие адресов/доменов и ключей -
    SigningTable file:/etc/postfix/dkim/signingtable
    # если вы подписываете и на других серверах - 
    #ExternalIgnoreList file:/etc/postfix/dkim/trusted
    # список внутренних хостов, почта которых требует подписи -
    #InternalHosts file:/etc/postfix/dkim/internal
    Список имеющихся ключей укажем в файле /etc/postfix/dkim/keytable:
    Code:
    # формат: "название домен:селектор:/путь/до/ключа"
    # в качестве названия удобно использовать имя DNS записи с ключем
    mail._domainkey.example.com example.com:mail:/etc/postfix/dkim/mail.private
    # ключей может быть сколько угодно
    mx._domainkey.example.net example.net:mx:/etc/postfix/dkim/mx.private
    # (список ключей может быть и в БД - продробней в манах)
    Объясним OpenDKIM почту каких доменов какими ключами подписывать в файле /etc/postfix/dkim/signingtable:
    Code:
    # формат: "домен-или-адрес название-ключа"
    example.com mail._domainkey.example.com
    example.net mx._domainkey.example.net
    # все остальные адреса тоже подписываем
    * mail._domainkey.example.com
    # (подробное описание формат есть в man)
    В других файлах, указаных в директивах ExternalIgnoreList и InternalHosts, содержится просто список хостов и/или IP-адресов каждый на новой строке.


    В файле /etc/default/opendkim объясним DKIM-демону где ему ждать подключений:
    Code:
    SOCKET="inet:8891@127.0.0.1"
    Наконец, добавим в конец /etc/postfix/main.cf следующие строки:
    Code:
    milter_default_action = accept
    milter_protocol = 2
    smtpd_milters = inet:localhost:8891
    non_smtpd_milters = inet:localhost:8891
    Не забываем добавить TXT запись и проверить, что она на месте:
    Code:
    dig txt mail._domainkey.example.com
    main.cf
    Code:
    smtpd_banner = $myhostname ESMTP (debian)
    #Отключаем использование comsat
    biff = no
    #Запрещаем автоматически дополнять неполное доменное имя в адресе письма
    append_dot_mydomain = no
    #Указываем имя нашего хоста
    myhostname = gw0.nauk.name
    # Указываем файл с псевдонимами почтовых ящиков
    alias_maps = hash:/etc/aliases
    #Указываем, для каких доменов будем принимать почту
    mydestination = localhost
    # Не будем ограничивать размер почтовых ящиков
    mailbox_size_limit = 0
    recipient_delimiter = +
    #Указываем прослушивание на всех сетевых интерфейсах
    inet_interfaces = all
    #Указываем обязательность использование клиентами команды helo
    smtpd_helo_required = yes
    #Описываем доступ доменам, почтовым ящикам и т.д.
    virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
    virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
    virtual_mailbox_base = /var/vmail
    virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
    virtual_minimum_uid = 100
    virtual_uid_maps = static:5000
    virtual_gid_maps = static:5000
    home_mailbox = Maildir/
    local_recipient_maps = $virtual_mailbox_maps
    #Описываем авторизацию по SMTP для клиентов не из доверенной зоны
    smtpd_sasl_type = dovecot
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_path = private/auth
    smtpd_sasl_security_options = noanonymous
    #broken_sasl_auth_clients = yes
    #Указываем каталог очереди для Postfix
    queue_directory = /var/spool/postfix
    smtpd_recipient_restrictions =  permit_mynetworks,  permit_sasl_authenticated, reject_unauth_destination
    proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps  $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
    smtp_use_tls = yes
    smtpd_use_tls = yes
    smtp_tls_note_starttls_offer = yes
    smtpd_tls_key_file = /etc/dovecot/nauk.key
    smtpd_tls_cert_file = /etc/dovecot/nauk.cert
    smtpd_tls_loglevel = 1
    smtpd_tls_received_header = yes
    smtpd_tls_session_cache_timeout = 1s
    tls_random_source = dev:/dev/urandom
    #DKIM
    milter_default_action = accept
    milter_protocol = 2
    smtpd_milters = inet:localhost:8891
    non_smtpd_milters = inet:localhost:8891
    opendkim.conf
    Code:
    # This is a basic configuration that can easily be adapted to suit a standard
    # installation. For more advanced options, see opendkim.conf(5) and/or
    # /usr/share/doc/opendkim/examples/opendkim.conf.sample.
    
    
    # Log to syslog
    Syslog                  yes
    SyslogSuccess yes
    # на время отладки включим расширенное логгирование
    LogWhy yes
    X-Header yes
    # Required to use local socket with MTAs that access the socket as a non-
    # privileged user (e.g. Postfix)
    UMask                   002
    
    
    # Sign for example.com with key in /etc/mail/dkim.key using
    # selector '2007' (e.g. 2007._domainkey.example.com)
    #Domain                 example.com
    #KeyFile                /etc/mail/dkim.key
    #Selector               2007
    
    
    # Commonly-used options; the commented-out versions show the defaults.
    #Canonicalization       simple
    Mode                    sv
    #SubDomains             no
    #ADSPDiscard            no
    
    
    # Always oversign From (sign using actual From and a null From to prevent
    # malicious signatures header fields (From and/or others) between the signer
    # and the verifier.  From is oversigned by default in the Debian pacakge
    # because it is often the identity key used by reputation systems and thus
    # somewhat security sensitive.
    OversignHeaders         From
    
    
    # List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures
    # (ATPS) (experimental)
    
    
    #ATPSDomains            example.com
    # список ключей -
    KeyTable file:/etc/postfix/dkim/keytable
    # соответствие адресов/доменов и ключей -
    SigningTable file:/etc/postfix/dkim/signingtable
    # если вы подписываете и на других серверах -
    #ExternalIgnoreList file:/etc/postfix/dkim/trusted
    # список внутренних хостов, почта которых требует подписи -
    #InternalHosts file:/etc/postfix/dkim/internal
    Code:
    chown -R opendkim:opendkim /etc/opendkim/keys
    chmod -R 700 /etc/opendkim/keys
    /etc/init.d/opendkim restart
    Для корректности отображения, DKIM подписи, необходимо внести тхт запись, в файл конфигурации домена.
    Code:
    mail._domainkey IN      TXT     "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCd5M9hcAXLWsps2QIh3t4/eHN/GkXuVEm0rf6bPfmhg39MxcmhHsKljClDs4drc4E/UoDjNLaDymsUwryEbPlabqZZuS22XS0Vux67ZQjRk/lZTF5DRFous8HwHRgAetTlQmYfHco1T88xzjWaEPHJahbbYBiC1lqPY7UBlkD5bwIDAQAB"
    Перезапускаем postfix и opendkim i bind, отправляем тестовое письмо куда-нибудь на Яндекс и наслаждаемся успешным результатом проверки подписи:
    IPv6 Certification Badge for terra2039
Working...
X