Featured image of post 我的家庭网络设计思路,开启debian的旁路由之路(九)

我的家庭网络设计思路,开启debian的旁路由之路(九)

本篇主要讲解如何监测陌生设备接入,记录下来并发送通知。

前言

OpenWRT 有两个插件:luci-app-serverchanluci-app-pushbot,可以监测陌生设备上线。当然它们还有些其他功能,但我们只关心“监测陌生设备上线”这一点,那么这两个插件就太臃肿了。并且它们还不能监测非旁路由所在网段,而我却将陌生设备放在了 10.0.1.0/24 中,和旁路由不在同一网段。所以我们简单的改造一下。

安装和配置

我默认你已经按照 前文(二) 安装好了 arp-scan 了。新建 /usr/local/bin/arp.sh 内容如下,请自行在爱快中限制陌生设备所能使用的IP(参见 前文(一),用假MAC预留好可信任设备的IP位置),并填入下面的 arplist 变量中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/usr/bin/env bash

## 要监测的网段,可以写成下面这样,也可以写成 10.0.0.0/24这样,请在爱快中为陌生设备指定网段,可信任设备不要使用该网段的IP
arplist="10.0.1.101-10.0.1.110"

arpinfo=$(echo "$arplist" | arp-scan -gxf-)
if [[ -n "$arpinfo" && "$arpinfo" != "$(cat /tmp/arp.txt 2>/dev/null)" ]]; then
    content=$(echo "$arpinfo" | perl -pe '{s|^|- |; s|\t| |g; s|\n|\\n\\n|g}')
    echo "有新的终端连接到了网络:"$arpinfo
    # notify.sh "有新的终端连接到了网络" "$content" &>/dev/null # 如果需要发送通知请解除注释
    echo "$arpinfo" > /tmp/arp.txt
elif [[ -z "$arpinfo" && -f /tmp/arp.txt ]]; then
    rm /tmp/arp.txt
fi
exit 0

为其增加可执行权限:

1
chmod +x /usr/local/bin/arp.sh

如果你需要发送通知,解除上述脚本第10行注释的同时,在第4行之后根据下表选用通知渠道的变量并赋值。

序号 变量名 说明
1 TG_USER_ID 通知渠道telegram,如需使用需要和 TG_BOT_TOKEN 同时赋值,私聊 @getuseridbot 获取。
2 TG_BOT_TOKEN 通知渠道telegram,如需使用需要和 TG_USER_ID 同时赋值,私聊 @BotFather 获取。
3 TG_PROXY_ADDRESS 给TG机器人发送消息的代理地址,当设置了TG_USER_IDTG_BOT_TOKEN后可以设置此值,形如:http://192.168.1.1:7890,也可以不设置。
4 TG_PROXY_USER 给TG机器人发送消息的代理的用户名和密码,当设置了TG_PROXY_ADDRESS后可以设置此值,格式为:<用户名>:<密码>,形如:admin:password,如没有可不设置。
5 DD_BOT_TOKEN 通知渠道钉钉,如需使用需要和 DD_BOT_SECRET 同时赋值,机器人设置中webhook链接access_token=后面的字符串(不含=以及=之前的字符)。
6 DD_BOT_SECRET 通知渠道钉钉,如需使用需要和 DD_BOT_TOKEN 同时赋值,机器人设置中只启用加签,加签的秘钥,形如:SEC1234567890abcdefg
7 IYUU_TOKEN 通知渠道爱语飞飞,通过 这里 获取,爱语飞飞的TOKEN。
8 SCKEY 通知渠道ServerChan,通过 这里 获取。
9 PUSHPLUS_TOKEN 通知渠道PUSH PLUS,填入其token,详见 这里
10 WORK_WECHAT_BOT_KEY 通知渠道企业微信群机器人,填入机器人设置webhook链接中key=后面的字符串,不含key=
11 GOTIFY_URL 通知渠道Gotify,填入其通知网址,需要和GOTIFY_APP_TOKEN同时赋值。
12 GOTIFY_APP_TOKEN 通知渠道Gotify,填入其TOKEN,需要和GOTIFY_URL同时赋值。
13 GOTIFY_PRIORITY 通知渠道Gotify,发送消息的优先级。

同时下载 notify.sh 保存为 /usr/local/bin/notify.sh ,并为其增加可执行权限:

1
chmod +x /usr/local/bin/notify.sh

有许多设备无法被 arp-scan 识别出来制造商,可以编辑 /etc/arp-scan/mac-vendor.txt,手动增加它们的制造商,形式如下(MAC地址仅支持小写字母,不支持大写字母):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
02:42:0a                Docker MacVLAN Network
1a:5d:23                ShenZhen Sirivision Communication Technology Co., Ltd.
6e:1c:d5                Huawei Technologies Co., Ltd.
0e:2a:7c:3a:ff:2f       QEMU Virtual Machine
1a:38:df:16:2f:fe       QEMU Virtual Machine
42:c9:47:6c:bf:d1       QEMU Virtual Machine
46:ee:ec:94:f0:4e       QEMU Virtual Machine
54:a7:fb:1a:cc:d3       QEMU Virtual Machine
92:97:84:9b:24:c0       QEMU Virtual Machine
96:52:cc:f2:98:34       QEMU Virtual Machine
9a:6b:93:51:37:92       QEMU Virtual Machine
ae:0f:0a:58:0e:47       QEMU Virtual Machine
ae:85:36:a9:4b:f0       QEMU Virtual Machine
b2:56:a4:68:f8:f5       QEMU Virtual Machine
c6:80:e3:62:af:3a       QEMU Virtual Machine
ee:d7:ce:c1:85:7c       QEMU Virtual Machine
f6:c7:8b:c9:07:31       QEMU Virtual Machine

然后你再运行 echo "10.0.0.0/22" | arp-scan -xgf- 就可以识别出来了。

ARP扫描

运行

方式一:定时任务

输入 crontab -e ,在 前文(七) 创建的定时任务之后加入一条:

1
* * * * * arp.sh >> /tmp/arp.log

未来想查看有哪些陌生设备接入,注意重启后该文件会消失,请及时查看。

1
cat /tmp/arp.log

方式二:systemd

新建脚本 /usr/local/bin/run-arp.sh,内容如下,并增加可执行权限 chmod +x /usr/local/bin/run-arp.sh

1
2
3
4
while :; do
    arp.sh
    sleep 60
done

新建 /etc/systemd/system/arp.service,内容如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[Unit]
Description = Detect unknown clients.
After       = network.target

[Service]
Environment        = PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Type               = simple
Restart            = always
ExecStart          = run-arp.sh
RestartSec         = 60
StartLimitInterval = 0

[Install]
WantedBy = multi-user.target

然后启用它即可:

1
systemctl enable --now arp.service

未来想查看有哪些陌生设备接入:

1
journalctl -u arp.service

系列

Built with Hugo
主题 StackJimmy 设计