- Crie um script bash que adicione regras restritas de iptables.
- Coloque este script no cron mensal.
- Dentro do script bash, faça uma condição - se o arquivo
~/do_not_block_friends
existir e sua hora de modificação estiver dentro do período do mês (stat -c %y filename
) - não execute o script. - Depois de pagar, você faz
touch ~/do_not_block_friends
.
O script será executado e verá que do_not_block_friends
foi modificado, portanto, ele não executará o comando iptables.
Se eles não pagaram você - o script irá bloqueá-los.
Depois que você pagar, execute outro script preparado para desbloqueá-lo.
Este é um plano geral sem muitos detalhes, mas não acho que seja difícil descobrir o resto.
Editar :
Aqui está uma maneira mais simples de escrever esse script:
#!/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
Usamos o comando find
com as seguintes opções:
-
maxdepth 1
- Não procura recursivo -
type f
- Pesquisar por arquivo -
name
- Pesquise por este nome -
mtime -31
- Localizar arquivo que foi modificado há menos de 31 dias
wc -l
contará a quantidade de linhas geradas pelo comando. Será 0
se os amigos não tiverem pago (nada encontrado) e será 1
se os amigos pagarem e nós touch
control file.
Esse script não calcula a quantidade de dias no mês e o padrão é 31, acho que não há problema, pois não estamos construindo o sistema de faturamento comercial, mas acredito que até isso possa ser calculado no bash.