全球主机交流论坛

标题: 做一个永不暴露真实IP的网站,防止DDoS [打印本页]

作者: tlanyan    时间: 2020-10-14 21:09
标题: 做一个永不暴露真实IP的网站,防止DDoS
本帖最后由 tlanyan 于 2020-10-14 21:10 编辑
全球DDCC论坛经常遇到网站被打得不能自理的情况,本人根据经验写了一片防止暴露真实ip的文章,原文在 https://tlanyan.me/do-hide-site-real-ip/,大佬们轻喷。


防范DDoS攻击最主要的手段是加钱上高防,同时隐藏网站真实IP。前文 隐藏网站的真实ip 简要介绍了网站隐藏真实ip的基本操作,但不够详细和深入。本文详细介绍几种网站隐藏真实ip的方法和优缺点,让你能真正做一个永不暴露真实IP的网站。

做一个永不暴露真实IP的网站

既然不想暴露网站的真实IP,那么真实服务器前面至少套一层代理。一般来说,位于最前线的反向代理主要有如下几种:



这三种反向代理主要作用不一样,配置好的情况下都能隐藏服务器真实IP。对于普通的网站,使用CDN或者高防就足够,业务量的情况下才会用到SLB。

下面介绍使用了反向代理的情况下,隐藏网站真实IP的操作。

防火墙

使用防火墙是最简单的做法,即:将反向代理的回源IP加入白名单,屏蔽其他IP的任何请求。

例如使用CloudFlare的免费CDN服务,其回源IP可从 https://www.cloudflare.com/zh-cn/ips/ 获取,然后将其加入白名单,同时屏蔽其他IP:

  1. # 将cf ip地址放在 cf_ips.txt
  2. # 首先将cf的ip加入白名单
  3. while read -r line
  4. do
  5.   firewall-cmd --zone=trusted --add-source=$line
  6. done < cf_ips.txt
  7. # 然后移除其他ip对http和https服务的访问
  8. firewall-cmd --remove-service=http
  9. firewall-cmd --remove-service=https
复制代码


经过上述设置,Cloudflare 的IP能正常访问,其他IP完全无法访问真实ip的网站服务器,很好的隐藏了真实IP。

该方法设置简单,适用于服务器托管单站点的情形。当服务器上托管多个网站,并且某些站点需要直接暴露外网时,这种做法缺乏灵活性,无法实现。

也可以通过Nginx的allow/deny指令达到相同效果

IPv6

对于防火墙和网络不熟悉的网友,可以考虑使用IPv6来隐藏网站的真实IP。具体操作为:

1.找一台有IPv6地址的服务器,只有IPv6的NAT VPS更好。目前IPv6地址正在普及中,许多商家都免费提供IPv6地址,例如 一些VPS商家整理 中的 阿里云、Vultr、Linode、CloudCone,有的还提供不止一个IPv6地址;

2. 设置网站只监听IPv6端口。以Nginx为例,网站配置文件形如:

  1. server {
  2.     listen [::]:80;
  3.     server_name 主机名; # 请改成自己的主机名

  4.     return 301 https://主机名$request_uri;
  5. }
  6. server {
  7.     listen      [::]:443 ssl http2;
  8.     server_name  主机名;
  9.     ssl_certificate 证书路径;
  10.     ssl_certificate_key ssl密钥路径;
  11.     # 其他设置
  12. }
复制代码



3. 找一家支持只有IPv6的CDN,例如 Cloudflare,设置IPv6解析:


经过上面三步设置,基本上可确保不会泄漏真实IP,原因如下:

1. 绝大多数情况下,人们都会理所当然的找IPv4,不会想到你的网站根本不存在IPv4网络上;

2. 相对于IPv4,IPv6的地址段实在太庞大。即使有zmap这种几小时扫描完全球ipv4段的神器,或者Shodan搜索引擎,也很难从海量地址中寻找单个地址。

如果不放心,可以同样加上防火墙,就万无一失了:

  1. # 首先将cf的ip加入白名单
  2. while read -r line
  3. do
  4.   firewall-cmd --zone=trusted --add-source=$line
  5. done < cf_ips.txt
  6. # 然后屏蔽其他地址对ipv6的访问权限
  7. firewall-cmd --add-rich-rule="rule family='ipv6' source address='::0/0' drop"
复制代码


该方法同样设置简单,以奇招胜出,单台服务器能托管多个网站,并且其他网站可直接暴露不受影响。

CNAME

另一种常见隐藏真实IP方式是使用CNAME,同样无需设置防火墙。其操作如下:

1. CDN回源时使用CNAME方式回源到另一个主机名上。例如www.tlanyan.me回源的www.abcdexfd.com。需要注意的是,前端域名和源站域名最好不是同一个,防止通过爆破二级域名泄漏真实IP;

2. 在源站服务器上设置默认站点,防止通过host方式爆破。由于默认站点只是为了防止SNI方式泄漏真实IP,因此使用自签证书即可:

  1. # 生成密钥
  2. openssl genrsa -out example.key 2048
  3. # 生成证书,期间需要填一些信息
  4. openssl req -new -x509 -days 3650 -key example.key -out example.pem
复制代码


接着以Nginx为例,设置默认站点:

  1. server {
  2.   listen 80 default_server;
  3.   server_name example.com;
  4.   return 301 https://example.com$request_uri;
  5. }

  6. server {
  7.   listen 443 ssl http2;
  8.   server_name example.com default_server;
  9.   ssl_certificate example.pem;
  10.   ssl_certificate_key example.key;
  11. }
复制代码


然后重启Nginx即可。

该方法无需设置防火墙,设置较为简单,但是需要额外一个域名。

遇到DDoS怎么办?

如果域名之前从未用过,一出道就用上面提到的方法,基本上可以保证不会泄漏网站的真实IP。

但是不泄漏真实IP不代表不会被DDoS或者CC攻击,遇到DDoS怎么办?解决办法主要有:

1. 加钱上高防保平安;

2. DNS解析域名到127.0.0.1保平安;

3. 关机保平安。

请根据实际情况和业务需求采取相应措施。
作者: 茎肛互撸娃    时间: 2020-10-14 21:11
太感谢你了,我爱你
作者: jqbaobao    时间: 2020-10-14 21:12
做一个永不暴露真实IP的网站=》没有固定IP的源站=无敌
作者: tlanyan    时间: 2020-10-14 21:12
茎肛互撸娃 发表于 2020-10-14 21:11
太感谢你了,我爱你


作者: 柯林斯    时间: 2020-10-14 21:13
感谢大佬,这个太牛了(虽然不懂)
作者: 榆木    时间: 2020-10-14 21:14
不应该叫CNAME,应该叫修改绑定host
作者: tlanyan    时间: 2020-10-14 21:15
jqbaobao 发表于 2020-10-14 21:12
做一个永不暴露真实IP的网站=》没有固定IP的源站=无敌

ip飘逸,这个操作有点6
作者: 244643246    时间: 2020-10-14 21:16
不错,但为了速度我还是选择裸奔,被DD再自动切CDN
作者: tlanyan    时间: 2020-10-14 21:16
柯林斯 发表于 2020-10-14 21:13
感谢大佬,这个太牛了(虽然不懂)

感谢顶帖
作者: tlanyan    时间: 2020-10-14 21:18
榆木 发表于 2020-10-14 21:14
不应该叫CNAME,应该叫修改绑定host

cf上就是cname,国内的cdn一般不带dns解析,才是源站host
作者: iks    时间: 2020-10-14 21:19
看列表标题以为是营销号,仔细看内容发现总体上确实不错,顶一个
作者: 百元大户    时间: 2020-10-14 21:19
学习了,我就一不盈利的个人博客搞不来这些,用js建了个Serverless的动态站,文章等数据加密放github了,没有真实ip便不再操心这些问题。当日免费额度用完大不了就打不开嘛,我并没有损失
作者: tlanyan    时间: 2020-10-14 21:22
244643246 发表于 2020-10-14 21:16
不错,但为了速度我还是选择裸奔,被DD再自动切CDN

被DD可能直接黑洞,切CDN也不管用了
作者: vanilla    时间: 2020-10-14 21:23
解析到腾讯服务器
作者: tlanyan    时间: 2020-10-14 21:24
iks 发表于 2020-10-14 21:19
看列表标题以为是营销号,仔细看内容发现总体上确实不错,顶一个

本人博客基本上都是原创,从不靠标题党吸引眼球
作者: 244643246    时间: 2020-10-14 21:24
tlanyan 发表于 2020-10-14 21:22
被DD可能直接黑洞,切CDN也不管用了

有一种IP叫弹性公网,有一种回源方式叫做内网回源;
作者: baiyangz1    时间: 2020-10-14 21:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: tlanyan    时间: 2020-10-14 21:30
百元大户 发表于 2020-10-14 21:19
学习了,我就一不盈利的个人博客搞不来这些,用js建了个Serverless的动态站,文章等数据加密放github了,没 ...

个人博客其实hexo+github pages就很好,省去了服务器费用,也不用考虑被DDOS的问题
作者: tlanyan    时间: 2020-10-14 21:31
vanilla 发表于 2020-10-14 21:23
解析到腾讯服务器

马云,是你吗?
作者: tlanyan    时间: 2020-10-14 21:33
baiyangz1 发表于 2020-10-14 21:29
这年头,真的躲地下100米,都能给你扫出来。

把服务器做成黑洞很难扫出来,cdn商家内线倒是很容易就能找出来
作者: xiaoyang    时间: 2020-10-14 21:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: tlanyan    时间: 2020-10-14 21:36
244643246 发表于 2020-10-14 21:24
有一种IP叫弹性公网,有一种回源方式叫做内网回源;

这组合不错,就是弹性ip贵点
作者: tlanyan    时间: 2020-10-14 21:38
xiaoyang 发表于 2020-10-14 21:34
烂博客,谁爱ddcc就ddcc,懒得折腾

关机保平安
作者: xiaoyang    时间: 2020-10-14 21:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: 百元大户    时间: 2020-10-14 21:40
tlanyan 发表于 2020-10-14 21:30
个人博客其实hexo+github pages就很好,省去了服务器费用,也不用考虑被DDOS的问题 ...


之前尝试过静态博客,到底是需要部署一个渲染页面的语言环境,我自己整的这个用边缘计算、云函数之类能的东西即时渲染页面,用在线编辑器写好markdown一键复制加密文本,打开github网页新建个文件粘进去就行了,有浏览器就能更新,作为个人网站挺方便的
作者: baiyangz1    时间: 2020-10-14 21:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: cyz971337    时间: 2020-10-14 21:44
大概七八年前,我也经常攻击竞争对手的网站,基本都是原ip,或者百度cdn和360cdn,不用cdn还好,用cdn的一下就死,或者回源,怎么解释
作者: IMiya    时间: 2020-10-14 21:46
好帖子,顶一下
作者: aaq    时间: 2020-10-14 21:46
为了速度选裸奔。
作者: tlanyan    时间: 2020-10-14 21:47
cyz971337 发表于 2020-10-14 21:44
大概七八年前,我也经常攻击竞争对手的网站,基本都是原ip,或者百度cdn和360cdn,不用cdn还好,用cdn的一 ...

CDN只是隐藏ip,不是防D啊(除非高防CDN),高防IP才是清洗流量防D的
作者: 榆木    时间: 2020-10-14 21:49
tlanyan 发表于 2020-10-14 21:18
cf上就是cname,国内的cdn一般不带dns解析,才是源站host

cname并不会改变访问的host地址,你说的和CNAME没关系。
作者: tlanyan    时间: 2020-10-14 21:49
aaq 发表于 2020-10-14 21:46
为了速度选裸奔。

为了速度其实应该上cdn
作者: WwzwW    时间: 2020-10-14 21:50
:lol:lol:lol
作者: tlanyan    时间: 2020-10-14 21:52
榆木 发表于 2020-10-14 21:49
cname并不会改变访问的host地址,你说的和CNAME没关系。

懂你的意思,可能是说法不一样吧
作者: 秋上书    时间: 2020-10-14 21:52
我是套云盾cdn就完事儿
作者: MSN    时间: 2020-10-14 22:02
我是直接来看评论了
作者: YukinoCoco    时间: 2020-10-14 22:09
然后每天1IP?
作者: aaq    时间: 2020-10-14 22:12
tlanyan 发表于 2020-10-14 21:49
为了速度其实应该上cdn

源站在国外,什么CDN感觉都是垃圾
作者: tlanyan    时间: 2020-10-14 22:20
aaq 发表于 2020-10-14 22:12
源站在国外,什么CDN感觉都是垃圾

阿里腾讯的全球cdn就很好
作者: tlanyan    时间: 2020-10-14 22:21
YukinoCoco 发表于 2020-10-14 22:09
然后每天1IP?

哈哈,太打击人了
作者: tlanyan    时间: 2020-10-14 22:27
MSN 发表于 2020-10-14 22:02
我是直接来看评论了

云盾cdn比一般cdn更贵吧
作者: aaq    时间: 2020-10-14 22:38
tlanyan 发表于 2020-10-14 22:20
阿里腾讯的全球cdn就很好

试过啊 ,也很慢,还没有腾讯轻量香港快。
作者: robinch    时间: 2020-10-14 22:41
深度好文
作者: aeox    时间: 2020-10-14 22:43
感谢,马克
作者: tlanyan    时间: 2020-10-14 22:45
robinch 发表于 2020-10-14 22:41
深度好文

感谢帮顶
作者: sety    时间: 2020-10-14 23:14
记录下。很不错的方案
作者: fule    时间: 2020-10-14 23:16
感谢大佬
作者: 玛雅    时间: 2020-10-15 00:01

作者: zhongziso    时间: 2020-10-15 06:23
mark. 感谢大佬分享干货
作者: gtmv    时间: 2020-10-15 07:16
jqbaobao 发表于 2020-10-14 21:12
做一个永不暴露真实IP的网站=》没有固定IP的源站=无敌

我以前一个服务器被攻击了,我选择关机防御,感觉更加无敌
作者: Stop    时间: 2020-10-15 08:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: xixinct    时间: 2020-10-15 08:14
大佬优秀,收藏了
作者: ah520    时间: 2020-10-15 08:20
大佬 NB
作者: SFA    时间: 2020-10-15 08:20
博客放oss上面,源站就是阿里云,随便你打ip,反正不算我的流量
作者: kenshuren    时间: 2020-10-15 08:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 276080758    时间: 2020-10-15 08:58
难得一见的技术文章,支持
作者: 达雅    时间: 2020-10-15 09:04
留下以后参考
作者: 破刀    时间: 2020-10-15 09:11
wdt做一个死了一万年都能存活的网站!你才牛逼 !
作者: klarns    时间: 2020-10-15 09:27
mark学习一下
作者: zhy    时间: 2020-10-15 09:30
收藏一下
作者: shelizi1    时间: 2020-10-15 10:02
方法详细,简单易懂。大佬牛皮
作者: hkysxm    时间: 2020-10-15 10:48
好,学习一个
作者: 扬帆    时间: 2020-10-15 11:03
感谢分享 ,大佬nb
作者: sky21022    时间: 2020-10-15 11:49
感谢技术分享
作者: mslxd    时间: 2020-10-15 12:37
mark 一i下,,,,,,,,,
作者: 大姨舅    时间: 2020-10-15 14:03
如果我有100台服务器做负载均衡  是不是一般性的ddos也搞不死?
作者: 爱吃醋的醋醋    时间: 2020-10-15 15:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 墨墨墨    时间: 2020-10-16 05:09
百元大户 发表于 2020-10-14 21:19
学习了,我就一不盈利的个人博客搞不来这些,用js建了个Serverless的动态站,文章等数据加密放github了,没 ...

“文章等数据加密放”github“ 大佬, 可以出个教学吗? 谢谢了 大概说下原理也行啊。感谢
作者: 百元大户    时间: 2020-10-16 10:26
本帖最后由 百元大户 于 2020-10-16 10:33 编辑
墨墨墨 发表于 2020-10-16 05:09
“文章等数据加密放”github“ 大佬, 可以出个教学吗? 谢谢了 大概说下原理也行啊。感谢 ...


为什么要加密:为了文章不直接被github检索到
怎么加密:随便怎么加密,比如先异或再Base64
工作流程:用户请求 https://域名/001,部署在cf workers或者云函数上的代码就会运行,获取github仓库里的001文件里的加密文本,解密然后输出到用户最终看到的页面上

用户在浏览器这边F12只能看到已经解密的文本,看不到解密过程,文章仓库不会暴露

我这个项目借鉴了下面这个项目的工作原理,另外重写的,功能更完善更复杂,暂时不打算开源
https://github.com/kasuganosoras/cloudflare-worker-blog
作者: 六哥    时间: 2020-10-16 15:34

作者: 1aughing    时间: 2020-10-17 01:08
谢谢分享学习,深度好文!




欢迎光临 全球主机交流论坛 (https://91ai.net/) Powered by Discuz! X3.4