我有一个 Linode 实例,我将在其中托管几个小型 LEMP 应用程序。每个应用程序都需要向用户发送电子邮件(主要用于帐户注册...论坛/评论等等)。我希望能够使用 sendmail 来完成此操作,因为它已经安装在系统上。这可能吗?我预计不会有大量流量/电子邮件使用,因此我使用 Google 的 SMTP 服务器:
这个想法是 sendmail 将是一个空客户端 - 它可以发送邮件(我已经从它那里收到系统通知(OSSEC、Fail2ban)),但不能接收传入邮件。任何应用程序联系表单/机制都会向应用程序本身的所有者发送一条消息,然后他们可以通过自己的电子邮件直接与他们沟通。但是,我有几个问题:
- 是否可以配置一些东西,以便每个应用程序都有自己的外发电子邮件地址/身份?我已将每个应用程序分离到自己的 Linux 用户中,而无需 sudo 访问权限。因此(虚构名称),Bob's Widget Emporium 是其自己的独立用户,Sally's Awesome Political Views 也是如此。由于虚拟托管,每个应用程序都通过 Linode 的云 DNS 管理器拥有自己的域记录。
- 我需要做什么才能不让这些电子邮件被视为垃圾邮件?此配置是在集中式邮箱级别完成,还是按帐户完成?
- 我需要做什么来阻止来自外部来源的传入电子邮件?我的 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
- 是的。有些应用程序支持指定“发件人”地址。否则,您可以使用 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]
您需要让邮件服务器的正向和反向 DNS 匹配。您需要为要使用的域设置 SPF。如果 IP 出现在http://www.anti-abuse.org/multi-rbl-check/您需要获取不同的 IP。(考虑使用托管邮件服务。运行邮件服务器很烦人,因为垃圾邮件发送者会破坏一切。但是,既然您使用 sendmail,您一定喜欢痛苦。)
sendmail 默认只监听本地主机,因此您无需执行任何操作。如果您已配置监听所有接口,请撤消该配置。