首页 >PC >正文

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

创作立场声明:不知道这种偏技术向的文章发在smzdm是否合适?文中我已经省去了非常多的技术细节,只讲方案思路。如果确实想了解更详细的技术配置,可以在评论中说一下,后面再发一篇文章讲讲中间技术细节。

背景

起因与成果

最近找运营商整了个公网 IP,于是乎,能玩的东西就变多了

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

这里就介绍如何安全的远程访问路由器,包括:

访问路由器管理页面

访问 aria2 远程下载(主要是普通 HTTP(s) 下载、BT 下载)

访问 transmission 远程下载(主要是挂 PT 下载)

实现远程访问,我们能做到非常多之前无法做到的,比如:

逛街吃东西,朋友分享个电影,远程下载,回家就能看

出门在外,家里人反馈 WIFI 问题,远程打开路由管理页面排查定位问题

上班时忘记拷贝文件,访问家里的网路共享盘,远程同步

……

虽然很多时候远程访问并不是强需求,但有需求的时候,你就知道有多好用了

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

那么,先晒一下成果(以下都是在手机 4G 环境模拟远程访问的情况,截图右上角 4G )。

安全起见,文中所有涉及我自己的域名、端口的信息都打码了。

首先是远程访问路由管理页面:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

然后是远程访问 aria2 下载管理

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

最后是 Transmission 管理

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

听说浪客剑心漫改电影准备出终章了,赶紧把前三部翻出来看看,

也就是上图中活跃列表的第二个,RUNOUNI KENSHIN TRILOGY(浪客剑心三部曲)

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

我们的目标

首先,安全是最重要的!!!

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

直接暴露公网,最大的一个问题就是安全问题,

如果访问控制没有做好、存在弱密码情况,就可能被扫描爆破,然后”家访”

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

,比如:

破坏你的路由环境,比如恢复下出厂设置、修改管理密码、修改 WIFI 密码等

把你辛辛苦苦下载的高清资源删掉,让你一夜回到解放前

暴露你的一些隐私信息

开个后门以后不定期”家访”,等等

安全无小事,这个可不比说 windows 系统果奔,不装杀毒软件。

一定要重视重视再重视!

我们的计划

整一套规划其实还是比较繁琐的,大概思路如下:

联系运营商分配公网 IP

配置动态域名解析(运营商分配的 IP 不是固定的)

申请免费 HTTPS 证书

替换路由器默认 Web Server 为 Nginx

配置 HTTP2.0 代理作为统一外部入口

配置端口映射将非标准 HTTPS 端口暴露到公网

因为篇幅原因,前面几步本文不准备展开讲(1-3 步)

如果有需要的话,后续再另外开一篇文章来分享,这里直接从替换 Nginx 开始

修改路由Web服务器

在修改使用 Nginx 之前,我进行了以下规划:

内网入口部分——保持原样

原来是怎么用的,现在就是怎么用的

内网较为安全,单纯的密码认证即可,不需要启动 HTTPS 增加路由器消耗

外网入口部分——安全的前提下开放特定服务远程访问

启用 HTTPS 防止被抓包泄密

使用非标准服务端口减低提高扫描爆破的门槛

使用非语义明确的访问路径降低被社工的风险

为什么是Nginx?

OpenWRT 默认使用的是 uhttpd 作为 Web Server。

uhttpd 是一个非常精简的 Web Server,满足嵌入式设备的轻量任务需求。

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

但是此次需要进行反向代理来暴露内部服务,Nginx 是更适合的:

在反向代理方面,Nginx 更加成熟

在性能方面,Nginx 也是更强大的

其他功能实现上,Nginx 更加完善,并且最重要的,我更加熟悉

同时,在使用 Nginx 之后,一些特性也可以直接用上了,

比如非常适配路由器 WEB 服务的 HTTP/2.0 (可以参考这篇文章:HTTP2.0优势详解)

安装与配置

较新版本的 OpenWRT 软件仓库中已经有支持 luci 的 nginx 模块了,直接安装即可。

关于替代 uhttpd 来提供路由管理系统的 WEB 服务,实际上是由 nginx + uwsgi 实现的

软件包软件包内容uwsgi-cgiuwsgi 的本体服务以及主配置文件uwsgi-cgi-luci-support支持 luci 的 uwsgi 子配置文件nginx-mod-luci转发 luci 请求给 uwsgi 的 nginx 子配置文件至于 nginx 软件包,我选择的是 nginx-all-module 这个版本,

相当于是把所有可能用到的 nginx 模块都打包进入,比普通的 nginx 软件大约多了 600 KB,

大小可以接受的,毕竟后续有需要什么常规模块就不需要重装,加上对应配置就可以运行了。

安装完毕后,先把原来原来的 uhttp 停掉,并启用 nginx

/etc/init.d/uhttpdstop

/etc/init.d/uhttpddisable

/etc/init.d/nginxenable

/etc/init.d/nginxstart实际上,我安装完 nginx ,uhttpd 已经自动退出了,所以第一步命令可以不需要执行

然后就就可以直接打开路由器管理后台地址来体验 Nginx 的带来的服务了

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

我的网关修改为 10.0.0.1 跟普通的 192.168.*.* 不太一样

对应的,可以直接到路由器上查看生成的 nginx luci 访问配置

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

HTTP/2.0 配置

目前安装的 Nginx 版本非常新,并且因为是 all-module 版本,已经包含了想要的模块:

http_v2_module:HTTP/2.0 支持

http_ssl_module:HTTP SSL 支持

如上面所说,不影响到现有内网访问方式,因此我们新建一个配置文件:

/etc/nginx/conf.d/k3-https.conf证书使用的是 Let’s encrypt 的免费证书,使用 ACME 申请/自动续签。

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

最下面的 Luci 配置截图不全,不过其实就是照搬原来安装 nginx-mod-luci 生成的配置。

配置外网映射

主路由不是我能控制哈哈,用的还是一个非常渣渣的腾达路由器

幸好,还能支持端口映射:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

通过端口映射将 K3 路由器对应的 HTTPs 端口暴露到公网即可

如果 OpenWRT 开启了防火墙,记得开放一下该端口的外网访问,否则会被拒绝无法访问:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

然后就可以通过之前配置好的 ddns 域名进行访问(在 4G 环境下访问)

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

可以看到图中下方地址栏部分的小锁头,就是走 https 协议,手机跟路由器之前的数据传输是加密的。

SSL跑分测试

现在各种东西都能跑分测试,SSL 也来一个吧

顺便跑一下 ssl 测试:

https://www.immuniweb.com/ssl/

https://www.ssllabs.com/ssltest/

之前用的比较多的是 ssllabs 提供的测试,不过这个站点不支持非标准端口的测试,

因此只能选择 immuniweb 的测试了,结果如下:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

其中有两个 NIST issue,分别是:

SERVER DOES NOT SUPPORT OCSP STAPLING


证书吊销验证相关的配置,暂不考虑

SERVER DOES NOT SUPPORT EXTENDED MASTER SECRET


因为配置了不支持 TLS v1.2 以下版本,不兼容老的客户端,然而我又不准备给你们用

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

代理

aria2 配置

aria2 访问是分成两部分的:

Web-UI 部分


也就是 web 前端,通过 rpc 与 aria2 服务端通信,来实现对 aria2 的管理,


比如添加下载任务,查看下载进度,查看实时上传及下载速度等等


这部分可以简单理解为一个网页版的客户端。


RPC 部分


这部分才是真正的 aria2 服务,只有在 web-ui 上配置好 aria2 的 rpc 访问,


才能正常连接上 aria2 服务端,并实现远程访问,进行相关下载操作

rpc 就是我们需要通过代理来暴露服务到公网,对应 Nginx 配置如下:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

我比较喜欢的 Web-UI 是 AriaNG,最终效果如下(在 4G 环境下访问):

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

这样不论在什么地方,只需要有网络访问,都可以给家里的 aria2 添加新的下载任务

transmission 配置

transmission 与上面的 aria2 大同小异,对应的 Nginx 代理配置如下:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

增加多一个配置是用来做自动跳转,这样就不需要输入那么长的访问地址了:

通过 WEB 访问 trss 时候,直接跳转到 transmission 的 Web 管理系统

通过 Nginx 代理把 Web 管理系统请求转发给 transmission

如果要求不高的话,可以直接用 transmission 自带的 Web-UI 管理,

我比较喜欢用这个软件:TransmissionRemote,具体效果如下:

路由与NAS 篇一:Aria2+Transmission:如何安全地暴露服务进行远程访问下

安全性

通过上面的介绍,总体的安全性配置有:

配置非标准端口,提高被发现的门槛(遇到全端口扫描就没办法)

配置非语义明确的访问入口(遇到遍历扫描就没办法)

开启软件本身的密码或者 token 认证,并且尽量使用强密码(提高被密码爆破的门槛)

利用 nginx https 加密远程访问的数据(访问过程中避免被抓包)

没有百分百安全的方法,能做的其实就是尽可能提高被爆破的门槛!

网友评论

验证码 换一张
取 消
暂无评论...
三日内热门评论文章
为您推荐
  • 相关阅读
  • 业界资讯
  • 手机通讯
  • 电脑办公
  • 新奇数码
  • 软件游戏
  • 科学探索