我如何才能关闭本月还未付账的室友的互联网?

我如何才能关闭本月还未付账的室友的互联网?

我有几个室友,他们每个月都会和我分摊网费。有时他们会忘记付钱给我,我就得缠着他们要钱。

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

我如何才能在每月 3 号自动将 MAC 地址添加/删除到防火墙规则中?我希望有一种简单的方法,在他们付款后,在本月的剩余时间内解除对他们的阻止。

我目前正在使用 pfSense。虽然有强制门户模块,不支持调节每个用户/每月的访问权限。

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

答案1

  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

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

  • maxdepth 1- 不进行递归搜索
  • type f- 搜索文件
  • name- 搜索此名称
  • mtime -31- 查找 31 天内修改的文件

wc -l将计算命令生成的行数。0如果朋友尚未付款(未找到任何内容),则计算结果为1;如果朋友已付款且我们已touch控制文件,则计算结果为。

该脚本不计算月份的天数,默认为 31,我认为这没问题,因为我们不是在构建商业计费系统,但我相信甚至可以在 bash 中计算。

答案2

它可能超出了您的要求,但是您是否考虑过使用 802.1x 身份验证针对 RADIUS 作为后端来设置无线凭据?

可以设置 RADIUS 来检查您想要的任何验证器(您可能需要编写脚本并存储在数据库或其他地方),以查看您的室友是否已支付房租。当他们通过身份验证并已付款时,RADIUS 会验证他们。否则,不会。这样做的好处是您不依赖于 MAC 地址过滤。这样,如果您的室友精通技术,他们就无法轻易绕过您设置的控制。

答案3

检查您的银行账户或您可能使用的其他交易解决方案(PayPal?)是否提供任何自动付款通知方式,例如:

  • 每笔交易的电子邮件通知
  • 每日交易摘要电子邮件
  • 一些不错的 API

如果有这样的方法,剩下的就是编写一些简单的脚本来监控付款。您可能只是解析银行发来的电子邮件,要求您的朋友每月付款。您需要一个配置文件来存储每个朋友的帐号或 ID、付款金额(也可能是一个全局常量)和 MAC 地址。

然后脚本会根据每月的付款情况调整防火墙条目。

之后,告知您的朋友可用的付款方式,并在配置防火墙时记得为您的朋友提供付款机制的访问权限,以便他们在错过 3 天的宽限期时仍可以付款:)

相关内容