56

У меня есть несколько соседей по комнате, которые разделили мой счет за интернет со мной каждый месяц. Иногда они забывают заплатить мне, и я должен приставать к ним за деньги.

Если после 3 дней приставания они все еще не заплатили, я создаю правило брандмауэра в моем Unix-маршрутизаторе, которое блокирует трафик на их mac-адрес. Это оказывается очень эффективным при получении просроченных соседей по комнате, чтобы заработать деньги.

Как я могу автоматизировать добавление / удаление mac-адреса в правило брандмауэра 3-го числа каждого месяца? Я хотел бы простой способ разблокировать их до конца месяца, как только они заплатят.

В настоящее время я использую pfsense. Несмотря на то, что существует модуль портала для авторизации, он не поддерживает регулирование доступа на пользователя / в месяц.

Как я могу автоматизировать блокировку / разблокировку доступа в Интернет соседа по комнате?

3 ответа3

33
  1. Создайте скрипт bash, который добавляет ограничительное правило iptables.
  2. Поместите этот скрипт в ежемесячный крон.
  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.

14

Это может быть больше, чем вы ищете, но рассматривали ли вы возможность настройки беспроводных учетных данных с использованием аутентификации 802.1x по RADIUS в качестве бэкэнда?

RADIUS может быть настроен для проверки любого валидатора, который вы пожелаете (что вам, вероятно, придется написать и сохранить в базе данных или что-то в этом роде), чтобы узнать, заплатили ли ваши сослуживцы за аренду. Когда они аутентифицируются и платят, RADIUS аутентифицирует их. В противном случае это не так. Положительным моментом является то, что вы не полагаетесь на фильтрацию по MAC-адресам. Таким образом, если у вас есть опытные помощники по технологиям, они не смогут легко обойти установленные вами элементы управления.

1

Проверьте, можете ли вы использовать свой банковский счет или другое решение для транзакций (PayPal?) предоставляет любой способ автоматического уведомления о платеже, например:

  • электронное уведомление о транзакции
  • ежедневная сводка по электронной почте
  • какой-то приличный API

Если такой метод доступен, остается только написать простой скрипт, который бы отслеживал платежи. Вы можете просто проанализировать электронные письма из банка в поисках ежемесячных платежей от ваших друзей. Вам потребуется файл конфигурации, в котором хранится номер или идентификатор учетной записи каждого друга, сумма к оплате (также может быть глобальной константой) и MAC-адрес.

Затем скрипт будет корректировать записи брандмауэра в соответствии со статусом ежемесячной оплаты.

После этого сообщите своим друзьям о доступных способах оплаты и - при настройке брандмауэра - не забудьте предоставить своим друзьям доступ к механизму оплаты, чтобы они могли по-прежнему платить, если пропустили 3-дневный льготный период :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .