用于基于别名转发的简单 SMTP 服务器

用于基于别名转发的简单 SMTP 服务器

我正在寻找一个仅用于转发几个电子邮件地址的 SMTP 服务器。两个要求:

  1. 易于在 Ubuntu 上安装和配置。
  2. 有一个易于自动添加的别名文件。理想情况下,它应该是一个包含类似“[电子邮件保护] [电子邮件保护]“。
  3. (理想情况下)可以轻松配置为仅接受来自特定主机的邮件。

Recipient address rejected: User unknown in virtual alias table我一直在尝试 Postfix,但我被诸如和 之类的错误消息所困扰Recipient address rejected: User unknown in local recipient table。所以我想知道是否有更简单的解决方案。

答案1

  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: [email protected]
    bar: [email protected]
    

    左侧不应有域名,只有用户名。域名由您的 postfix 配置控制。然后执行以下操作

    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 记录。

答案2

我以类似的方式使用 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 文件看起来像这样,用于查询 Zimbra 上的 LDAP 源......

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 以构建 postfix 友好哈希表。

  • Relay_recipient_maps = 哈希:/etc/postfix/relay_recipients_maps
  • Relay_domains = fwddomain.com
  • transport_maps = 哈希:/etc/postfix/transport_maps

您需要在上述位置创建一个包含以下条目对的文本文件:{[电子邮件地址] OK}

[email protected] OK
[email protected] OK
[email protected] OK

对上述文件运行 postmap 以生成实际的哈希文件,该文件随后会创建在与 Relay_recipients_maps.db 相同的文件夹中。Postfix 现在将检查此文件以查找要传送的有效收件人。

然后,您需要告诉 Postfix 在收到该域的电子邮件后将其发送到哪里。对 /etc/postfix/transport_maps 文件执行相同操作,您可以输入有效的配对,即电子邮件要发送到的域和要将其转发到的主机。

fwddomain.com      smtp:mail.fwddomain.com

希望这能帮你找到正确的方向。互联网上有很多关于如何制作这些类型的配置文件的信息,其他人甚至可以使用数据库来查找这些配置选项。

相关内容