пятница, 22 апреля 2011 г.

Базы данных postgrey

Сегодня я заинтересовался содержимым баз данных Postgrey. Как известно, база данных Postgrey находится в каталоге /var/lib/postgrey/ и имеет формат Berkeley DB.

Собственно вся база находится в двух основных файлах: postgrey.db и postgrey_clients.db.

Для их просмотра нам понадобится пакет db4.6-utils. Точную версию необходимого пакета можно выяснить, если изучить зависимости самого postgrey. У меня в дистрибутиве Debian Squeeze было три различных версии этого пакета, из которых подошла только версия 4.6.

В файле postgrey.db находятся триплеты тестируемых отправителей.

Просмотреть их можно следующей командой:
$ db4.6_dump -p postgrey.db | less
Нашему взору предстанет таблица с записями двух видов:
95.111.111.9/uzowu@sender.hu/ufa03@receiver.ru
1303233971,1303234277
и
95.138.211.0/vasiliy@sender.ru/sln@receiver.ru
1303295139,1303295139,90
Это два способа записи одной и той же информации. Первый вид расшифровывается следующим образом:
IP-адрес отправителя/почтовый адрес отправителя/почтовый адрес получателя
отметка времени первой попытки отправки,отметка времени второй попытки отправки
Второй вид, насколько я понял анализируя исходник postgrey, соответствует случаю если в PTR-записи IP-адреса отправителя найдено одно последнее число из IP-адреса или два последних числа IP-адреса. То есть соответствует случаю заведомо динамического IP-адреса отправителя. Очень редко в домен попадает последнее число IP-адреса или сразу два последних числа из IP-адреса - в основном это соответствует именно случаю динамического IP-адреса. В таком случае postgrey откусывает у IP-адреса последнее число, заменяя его на ноль. Само откушенное число добавляется в конец записи. Указанный выше случай соответствует IP-адресу 95.138.211.90. То есть во втором случае формат такой:
IP-адрес отправителя с последним числом заменённым на 0/почтовый адрес отправителя/почтовый адрес получателя
отметка времени первой попытки отправки,отметка времени второй попытки отправки, последнее число из IP-адреса
Не совсем понимаю зачем это сделано, я с этим не разбирался. Скорее всего - для ускорения поиска динамических клиентов-отправителей. Такому клиенту скорее всего каждый раз будет выдаваться не сильно отличающийся от предыдущего IP-адрес, поэтому чтобы не множить триплеты и не заставлять такого клиента каждый раз пробиваться через процедуру проверки, повторные проверки выполняются только в случае отличия одного из первых трёх чисел IP-адреса. Но это - всего лишь мои догадки. Если вам интересно - изучайте исходники внимательнее.

Второй файл postgrey_clients.db используется для автоматического помещения IP-адресов отправителей в белый список. Посмотреть его можно следующей командой:
$ db4.6_dump -p postgrey_clients.db | less
Видим много записей следующего вида:
1.122.11.90
1,1303296308
Что здесь что?
IP-адрес отправителя
количество удачных отправок,отметка времени последней отправки
Опция --auto-whitelist-clients=10, заданная в настройках демона, указывает, после какого количества успешных отправок IP-адрес отправителя будет помещён в белый список. Эта база используется как раз для отслеживания клиентов, претендующих на помещение в белый список.

Опция --max-age=30 действует на оба списка и говорит о том, что записи, время последней отправки которых старше 30 дней, будут удалены. Таким образом записей с последней попыткой отправки бывшей более 30 дней назад, в базе быть не должно.

Для того, чтобы загнать отредактированную информацию обратно в базу данных, можно воспользоваться командой db4.6_load:
$ db4.6_dump -p postgrey.db > base
$ vi base
$ db4.6_load postgrey.db < base
Возможно перед загрузкой информации в базе данных придётся остановить postgrey. И не забудьте при экспериментах по редактированию делать резервные копии. Лучше - всего каталога после остановки postgrey.

Как воспользоваться полученной информацией, я пока не придумал. Например, можно составить рейтинг отправителей по IP-адресам, а можно составить рейтинг пар отправитель/получатель. Можно добавлять записи вручную (только зачем?), а можно удалять записи. Если придумали что-нибудь интересное, отпишитесь.

четверг, 14 апреля 2011 г.

Настройка автодополнения адреса в Firefox

Меня уже пару лет подбешивает автодополнение адреса в Firefox. Когда я ввожу адрес в адресную строку вручную, то я ввожу известный мне адрес сайта. Кроме адресов сайтов я туда больше никогда и ничего не ввожу. Но услужливый Firefox при вводе первой же буквы вываливает на меня чуть ли не всё содержимое адресной книги, журнала посещённых страниц, скопированных и вставленных откуда-нибудь ссылок и введённых в прошлом сайтов. Из всего этого хлама мне пригодился бы только последний пункт. Но я, будучи обладателем ангельского терпения и чудовищной лени, постоянно забивал на это всю эту пару лет.

И вот, наконец-то, я решил уделить полчаса своего времени на поиск решения и на его описания на будущее, если оно мне вдруг снова потребуется.

Итак, интересующие нас настройки находятся, понятное дело, на странице с адресом about:config. За настройки адресной строки отвечают параметры с именами, начинающимися с browser.urlbar. Из всех этих настроек мне нужны только две: browser.urlbar.default.behavior и browser.urlbar.matchBehavior

Параметр browser.urlbar.default.behavior представляет собой шестибитное значение, каждый из битов которого указывает, по каким источникам осуществлять автодополнение. Значение этого параметра может быть представлено в виде суммы следующих чисел:

1 Ограничить поиск только историей
2 Ограничить поиск только закладками
4 Ограничить поиск только метками
8 Искать совпадения в названии страницы
16 Искать совпадение в адресе страницы
32 Искать совпадение только с ранее введёнными адресами

Итак, моему желанию соответствует сумма 16 и 32, поэтому я задаю значение этого параметра равным 48.

Параметр browser.urlbar.matchBehavior может принимать одно из следующих значений:

0 Искать где угодно в доступном тексте, не обращая внимания на границы слов.
1 Искать в пределах слов перед тем, как искать во всём доступном тексте, не обращая внимания на границы слов. (По умолчанию)
2 Искать только в пределах слов в автодополнении адресной строки.
3 Подходят только начала адресов и названий страниц.

Мне нравится значение 3.

После этих настроек в строке адреса выпадают только те ресурсы, адреса которых начинаются с указанных букв.

Всё описанное выше сработало для Firefox версии 3.6.16.