我正在寻找一个仅用于转发几个电子邮件地址的 SMTP 服务器。两个要求:
Recipient address rejected: User unknown in virtual alias table
我一直在尝试 Postfix,但我被诸如和 之类的错误消息所困扰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>
别名文件
你的
/etc/aliases
文件应该如下所示foo: [email protected] bar: [email protected]
左侧不应有域名,只有用户名。域名由您的 postfix 配置控制。然后执行以下操作
cd /etc postalias aliases service postfix restart
单主机限制
为了只允许来自单个(或几个)主机的电子邮件,我将采用一种非常懒惰的方式来实现。
假设允许传入主机的 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
。并拒绝所有其他邮件。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
希望这能帮你找到正确的方向。互联网上有很多关于如何制作这些类型的配置文件的信息,其他人甚至可以使用数据库来查找这些配置选项。