Postfix 转发

Postfix 转发

大家好。今天,我在 CentOS 7 vps 上设置了 postfix。

我想要的是

我希望我的服务器/postfix 遵循以下规则:

  1. 地球上的每个人都应该能够邮寄[email protected]

  2. Postfix 必须将此邮件转发至[email protected]

  3. 任何其他内容都不能发送到任何域

为了简单起见,我将我的域称为server.com

我拥有的

现在,我可以将邮件发送到[email protected],这些邮件确实会被转发到[email protected](通过 telnet 测试,例如)。所有DNS记录均设置正确,SSL证书运行良好。

我的问题

我注意到我可以通过 telnet 连接将邮件发送到我想要的任何域。

不幸的是,垃圾邮件机器人也注意到了这一点,因为我收到了许多未知的连接。/var/log/maillog我通过以下方式检查了一些 IP 地址:在线黑名单检查器并全部被列入黑名单。

我对 Linux 系统有 (足够) 经验,但对于如何按照自己的意愿设置 postfix 服务器还很陌生。目前,我只是在 ufw 中阻止了端口 25 以阻止机器人,直到问题解决。

问题

如何设置 Postfix 仅将特定收件人的邮件([email protected])转发到特定的转发地址([email protected])?

其次,如何阻止在 spamhaus 和 CBL 等列表中被阻止的 IP 地址?

配置

这是我的 /etc/postfix/main.cf(针对问题进行了调整,不包括评论):

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = all
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
###################################
# My stuff
###################################
# Host and site name.
myhostname = server.com
mydomain = server.com
myorigin = server.com
# Virtual aliases.
virtual_alias_domains = server.com
virtual_alias_maps = hash:/etc/postfix/virtual
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/server.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/server.com/privkey.pem
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
smtp_tls_cert_file = /etc/letsencrypt/live/server.com/fullchain.pem
smtp_tls_key_file = /etc/letsencrypt/live/server.com/privkey.pem

这是我的 /etc/postfix/master.cf:

smtp      inet  n       -       n       -       -       smtpd
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
relay     unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache

我认为可能重要的最后一个文件是 /etc/postfix/virtual:

[email protected] [email protected]

最后一句话

我拥有的配置都是从互联网上找到的我认为对实现我想要的 postfix 功能有用的配置中组装而成的。我在这个 postfix 设置世界中还很陌生,必须说这是一个很难破解的难题。如果您发现我的配置有任何错误,请发表评论!

编辑

今天,我配置了 Postfix 并设置了一些限制。这些限制似乎解决了我的问题并强制执行了我想要的行为。以下是 中的新相关部分/etc/postfix/main.cf

###################################
smtpd_client_restrictions =
    reject_invalid_hostname,
    reject_rbl_client zen.spamhaus.org,
    reject_unknown_client

###################################
smtpd_helo_restrictions =
    reject_unauth_pipelining,
    reject_non_fqdn_hostname,
    reject_invalid_hostname,
    reject_unknown_hostname

###################################
smtpd_sender_restrictions =
    reject_non_fqdn_sender,
    reject_unknown_sender_domain,
    reject_unknown_address,
    reject_unknown_reverse_client_hostname,
    reject_unknown_client_hostname

###################################
smtpd_recipient_restrictions =  
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_destination

在找到有关阻止的更多信息后,我创建了一个新配置。该配置用于阻止所有unknown[ipv4]连接发送邮件。

此外,它还阻止尝试向我的域外发送邮件server.com

我测试过工具箱打开中继工具查看它是否有效,结果确实有效。

答案1

对于继电器控制,使用smtpd_relay_restrictions,例如:

smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

用于smtpd_recipient_restrictions垃圾邮件控制,例如:

smtpd_recipient_restrictions = reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, reject_non_fqdn_recipient, reject_rbl_client zen.spamhaus.org

必读内容:

http://www.postfix.org/SMTPD_ACCESS_README.html

http://www.postfix.org/postconf.5.html

相关内容