其他
邮件可信其一邮件身份可信
请点击上面 一键关注!
内容来源:先知社区,作者:en0th
前言
在邮件钓鱼演练服务,针对企业大批量的钓鱼,我们可以选择自建邮件服务器。这样可以没有发件频率的限制,你可以伪造发件人,也可以改变发件人的IP,但有很多因素导致邮件信任度不高无法抵达对方的邮件,也有可能会被当做垃圾邮件处理。此篇文章讲述了一些提高邮件可信度的设置方法。
其实邮件可信一方面是身份可信,一方面是内容可信。在身份可信上就有很多重校验,这一方面是需要我们第一步摆平的。这里涉及到IP地区、IP信任、IP网络可达;域名相似、域名信誉、域名购买时间;SPF/DKIM/DMARC/PTR身份认证;TLS/SSL证书、 S/MIME证书传输认证等。内容可信可以涉及到发件人名称、地址;邮件内容;邮件附件等。
前提条件选择
邮件服务的选择
我接触过 sendmail 、Ewoemail、iRedMail 其他的暂未了解,其中 sendmail 只提供了邮件服务没有可视化管理的界面。但好在小巧,安装方便,自定义程度高。Ewoemail和iRedMail,都有后台和用户邮件管理系统,体积大,可以省去很多功夫。这里我使用 sendmail 达到我们的目的。
也可以选择使用 iRedMail 安装,它的配置教程:https://v2rayssr.com/iredmail.html#%E5%87%86%E5%A4%87%E5%B7%A5%E5%85%B7
VPS的选择
25 端口开放且没有VPS提供商监管
可以设置 PTR Records
内存大于 1 GB
域名提供商和域名的选择
域名的选择可以参考这个 https://www.maigoo.com/top/428603.html。其中 .com 、.cn、.us比较常见,这些TLDs 顶级域名可信度较高。如果你选择使用类似于 .space 的域名,会碰到这种情况。
设置身份验证
有助于为收件人防范钓鱼式攻击邮件等恶意电子邮件。
不容易被 Gmail 拒收或标记为垃圾邮件。
邮件可信度测试地址
一天只能免费测试三封邮件,注意把控次数。
设置域名:mydomain.com
文中的这个域名请你自行替换成自己的域名。
根据以下内容设置完后邮件可信度测试如下所示,其中扣分的地方是我购买的域名还没超过28天。
https://en.internet.nl/test-mail/
了解更多请看 https://support.google.com/a/answer/81126?hl=zh-Hans
设置 SPF 记录
内容为
v=spf1 mx ~all
检测方式:
nslookup -type=txt mydomain.com
~all
前缀代表软拒绝,对接收方来说,遇到有软拒绝的域名没有通过SPF校验,通常采取的策略是放行或者标记为垃圾邮件。了解更多SPF相关内容可以参考:https://github.com/internetstandards/toolbox-wiki/blob/main/SPF-how-to.md
了解如何绕过SPF:https://www.freebuf.com/articles/system/238215.html
设置 A 记录
mail.mydomain.com
的 A 记录指向你的 VPS 服务器(邮件服务器)IPv4地址检测方式:
nslookup mail.mydomain.com
设置 AAAA 记录
mail.mydomain.com
的 AAAA 记录指向你的 VPS 服务器(邮件服务器)IPv6地址检测方式:
nslookup mail.mydomain.com
设置 MX 记录
检测方式:
nslookup -type=mx mydomain.com
设置 DMARC 记录
添加方法就是增加一条 _dmarc 的 TXT 解析,内容为配置选项,
v=DMARC1; p=none; pct=100; rua=mailto:dmarc@mydomain.com
检测方式:
nslookup -type=txt _dmarc.mydomain.com
p=quarantine
或者 p=reject
,分别是隔离和拒绝政策,我们可以直接设置成v=DMARC1; p=reject; pct=100; rua=mailto:dmarc@mydomain.com
了解更多关于DMARC相关知识参考:https://github.com/internetstandards/toolbox-wiki/blob/main/DMARC-how-to.md
启用并设置 DNSSEC
阿里云域名用户可以看这篇 https://help.aliyun.com/document_detail/101717.html
官方教程 https://sg.godaddy.com/help/enable-dnssec-on-my-domain-6420
设置 DKIM 记录 【重点】
了解更多DKIM相关知识可以参考:https://github.com/internetstandards/toolbox-wiki/blob/main/DKIM-how-to.md
Amavisd 查询
查询 DKIM 可以使用系统命令
amavisd showkeys
ORamavisd -c /etc/amavisd/amavisd.conf showkeys
如果不存在 amavisd 可以使用命令安装
yum --enablerepo=rpmforge,rpmforge-extras install amavisd-new -y
OpenDKIM 签名 【比较繁琐】
文中这节如果有一些描述没有读懂可以看这篇参考文章https://meumobi.github.io/sendmail/2015/09/18/install-configure-dkim-sendmail-debian.html
/etc/mail/sendmail.cf 主配置文件 /etc/mail/sendmail.mc 模板文件 /etc/mail/access 完成中继转发功能,即加入允许访问的域名 /etc/aliases 该文件包含 sendmail 程序所用到的别名数据库的文本形式。 /etc/mail/local-host-names 本地主机名和域名的列表决定收到的邮件是本地邮件,还是远程邮件,然后决定是地投送还是转发。 /etc/mail/sendmail.cw 当一个主机有多个域名时,在此加入这些域名 /var/spool/mqueue 邮件队列临时存放的目录 /var/mail 存放所有收到的邮件 /var/log/maillog 日志文件
#### 1、设置主机名
如果以及设置过可以跳过这一步。vim /etc/hosts
在hosts 文件添加一段127.0.0.1 mail.mydomain.com mail
这里的 127.0.0.1 替换成你的 VPS IP。 echo mail > /etc/hostname
修改你的 hostname
验证hostname -f
即可看到mail.mydomain.com
,而不加选项则是短名称,如果你的不是这样可以使用sudo hostname mail
强制修改。
2、安装服务
yum install sendmail sendmail-cf mailutils sharutils opendkim opendkim-tools -y
mkdir -p /etc/opendkim/keys/mydomain.com
3、生成签名密钥并配置opendkim
man opendkim-genkey
查看更多选项。在此示例中,我使用了 -D(目录)选项、-d(域)选项和 -s(选择器)选项。请留意这里的 -s 选项,这里可以默认为 default 你可以选择自定义任意字符。
opendkim-genkey -D /etc/opendkim/keys/mydomain.com -d mydomain.com -s default
chown -R opendkim:opendkim /etc/opendkim/keys/mydomain.com
chmod 640 /etc/opendkim/keys/mydomain.com/default.private
chmod 644 /etc/opendkim/keys/mydomain.com/default.txt
vim /etc/opendkim.conf
配置 OpenDKIM,这是我配置的文件。请对照着修改。PidFile /var/run/opendkim/opendkim.pid
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
UserID opendkim:opendkim
Socket inet:8891@localhost
Umask 002
SendReports yes
SoftwareHeader yes
Canonicalization relaxed/simple
Domain mydomain.com
Selector default
MinimumKeyBits 1024
KeyFile /etc/opendkim/keys/mydomain.com/default.private
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
OversignHeaders From
AutoRestart Yes
AutoRestartRate 10/1h
SignatureAlgorithm rsa-sha256
vim /etc/opendkim/KeyTable
在该文件添加下面一行。default._domainkey.mydomain.com mydomain.com:default:/etc/opendkim/keys/mydomain.com/default.private
vim /etc/opendkim/SigningTable
在该文件添加下面一行。*@mydomain.com default._domainkey.mydomain.com
vim /etc/opendkim/TrustedHosts
在该文件添加下面一行。
127.0.0.1
localhost
mydomain.com
echo 'default._domainkey.mydomain.com mydomain.com:default:/etc/opendkim/keys/mydomain.com/default.private' >> /etc/opendkim/KeyTable
echo '*@mydomain.com default._domainkey.mydomain.com' >> /etc/opendkim/SigningTable
echo 'mydomain.com' >> /etc/opendkim/TrustedHosts
4、配置 sendmail
vim /etc/mail/sendmail.mc
在该文件添加下面一行。INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@127.0.0.1')
其他的 sendmail 配置可以参考这篇 https://max.book118.com/html/2021/1018/8040072020004022.shtm
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
使用 m4 生成Sendmail的配置文件。启动需要的服务并查看他们的状态
systemctl restart sendmail saslauthd opendkim
systemctl status sendmail saslauthd opendkim
5、添加 DNS 记录
它的构成是 Select._domainkey。这里的 Select 其实就是上面第2小节里生成签名密钥命令里的
-s default
所以这里我们的命名为 default._domainkey。而内容可以通过
cat /etc/opendkim/keys/mydomain.com/default.txt
命令获取。想进一步了解 DKIM 可以参考这篇 https://www.konghaidashi.com/post/4376.html
6、发送测试
yum install sendEmail -y
安装服务,使用下面的命令进行测试。sendEmail -f test@mydomain.com -t receiver@mail.com -u TestSendEmail -m Hi -s 127.0.0.1
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-cc 表示抄送发给谁
-bcc 表示暗抄送给谁
-o message-content-type=html 邮件内容的格式,html表示它是html格式
-o message-charset=utf8 邮件内容编码
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码(注意,这个密码貌似有限制,例如我用d!5neyland就不能被正确识别)
-m 邮件的内容
-a 要发送的附件
$ sendEmail -f sender@mail.com \
-t receiver@mail.com \
-cc receiver_cc@mail.com \
-bcc receiver_bcc@mail.com \
-o message-content-type=html \
-o message-charset=utf8 \
-s mailserver.com \
-u TestSendEmail \
-xu sender \
-xp xxxxxx \
-m 邮件的内容:测试命令行发送邮件 \
-a 附件
申请并设置 TLS/SSL 证书
有关邮件加密的相关描述 https://support.google.com/mail/answer/6330403?visit_id=638066867880173220-2329511212&p=tls&hl=zh-Hans&rd=1
Acme 脚本申请证书
安装 Acme 脚本
curl https://get.acme.sh | sh
2021 年 6 月 17 日更新:从 acme.sh v 3.0.0 开始,acme.sh 使用 Zerossl 作为默认 ca,您必须先注册帐户(一次),然后才能颁发新证书。
~/.acme.sh/acme.sh --register-account -m ca@mydomain.com
其中 ca@mydomain.com,ca 可以任意变更。
(1)两种方式申请验证
Web 验证申请证书
申请SSL证书时,需要先进行验证,确保你是该域名的所有者。以下有三种方式,可以按照自己的情况来继续进行验证申请。
80 端口空闲的验证申请
yum install socat -y
~/.acme.sh/acme.sh --issue -d mydomain.com -d mail.mydomain.com --standalone
Nginx 的方式验证申请
~/.acme.sh/acme.sh --issue -d mydomain.com -d mail.mydomain.com --nginx
http 的方式验证申请
原理:Acme 自动在你的网站根目录下放置一个文件, (这个文件可以被互联网访问)来验证你的域名所有权,完成验证. 然后就可以生成证书了。
实例代码:(后面的路径请更改为你的 网站根目录 绝对路径 )
~/.acme.sh/acme.sh --issue -d mydomain.com -d mail.mydomain.com --webroot /home/wwwroot/mydomain.com/
DNS 验证申请证书 【推荐】
Acme.sh 目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商。该方式可以申请多域名、泛域名证书,达到很多域名可以共用一张证书的目的。
为域名更换 cloudflare 域名服务器
首先进入到 cloudflare 控制台添加你的域名。https://dash.cloudflare.com/
在等待期间我们可以先设置API Keys。先到 https://dash.cloudflare.com/profile/api-tokens
export CF_Key="你的Global API Key"
export CF_Email="你注册CF账号用的邮箱"
~/.acme.sh/acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com
(2)更新证书
mkdir /etc/mail/certs
cp /root/.acme.sh/mydomain.com/* /etc/mail/certs/
~/.acme.sh/acme.sh --installcert -d mydomain.com --key-file /etc/mail/certs/mydomain.com.key --fullchain-file /etc/mail/certs/fullchain.cer
~/.acme.sh/acme.sh --upgrade --auto-upgrade
chmod -R 700 /etc/mail/certs
cd /etc/mail/certs
for i in `ls | grep '.cer'`;do mv $i `echo $i | sed 's/\.[^.]*$//'`.pem;done;
wget http://www.cacert.org/revoke.crl
为了解决 STARTTLS: CRLFile missing 问题,这里我下载了 revoke.crl 文件。参考http://www.linuxweblog.com/blogs/sandip/20071019/starttls-crlfile-missing-resolved
ca-bundle.crt
文件。里面标注了常见目录 http://gagravarr.org/writing/openssl-certs/others.shtml#selfsigned-openssl
openssl version -d
找到 SSL 文件存放目录ca-bundle.crt
文件一般放置于 certs 目录下cp /etc/pki/tls/certs/ca-bundle.crt /etc/mail/certs/ca-bundle.crt
echo /etc/mail/certs/fullchain.pem >> /etc/mail/certs/ca-bundle.crt
ln -sf ca-bundle.crt `openssl x509 -hash -noout < ca-bundle.crt`.0
vim ca-bundle.crt
fullchain.pem
追加到 ca-bundle.crt
,需要注意不能直接复制保存,而是在每一个证书开头加一个换行。vim /etc/mail/sendmail.mc
对照下面修改项进行修改dnl define(`confLOG_LEVEL', `20')dnl
define(`CERT_DIR', `/etc/mail/certs')dnl
define(`confSERVER_CERT', `CERT_DIR/fullchain.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/mydomain.com.key')dnl
define(`confCLIENT_CERT', `CERT_DIR/fullchain.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/mydomain.com.key')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/ca-bundle.crt')dnl
define(`confCRL', `CERT_DIR/revoke.crl')
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
systemctl restart sendmail
systemctl status sendmail
sendmail recipient@mail.com
From: root@mydomain.com
To: recipient@mail.com
HI
.
.
tail -20 /var/log/maillog
verify=OK
即可。微信搜索公众号:Linux技术迷,回复:linux 领取资料 。verify=FAIL
可以根据verifymsg
来判断问题。FreeSSL 申请证书
设置 PTR 反向解析 【重点】
这里详细介绍了 PTR 拦截垃圾邮件是如何运作的。https://www.800188.com/index.php/home/reference-news/86-technology/2044-rdns-3?tmpl=component&print=1
为了能够免费设置 PTR 我特地从 hostinger 供应商购买了VPS。
这个 hostinger 供应商提供的最优惠价格都是购买4年的,如果你购买一个月那价格可能会是个灾难。
检测方式:
nslookup VPSIP
此篇结语
END