我正在建立一个基于 exim4 的邮件系统。该系统实现了 DKIM 签名和检查(除其他外)。签名似乎没有问题,但检查不起作用,exim4 抱怨我的 TXT 记录的语法,其中包含我的 dkim 公钥:
2014-02-02 22:37:31 1WA5fP-0004Y4-E2 DKIM: d=middle.earth s=a9d04665528b593d263a6e5256648c99 c=relaxed/relaxed a=rsa-sha256 [invalid - syntax error in public key record]
Run Code Online (Sandbox Code Playgroud)
我正在使用 2048 位长的 RSA 密钥在邮件中继级别对我的邮件进行签名(这可以正常工作,并且我确实在通过此服务器中继的邮件中有 DKIM 标头)。问题似乎在于绑定(我用于该区域的 DNS 服务器)不支持区域文件中长度超过 255 个字符的记录。所以我选择按照如下所示分割记录,并如非常值得信赖的网站 zytrax.com 中所述:
...
a9d04665528b593d263a6e5256648c99._domainkey IN 1800 TXT ("k=rsa,p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz2/ZfhxSI/A"
"bqgh0amM8ylrlosirWeKShUhq7fg12aYmRwOqq9hIzO0Fcz1BzfgHVu6HU++rC5"
"QoUK0JQK/nk4jwkDgvG2di2ZYmAvEbY/VeiK1x/TG0p1Iczr2k6Bj0gEAb/YGD2"
"YbwrwAi4bDXwoPsYuuNn9TB3jjyWKu/dvOsqhff1/4Wc+FkOi0ClvgrXiklN28X"
"TLjyjSyU794ntIoegXxrfwcwkhfPMvuqcnhfIC0Z8L71M4WR4SoHyNHVfBtNlUv"
"VNROiXlMxtxnNQvfViSwz6LC8bYIxeAba3hSXPTChKu3qZtfR0o3jFwEWAfLQdg"
"Ixler0jMEoAyJmfQIDAQAB")
Run Code Online (Sandbox Code Playgroud)
完整的区域文件可以在这里找到:http : //pastebin.com/GDE5XA2M
使用该配置 exim 会抱怨上述错误。如果我尝试手动解析我的 dkim 记录,我会得到:
;; ANSWER SECTION:
a9d04665528b593d263a6e5256648c99._domainkey.middle.earth. 1800 IN TXT "k=rsa,p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz2/ZfhxSI/A" "bqgh0amM8ylrlosirWeKShUhq7fg12aYmRwOqq9hIzO0Fcz1BzfgHVu6HU++rC5" "QoUK0JQK/nk4jwkDgvG2di2ZYmAvEbY/VeiK1x/TG0p1Iczr2k6Bj0gEAb/YGD2" "YbwrwAi4bDXwoPsYuuNn9TB3jjyWKu/dvOsqhff1/4Wc+FkOi0ClvgrXiklN28X" "TLjyjSyU794ntIoegXxrfwcwkhfPMvuqcnhfIC0Z8L71M4WR4SoHyNHVfBtNlUv" "VNROiXlMxtxnNQvfViSwz6LC8bYIxeAba3hSXPTChKu3qZtfR0o3jFwEWAfLQdg" "Ixler0jMEoAyJmfQIDAQAB"
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来不太正确,我可以想象 exim 会因为这样的输出而丢失。但是,我不能 100% 确定对于这么长的 DNS …
我们在我们的服务器上使用 Exim 仅从本地自动用户发送电子邮件,如 root、cron 等。
我们必须将每个可能的用户指定为/etc/email-addresses. 例如:
root: alert@example.com
cron: alert@example.com
backup: alert@example.com`
Run Code Online (Sandbox Code Playgroud)
这使我们能够接收生成的每封电子邮件。
问题是当我们出于任何原因添加用户时(例如,当我们添加一个包时,一些添加用户时),我们可能忘记将此用户添加到/etc/email-addresses. 大多数时候这不是问题,但这并不干净。而且整体方法不干净。
我们想将 Exim 配置为使用相同的源地址发送每封电子邮件。即每封发送的电子邮件来自alert@example.com
一种方法是使用通配符或正则表达式,/etc/email-addresses但不支持这种方式。
我目前不了解 Exim 不足以弄清楚如何以某种方式修改它。
理想情况下,Exim 应该/etc/email-addresses首先查看,如果不匹配,则使用预定义的地址。但这是非常次要的。
这个地址有两个地方用到:
1. 当 Exim 向FROM:smtp 服务器发送命令时
2. 头部内部
编辑:
重写部分是来自 Debian 的原始部分
begin rewrite
.ifndef NO_EAA_REWRITE_REWRITE
*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses} \
{$value}fail}" Ffrs
*@ETC_MAILNAME "${lookup{${local_part}}lsearch{/etc/email-addresses} \
{$value}fail}" Ffrs
.endif
Run Code Online (Sandbox Code Playgroud) 我正在运行的其中一台 cPanel 服务器经常遇到电子邮件帐户被盗的问题。我相信这台服务器上的许多用户的密码都很弱。我增加了最低密码安全性,但只有在更改密码时才生效......有没有办法强制所有 cPanel 帐户和 cPanel 电子邮件地址一次性更改密码?这样我就可以强制所有用户生成新的、安全的密码。
更新:我发现每个帐户都有~/etc/domain.name/{passwd,shadow}包含所有电子邮件帐户的 Unix 样式密码和影子文件的文件。但是,如果我手动编辑它们,我仍然可以发送电子邮件:-(
如果我能找到exim用来验证用户身份并在那里修改密码的文件,那将解决我的问题......
我正在尝试将 DKIM 添加到我的域中,我创建了一个密钥,将以下内容添加到/etc/exim4/conf.d/transport/30_exim4_config_remote_smtp:
dkim_domain = mydomain.com
dkim_selector = mail1
dkim_private_key = /etc/exim4/dkim.key
Run Code Online (Sandbox Code Playgroud)
重新启动exim服务,尝试过dpkg-reconfigure,但所有电子邮件都未经签名发送。/var/log/exim4/panic.log是空的。没有错误或任何东西。
我究竟做错了什么?Ubuntu 10.04 LTS
### transport/30_exim4-config_remote_smtp
#################################
# This transport is used for delivering messages over SMTP connections.
remote_smtp:
debug_print = "T: remote_smtp for $local_part@$domain"
driver = smtp
.ifdef REMOTE_SMTP_HOSTS_AVOID_TLS
hosts_avoid_tls = REMOTE_SMTP_HOSTS_AVOID_TLS
.endif
.ifdef REMOTE_SMTP_HEADERS_REWRITE
headers_rewrite = REMOTE_SMTP_HEADERS_REWRITE
.endif
.ifdef REMOTE_SMTP_RETURN_PATH
return_path = REMOTE_SMTP_RETURN_PATH
.endif
.ifdef REMOTE_SMTP_HELO_DATA
helo_data=REMOTE_SMTP_HELO_DATA
.endif
dkim_domain = mydomain.com
dkim_selector = mail1
dkim_private_key = /etc/exim4/dkim.key
.ifdef …Run Code Online (Sandbox Code Playgroud) 我们在一个站点上有一个有效的 exim 设置,用户可以在其中发送和接收邮件。我们正在尝试设置服务器以使用电子邮件向本地网络之外的地址发送一些警告和错误。
问题是:
发送邮件的程序使用它运行的用户名和服务器的本地主机名发送邮件。这会导致邮件的发件人格式为:myapp@myserver.mydomain。Exim 将这些邮件发送到 ISP 的 SMTP 服务器,该服务器拒绝这些邮件,因为它们具有非法或无法验证的发件人(内部地址)。
我想我应该配置 exim 在以下情况下重写发件人:
我尝试在 exim 配置中设置某种重写,但没有设法让它工作。我会展示我尝试过的内容,但是在上次访问该网站时我的时间用完了,不得不恢复到原始版本,但我尝试过的所有更改都丢失了。
根据Exim4 文档我有以下脚本:
#! /bin/bash --
ED="dkim_ed25519_$(date +'%Y%m%d')"
RSA="dkim_rsa_$(date +'%Y%m%d')"
## Generate private key
openssl genpkey -algorithm ed25519 -out "${ED}.private"
openssl genrsa -out "${RSA}.private" 2048
## Use private key to generate the public DNS TXT record:
## 20200701._domainkey.example.com IN TXT "k=[ed25519|rsa]; p=[pub_key_content]"
openssl pkey -in "${ED}.private" -pubout -outform DER | tail -c +13 | base64 > "${ED}.public"
openssl rsa -in "${RSA}.private" -pubout -outform PEM | sed '/^-----/d' | tr -d '\n' > "${RSA}.public"
Run Code Online (Sandbox Code Playgroud)
这会生成一对私钥+公钥。公共的有:
dkim_ed25519_20200701.public:
ICkF+6tTRKc8voK15Th4eTXMX3inp5jZwZSu4CH2FIc=
Run Code Online (Sandbox Code Playgroud)
dkim_rsa_20200701.public: …
我需要使用 exim4 暂时冻结来自特定发件人的外发电子邮件。发件人使用远程 SMTP(即通过 TCP/IP)登录。
我想要做的是冻结(但不拒绝)他的所有电子邮件,以便我可以检查队列并允许或禁止进一步处理。
任何帮助,将不胜感激。
我正在尝试删除您在收到 Exim 发送的电子邮件时看到的版本号。
Received: from user1 by site.org with local (Exim 4.72)
Run Code Online (Sandbox Code Playgroud)
我试过在这两个文件中编辑 smtp_banner
/etc/exim4/conf.d/main/02_exim4-config_options
/etc/exim4/exim4.conf.template
Run Code Online (Sandbox Code Playgroud)
但是从那里删除版本号,然后重新加载 Exim 的配置不起作用。
我像这样发送我的测试电子邮件:
echo "Message Content" | mail -s "Subject goes here" email@email.com -v
Run Code Online (Sandbox Code Playgroud)
更新 1
comp1:/etc/exim4# ls -l /etc/exim4/ 共 96 drwxr-xr-x 9 根 4096 2010 年 7 月 30 日 conf.d -rw-r--r-- 1 根 76239 Jan 21 08:24 exim4.conf.template -rw-r----- 1 根 Debian-exim 2008 年 9 月 30 日 204 日 passwd.client -rw-r--r-- 1 root root 1462 Jan 21 07:39 update-exim4.conf.conf
我们有一个带有域的 linux (Debian) VPS(假设 example.com 和 MX mail.example.com)设置了 SPF。dovecot+exim 正在运行。除此之外还有直接管理员。
当我向外国服务器发送邮件时,一切都很好。消息中有服务器 IP,SPF 检查正常。
一些数据发生了变化(域等):
Received: from mail.example.com (mail.example.com. [188.40.153.39])
by mx.google.com with ESMTPS id ***.7.2015.02.18.04.09.46
for <*@gmail.com>
(version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
Wed, 18 Feb 2015 04:09:47 -0800 (PST)
Received-SPF: pass (google.com: domain of test@example.com designates 188.40.153.39 as permitted sender) client-ip=188.40.153.39;
Run Code Online (Sandbox Code Playgroud)
但是,当我将它从本地邮箱发送到另一个本地邮箱,然后通过 POP3 将邮件发送到 gmail 时,我遇到了 SPF 问题,因为邮件包含原始客户端 IP 地址并且 SPF 检查失败。
Authentication-Results: mx.google.com;
spf=fail (google.com: domain of test@example.com does not designate 82.160.100.10 as permitted sender) smtp.mail=test@example.com
Received-SPF: fail (google.com: domain of …Run Code Online (Sandbox Code Playgroud) 花了 2 天时间试图告诉 Exim 在我的 Debian8 服务器上添加 DKIM 签名。没有成功。已阅读许多操作方法、论坛,但在我的服务器上没有任何可能的解决方案。
已生成密钥:
cd /etc/exim4/
openssl genrsa -out example.com-private.pem 1024 -outform PEM
openssl rsa -in example.com-private.pem -out example.com.pem -pubout -outform PEM
Run Code Online (Sandbox Code Playgroud)
已创建文件
00_local_macros
Run Code Online (Sandbox Code Playgroud)
在
/etc/exim4/conf.d/main/
Run Code Online (Sandbox Code Playgroud)
具有以下内容:
DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
DKIM_DOMAIN = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
Run Code Online (Sandbox Code Playgroud)
已发布文本 DNS 记录:
20160604._domainkey.example.com
Run Code Online (Sandbox Code Playgroud)
带有公钥的内容:
k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRpHpC2q1ycmaqdnYlf5WI5g7ZyiXybd6EFdOqk35Sl7ZNfSeZelbyxqgLN+BzHpbp4Z4JDtKLSgBwugCePhl2xVDtQvO9XfqwQLMO5PAOONCLTwoGYrViwf5ki2zIqS2uN5MpuRTKW/IiK3CtRId+w5gjdACAvkwZWBstKEDrQQIDAQAB
# update-exim4.conf
# service exim4 restart
Run Code Online (Sandbox Code Playgroud)
甚至重新启动了服务器。
所有电子邮件仍然在没有 DKIM 签名的情况下到达。
尝试添加行:
dkim_domain = ${lc:${domain:$h_from:}}
DKIM_PRIVATE_KEY=${if exists{/etc/exim4/${dkim_domain}-private.pem} {/etc/exim4/${dkim_domain}-private.pem}}
DKIM_CANON = relaxed
DKIM_SELECTOR = 20160604
dkim_sign_headers = true
Run Code Online (Sandbox Code Playgroud)
到某些论坛中建议的文件 /etc/exim4/conf.d./transport/30_exim4-config_remote_smtp 。没有成功。仍然没有 …