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

Ste*_*ett 5 email smtp postfix mail-forwarding

我正在寻找仅用于转发几个电子邮件地址的 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。所以我想知道是否有更简单的解决方案。

Joh*_*Siu 5

  1. 使用后缀

    在 ubuntu 上,执行以下操作

    apt-get install postfix
    
    Run Code Online (Sandbox Code Playgroud)

    我正在对我的 vps 电子邮件设置做完全相同的事情。查看我的博客文章Tiny 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
    
    Run Code Online (Sandbox Code Playgroud)

    记住要改变<YOUR HOSTNAME><YOUR DOMAIN NAME>

  2. 别名文件

    您的/etc/aliases文件应如下所示

    foo: mrfoo@gmail.com
    bar: mrbar@gmail.com
    
    Run Code Online (Sandbox Code Playgroud)

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

    cd /etc
    postalias aliases
    service postfix restart
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

    更改smtpd_recipient_restrictions为以下

    smtpd_recipient_restrictions =
        permit_mynetworks,
        reject_unlisted_recipient
    
    Run Code Online (Sandbox Code Playgroud)

    Postfix 仅(且始终)接受来自 中列出的主机的电子邮件mynetworks。并拒绝其他一切。

  4. DNS配置

    记得设置MX记录和spf记录。