登录
  • 人们都希望被别人需要 却往往事与愿违
  • 世上最难的两件事: 把自己的思想装进别人的脑袋, 把别人的钞票装进自己的口袋 -- 共产党都做到了!

家用简单监控系统

IT那些事 Benny小土豆 627次浏览 4715字 2个评论
文章目录[显示]

可盐可甜的小土豆终于出现啦!👏🎉🥳🎊😉

背景

最近几天,RSSHub作者DIYGod控诉自如管家非法入侵。听到这个消息时我感到非常的震惊。事后自如的反应更是像极了某些有关部门:避重就轻,混淆事实,毫无悔改之意。感觉自如就仿佛在说:你的控诉充满了对自如的偏见,和所谓的不知从什么地方来的傲慢,我是完全不能接受的。

尽管和DIYGod在生活中并不认识,甚至在网络上也基本没有交集,但是这件事情却依旧让我感到很愤怒。就像DIYGod的控诉一样,凭什么我合法租住的房子要被自如强行入侵?

家用简单监控系统

图片来源DIYGod的Twitter

尽管我没什么人气,也不认识什么大人物,尽管我只是无名之辈,但是我依旧认为我应该为他发声,哪怕只是微不足道的一个转推,哪怕只是一段无力的声讨与支持。如果今天我不为他发声,那么下次,类似的事情发生在我的身上时,谁又会为我发声?起初,他们追杀共产主义者……

家用简单监控系统

沉默,是最大的伤害

又一背景

目前,我所租住的地方,也是类似的单人公寓,同样是密码锁。密码锁说起来就很让人害怕,如果被黑了,被劫持了,电量耗尽,或者是像DIYGod一样,被所谓的管家以“担心你安全“的理由非法入侵,那么该怎么办?

当我人在家里等时候,使用一些物理措施,比如防盗链、顶门器等是一种预防措施;如果不在家,那么这些操作就不太好搞了。使用摄像头监控是一种马后炮的方案,但是如果有必要,视频也可以作为证据。防患于未然吧。

要求

既然要做到防患于未然,再加上个人空间的视频属于极度隐私的数据,那么这样一套简单的监控系统就要达到以下要求:

  • 廉价:不能太贵了,我一个普通的社畜承担不起高昂的费用,包括设备购置费用和后续维护费用
  • 简单:摆在那就行了,不需要人工干预
  • 安全:录像不可以丢给任何国内的毒瘤厂商,即使的国外的云厂商也要谨慎考虑
  • 可靠:即使入侵者迅速发现了我有监控,在几分钟之内把我的摄像头和存储设备砸了,我也能尽可能的恢复捕捉到的录像
  • 稳定:需要7*24小时运行,或者至少也要做到7*12小时运行
  • 小巧:设备本身不会占用太大空间,毕竟房子本身就不大
  • 清晰:2020年了,不能480P吧,编码怎么也得H264吧,能H265最好

根据以上要求,淘宝上也进行了一些搜索,目前基本上有这么几种选择😃:

  • 监控+录像机,录像机太贵了,后续费用也很高,放弃,数据可能不安全
  • 普通USB摄像头:Linux兼容性可能会有问题,可能无法7*24工作,清晰度不够。但是非常安全,数据全部都是我的。
  • 网络摄像头:部分可能需要买毒瘤厂商的存储,可能会偷偷上传数据,或者被黑,但是基本都支持RTSP之类的流媒体传输协议

所谓网络摄像头,基本上是通过Wi-Fi,或者以太网连接,供电一般是DC直流,有些可能还可以PoE(但是我并没有PoE交换机)

普通USB摄像头存在一个难点,很难通过ESXi直通给虚拟机,直通之后虚拟机可能采集图像会比较困难。因此只能选择支持RTSP等串流的网络摄像头。至于安全问题?作为曾经的Network Engineer,怎么能被这种问题难倒?VLAN隔离走起🤨。

摄像头安装配置

这部分就不用多说了。🤔

配置VM

在家里的ESXi上开一个虚拟机,打开自动启动,装好Ubuntu,配置好LVM。这也不多说了。🤯

捕获视频

既然要捕获视频,当然要选择ffmpeg了。使用apt安装也可以,大概需要占用500-600M的空间,或者直接官网下载static build也行,在这个场景下没什么太大区别。

使用ffmpeg捕获,方法大致如下

ffmpeg -rtsp_transport tcp -i $RTSP -vcodec copy -r 1 -t 600 -y /video/1.mp4

参数t表示捕获时间,r表示帧数,RSTP表示设备的URL格式,比如说我这里就是rtsp://192.168.7.234:554/user=admin&password=admin&channel=Channel&stream=Stream.sdp?real_stream


奇怪的是,这里我用r参数限制帧数,并没有起作用,反而是摄像头设置的帧数永远是录制的帧数。

题外话:

如果想捕获比如说IPTV的视频流,直接用ffmpeg -i URL就可以了

同步视频

考虑到视频存储在本机,万一被一窝端了,那就白搞了。因此需要想办法把视频同步到其他地方,比较好的方法是同步到VPS上,所以这里应用了rsync,命令也很简单

rsync -avz --delete /video/ [email protected]:/video/

差分同步怕什么。如果是海外的机器,建议上个proxychains之类的

哦对了,如果用proxychains,并且每次连接的时候都报key differ的警告,可以~/.ssh/config 加这么一行

Host *
  StrictHostKeyChecking no

Housekeeper

毕竟咱也不是大户人家,盘子还是有限的。那我们就要一种house keeper的机制,不仅要删除本机的旧视频,也要删除VPS上的。这个时候,当然要用到find了,高手还可以搭配exec和xargs哦!

find /video -mindepth 1 -mtime +30 -delete

此命令会删除创建时间在30天之前到文件

搓搓搓

这样一套下来,其实就差不多了,更近一步来说:

  1. ffmpeg 从早上8点开始捕获视频
  2. rsync每分钟同步视频到VPS
  3. housekeeper清理过期文件

这样的话,最长也就是一分钟左右的空档,比较稳妥

安全加固之网络优化

我们必须要把摄像头隔离起来。要做的事情就是无法让它访问公网,所有流量只能在192.169.4.0/24这个网段里走,同时内网其他机器能够任意访问摄像头。IPv6也同理

作为一名优秀的网络工程师🙃,使用VLAN确实是一种…反正我搞不明白的方法,谁会搞谁搞吧…🤪

如果您的路由器特别厉害,一个就要好几千几万的一堆口,上面印着八九条竖线,大概是这样的.ılı.ılı.,建议您拨打400 810 8886进行咨询或使用这个网站提交您的问题🌚🌚🌚

如果你的路由器的比较厉害,也是个Linux Kernel的话,并且kernel version>=2.6,那么可以直接上iptables;

如果你的路由器一点都不厉害,可能就是个塑料盒上面写着LINK什么Mecu什么,那么🌚🌚🌚🌚本少侠束手无策,软路由可破。

想要用iptables阻止某设备访问外网,只需要在filter操作就可以了,如果以IP作为条件过滤

iptables -t filter -I FORWARD 1 -s 192.168.7.183 -j DROP

一定要记得用I插入到开头

如果想要根据Mac地址过滤,那么就用-m mac匹配原地址就好了

iptables -t filter -I FORWARD 1 -m mac --mac-source 00:0c:29:0c:0d:46 -j DROP

如果你有IPv6的话,根据IP过滤时也要记得使用ip6tables。不过这就很惨了,因为ISP分配的IPv6的地址经常可能会变

同理,如果有IPv6,根据mac过滤就是下图这样

ip6tables -t filter -I FORWARD 1 -m mac --mac-source 00:0c:29:0c:0d:46 -j DROP

其他相关命令:

# 显示iptables行号
iptables -L --line-numbers

删除iptabless行号为1的规则
iptables -D FORWARD 1

具体效果可以看如下视频

当然了,如果你的固件比较智能,可能也许有这样的设置

家用简单监控系统

安全加固之存储设备加密

ESXi上的VM存储加密就很好玩了,LUKS on LVM,LVM on LUKS,LVM on VC,VC on LVM,只要您开心,还可以VC+LUKS on LVM,只要一份钱,却能够得到双份的快乐哦,这么好的事情,上哪里找去😏

各种姿势,各种加密,包您满意包您开心🧐,不满意还可以点击这里咨询退款的哦

简单起见,我们就用LUKS了,基本上所有发行版都自带。

如果你的CPU支持AES指令集,那简直更好了,可以通过lscpu进行确认

cryptsetup benchmark 可以进行benchmark

简单的说,如果想要对设备加密,包括逻辑卷、物理设备,那么可以这样用

cryptsetup luksFormat /dev/sdb1
cryptsetup luksFormat /dev/mapper/vg-lv1

之后我们需要把这个卷挂载起来,命令也非常简单

cryptsetup luksOpen /dev/dev/sdb1 data1

这样操作之后,我们就能在/dev/mapper下看到一个名为data1的设备了,此时就可以mkfs、mount了

mkfs.ext4 /dev/mapper/data1
mount /dev/mapper/data1 /mnt/data1

用完了之后想要卸载,可以先umount,然后cryptsetup luksClose data1

查看状态 可以用cryptsetup status data1

如果是文件型加密卷,那么操作也基本一致

cryptsetup luksFormat /path/to/luks.vol

后续就一样了。

但是我们更想要的操作是,在OS启动的时候自动解密、自动挂载。这是否能够做到呢?

实际上,这就有点纠结了。就像“操作系统也是一个程序,是谁启动的它啊”

对于我的需求来说,只需要在boot的时候,能够在console让我输入密码就够了

那么此时需要配置/etc/fstab /etc/crypttab

# 查看UUID
cryptsetup luksUUID /dev/mapper/data1

# 然后更改crypttab
data1 /dev/disk/by-uuid/36aa7b97-f773-4fcb-8031-f40e42facc4b none luks

#然后加fstab
/dev/mapper/data1 /video/ ext4 defaults 0 0

重启之后就可以了

家用简单监控系统

如果是文件型的加密卷,那么也同样有办法,crypttab

data1 /home/data.vol none luks

LVM怎么用就不多说了,pv、vg、lv这都很简单了。重点说下LUKS和VeraCrypt在CLI下操作

参考配置

crontab配置

*/15 8-20 * * * bash /root/scripts/record.sh
* 8-20 * * * bash /root/scripts/sync.sh

Shell脚本参考链接
开源地址

后续

有一件事情需要注意的就是,录制的视频往往都比较大,咱又不是看高清影片😍,所以没有必要录制太高的帧数。10帧基本上就足够了。当然🥘多的人随意啦

思考

有时候,在网上,我能感觉到一点点自由,能够感受到一丁点世界人权宣言中我本应该拥有的一丁点自由的权利。这也是我坚决拒绝某些公司软硬件产品的原因。本来现实已经足够让我绝望了,如果在数字世界中,都要感受到一模一样的氛围,那还不如抵制到底。

岁月一点都不静好。

对于有技术手段的人来说,通过各种各样的技术也许可以缓解社会问题。但是,对于那些不懂的人呢?当社会出现问题之后,如果用技术手段去解决,那么也无法根治。更何况,总有人认为,杀光天下的公鸡就好了。

参考阅读

使用 FFmpeg 远程读取 rtsp 监控视频流

扫盲 Linux 逻辑卷管理(LVM)——兼谈 RAID 以及“磁盘加密工具的整合”

 


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/home-cam.html
喜欢 (6)
分享:-)
Benny小土豆
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(2)个小伙伴在吐槽
  1. rsync -avz --delete 会炸哦😂
    木子2020-07-16 23:21 回复
    • Benny小土豆
      噢噢噢?怎么炸?
      --本评论由Telegram Bot回复~❤️
      Benny小土豆2020-07-17 07:16 回复