пятница, 26 ноября 2010 г.

Почтовый бот

Автоматизация наше все =)

На одной из моих подработок часто возникала задача заблокировать какой-то из адресов на сервере. Чтобы человеку с этого ip нельзя было зайти ни на один из сайтов.
В принципе, телодвижений минимум, но делать это все равно не очень хотелось - уж очень однообразно. А однообразные задачи несложно автоматизировать. Вот я и задумался над вопросом автоматизации этой операции.
Итак, какие операции мне требуется выполнять программно?
1. Забирать письма из определенного почтового ящика
2. Выбирать из этого письма ip-адрес
3. Добавлять адрес в определенную цепочку файрвола
4. Удалить письмо, как более не нужное

Работа с письмами

Для работы с письмами я выбрал легковесный, но подходящий для моих целей сборщик писем - getmail.
В конфигурационном файле также указал, что собранные письма следует сразу же удалять.
Вот такой конфигурационный файл (getmailrc):

[retriever]
type = SimpleIMAPRetriever
server = mail.v-midas.com
username = xxxx@xxxx.com
password = yyyyyy

[destination]
type = Maildir
path = ~/.maildir/


Для писем, как уже видно из конфига создана директория ~/.maildir. Во время испытаний оказалось, что getmail не умеет создавать поддректории и поэтому их придется создать самостоятельно. В ~/.maildir нужно создать new cur tmp.

Файрвол

Тут все достаточно тривиально. Для блокировки создана отдельная цепочка, в которую и заносятся все записи. В моем случае это цепочка blocked.

Автоматизация

Естественно, автоматизация всех описанных в начале операций выполнена в виде bash-скрипта. Вот он:

#!/bin/bash

export HOME="/home/blocked"
export DISPLAY=":0"
CUR_PATH="$HOME/.getmail"
cd $CUR_PATH
MAIL_DIR="$HOME/.maildir"
export LANG="ru_RU.UTF-8"
export LC_ALL="$LANG"
FPID="/tmp/cc.pid"


date
if [ -s $FPID ]; then
echo "found cc.pid"
cat $FPID
rm $FPID
exit 78
fi

echo $$ >$FPID

getmail -n 1>std.msg 2>err.msg

sleep 2

mailfiles=`ls $HOME/.maildir/new`

for i in $mailfiles
do
iptables -A blocked -s `cat $HOME/.maildir/new/$i | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'` -j REJECT
done


rm $FPID


Этот скрипт запускается по крону раз в 10 минут. В него можно добавить еще много разных функций, если вдруг это потребуется.

вторник, 23 ноября 2010 г.

Акции, распродажи, скидки.... в чем фишка?

Сегодня в магазине предложили поучаствовать в акции. За каждые 300р из суммы покупки мне дается купон. При определенном количестве купонов дается возможность купить подушку или одеяло в 2 раза дешевле.
С одной стороны мысль, что опять какое-то разводилово, а с другой...
Если человеку нужно купить эту вещь и он получает возможность купить ее дешевле (ведь ничего лишнего участники акции не платят), то это же выгодно =). Пусть маркетологи радуются, что они обхитрили людей и повысили продажи =). На самом деле они обхитрили сами себя ;).

понедельник, 1 ноября 2010 г.

Создание папок в Postfixadmin

Postfixadmin - единственная OpenSource панель, которая мне показалась удобной и функциональной. Однако в процессе настройки выяснилось, что настройки по умолчанию не совсем корректные. При создании ящиков, создавались лишь стандартные imap директории, а "Отправленные", "Черновики" и т.д. не создавались.
В результате ковыряния конфигурационного файла были найдены и настроены следующие параметры:

$CONF['create_mailbox_subdirs']=array('Sent', 'Templates', 'Drafts', 'Junk');
$CONF['create_mailbox_subdirs_host']='localhost';
$CONF['create_mailbox_subdirs_prefix']='';
$CONF['create_mailbox_subdirs_hostport']=143;


параметр create_mailbox_subdirs_prefix изначально содержал "INBOX.". Но Thunderbird не хотел воспринимать папки с префиксом, как системные и сохранять в них соответствующую информацию.