这个月没有结账的室友怎么关掉网络?

spu*_*der 56 networking firewall pfsense

我有几个室友每个月和我分摊我的互联网费用。有时他们忘记付钱给我,我不得不纠缠他们要钱。

如果经过 3 天的纠缠他们仍然没有付款,我会在我的基于 Unix 的路由器中创建一个防火墙规则来阻止流量到他们的 mac 地址。事实证明,这在让拖欠的室友支付现金方面非常有效。

如何在每个月的 3 日自动将 mac 地址添加/删除到防火墙规则?我想要一种简单的方法来在他们付款后在本月剩余的时间内解除对他们的阻止。

我目前正在使用 pfsense。虽然有一个强制门户模块,但它不支持对每个用户/每月的访问进行调节。

我怎样才能自动阻止/解除阻止室友的互联网访问?

VL-*_*-80 33

  1. 制作一个添加限制性 iptables 规则的 bash 脚本。
  2. 将此脚本放在每月的 cron 中。
  3. 在 bash 脚本中创建一个条件 - 如果文件~/do_not_block_friends存在并且其修改时间在一个月内 ( stat -c %y filename) - 不运行脚本。
  4. 一旦他们付钱给你touch ~/do_not_block_friends

脚本将运行并查看do_not_block_friends已修改,因此它不会运行 iptables 命令。

如果他们没有付钱给你 - 脚本会阻止他们。

一旦他们付款,您就可以运行另一个准备好的脚本来解锁它们。

这是一个没有太多细节的总体计划,但我认为其余部分不难弄清楚。

编辑

这是编写此类脚本的更简单方法:

#!/bin/bash

count=`find ~ -maxdepth 1 -type f -name do_not_block_friends -mtime -31 | wc -l`

if [ "$count" -eq 1 ]; then

# Friends have paid. Do nothing;

else

# Friends have not paid. Run iptables command;

fi
Run Code Online (Sandbox Code Playgroud)

我们使用find带有以下选项的命令:

  • maxdepth 1 - 不要搜索递归
  • type f - 搜索文件
  • name - 搜索这个名字
  • mtime -31 - 查找不到 31 天前修改过的文件

wc -l将计算命令生成的行数。这将是0,如果朋友有没有支付(没有找到),这将是1,如果朋友们的薪酬和我们没有touch控制文件。

这个脚本不计算当月的天数,默认为 31,我认为这很好,因为我们没有构建商业计费系统,但我相信甚至可以在 bash 中计算。


小智 14

它可能比您想要的更多,但是您是否考虑过使用 802.1x 身份验证对 RADIUS 作为后端来设置无线凭据?

RADIUS 可以设置为检查您想要的任何验证器(您可能需要编写脚本并将其存储在数据库中或其他东西),以查看您的室友是否已支付租金。当他们进行身份验证并付款时,RADIUS 会对其进行身份验证。否则,它不会。这样做的积极方面是您不依赖于对 MAC 地址的过滤。这样,如果您有精通技术的室友,他们将无法轻易绕过您设置的控件。