Aria2+Transmission:如何安全地暴露服务进行远程访问下

2020-05-01 18:26:55 35点赞 290收藏 52评论

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

背景

起因与成果

最近找运营商整了个公网 IP,于是乎,能玩的东西就变多了Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

  • 访问路由器管理页面

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

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

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

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

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

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

  4. ……

虽然很多时候远程访问并不是强需求,但有需求的时候,你就知道有多好用了Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

最后是 Transmission 管理

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

我们的目标

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

如果访问控制没有做好、存在弱密码情况,就可能被扫描爆破,然后”家访”Aria2+Transmission:如何安全地暴露服务进行远程访问下 ,比如:

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

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

  3. 暴露你的一些隐私信息

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

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

一定要重视重视再重视!

我们的计划

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

  1. 联系运营商分配公网 IP

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

  3. 申请免费 HTTPS 证书

  4. 替换路由器默认 Web Server 为 Nginx

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

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

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

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

修改路由Web服务器

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

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

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

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

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

  • 启用 HTTPS 防止被抓包泄密

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

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

为什么是Nginx?

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

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

  3. 其他功能实现上,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/uhttpd stop /etc/init.d/uhttpd disable /etc/init.d/nginx enable /etc/init.d/nginx start

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

HTTP/2.0 配置

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

  1. http_v2_module:HTTP/2.0 支持

  2. http_ssl_module:HTTP SSL 支持

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

/etc/nginx/conf.d/k3-https.conf

证书使用的是 Let’s encrypt 的免费证书,使用 ACME 申请/自动续签。

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

配置外网映射

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

SSL跑分测试

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

顺便跑一下 ssl 测试:

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

  1. SERVER DOES NOT SUPPORT OCSP STAPLING
    证书吊销验证相关的配置,暂不考虑

  2. SERVER DOES NOT SUPPORT EXTENDED MASTER SECRET
    因为配置了不支持 TLS v1.2 以下版本,不兼容老的客户端,然而我又不准备给你们用Aria2+Transmission:如何安全地暴露服务进行远程访问下

代理

aria2 配置

aria2 访问是分成两部分的:

  1. Web-UI 部分
    也就是 web 前端,通过 rpc 与 aria2 服务端通信,来实现对 aria2 的管理,
    比如添加下载任务,查看下载进度,查看实时上传及下载速度等等
    这部分可以简单理解为一个网页版的客户端。

  2. RPC 部分
    这部分才是真正的 aria2 服务,只有在 web-ui 上配置好 aria2 的 rpc 访问,
    才能正常连接上 aria2 服务端,并实现远程访问,进行相关下载操作

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

transmission 配置

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

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

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

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

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

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

Aria2+Transmission:如何安全地暴露服务进行远程访问下

安全性

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

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

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

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

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

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

展开 收起
52评论

  • 精彩
  • 最新
  • 只要公网暴露了,就木有绝对的安全。胆子小,公网访问非刚需,还是不开的好。

    校验提示文案

    提交
    哈哈,不要怂,就是干!!

    校验提示文案

    提交
    收起所有回复
  • 其实比较安全的做法还是起一个vpn连回家访问

    校验提示文案

    提交
    我就是这么干的。 [赞一个] [赞一个]

    校验提示文案

    提交
    赞同。华硕路由器内置openvpn服务器,使用超级简单

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 有k3k2k1e1n1还有玩客云有没有好的方案物尽其用

    校验提示文案

    提交
    [脸红] N1 目前做电视盒子,k3 做主路由,k2 送人,e1 丢老家做有线中继发射Wi-Fi..

    校验提示文案

    提交
    收起所有回复
  • 怎么用Aria2下载阳光电影的文件啊?

    校验提示文案

    提交
    我一般是去 dytt 搜电影,然后走 Magnet 链接下载(也就是 bt),aria2 支持直接 magnet 下载。

    校验提示文案

    提交
    收起所有回复
  • 营运商的路由改成桥接,自己的路由启用VPN,VLAN限制只能远程访问部分服务,不是更好的方案?

    校验提示文案

    提交
    有试过 frp stcp 以及 vpn,但是便携性以及性能稳定性方面,真的不忍直视,最后还是换成这种直接暴露服务,然后尽可能加固的方案(毕竟手机浏览器一打开就能访问,nginx 的性能也比 uhttp 强太多了)

    校验提示文案

    提交
    收起所有回复
  • 浪客剑心最终章

    校验提示文案

    提交
    嗯嗯,这个夏天上映,两部。

    校验提示文案

    提交
    星霜篇,最爱 [高兴]

    校验提示文案

    提交
    收起所有回复
  • iOS除了浏览器是不是没什么好的客户端了。。

    校验提示文案

    提交
    哈哈,我不是果粉不清楚了。不过大部分情况下, 浏览器也能满足需求了

    校验提示文案

    提交
    收起所有回复
  • 啊啊啊啊啊
    佐藤健的剑心居然还有两部要出~?真是兴奋

    校验提示文案

    提交
    对的哇,这个夏天,终章上下两部

    校验提示文案

    提交
    收起所有回复
  • VPN 比较安全

    校验提示文案

    提交
    但是也比较麻烦,我之前也有用过 vpn,以及 frp,最后发现是真的折腾...特别是在外面用手机想访问的时候.

    校验提示文案

    提交
    手机也可以用vpn阿,第一次设置好,后面就是像打开蓝牙一样快捷了

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 大佬Tr好还是qB好哦(所以我问正在用Tr的人说想得到啥回复 [喜极而泣] >

    校验提示文案

    提交
    Qb做种太多会卡界面,tr解这个决问题

    校验提示文案

    提交
    因为我服务是跑在路由器上的,所以,tr 会稍微成熟一点...

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 太专业了,学习!感谢教程

    校验提示文案

    提交
    哈哈,有什么问题可以直接评论啊我看到就会回复的.

    校验提示文案

    提交
    收起所有回复
  • 請問大佬是用一個domain名,所有服務走subfolder的嗎?

    校验提示文案

    提交
    对,这个域名就是 ddns 动态解析出来的,然后不通服务按照不同的 location(也就是你说的 subfolder)

    校验提示文案

    提交
    大佬, 你這段aria2可以這樣返向? 我好像也試過不行. (也是我nginx不熟>
    我理解是需要反向RPC共用443端口. 應該是以下這段才可以.
    location ^~ /jsonrpc {
    proxy_pass 去看看:6800/jsonrpc;
    求大佬解惑

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 这个aria2的web ui是哪下的怎么有x度

    校验提示文案

    提交
    啊,没看明白你的回复...如果你下用的话,看这个:去看看

    校验提示文案

    提交
    我的意思是下面的Chrome插件下载/快捷登陆这个界面怎么搞出来的

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 请问大佬,我按照你说的做的反向代理,但显示 The requested URL /XXXX was not found on this server.

    校验提示文案

    提交
    说明你的某一个 location 配置项拼写有问题,跟你访问的 url 不一致。

    校验提示文案

    提交
    收起所有回复
  • 你好,目前是用的是 Lean 的 R20.12.12 的 OpenWrt 版本
    在软件包中搜索 uwsgi 后,只能得到下列结果,没法找到你文中提及的软件包,请问该如何解决?
    nginx-mod-luci, uwsgi, uwsgi-cgi-plugin, uwsgi-logfile-plugin, uwsgi-luci-support, uwsgi-python3-plugin, uwsgi-syslog-plugin

    校验提示文案

    提交
    新版本的软件包做了一些变更,具体对应那个包我也不太清楚了,不过看包名的话,需要的应该是 uwsgi、uwsgi-cgi-plugin、uwsgi-luci-support、nginx-mod-luci,最后再加上一个 nginx 主包,你可以尝试一下

    校验提示文案

    提交
    收起所有回复
  • 威联通451D运行transmission的时候显示:transmission拒绝了我们的连接请求。这个是什么原因

    校验提示文案

    提交
  • 我这里成功讲aria2的ng面板反代出去了,但是用面板进行RPC连接的时候始终没办法连接上aria2的服务,用的试p3terx的docker版本反代工具用的lucky。敢问up主用的aria2是什么版本的

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
290
扫一下,分享更方便,购买更轻松