请教如何方便有效的封禁国外 IP

19 天前
 SoulFlame
我的 API 只服务于国内,时不时有国外 IP 捣乱,请问怎么封国外的 IP 啊?
1166 次点击
所在节点    问与答
10 条回复
HUZHUANGZHUANG
19 天前
api 应该是通过域名来访问的吧?把域名托管到 CF,在安全工具那里可以通过区域来禁止访问的。你试试这样有没有效果。
happyxhw101
19 天前
如果用的是 nginx 代理,可以这么干

1. nginx 配置 geo-ip
```
load_module "modules/ngx_http_geoip_module.so";
load_module "modules/ngx_stream_geoip_module.so";
```

2. 映射国家 code
```
map $geoip_country_code $allowed_country {
default yes;
CN yes;
}

map $remote_addr $allowed {
default $allowed_country;
127.0.0.1 yes;
~^192\.168\.\\d+\.\\d+$ yes;
~^192\.167\.0\.\\d+$ yes;
~^192\.166\.1\.\\d+$ yes;
}
```

3. 判断 allowed
```
server {
listen 443 ssl;
if ($allowed != yes) {
return 404;
}
}
```
happyxhw101
19 天前
@happyxhw101 写错了
map $geoip_country_code $allowed_country {
default no;
CN yes;
}
happyxhw101
19 天前
tcp 也是可以的,用 nginx 的 stream, 比如代理 ssh
```
map $allowed $ssh_server {
yes ssh;
}

upstream ssh {
server 192.168.5.1:12345;
}

server {
listen 2345;
listen [::]:2345;
proxy_pass $ssh_server;
proxy_connect_timeout 30s;
proxy_timeout 60s;

ssl_preread on;
}
```
BeforeTooLate
19 天前
dns 解析的时候,直接把境外地址 CNAME 到 google.com
SoulFlame
19 天前
@HUZHUANGZHUANG #1 域名在阿里管理,不方便托管到 CF
SoulFlame
19 天前
@BeforeTooLate #5 请问在哪里设置,我域名在阿里
SoulFlame
19 天前
@happyxhw101 #2 请问这个原理是不是通过别人维护的 ip 名单实现的啊?
BeforeTooLate
19 天前
@SoulFlame 阿里云解析请求来源这个部分可以选择境外这个选项吧,具体我不太清楚这样是否有用
SoulFlame
19 天前
@BeforeTooLate #9 非常感谢,我上去看了,阿里 DNS 解析 请求来源是有地域设置,可以选中国

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

https://ex.noerr.eu.org/t/1146112

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

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

© 2021 V2EX