我这里域名购买自万网,需要添加三条解析记录
第一条解析记录,类型为A,使用通配符*,记录值为服务器的公网ip
第二条解析记录类型为MX,记录为@,代表我之后的邮箱服务器叫xxx@imapmax.xyz,如果叫mail,那么我以后的邮箱服务器就是xxx@mail.imapmax.xyz,这个的记录值我设为mail.imapmax.xyz
,最后指向的就是我刚才设置A记录中的记录值
第三条是一个TXT记录,作用是配置SPF,记录值设置为v=sopf1 a mx ~all
docker pull mailserver/docker-mailserver
wget -O .env https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/compose.env
wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/docker-compose.yml
wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master/mailserver.env
wget https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/v9.0.1/setup.sh
chmod a+x ./setup.sh
修改docker-compose.yml
确保hostname+domainname是自己的邮箱服务器
hostname: mail
domainname: imapmax.xyz
container_name: mail_server
启动
docker-compose up -d
添加一个用户
./setup.sh [-Z] email add <user@domain> [<password>]
然后就可以从第三方邮件客户端登上这个账户了
虽然有SPF、DKIM、DMARC三个协议,但由于受协议保护的实体不一致,但欺骗仍然有可能成功。
电子邮件的身份验证涉及四个不同的角色:发件人、收件人、转发者、UI呈现器。
不同的服务之间存在许多不一致之处,攻击者可以利用这些不一致之处绕过安全机制,并像Webmail和电子邮件客户端呈现欺骗性结果。
此文章系统的分析了电子邮件传递过程中身份验证的四个关键阶段:发送身份验证,接收验证,转发验证和UI呈现。 我们发现14种电子邮件欺骗攻击能够绕过SPF,DKIM,DMARC和用户界面保护。 通过组合不同的攻击,欺骗电子邮件可以完全通过所有流行的电子邮件安全协议,并且收件人的MUA上不会显示安全警告。 即使对于具有高级技术背景的人来说,要确定这种电子邮件是否是欺骗邮件仍然是一项挑战。
贡献:
成功攻击的目标定义如下
###
SMTP协议并不要求两者一致,只能是开发者来确保两者一致。 大多数电子邮件服务进制用户发送与原始身份不一致的邮件,但Zimbra和EwoMail仍含有这种漏洞。
在发邮件时允许用户修改From字段 许多流行的电子邮件服务(例如Outlook,Sina,QQ邮件)和大多数第三方电子邮件客户端(例如Foxmail,AppleMail)仅显示From字段,而不显示Mail From字段
RCPT TO和To字段不一致
空的Mail From是被允许的,但是From字段填写的是伪造的发件人地址。
如果Mail From为空的话,则要求基于Helo字段完成SPF认证,但现实中Helo字段被滥用,所以验证比较宽松
攻击者构造多个From字段来绕过安全策略,RFC 5322声明有多个From字段的邮件是被拒绝的,但仍然有一些邮件服务商无法遵循该协。
From: <Oscar@attacker.com>
From: <Alice@a.com>
只有4个邮件服务(即Gmail,Yahoo,Tom和Aol)拒绝具有多个From字段的电子邮件,并且19种邮件服务受此类攻击的影响。 大多数经过测试的电子邮件服务倾向于在网络邮件上显示第一个From字段,而6个电子邮件服务(例如iCloud,Yandex,阿里云)选择显示最后一个From字段。 此外,有7家供应商针对此类攻击制定了具体的安全法规,例如在网络邮件上同时显示两个发件人地址(例如QQ邮件,Coremail)或将此类电子邮件放入垃圾邮件文件夹(例如Outlook,rambler.ru)
From 中列出多个发件人,Sender字段中需要标识实际发件人
但是
Mail From和 From字段是有复杂语法格式的富文本,难以正确解析并显示出来。
<@a.com, @b.com:admin@c.com>
<a@a.com>, ,<b@b.com>
截断字符是终止字符串分析的一系列字符
\x00
可以终止C语言程序解析字符串的过程\uff00-\uffff,\x81-\xff
)[ ] { } \t \r \n
以各种字符集编码:=?charset?encoding?encoded-text?=.
,
encoding
字段指定编码算法,b代表base64,q代表带引号的可打印编码。
encode-text
指定编码的文本,攻击者可以用这些编码的地址来逃避电子邮件安全协议的验证。
例如From: =?utf-8?b?QWxpY2VAYS5jb20=?=
,大多数电子邮件服务在验证DMARC协议之前不会对地址进行解码,所以DMARC解析的结果为None
。
此外,该技术可以与截断的字符串结合使用。
攻击者从知名的电子邮件服务的子域(没有MX记录)发送欺骗性电子邮件,SPF记录为None。
RFC 7208不建议使用通配符来发布SPF记录。
RFC 2821提到当域没有MX记录时,SMTP会假定只有A记录即可,而大多数网站都配备了具有通配符的DNS A记录。
邮件转发服务对所有转发的电子邮件添加DKIM签名
ARC(Authenticated Received Chain) 是一种新提出的协议,它提供了一条信任链,在电子邮件转发过程中将SPF,DKIM和DMARC的验证结果添加到一个有序集合中。
在实验中只有三个电子邮件服务(即Gmail,Office 365和Zoho)部署了ARC协议。
但是,研究发现Office 365和Zoho都在ARC协议实现方面存在安全问题。 ARC无法抵御上面讨论的除了A10以外的大多数攻击。
如果UI上呈现的发件人并不是真实的发件人,那么也可以认为这是一次成功的攻击。
internationalized domain names (IDN)
Punycode是一种将不能以ASCII格式显示的单词转换为Unicode编码的方法。值得注意的是,Unicode字符在屏幕上的外观相似,而原始地址不同。
如果域标签中包含多个语言的字符,则不应该呈现IDN。
有些字符无法呈现或者被截断。
例如U+0000-U+001F
或者@ : ; "
例如admin@gm@ail.com
显示为admin@gmail.com
数据集为拥有数千名员工的大型企业的3.7亿封邮件,在该数据集中成功检测到了6个已知的鱼叉式钓鱼活动,有9个误报,以及另外两个未知的鱼叉式攻击。
过去几年,有一些攻击者通过鱼叉式钓鱼攻击成功的破坏了政府系统。
鱼叉式钓鱼是一种社会工程攻击,攻击者发送有针对性的欺骗电子邮件,诱使接收者执行某种危险操作。从攻击者的角度来看,鱼雷的技术要求不高,不依赖任何特定的漏洞,无法进行技术防御,而且通常都会发送成功的。从防御者的角度来看,鱼叉式网络钓鱼很难反击,攻击者会精心设计他们的攻击电子邮件,使其看起来合法。
引入了一种简单的新的异常检测技术(DAS),该技术不需要标签训练数据,并且可以以非参数的方式运行。 我们的技术允许其用户轻松地将有关域名领域知识合并到DAS分配给事件的异常评分中。 因此,在我们的环境中,与使用相同功能的标准异常检测技术相比,DAS可以实现更好的数量级性能。 将这两个想法结合在一起,我们提出了用于凭据鱼叉式攻击的实时检测器的设计。
评估了将近4年的电子邮件数据(约3.7亿封电子邮件)以及相关的HTTP日志。 在这个大规模的真实世界数据集上,我们的检测器每天平均产生不到10条警报;平均而言,分析师可以在15分钟内处理一个月的警报价值。
pip3 intall kafka-python
kafka-console-producer.sh --broker-list 192.168.40.193:9092 --topic [topic]
kafka-configs.sh:配置管理脚本。
kafka-console-consumer.sh:kafka 消费者控制台。
kafka-console-producer.sh:kafka 生产者控制台。
kafka-consumer-groups.sh:kafka 消费者组相关信息。
kafka-delete-records.sh:删除低水位的日志文件。
kafka-log-dirs.sh:kafka 消息日志目录信息。
kafka-mirror-maker.sh:不同数据中心 kafka 集群复制工具。
kafka-preferred-replica-election.sh:触发 preferred replica 选举。
kafka-producer-perf-test.sh:kafka 生产者性能测试脚本。
kafka-reassign-partitions.sh:分区重分配脚本。
kafka-replica-verification.sh:复制进度验证脚本。
kafka-server-start.sh:启动 kafka 服务。
kafka-server-stop.sh:停止 kafka 服务。
kafka-topics.sh:topic 管理脚本。
kafka-verifiable-consumer.sh:可检验的 kafka 消费者。
kafka-verifiable-producer.sh:可检验的 kafka 生产者。
zookeeper-server-start.sh:启动 zk 服务。
zookeeper-server-stop.sh:停止 zk 服务。
zookeeper-shell.sh:zk 客户端。
from kafka import KafkaConsumer
consumer = KafkaConsumer('NTC-CONN-RECORD-LOG', auto_offset_reset='earliest',bootstrap_servers=['192.168.10.28:9092'])
for message in consumer:
print ("%s:%d:%d: key=%s value=%s" % (message.topic, message.partition,
message.offset, message.key,
message.value))
其中auto_offset_reset
默认为读取latest,最早的消息
from kafka.structs import TopicPartition
consumer.seek(TopicPartition(topic=u'test', partition=0), 5) #重置偏移量,从第5个偏移量消费
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['192.168.10.28:9092'])
producer.send('NTC-CONN-RECORD-LOG',test_data)
producer.close()
一个简单的echo服务器,用于测试http请求是否正确
Docker: https://hub.docker.com/r/hashicorp/http-echo
Github: https://github.com/hashicorp/http-echo
通过docker配置
docker pull hashicorp/http-echo
默认端口号为5678
docker run -p 5678:5678 hashicorp/http-echo -text="hello world"
更改端口号为8080
docker run -p 8080:8080 hashicorp/http-echo -listen=:8080 -text="hello world"
访问localhost:5678
就可以看到默认的hello world页面
在控制台可以看到每次请求的详细信息
缺点:对于请求的信息太过简单,头部字段都被忽略。
自定义响应的服务器
Github:
Docker:
镜像大小1.19GB
docker pull wangmuy/mocky
docker run -d -i -p 9000:9000 wangmuy/mocky
访问http://localhost:9000/
多个link会持续有效
官网
Github
Docker: