我使用 Postfix 作为 MTA 来接收我域名的邮件。最近我开始收到一些来自外部 IP 试图利用 bash 的邮件,这些邮件发到 root@localhost。我的 bash 已经打了补丁,所以应该足够安全,但我并不希望世界上的任何地方都有人能够向域 root@localhost 发送邮件。
我仍然需要 localhost 来接收本地系统邮件,所以不想完全删除它,理想情况下,我想阻止来自任何地方发往 localhost 和 localhost.hostname 的邮件,除非该邮件来自本地系统。
这可能吗?查看文档,似乎可以使用 smtpd_relay_restrictions 或 smtpd_recipient_restrictions 来完成某些操作,但我尚未找到有效的配置。
运行带有 postfix 2.11.0-1 的 Ubuntu 服务器 14.04
下面是 postfix -n 输出。我希望没问题,但我删除了输出中使用的 FQDN 的详细信息。
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
home_mailbox = Maildir/
inet_interfaces = all
mailbox_command = /usr/bin/procmail
mailbox_size_limit = 0
mydestination = <hostname>, <domain>, localhost.<hostname>, mail.<domain>, localhost
myhostname = <hostname>
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
queue_directory = /var/spool/postfix
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
unknown_local_recipient_reject_code = 550
virtual_alias_domains = <virtual_domain_1> <virtual_domain_1> <virtual_domain_2> <virtual_domain_3> <virtual_domain_4>
virtual_alias_maps = hash:/etc/postfix/virtual
答案1
因为您已经有了permit_mynetworks
,smtpd_relay_restrictions
所以您可以在其后添加新的限制。
smtpd_relay_restrictions = permit_mynetworks, check_recipient_access hash:/etc/postfix/block_localhost, permit_sasl_authenticated, defer_unauth_destination
在/etc/postfix/block_localhost
,你可以把
root@localhost REJECT
对该文件进行 postmap 并运行postfix reload
。
邮件从本地系统到根@本地主机已经允许permit_mynetworks
。因此,简单的解决方案是添加拒绝根@本地主机之后。