NAS下公网ip这样用才安全
NAS 一般部署在家里,但是在外使用极为不方便,如果有公网 IP 那就好很多,但是公网 IP 暴漏总归不安全,而且大多数公网 ip 都是动态的,虽然可以走 ddns,但是又不能对外提供服务(web 页面)。
我的宽带是走路由器拨号上网的,一开始有 ipv6 公网的,但是路由器对于 ipv6 有防火墙要么全开要么全关,关了就不安全,虽然 ipv6 是动态的,但是关了防火墙,相当于所有内网设备暴漏。
于是我又申请了公网 ipv4,这下方便多了,需要外网的设置端口转发,暴漏指定端口,公网 ipv4 是动态的,就用了 ddns,而且不提供 web 服务,我是这么做的,已 mt-photos 为例:
路由器对外端口 4456 转发到 nginx 服务 4453,然后 nginx 反代到 mt-photos,mt-photos 端口为 8063,nginx 相关配置片段如下:
1upstream mtphotos_upstream {
2 ip_hash;
3 server 192.168.1.111:8063;
4}
5server
6{
7 listen 4453 quic reuseport;
8 listen 4453 ssl;
9 server_name nas.mydomain.com;
10 add_header Alt-Svc 'h3=":$server_port"; ma=86400';
11
12 ssl_certificate /etc/nginx/ssl/nas.mydomain.com.pem;
13 ssl_certificate_key /etc/nginx/ssl/nas.mydomain.com.key;
14
15 ## 关键在这里配置,判断允许访问的相关设备,具体可以通过nginx日志来判断,先都允许,然后用使用设备使用一下,就可以看到调用日志,然后根据日志内容限制
16 set $flag 0;
17 if ($http_user_agent ~ "^okhttp/") {
18 set $flag 1;
19 }
20 if ($http_user_agent ~ "MT Photos App/") {
21
22 set $flag 1;
23 }
24 if ($http_user_agent ~ "^Dalvik/") {
25 set $flag 1;
26 }
27
28 if ($http_user_agent ~ "MtPhotosApp/") {
29 set $flag 1;
30 }
31 if ($http_user_agent ~ "mtphotos/") {
32 set $flag 1;
33 }
34 ## 如果符合以上调用,才放行,否则返回444
35 if ($flag = 0) {
36 return 444;
37 }
38
39 location / {
40 proxy_pass http://mtphotos_upstream; ##反代到mp-photos服务
41 proxy_set_header Host $host;
42 proxy_set_header X-Real-IP $remote_addr;
43 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
44 }
45
46 # 其他配置……
47
48}
上面的配置生效后,只能通过手机 app 进行访问,其他方式访问就会返回 444,什么也看不到,
然后配置好 mt-photos 两地址,
一个为内网地址 http://192.168.1.111:8063,
一个为外网地址 https://nas.mydomain.com:4456,
这样就可以随时随地正常使用 mt-photos,而且外网直接访问 https://nas.mydomain.com:4456 也是无法访问的。
当然 lucky 也可以通过界面操作配置已达到相同效果