大家好。今天,我在 CentOS 7 vps 上设置了 postfix。
我想要的是
我希望我的服务器/postfix 遵循以下规则:
地球上的每个人都应该能够邮寄
[email protected]
Postfix 必须将此邮件转发至
[email protected]
任何其他内容都不能发送到任何域
为了简单起见,我将我的域称为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
必读内容: