去你的DDoS——个人博客如何防御DD/CC攻击?ep.1

大家好,我是鸽子王Aiden,我前几天因为在TG群调戏大佬,结果源站IP泄露,还被小小的CC了一下。经过这次教训,我决心在网站安全上下足功夫。

0x01 配置安全

在云计算资源如此充足的年代,扫描全网IP似乎并不是什么难事。这里有个十分坑爹的网站24/7全天候不间断的扫描着全网IP,他就是Censys。如果你能在这个网站直接查到自己的源站IP的话,对不起了,建议直接搬家(宝塔一键迁移)到新的VPS。

他的原理是什么呢?我来举个例子

我们随便拿一个基于Nginx的源站IP,比如说天猫。我们访问https://天猫的IP,然后不出所料的,我们会看到这个页面

看!下面就暴露域名了。Censys的原理就是这样,扫描全网IP,然后用https://IP一个一个的去访问它去试,成功了就在自己的数据库里Link一下这个域名和IP

如果你发现你的IP已经被记录了,正准备搬家,别慌,搬家之后别傻呵呵的直接去添加记录解析到VPS。如果没被记录,也别高兴的太早,整你的方法千千万。

0x02 服务泄露IP

一般来讲,WordPress是支持评论邮件回复的,我们只需要自己给他一条评论,删掉Cookies,再去评论自己的评论就行了,不出所料,你会收到系统的邮件,邮件头就会暴露源站IP

当然,应对方法相当简单,使用WPMailSMTP插件,然后注册Mailgun账户,为自己的博客配置Mailgun的域名邮箱,然后使用WPMailSMTP对接即可。这样你的邮件头就是Mailgun的服务器IP了,欢迎大佬去打打看能不能打破?(打破了也没关系,反正又不是我的服务器?)

0x0 Power UP

好了,我假设你的新VPS已经准备就绪且还没来的及被扫描。最简单的办法就是源站不配置SSL(笑)然后CF选择Flexible,或者全站静态化。有没有其他方法呢?显然是有的。

假设你选择的是CloudFlare云加速的话,我们可以仅允许你的CF访问源站,其余的请求全部Drop,然后更改你的VPS的SSH端口到一个新的冷门端口然后禁Ping,即可解决问题,这里放上我的Digital Ocean防火墙,记得在这里面添加你的自定义端口。

CF IPv4 IP 列表 CF IPv6 IP 列表

这样配置的话是最稳定的,因为流量刚刚到达机房,还没到达VPS就会被Drop掉,能打死一个VPS提供商的流量,我觉得你是不会遇到的了。

如果你不会配置或者你的供应商没有提供(2020年了还用这种VPS建议换掉,选择VPS的话,可以看这篇文章),可以参照以下设置,由宿云的Zhys提供脚本。

nano firewall.sh ##创建一个防火墙脚本
# 输入以下内容
#!/bin/bash
# Name  : Anti IP Leakage
# Author: Zhys
# Date  : 2019

# 禁止来自IPv4的所有HTTP/S访问请求
iptables -I INPUT -p tcp --dport 80 -j DROP
iptables -I INPUT -p tcp --dport 443 -j DROP

# 对Cloudflare CDN IPv4地址开放HTTP/S入站访问
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -s $i -p tcp --dport 80 -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v4`; do iptables -I INPUT -s $i -p tcp --dport 443 -j ACCEPT; done

# 禁止来自IPv6的所有HTTP/S访问请求
ip6tables -I INPUT -p tcp --dport 80 -j DROP
ip6tables -I INPUT -p tcp --dport 443 -j DROP

# 对Cloudflare CDN IPv6地址开放HTTP/S入站访问
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -s $i -p tcp --dport 80 -j ACCEPT; done
for i in `curl https://www.cloudflare.com/ips-v6`; do ip6tables -I INPUT -s $i -p tcp --dport 443 -j ACCEPT; done

# 保存iptables配置
iptables-save
ip6tables-save

# 注意:80/443为默认HTTP/S协议通讯使用端口,若实际应用有使用非80/443端口进行,请依葫芦画瓢自行修改脚本
# Ubuntu系统可以使用UFW则类似:for i in `curl https://www.cloudflare.com/ips-v4`; do ufw allow proto tcp from $i to any port 80; done
# 基于Linux系统兼容性考虑脚本使用iptables配置系统防火墙,请自行根据各自系统、防火墙不同做相应配置调整实施

# 按CTRL+X 保存即可

bash firewall.sh ##使防火墙生效

评论

  1. 黎想
    Windows Firefox

    还有一个办法:用一个马甲域名给自己的ip搞SSL,然后把真域名CNAME过去。这招只能防你说的那个网站,不能防人。

    6月前
    2020-2-24 20:24:41
    • Sakurajima
      iPhone Chrome

      下一个ep会讲,比这个高明一点点。

      6月前
      2020-2-25 13:15:12

发送评论 编辑评论


上一篇
下一篇