Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37869360
en ru br
Репозитории ALT
S:0.2.5-alt8.20040310
5.1: 0.2.5-alt7.20040310
4.1: 0.2.5-alt5.20040310
4.0: 0.2.5-alt6.20040310
3.0:
+backports:0.2.5-alt0.M30.2.20040310
www.altlinux.org/Changes

Группа :: Система/Серверы
Пакет: spam_check

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

#!/usr/bin/perl

use constant DB_CACHE_SIZE => 5242880; # Объем ОЗУ для кэшироавния доступа к DB файлам.
use constant TIMEOUT => 10; # Максимальное время проверки в сек.

$cfg_data_path="/var/lib/spam_check";
$cfg_block_dir="/etc/spam_check/blocklist";

# Путь к лог файлу почтового сервера:
$cfg_maillog_file = "/var/log/maillog";

# Путь к файлу с хэшем для предотвращения двойной проверки IP.
# Чистка от старых записей производится через отдельный скрипт.
# В качестве ключа выступает IP, в качестве значения время проверки этого IP.
# Если время проверки отрицательное - то результат проверки показал признак
# хоста пересылающего спам.
$cfg_checker_cache_file = "$cfg_data_path/checked_ip.db";

# Путь к файлу с логом проверок. Если вместо файла указано "-" - вывод в STDOUT
$cfg_log_file = "/var/log/spam_check/spam_check.log";

# Путь к файлу с данными о незавершенных в прошлой итерации почтовых запросов.
$cfg_active_mail_file = "$cfg_data_path/.active_mail";

# Уровень говорливости лога: 0 - в лог только ошибки,
# 1 - в лог только спамовские хосты,
# 2 - в лог все проверки.
# 3 - debug
$cfg_verbose_level = 2;

# Файл в котором будет формираться список блокировки спамовских хостов.
$cfg_blocklist_file = "$cfg_block_dir/block_list.txt";

# Режим работы с лог файлом:
# 0 - cron, периодический запуск через cron
# 1 - tail, запускается один раз, постоянно следит за изменением в логе и
# осуществляет проверку сразу после соединения хоста (в cron
# прописывать не нужно).
$cfg_log_watch_mode = 0;

# Команда которая будет вызываться в случае обновления файла блокировки.
$cfg_blocklist_rebuild_cmd = "/usr/sbin/postmap -w $cfg_block_dir/block_list.txt";

# более правильный вариант.
# $cfg_blocklist_rebuild_cmd = "/usr/sbin/postmap -w $cfg_block_dir/block_list.txt; mv -f $cfg_block_dir/block_list.txt.db $cfg_block_dir/block_list.db";

# вариант при экспорте на DNSBL сервер.
# $cfg_blocklist_rebuild_cmd = "/bin/gzip -c $cfg_block_dir/block_list.txt > $cfg_block_dir/block_list.txt.gz.new;mv $cfg_block_dir/block_list.txt.gz.new $cfg_block_dir/block_list.txt.gz";

# Минамальное время в сек. между запуском процесса перегенерации файла блокировки,
# необходимо только для "tail" режима работы скрипта (cfg_log_watch_mode=1)
# Определяет в общем виде быстроту реакции на спам.
$cfg_blocklist_rebuild_interval = 20;

# Формат списка блокировки:
# 0 - "access" - стандартный access файл для MTA Postfix
# 1 - формат rbldnsd
$cfg_blocklist_format = 0;

# Путь к файлу с локом.
$cfg_lock_file = "$cfg_data_path/.lock";

# Максимальное время жизни лока, после которого лок файл будет удален.
$cfg_lock_timetolive = 3600; # 1 час.

# Путь к файлу с последней просмотренной позицией лога.
$cfg_seek_file = "$cfg_data_path/.seek";

# Описание весов для различных факторов определяющих вероятность спама.
%cfg_spam_factor = (

# Обратная проверка на наличие открытых сетевых протов.
"open_ports" => {
"25" => -3.5, # Уменьшаем вероятность спама, так как может быть это нормаольный почтовый сервер.
"80" => -3, # Уменьшение FP, для хостов без MTA
"110" => -3, # Уменьшение FP, для хостов без MTA

"1025" => 1, # Сигнализирует о Windows машине.
"5000" => 1.5, # 5000 (UPNP) порт показывает на вероятно взломанную машину
"2001" => 1.5, # Порты которые используют троянские программы.
"1025" => 1.5,
"1400" => 1.5,
"9100" => 1.5,
"3389" => 1.5,
"4444" => 1,
#"1000" => 2, "1058" => 2, "3000" => 2, "1024" => 2, "666" => 2, "50505" => 2,
#"5001" => 2, "12345" => 2, "12346" => 2, "30303" => 2, "31337" => 2,
"3128" => 0.8, # Вероятно рассылка через открытые прокси.
"1080" => 0.8,
"8080" => 0.8,
},

# Вес уровня домена от которого поступила почта, 0 - домен не резолвится.
#
"domain_level" => {
0 => 3,
1 => 0, # test.com
2 => -0.5, # mail.test.com
3 => 1, # bzq-218-1-51.cable.test.com
4 => 1.6, # 23.dsl-1.cable.test.com
5 => 1.8, # 34.53.12.53.test.com
"N" => 2, # если уровень не описан выше цифрами.
},

# Regex маски слов встречающихся в имени домена.
"domain_mask" => {
'(client|dial|dsl|cable|pool|ppp|node)' => 2,
'\-\d+\-\d+\-\d+' => 3,
'smtp|mail|relay' => -3,
},

# Коэффициент умножения веса, для последующих соединений с данного IP за
# за текущий день.
# - Если равен 1, то пересчет не производится, блокирование в зависимости от числа запросов запрещено.
# - Если равен 0, апдейт базы при повторных запросах не производится вообще.
"reconnect_mul" => 1.0, # При каждом повторном коннекте в течении дня умножаем вес на 1.1

# Минимальный вес при котором блокируем IP как спамера.
"block_weight" => 3 # Если суммарный вес получился >= 3, то считаем хост спамером.
);


# Маска для выборки из почтового лога строк отражающих соедниение с почтовым сервером.
# В первой скобке - имя хоста, во второй IP
# Для postfix:
$cfg_maillog_connect_mask=': connect from ([^\[]+)\[(\d+\.\d+\.\d+\.\d+)\]\s*';
$cfg_maillog_disconnect_mask=': disconnect from ([^\[]+)\[(\d+\.\d+\.\d+\.\d+)\]\s*';

# Формат анализируемого лога:
# 0 - postfix
# 1 - sendmail
$cfg_log_format = 0;

# Для sendamil (у sendmail нет connect/disconnect сообщений в логе) используется
# только $cfg_maillog_disconnect_mask (раскомментируйте строку ниже):
# $cfg_maillog_disconnect_mask=': from=<[^>]*>,.* relay=([^\[ ]+)\s*\[(\d+\.\d+\.\d+\.\d+)\]\s*';

# Маска для выборки из почтового лога строк по которым определяем уже отвергнутые соединения.
# Чтобы не проверять лишний раз. В скобке IP.
$cfg_maillog_reject_mask=': reject: RCPT from [^\[]+\[(\d+\.\d+\.\d+\.\d+)\]: 55.* (Client host rejected|Service unavailable)';

# Маска по имени домена, при совпадении которой будет производится проверка.
#$cfg_block_mask='\d[\-\.](dsl|adsl|dial|cable)\.';
$cfg_block_mask="";

# Маска хостов для которых не выполняется проверка на спам (для .ru шлем abuse, а не блокирвем сгоряча).
$cfg_ignore_mask='\.(ru|su|ua|by)$';

# Список IP адресов для которых не будет выполняться проверка (локальные IP)
@cfg_local_ip_list = ("127.0.0.0/8", "192.168.0.0/16");
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin