我用 csf 防火墙屏蔽了中国和俄罗斯的用户,现在来自国内的用户无法连接服务器的 ip,但是输入域名却可以访问,为何?

2017-03-07 23:19:19 +08:00
 kmdd33

我用 csf 防火墙屏蔽了中国和俄罗斯的用户,现在来自国内的用户无法连接服务器的 ip ,但是输入域名却可以访问,为何?我已经绑定了自己的域名在 cloudflare ,我不想用户来自国内和俄罗斯的用户访问到,怎么会出现,访问 ip 无法打开,直接输入域名却可以打开呢?什么原因?如何让用户输入域名后,也无法访问?

2367 次点击
所在节点    问与答
12 条回复
langmoe
2017-03-07 23:24:34 +08:00
有 cdn 的话估计防火墙看到的是 cdn 的 ip 吧
kmdd33
2017-03-07 23:52:42 +08:00
@langmoe 如何解决呢?
lyragosa
2017-03-07 23:55:35 +08:00
X-Forward-IP
huangtao728
2017-03-08 00:20:16 +08:00
在 Cloudflare 设置屏蔽
kmdd33
2017-03-08 00:44:35 +08:00
@huangtao728 要花钱的现在
notgod
2017-03-08 08:14:34 +08:00
载入的第一个文件 顶部加
CF 会直接发当前访客的国家代码
比如中国 就是 CN


使用 $_SERVER["HTTP_CF_IPCOUNTRY"]; 获得


如果需要封禁中国和俄罗斯
if (isset($_SERVER["HTTP_CF_IPCOUNTRY"]) && $_SERVER["HTTP_CF_IPCOUNTRY"] == ’ CN ‘ && $_SERVER["HTTP_CF_IPCOUNTRY"] == ’ RU ‘ ) {
die('not allow current country');
}


额外会添加的 header
$_SERVER["HTTP_CF_CONNECTING_IP"] 访问的真实 IP

$_SERVER["HTTP_CF_IPCOUNTRY"] 访问者国家代码

$_SERVER["HTTP_CF_RAY"] CF 的日志 ID

$_SERVER["HTTP_CF_VISITOR"] http 和 ssl
notgod
2017-03-08 08:17:37 +08:00
这样简单些

$baned = array("CN","RU"); //禁止国家
if (in_array($baned, $_SERVER["HTTP_CF_IPCOUNTRY"] ))
{
die('not allow current country');
}


最好把 $_SERVER["HTTP_CF_IPCOUNTRY"] 使用 isset 检测下
不然 CLI 会抛错
notgod
2017-03-08 08:18:49 +08:00
没注意 写反了....
这样
if (in_array($_SERVER["HTTP_CF_IPCOUNTRY"],$baned))
dodaddy
2017-03-08 11:21:00 +08:00
不使用 cdn 就可以了
kmdd33
2017-03-08 17:39:43 +08:00
@notgod ,你说的这些代码要加到 index.html 里面吗?
doufenger
2017-04-02 22:52:16 +08:00
@notgod 请问是这样加吗? 但是我加了之后整个网页空白了

<?php
$baned = array("JP"); //禁止国家
if (in_array($_SERVER["HTTP_CF_IPCOUNTRY"],$baned))

{
die('not allow current country');
}
?>
doufenger
2017-04-02 22:52:35 +08:00
@notgod 我也是用 cloudflare 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/345728

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX