私には毎月インターネット請求書を分割してくれるルームメイトが何人かいます。時々彼らは私に支払うのを忘れ、私は彼らにお金をせがむ必要があります。
3日間苦しんでもまだ支払われていない場合は、UNIXベースのルーターにファイアウォールルールを作成して、MACアドレスへのトラフィックをブロックします。これは、非行ルームメイトに現金をポニーアップさせるのに非常に効果的であることが証明されています。
毎月3日にファイアウォールルールへのMACアドレスの追加/削除を自動化するにはどうすればよいですか?彼らが支払ったら、月の残りのためにそれらのブロックを解除する簡単な方法が欲しいです。
私は現在pfsenseを使用しています。 キャプティブポータルモジュール はありますが、ユーザーごと/月ごとのアクセスの調整はサポートしていません。
ルームメートのインターネットアクセスのブロック/ブロック解除を自動化するにはどうすればよいですか?
~/do_not_block_friends
が存在し、その変更時刻は1か月の期間内です(stat -c %y filename
)-スクリプトを実行しません。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で計算できると思います。
それはあなたが探している以上のものかもしれませんが、バックエンドとしてRADIUSに対して802.1x認証を使用してワイヤレス資格情報をセットアップすることを検討することを検討しましたか?
RADIUSを設定して、必要なバリデーター(スクリプトを作成してデータベースなどに保存する必要があるもの)をチェックして、部屋が家賃を支払ったかどうかを確認できます。認証して支払いが済むと、RADIUSが認証します。それ以外の場合は認証しません。これの良い点は、MACアドレスのフィルタリングに依存しないことです。ハイテクに精通した部屋があると、設置したコントロールを簡単に迂回できなくなります。
銀行口座または使用できる別のトランザクションソリューション(PayPal?)が、次のような自動支払い通知の方法を提供しているかどうかを確認します。
そのような方法が利用できる場合、あとは支払いを監視する簡単なスクリプトを書くだけです。友達からの毎月の支払いを求める銀行からの電子メールを解析するだけかもしれません。各友達のアカウント番号またはID、支払い金額(グローバル定数の場合もある)、およびMACアドレスを格納する構成ファイルが必要になります。
スクリプトはファイアウォールのエントリを毎月の支払い状況に応じて調整します。
その後、利用可能な支払いオプションを友達に知らせます-ファイアウォールを設定するときに-友達に支払いメカニズムへのアクセスを提供して、3日間の猶予期間を逃した場合でも支払いができるようにしてください:)