I noticed that when I check my email first thing in the morning, I spend the day putting out small fires instead of doing good work. I wrote a quick script that bans my email after about 7 hours of idle activity and then restores it sometime between the first 45-75 minutes of activity.
53 * * * * /home/abarry/scripts/banEmailCronjob
#!/bin/bash
# this should be run as a cron job (as root)
#
# sudo crontab -e
# 53 * * * * /home/abarry/scripts/banEmailCronjob
#
# the idea is that within an hour of the user returning, the job
# will run and email will be restored, but just as you sit down,
# email will be banned.
#
# DEPENDS on xprintidle which is in apt.
set -x # tells bash to print everything it's about to run
PATH=/home/abarry/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin
PATH=$PATH:/usr/bin:/sbin:/bin
HOME=/home/abarry
DISPLAY=:0.0
# first get the idle time
IDLE=`DISPLAY=:0.0 xprintidle`
echo "Idle amount: " $IDLE
echo "Sleeping for a while..."
sleep 1727 # sleep for a while so email will never be active right as you sit down
# get the IPs of gmail
ADDRESSES=`dig +short A gmail.com`
FIRSTIP=`dig +short A gmail.com | head -n 1`
# dig seems unreliable
IPV6ADRESSES=`dig +short AAAA gmail.com`
IPV6ADRESSES="$IPV6ADRESSES 2607:f8b0:4009:802::1015 2607:f8b0:4009:802::1016"
#IPV6ADRESSES="2607:f8b0:4009::/48"
if [ $IDLE -gt "25200000" ]
then
echo "Idle is greater than threshold, banning email..."
# ban email here
# check to see if it is already banned
HOSTS=`iptables -L -v -n | grep "$FIRSTIP"`
echo "$HOSTS"
if [ -z "$HOSTS" ]
then
# not already banned, so ban it
# ban gmail's IPs
# find these IPs using $ dig mail.google.com
echo "banning via iptables"
# loop through the IPs and ban them
for thisip in ${ADDRESSES}; do
iptables -A INPUT -s $thisip -j DROP
done
# loop through IPv6 aadresses
echo "banning via ip6tables"
for thisip in ${IPV6ADRESSES}; do
ip6tables -A INPUT -s $thisip -j DROP
done
echo "banned!"
fi
else
echo "Idle is less than threshold, so removing ban on email..."
# remove ban here
echo "removing iptables ban"
# unban IPs
#for thisip in ${ADDRESSES}; do
# iptables -D INPUT -s $thisip -j DROP
#done
iptables -F
echo "removing IPv6 ban"
#for thisip in ${IPV6ADRESSES}; do
# echo "ip6tables -D INPUT -s $thisip -j DROP"
# ip6tables -D INPUT -s $thisip -j DROP
#done
ip6tables -F
fi
07/17/12