Назад | Перейти на главную страницу

Простой SMTP-сервер для пересылки на основе псевдонимов

Я ищу SMTP-сервер, который будет использоваться для пересылки нескольких адресов электронной почты. Два требования:

  1. Легко установить и настроить на Ubuntu.
  2. Имеет файл псевдонимов, в который легко добавлять автоматически. В идеале это должен быть текстовый файл, состоящий из строк типа «foo@myserver.com mrfoo@gmail.com».
  3. (В идеале) Может быть легко настроен для приема почты только от определенных хостов.

Я пробовал Postfix, но увяз в сообщениях об ошибках вроде Recipient address rejected: User unknown in virtual alias table и Recipient address rejected: User unknown in local recipient table. Так что мне интересно, есть ли более простое решение.

  1. Использовать Postfix

    В ubuntu сделайте следующее

    apt-get install postfix
    

    Я делаю то же самое с настройкой электронной почты vps. проверьте мой пост в блоге Крошечный VPS Postfix. Я копирую пример ниже

    /etc/postfix/main.cf

    # See /usr/share/postfix/main.cf.dist for a commented, more complete version
    
    # Debian specific:  Specifying a file name will cause the first
    # line of that file to be used as the name.  The Debian default
    # is /etc/mailname.
    #myorigin = /etc/mailname
    
    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
    biff = no
    
    # appending .domain is the MUA's job.
    append_dot_mydomain = no
    
    # Uncomment the next line to generate "delayed mail" warnings
    #delay_warning_time = 4h
    
    readme_directory = no
    
    # TLS parameters
    smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    smtpd_use_tls=yes
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
    
    # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
    # information on enabling SSL in the smtp client.
    
    myhostname = <YOUR HOSTNAME>
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases
    myorigin = /etc/mailname
    mydestination = <YOUR DOMAIN NAME>, localhost.domain, localhost
    relayhost =
    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
    mailbox_command = procmail -a "$EXTENSION"
    mailbox_size_limit = 0
    recipient_delimiter = +
    inet_interfaces = all
    
    smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_hostname,
        reject_non_fqdn_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_recipient_domain,
        reject_unlisted_recipient,
        reject_unauth_destination,
        reject_rbl_client cbl.abuseat.org,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client relays.mail-abuse.org,
        reject_rbl_client dnsbl.proxybl.org,
        reject_rbl_client truncate.gbudb.net,
        reject_rbl_client dnsbl.njabl.org,
        permit
    

    Помните, чтобы изменить <YOUR HOSTNAME> и <YOUR DOMAIN NAME>

  2. Файл псевдонима

    Ваш /etc/aliases файл должен выглядеть следующим образом

    foo: mrfoo@gmail.com
    bar: mrbar@gmail.com
    

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

    cd /etc
    postalias aliases
    service postfix restart
    
  3. Ограничение одного хоста

    Чтобы разрешить только электронную почту от одного (или нескольких) хостов, я собираюсь использовать очень ленивый способ сделать это.

    Предполагая, что IP-адрес разрешенного входящего хоста имеет IP 192.168.1.100, добавьте его в mynetworks

    mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.1.100
    

    + Изменить smtpd_recipient_restrictions следовать

    smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unlisted_recipient
    

    Postfix только (и всегда) принимает электронную почту от хостов, перечисленных в mynetworks. И отвергайте все остальное.

  4. Конфигурация DNS

    Не забудьте настроить запись MX и запись spf.

Я использую Postfix аналогичным образом для пересылки на другой сервер. Используя три варианта конфигурации, но для вашей конфигурации есть более простой способ.

  • relay_recipient_maps = LDAP: /etc/postfix/ldap_relay_recipients_maps.cf
  • transport_maps = LDAP: /etc/postfix/ldap_transport_maps.cf
  • relay_domains = LDAP: /etc/postfix/ldap_relay_domains.cf

Один из моих файлов LDAP выглядит так для запроса источника LDAP в Zimbra ...

server_host=ldap://[mail.domain.com]:389
server_port=389
search_base=
query_filter = (&(|(zimbraMailDeliveryAddress=%s)(zimbraMailAlias=%s)(zimbraMailCatchAllAddress=%s))(zimbraMailStatus=enabled))
result_attribute = zimbraMailDeliveryAddress,zimbraMailAlias
version = 3
ldap_cache = yes
ldap_cache_expiry = 600
ldap_cache_size = 64256
bind = yes
bind_dn = uid=[valid login],cn=[valid cn],cn=[valid cn]
bind_pw = [a valid password]
timeout = 30

Однако в зависимости от того, что вы ищете, было бы проще хранить информацию в локальных хэш-таблицах, которые можно использовать для этой цели. Единственное, что вам нужно помнить, это то, что когда вы вносите изменения в файлы, вам нужно повторно запустить postmap для построения дружественной к постфиксу хеш-таблицы.

  • relay_recipient_maps = хэш: / etc / postfix / relay_recipients_maps
  • relay_domains = fwddomain.com
  • transport_maps = хэш: / etc / postfix / transport_maps

Вам нужно будет создать текстовый файл в указанном выше месте со следующими парами записей: {[адрес электронной почты] ОК}

email1@fwddomain.com OK
email2@fwddomain.com OK
email3@fwddomain.com OK

Запустите postmap в файле выше, чтобы сгенерировать фактический файл хэша, который затем создается в той же папке, что и relay_recipients_maps.db. Postfix теперь проверит этот файл на предмет наличия действительных получателей для доставки.

Затем вам нужно указать Postfix, куда отправлять электронную почту для этого домена при ее получении. Проделав то же самое с файлом / etc / postfix / transport_maps, вы можете ввести пары vaild, которые представляют собой домен, на который отправляется электронное письмо, и хост, на который его пересылают.

fwddomain.com      smtp:mail.fwddomain.com

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