%20%E7%9B%92%E5%AD%90%20-%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E9%80%8F%E9%81%8E%20sendmail%20%E5%BE%9E%E5%A4%9A%E5%80%8B%E7%B6%B2%E5%9F%9F%E7%99%BC%E9%80%81%E9%9B%BB%E5%AD%90%E9%83%B5%E4%BB%B6%EF%BC%9F.png)
我有一個 Linode 實例,將在其中託管幾個小型 LEMP 應用程式。這些應用程式中的每一個都需要向用戶發送電子郵件(主要用於帳戶註冊......論壇/評論等等)。我希望能夠僅使用 sendmail 來完成此操作,因為它已經安裝在系統上。那可能嗎?我預計不會有大量流量/電子郵件使用,因此我使用 Google 的 SMTP 伺服器:
這個想法是 sendmail 將是一個空客戶端 - 它可以發送郵件(並且我已經從中收到系統通知(OSSEC、Fail2ban)),但不能接收傳入的郵件。任何應用程式聯絡表單/機制都會向應用程式本身的擁有者發送一條訊息,然後他們可以透過自己的電子郵件直接與他們進行通訊。不過,我有幾個問題:
- 是否可以進行配置,以便每個應用程式都有自己的傳出電子郵件地址/身分?我已將每個應用程式分離到自己的 Linux 用戶中,而無需 sudo 存取權限。因此(虛構名稱),Bob's Widget Emporium 是自己的獨立用戶,Sally's Awesome Politics 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 僅偵聽本機主機,因此您無需執行任何操作。如果您已設定為偵聽所有接口,則撤銷該操作。