带有多个 Web 应用程序的 Linode(Debian)盒 - 是否可以通过 sendmail 从多个域发送电子邮件?

带有多个 Web 应用程序的 Linode(Debian)盒 - 是否可以通过 sendmail 从多个域发送电子邮件?

我有一个 Linode 实例,我将在其中托管几个小型 LEMP 应用程序。每个应用程序都需要向用户发送电子邮件(主要用于帐户注册...论坛/评论等等)。我希望能够使用 sendmail 来完成此操作,因为它已经安装在系统上。这可能吗?我预计不会有大量流量/电子邮件使用,因此我使用 Google 的 SMTP 服务器:

在此处输入图片描述

这个想法是 sendmail 将是一个空客户端 - 它可以发送邮件(我已经从它那里收到系统通知(OSSEC、Fail2ban)),但不能接收传入邮件。任何应用程序联系表单/机制都会向应用程序本身的所有者发送一条消息,然后他们可以通过自己的电子邮件直接与他们沟通。但是,我有几个问题:

  1. 是否可以配置一些东西,以便每个应用程序都有自己的外发电子邮件地址/身份?我已将每个应用程序分离到自己的 Linux 用户中,而无需 sudo 访问权限。因此(虚构名称),Bob's Widget Emporium 是其自己的独立用户,Sally's Awesome Political Views 也是如此。由于虚拟托管,每个应用程序都通过 Linode 的云 DNS 管理器拥有自己的域记录。
  2. 我需要做什么才能不让这些电子邮件被视为垃圾邮件?此配置是在集中式邮箱级别完成,还是按帐户完成?
  3. 我需要做什么来阻止来自外部来源的传入电子邮件?我的 iptables 如下 -

IPv4:

$ sudo iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 8887  909K f2b-ssh    tcp  --  any    any     anywhere             anywhere             multiport dports ssh
 1282  128K ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 REJECT     all  --  !lo    any     127.0.0.0/8          anywhere             reject-with icmp-port-unreachable
  162  5770 ACCEPT     icmp --  any    any     anywhere             anywhere             state NEW icmp echo-request
  668 38256 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh state NEW
  355 19004 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http state NEW
  424 22736 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https state NEW
48568 4098K ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
 6996  368K LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_INPUT_denied: "
 7413  388K REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables_FORWARD_denied: "
    0     0 REJECT     all  --  any    any     anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain f2b-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 8531  881K RETURN     all  --  any    any     anywhere             anywhere

IPv6:

sudo ip6tables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all      lo     any     anywhere             anywhere            
    0     0 REJECT     all      !lo    any     localhost            anywhere             reject-with icmp6-port-unreachable
67580 6991K ACCEPT     ipv6-icmp    any    any     anywhere             anywhere            
   31  2480 ACCEPT     tcp      any    any     anywhere             anywhere             tcp dpt:http state NEW
   33  2640 ACCEPT     tcp      any    any     anywhere             anywhere             tcp dpt:https state NEW
10922   50M ACCEPT     all      any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    4  2956 LOG        all      any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_INPUT_denied: "
    4  2956 REJECT     all      any    any     anywhere             anywhere             reject-with icmp6-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all      any    any     anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "ip6tables_FORWARD_denied: "
    0     0 REJECT     all      any    any     anywhere             anywhere             reject-with icmp6-port-unreachable

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

鉴于我的实例可以发送电子邮件,我猜测它目前也可以接收它们。

那么,是否仅使用 sendmail 就可以完成所有这些操作?如果可以,我该如何配置?或者,如果这个问题太宽泛,请告诉我,我会将其拆分。

答案1

  1. 是的。有些应用程序支持指定“发件人”地址。否则,您可以使用 sendmail 的 genericstable 功能,它

将导致在映射中查找不合格的地址(即没有域名)和在类 {G} 中列出的域名的地址,并将其转换为另一种(“通用”)形式,这可以同时更改域名和用户名。

例子:

FEATURE(masquerade_envelope)
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') 

在 /etc/mail/genericstable 中

bob [email protected]
sally [email protected]
  1. 您需要让邮件服务器的正向和反向 DNS 匹配。您需要为要使用的域设置 SPF。如果 IP 出现在http://www.anti-abuse.org/multi-rbl-check/您需要获取不同的 IP。(考虑使用托管邮件服务。运行邮件服务器很烦人,因为垃圾邮件发送者会破坏一切。但是,既然您使用 sendmail,您一定喜欢痛苦。)

  2. sendmail 默认只监听本地主机,因此您无需执行任何操作。如果您已配置监听所有接口,请撤消该配置。

相关内容