『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 11211|回复: 10

[进阶教程] 保护隐私!为摄像头添加外网权限控制开关 可自动化

[复制链接]

16

主题

171

帖子

757

积分

高级会员

Rank: 4

积分
757
金钱
581
HASS币
40
发表于 2020-7-6 17:18:00 | 显示全部楼层 |阅读模式
本帖最后由 icase 于 2020-7-9 13:14 编辑

目标人群

和我一样的小白,大佬可以绕过。

实现目的

由于摄像头官方提供的app没有网络使用限制,消息推送更及时,可以轻松操控摄像头等原因。最终兼顾隐私保护和摄像头使用便利性的考虑,来实现此自动化方案。

实现逻辑

需要断开外网权限时,远程(或局域网内跨设备)为路由添加 iptables drop 规则,阻断摄像头互联网访问;

需要给予外网权限时,远程(或局域网内跨设备)删除此前添加的iptables drop 规则,开放摄像头互联网访问;

结合脚本来实时或者远程(或局域网内跨设备)定时检查 iptables 规则列表,判断规则是否存在,结合 Home Assistant 的自定义开关 state 的要求,利用 exit code 返回值来为开关提供状态反馈。

用到的工具

puttygen / XShell

准备工作

以下以华硕路由梅林固件为例
  1. 为路由开启 ssh 密钥访问 权限,由于此部分会占用太多内容,具体的操作步骤可以参考这里

  2. 编写iptables规则脚本

    • 为路由添加iptables规则的脚本,如脚本名称为:add-iptables.sh,脚本内容如下:

      #!/bin/bash
      iptables --list | grep -q $E0:3F:7C:54:C0:4F # 你的摄像头的mac地址,下同
      if [ $? -ne 0 ] ;then
      iptables -I FORWARD -m mac --mac-source E0:3F:7C:54:C0:4F -j DROP
      echo "iptables rule added successfully!"
      exit 0
      else
      echo "iptables rule is already exists"
      exit 1
      fi
    • 为路由删除iptables规则的脚本,如脚本名称为:del-iptables.sh,脚本内容如下:

      #!/bin/bash
      iptables --list | grep -q $E0:3F:7C:54:C0:4F
      if [ $? -ne 0 ] ;then
      echo "iptables rule not found"
      exit 1
      else
      iptables -D FORWARD -m mac --mac-source E0:3F:7C:54:C0:4F -j DROP
      echo "iptables rule deleted successfully!"
      exit 0
      fi
    • 检查上述添加的iptables规则是否存在,如脚本名称为:status-iptables.sh,脚本内容如下:

      #!/bin/bash
      iptables --list | grep -q $E0:3F:7C:54:C0:4F
      if [ $? -ne 0 ] ;then
      echo "off"
      exit 1
      else
      echo "on"
      exit 0
      fi
    • 将当前路由iptables规则备份,如脚本名称为:save-iptables.sh,脚本内容如下:

      #!/bin/bash
      iptables-save >/jffs/scripts/iptables-script # 替换为你选择的保存路径
      echo "iptables-script has saved in '/jffs/scripts/iptables-script'."

      (上面的代码中的 /jffs 前面的内容其实是个 > ,不知道为什么论坛没解析出来。)

    • 由于以上命令都是临时添加的 iptables 规则,有可能路由重启之后就会自动被清除,所以我们可以借助上一步中备份的规则文件,即:iptables-script 文件来进行路由重启后的自动恢复。在 jffs/scripts 目录编辑 wan-start 文件新添加一行 /usr/sbin/iptables-restore /jffs/scripts/iptables-script 保存即可。

      请注意:此处仅供参考,因为不同路由或固件可编辑使用的启动脚本不尽相同,如果你的路由是不同固件,可在网上搜寻哪些启动脚本可正常使用,也或者回复帖子我们共同探讨。

      小提示:你也可以使用 Automation 自动化来设置个定时任务。如每5分钟检查你的前置条件状态,如果符合,但外网权限和你的设置不一致,那就自动执行动作将其打开或关闭即可(如果看到这里没有理解,可看完全部内容后再回头来看这段文字)。

    • 注意事项:

      这些脚本存放在路由端,当你准备完所有脚本文件后,一定确定好存放路径,有一些路径存放文件会在路由重启后全部清空,比如华硕路由把文件存在jffs内是不会出现这样的情况的,而在home或者tmp内则会被重启清空。另外,所有的脚本文件都需要赋予可执行权限,如:chmod +x add-iptables.sh

修改 Home Assistant 配置

  1. 路由密钥导入

    在你的config文件夹内新建一个如名字为 ssh_keys 的文件夹,将你生成的私钥文件复制到该文件夹内,如私钥文件名为:router

  2. 打开 configuration.yaml 文件

    添加 Command line Switch 开关配置(官方文档),内容如下:

     - platform: command_line
       switches:
         camera_only_lan:
           command_on: ssh -i /config/ssh_keys/router -o StrictHostKeyChecking=no -p 2222 mailto:[email protected] '/jffs/scripts/add-iptables.sh && /jffs/scripts/iptables-save.sh'
           command_off: ssh -i /config/ssh_keys/router -o StrictHostKeyChecking=no -p 2222 mailto:[email protected] '/jffs/scripts/del-iptables.sh && /jffs/scripts/iptables-save.sh'
           command_state: ssh -i /config/ssh_keys/router -o StrictHostKeyChecking=no -p 2222 mailto:[email protected] '/jffs/scripts/iptables-status.sh'
           friendly_name: 摄像头外网隔离

    说明:其中 -p 2222 数字为你修改过的 ssh 端口号,如果没有修改过,即默认为22,将此参数整个删掉即可;192.168.100.1 是你的路由IP;/jffs/scripts/ 是你脚本放置的路径位置。

  3. 重启 HA

  4. 配合 Automation 实现自动化开关摄像头外网权限

    这里本想写的详细点,但我觉得可能每个人的需求场景都不一样,所以大家可以自行发挥。比如你可以设定当人全部离开家的时候,摄像头自动开启外网权限;有人到家时,自动关闭外网权限。请注意,因为在前端这是一个开关的形式,所以开关的逻辑应该是在”开“的时候是关闭外网权限,在”关“的时候是打开外网权限。

评分

参与人数 1金钱 +20 HASS币 +20 收起 理由
+ 20 + 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

24

主题

882

帖子

4966

积分

论坛元老

Rank: 8Rank: 8

积分
4966
金钱
4079
HASS币
20
发表于 2020-7-6 18:51:44 来自手机 | 显示全部楼层
这个高级,留名
回复

使用道具 举报

2

主题

176

帖子

1909

积分

金牌会员

Rank: 6Rank: 6

积分
1909
金钱
1733
HASS币
0
发表于 2020-7-6 20:57:48 来自手机 | 显示全部楼层
顶起来!某些场景下挺实用的,感谢分享
回复

使用道具 举报

33

主题

685

帖子

4361

积分

论坛元老

Rank: 8Rank: 8

积分
4361
金钱
3666
HASS币
50
发表于 2020-7-7 10:31:20 | 显示全部楼层
你用的什么摄像头..........
回复

使用道具 举报

16

主题

171

帖子

757

积分

高级会员

Rank: 4

积分
757
金钱
581
HASS币
40
 楼主| 发表于 2020-7-7 10:35:59 | 显示全部楼层
huang7dede 发表于 2020-7-7 10:31
你用的什么摄像头..........

为什么要这么问?
回复

使用道具 举报

0

主题

23

帖子

70

积分

注册会员

Rank: 2

积分
70
金钱
47
HASS币
0
发表于 2020-7-8 14:19:16 | 显示全部楼层
这个是针对一些安防的摄像头可以使用的么?
回复

使用道具 举报

4

主题

162

帖子

765

积分

高级会员

Rank: 4

积分
765
金钱
603
HASS币
10
发表于 2020-7-8 16:47:01 | 显示全部楼层
  来学习学习 现在隐私比较重要啊
回复

使用道具 举报

106

主题

549

帖子

2745

积分

金牌会员

Rank: 6Rank: 6

积分
2745
金钱
2196
HASS币
20
发表于 2020-7-8 22:04:56 | 显示全部楼层
很有用,摄像头这种东西我觉得可以固定防火墙屏蔽,要想看可以通过更安全的第三方应用看
回复

使用道具 举报

16

主题

171

帖子

757

积分

高级会员

Rank: 4

积分
757
金钱
581
HASS币
40
 楼主| 发表于 2020-7-9 00:49:21 | 显示全部楼层
uniontech_yao 发表于 2020-7-8 14:19
这个是针对一些安防的摄像头可以使用的么?

只要可以联网就都可以用。它主要是控制路由的防火墙出入规则。
回复

使用道具 举报

16

主题

171

帖子

757

积分

高级会员

Rank: 4

积分
757
金钱
581
HASS币
40
 楼主| 发表于 2020-7-9 00:50:49 | 显示全部楼层
comeon_000 发表于 2020-7-8 22:04
很有用,摄像头这种东西我觉得可以固定防火墙屏蔽,要想看可以通过更安全的第三方应用看 ...

群晖是个最好的解决方案,但就是证书太贵了。免费的只有2个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 22:19 , Processed in 1.252655 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表