[EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Обсуждаем сайт и форум.

Модератор: f0s

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

[EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Alex Keda » 2007-02-21 12:34:42

во многом допилил текущий конфиг exim+dovecot+postfixadmin
в принципе, на форуме основу выкладывал.
========
однако - квот нету, - надо ли в таком виде делать?
или кто прикручивал квоты к довекоту - могут поделиться кусками конфига на эту тему?
ибо без квот смысла двигать в архив текущую и писать новую не вижу...
конфиги, если надо, могу выложить тут...
Последний раз редактировалось Alex Keda 2007-02-27 16:12:47, всего редактировалось 1 раз.
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Sova
старшина
Сообщения: 444
Зарегистрирован: 2006-09-13 14:10:59
Откуда: Цхинвал-Москва
Контактная информация:

Непрочитанное сообщение Sova » 2007-02-23 11:42:45

Выкладывай

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-23 13:20:57

ОК
в поняделак
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-26 10:23:43

поехали.
всё пути даны от /usr/local/etc/exim
конфиг разбит на куски - мне так удобней.
чё-то может быть нерабочим - т.к. на ходу выковыриваю инфу которую светить нежелательно. Но - по идее должно прокатить всё.
=============
configure

Код: Выделить всё

# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам!  :)  Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...

# Инклюдим главные настройки
.include_if_exists /usr/local/etc/exim/includes/100.main.conf

### конфигурация ACL для входящей почты
begin acl
# Эти правила срабатывают для каждого получателя
acl_check_rcpt:

# Начало файла ACL - те, кого срубаем сразу же
.include_if_exists /usr/local/etc/exim/includes/200.acl_check_rcpt.conf
# Проверки на спам - по хостам и прочему.
.include_if_exists /usr/local/etc/exim/includes/300.acl_check_rcpt_spam_rule.conf
# Конец конфигурации - блэк-листы, задержки и прочее
.include_if_exists /usr/local/etc/exim/includes/400.acl_check_rcpt_end.conf

# Тут идут ACL проверяющие содержимое (тело) письма.
# Без них будут пропускаться все сообщения.
acl_check_data:
# Инклюдим конфигурацию проверки тела письма
.include_if_exists /usr/local/etc/exim/includes/500.acl_check_data.conf

# чё делаем с почтой
begin routers
# Инклюдим конфигурацию роутреров
.include_if_exists /usr/local/etc/exim/includes/600.routers.conf

# начинаются транспорты - как доставляем почту
begin transports
# Инклюдим транспорты
.include_if_exists /usr/local/etc/exim/includes/700.transports.conf

# Конфигурация повторов и перезаписи
.include_if_exists /usr/local/etc/exim/includes/800.retry_and_rewrite.conf

# Секция авторизации при отправке писем. Ввиду того,
# что почтовых клиентов много, и все всё делают
# по-своему, то и механизмов авторизации три...
begin authenticators
# Аутентификация юзеров.
.include_if_exists /usr/local/etc/exim/includes/900.authenticators.conf

# Фсё. Конфиг кончился. Два дня убил.
# © lissyara       2006-02-25, 01:19
includes/100.main.conf

Код: Выделить всё

# Главняе настройки

# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам!  :)  Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...


# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mx.grand-prix.ru

# Вводим данные для подключения к MySQL серверу.
# словечко `hide`, вначале, означает, что при
# вызове проверки конфига командой
# exim -bV config_file эти данные не будут отображаться.
# Если без него - то будут показаны... Формат записи:
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/exim/exim/exim

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = ${lookup mysql{SELECT LCASE(`domain`) \
                            FROM `domain` WHERE \
                            `domain`=LCASE('${quote_mysql:${domain}}') AND \
                            `active`='1'}} : $primary_hostname

# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.
domainlist relay_to_domains = ${lookup mysql{SELECT LCASE(`domain`) \
                            FROM `domain` WHERE \
                            `domain`=LCASE('${quote_mysql:${domain}}') AND \
                            `active`='1'}}

# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /etc/hosts - результатом было
# непонимание `localhost` но пониманием 127.0.0.1/8
hostlist   relay_from_hosts = localhost : 127.0.0.0/8 : 192.168.0.0/16

# Вводим названия acl`ов для проверки почты. (В общем-то, это
# необязательно, если вы делаете открытый релей, или хотите
# принимать вообще всю почту с любого хоста для любых
# получателей... Тока потом не жалуйтесь что у Вас спам
# и провайдер выкатывает немеряный счёт :))
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным!  :) 
# Итак, указываем местоположение сокета clamd.
av_scanner = clamd:/var/run/clamav/clamd

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама...
# spamd_address = 127.0.0.1 783

# Имя домена добавляемое для локальных отправителей (реальных
# юзеров системы) т.е. почта отправляемая от root, будет от
# root@домен_указанный_здесь. Если пункт незадан, то используется
# имя хоста из `primary_hostname`. Логичней было бы написать здесь
# lissyara.su, но мне удобней иначе:
qualify_domain = mx.grand-prix.ru

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mx.grand-prix.ru

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`
allow_domain_literals = false

# Пользователь от которого работает exim
exim_user = mailnull

# группа в кторой работает exim
exim_group = mail

# запрещаем работу доставки под юзером root - в целях безопасности
never_users = root

# Проверяем соответствие прямой и обратной зон для всех хостов.
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите  :) 
#host_lookup = *

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на ident и закрыли файрволлом tcp:113...) Это проверка - Ваш
# хост спрашивает у удалённого, с которого было подключение, а кто
# собстно ко мне подключился на такой-то порт? Если на удалённом хосте
# работает identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто?  :)  Это же палево  :) 
# Тока на мой взгляд, если на сервере всё настроено правильно -
# то вовсе это и не страшно.
# Короче - если хостс поставить * то будет проверять все. Таймаут -
# если поставить 0 то не будет ждать ответа ни от кого. По
# вышеописанным причинам - отключаем
#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# По дефолту, экзим отфутболивает все `неквалифицированные` адреса,
# состоящие тока из локальной части. Для того чтобы разрешить такие письма
# определённых хостов используются эти директивы:
# для `неквалифицированных` отправителей
sender_unqualified_hosts = +relay_from_hosts
# для `неквалифицированных` получателей
recipient_unqualified_hosts = +relay_from_hosts

# Интересный пункт, тока я не вполне понимаю его логику.
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 45m

# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))
timeout_frozen_after = 15d

# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.

# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
#freeze_tell = admin@lissyara.su

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.0.0/16

# Через какое время повторять попытку доставки
# замороженного сообщения
auto_thaw = 1h

# Приветствие сервера
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер
smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.
smtp_accept_max_per_connection = 25

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку
split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки
remote_max_parallel = 15

# при генерации сообщения об ошибке прикладывать
# не всё сообщение, а кусок (от начала) указанного
# размера (иногда полезно и целиком - в таком случае
# просто закомментируйте эту строку)
return_size_limit = 70k

# размер сообщения. У меня стоит относительно большой
# размер (`относительно` - потому, что на большинстве
# хостов оно ограничено 2-5-10мб, либо стоит анлим.)
message_size_limit = 64M

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))
helo_allow_chars = _

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго  :)  Немного,
# спам режется.
smtp_enforce_sync = true

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +all_parents - все входящие?
# +connection_reject - разорваные соединения
# +incoming_interface - интерфейс (реально - IP)
# +lost_incoming_connections - потеряные входящие
# соединения
# +received_sender - отправитель
# +received_recipients - получатель
# +smtp_confirmation - подтверждения SMTP?
# +smtp_syntax_error - ошибки синтаксиса SMTP
# +smtp_protocol_error - ошибки протокола SMTP
# -queue_run - работа очереди (замороженные мессаги)
log_selector = \
	+all \
#	-incoming_port \
#	-incoming_interface \
	-arguments \
	-smtp_connection \
	-lost_incoming_connection \
	-queue_run


# Системный фильтр, копирование проходящей почты
system_filter			= /usr/local/etc/exim/filters/system-filter
system_filter_pipe_transport	= address_pipe
system_filter_user		= mailnull
system_filter_group		= mail



# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no
log_file_path = syslog : /var/log/exim/%s-%D.log
includes/200.acl_check_rcpt.conf

Код: Выделить всё

# Проверка получателей

# На данный момент юзается она переменная - $acl_m0 - очки спамерские


  # Вводим переменную acl_m2 - в ней будет счётчик,
  # сколько очков спамерских насчиталось...
  warn	set acl_m0    = 0
  #	logwrite      = "ACL m0 set dafault as $acl_m0 for host=$sender_host_name with HELO=$sender_helo_name

  # принимать сообщения которые пришли с локалхоста,
  # не по TCP/IP
  accept  hosts = :

  # Запрещаем письма содержащие в локальной части
  # символы @; %; !; /; |. Учтите, если у вас было
  # `percent_hack_domains` то % надо убрать.
  # Проверяются локальные домены
	deny	message	= "incorrect symbol in address"
		domains	= +local_domains
		local_parts	= ^[.] : ^.*[@%!/|]
		delay	= 30s

  # Проверяем недопустимые символы для
  # нелокальных получателей:
	deny	message	= "incorrect symbol in address"
		domains	= !+local_domains
		local_parts   = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
		delay	= 30s

  # Принимаем почту для постмастеров локальных доменов без
  # проверки отправителя (я закомментировал, т.к. это -
  # основной источник спама с мой ящик).

#  accept  local_parts   = postmaster
#          domains       = +local_domains

  # Запрещщаем, если невозможно проверить отправителя
  # (отсутствует в списке локальных пользователей)
  # У себя я это закоментил, по причине, что некоторые
  # железяки (принтеры, & etc) и программы (Касперский, DrWEB)
  # умеют слать почту, в случае проблем но не умеют ставить
  # нужного отправителя. Такие письма эта проверка не пускает.
#  require verify        = sender

  # Запрещщаем тех, кто не обменивается приветственными
  # сообщениями (HELO/EHLO)
	deny	message		= "HELO/EHLO require by SMTP RFC"
		condition	= ${if eq{$sender_helo_name}{}{yes}{no}}
		delay		= 30s

  # Принимаем сообщения от тех, кто аутентифицировался:
  # Вообще, большинство конфигов в рунете - это один и тот же
  # конфиг написанный Ginger, в котором этот пункт расположен
  # внизу. Но при таком расположении рубятся клиенты с adsl,
  # ppp, и прочие зарезанные на последующих проверках. Но это
  # жа неправильно! Этом мои пользователи из дома! Потому
  # я это правило расположил до проверок.
  accept  authenticated = *

# Рубаем нах, тех, кто подставляет свой IP в HELO
	deny	message		= We don't allow domain literals, sorry - many spam...
		hosts		= !+relay_from_hosts:*
		condition	= ${if isip{$sender_helo_name}{yes}{no}}
		delay		= 30s

# Рубаем хело с нашим именем
	deny	condition	= ${if match_domain{$sender_helo_name} \
			{$primary_hostname:+local_domains:+relay_to_domains} \
			{true}{false}}
		message		= Message was delivered by ratware - own
		log_message	= remote host used our name in HELO/EHLO greeting - spam_host.
		delay	= 30s
# закомменчено - рикошеты срубаются...
# Проверяем, существует ли указанный домен (из обратного почтового адреса)
#в природе.
#	deny	condition    = ${if !eq{${lookup mysql{SELECT 1 FROM \
#				`list_top_level_domains` WHERE `zone` = \
#				CONCAT('.', \
#		SUBSTRING_INDEX('${quote_mysql:$sender_address_domain}', \
#				'.', -1))}}}{1}{yes}{no}}
#		delay		= 30s
#		hosts		= !+relay_from_hosts:*
#		message		= non-existent domain: '$sender_address_domain'
#		logwrite	= Sender address domain: \
#'[$sender_address_domain]' - non-existent

# Перенесено обратно в засчёт очков - клиенты-долбоёбы... с локалхостов шлють...
# Проверяем существтование зоны из HELO
#	deny	condition	= ${if !eq{${lookup mysql{SELECT 1 FROM \
#				`list_top_level_domains` WHERE `zone` = \
#				LCASE(CONCAT('.', \
#			SUBSTRING_INDEX('${quote_mysql:$sender_helo_name}', \
#				'.', -1)))}}}{1}{yes}{no}}
#		hosts		= !+relay_from_hosts : *
#		delay		= 30s
#		logwrite	= non-existent domain in HELO - '$sender_helo_name'
#		message		= non-existent domain: '$sender_helo_name', see RFC1123 and RFC2821

# Рубаем тех, кто в HELO пихает только цифры
# (не бывает хостов ТОЛЬКО из цифр)
#  deny    condition     = ${if match{$sender_helo_name}\
#				{\N^\d+$\N}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "can not be only number in HELO!"

# Рубаем тех, кто в HELO пихает localhost (но не свой хост!)
#  deny    condition     = ${if match{$sender_helo_name}{localhost}{yes}{no}}
#          hosts         = !127.0.0.1 : !localhost : *
#          message       = "Your host is not localhost!"


# Рубаем музаков с недопустимымми символами в helo
  deny    condition     = ${if match{$sender_helo_name}{\N_\N}{yes}{no}}
          hosts         = !127.0.0.1 : !localhost : !+relay_from_hosts : *
          set acl_m0    = ${eval:$acl_m0+20}
#         logwrite      = "STAGE6: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - helo contain '_'"
includes/300.acl_check_rcpt_spam_rule.conf

Код: Выделить всё

# Проверка на спам - по хосту

#  # Вводим переменную acl_m0 - в ней будет счётчик,
#  # сколько очков спамерских насчиталось...
  warn	  set acl_m0	= 0
#          logwrite	= "ACL m0 set dafault as $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name (domain in e-mail = $sender_address_domain)"

  # Проверяем соответствие HELO и обратной записи DNS для севера:
  warn    condition     = ${if !eq{$sender_helo_name}{$sender_host_name}{yes}{no}}
          hosts         = !+relay_from_hosts : *
          set acl_m0	= ${eval:$acl_m0+30}
#	  logwrite	= "STAGE1: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - reverse sone not match with HELO"

  # Смотрим, нашлась ли обратная запись для этого хоста
  warn    condition	= ${if eq{$host_lookup_failed}{1}{yes}{no}}
          hosts         = !+relay_from_hosts : *
          set acl_m0	= ${eval:$acl_m0+30}
#	  logwrite	= "STAGE2: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - no reverse zone for host"

# Удалено, т.к. пееркрывается проверками на реальность домена первого уровня
  # Cчитаем длинну имени хоста (из HELO). если  меньше 5 - добавляем
  # - таких хостов не может существовать
#  warn    condition	= ${if <{${strlen:$sender_helo_name}}{5}{yes}{no}}
#	  hosts         = !+relay_from_hosts : *
#	  set acl_m0	= ${eval:$acl_m0+60}
#	  logwrite	= "STAGE3: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - lenth helo chars small 5"

  # Считем число точек или дефисов в доменном имени. (больше 4-х - в топку)
  warn    condition	= ${if match{$sender_host_name}{\N((?>\w+[\.|\-]){4,})\N}{yes}{no}}
	  hosts         = !+relay_from_hosts : *
	  set acl_m0	= ${eval:$acl_m0+40}
#	  logwrite	= "STAGE4: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - more dots in name"

  # Смотрим, есть ли вобще точки в HELO - дохера уродов с ``friends'' (удалено,
# т.к. перекрывется проверками на реальность домена первого уровня)
#  warn    condition	= ${if !match{$sender_helo_name}{\N\w\.\w\N}{yes}{no}}
#	  hosts         = !+relay_from_hosts : *
#	  set acl_m0	= ${eval:$acl_m0+60}
#	  logwrite	= "STAGE5: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - helo not contain dots"

# Проверяем длинну обратного почтовго адреса - пследнее время сцуки повадились
# слать с безумными обратными адресами типа Fulbrightbackstage@absacargo.com,
# damsel'stailpipe's@abbeywindows.co.uk и т.п.
  warn	condition	= ${if <{${strlen:$sender_address}}{25}{yes}{no}}
	hosts		= !+relay_from_hosts : *
	set acl_m0	= ${eval:$acl_m0+10}
#	logwrite	= STAGE6: ACL m0 set = $acl_m0 for \
#host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name \
#- many big sender address [$sender_address]

# Добавляем очков за всякие dialup хосты
	warn	condition   = ${lookup{$sender_host_name}wildlsearch{/usr/local/etc/exim/db/dialup_hosts}{yes}{no}}
		hosts	= !+relay_from_hosts : *
		set acl_m0  = ${eval:$acl_m0+60}
#		logwrite	= "STAGE9: ACL m0 set = $acl_m0 for \
#host=$sender_host_name [$sender_host_address] with \
#host=$sender_helo_name - dialup, ppp & etc..."

	warn	condition	= ${lookup{$sender_helo_name}wildlsearch{/usr/local/etc/exim/db/dialup_hosts}{yes}{no}}
		hosts	= !+relay_from_hosts : *
		set acl_m0  = ${eval:$acl_m0+60}
#		logwrite	= "STAGE10: ACL m0 set = $acl_m0 for \
#host=$sender_host_name [$sender_host_address] with \
#HELO=$sender_helo_name - dialup, ppp & etc..."

#recipients_count
# Проверяем счётчик сообщений в сессии - нормальные пользователи редко шлют
# сообщения с большим числом получателей, а для крупных почтовых сервисов
# всё сбросится по белому листу серверов, что находится дальше
  warn		condition	= ${if >{$recipients_count}{4}{yes}{no}}
		hosts		= !+relay_from_hosts : *
		set acl_m0	= ${eval:$acl_m0+($recipients_count*20)}
#		logwrite	= STAGE11: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name; counter = $recipients_count






# Проверяем существтование зоны из HELO
  warn		condition	= ${if !eq{${lookup mysql{SELECT 1 FROM \
				`list_top_level_domains` WHERE `zone` = \
				LCASE(CONCAT('.', \
			SUBSTRING_INDEX('${quote_mysql:$sender_helo_name}', \
				'.', -1)))}}}{1}{yes}{no}}
		hosts		= !+relay_from_hosts : *
		set acl_m0	= ${eval:$acl_m0+150}
#		logwrite	= non-existent domain in HELO - '$sender_helo_name' setting acl_m0 = $acl_m0



  # Добавляем очки, если spf не соответствует
  warn	spf		= fail
	hosts		= !+relay_from_hosts : *
	set acl_m0	= ${eval:$acl_m0+60}
	logwrite	= "SPF status: spf_result = $spf_result; spf_smtp_comment = $spf_smtp_comment"
#	logwrite	= "STAGE11-SPF: ACL m0 set = $acl_m0 for host=$sender_host_name [$sender_host_address] with HELO=$sender_helo_name - SPF check failed: $sender_host_address is not allowed to send mail from $sender_address_domain"


  # Проверяем return-path - соостветствует ли отправителю,
  # или хотябы домену отправителя...


# Вводим acl_m2 с нулевым значением
  warn	set acl_m2	= 0
# Проверяем - не было ли писем НА домен отправителя от наших юзеров.
# Если были - то потом, в фильтре, обнулим количество насчитанных очков.
  warn	condition	= ${if eq{${lookup mysql{SELECT 1 FROM `sended_list` \
				WHERE `user_to` = \
				LCASE('${quote_mysql:$sender_address}') AND `user_from` \
				= LCASE('${quote_mysql:$local_part@$domain}') AND \
				`last_mail_timestamp` < `last_mail_timestamp` \
				+ (60*24*60*60) LIMIT 1}}}{1}{yes}{no}}

	condition	= ${lookup mysql{INSERT IGNORE INTO `domain_whitelist` \
				(`domainname`, `domain_ip`, `added_timestamp`, \
				`last_mail_timestamp`, `mail_count`) \
				VALUES (LCASE('${quote_mysql:$sender_address_domain}'), \
				'${quote_mysql:$sender_host_address}', \
				UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1') ON \
				DUPLICATE KEY UPDATE \
				`last_mail_timestamp` = UNIX_TIMESTAMP(), \
				`mail_count` = `mail_count` + 1}}
	hosts		= !+relay_from_hosts : *
	set acl_m2	= 1
#	logwrite	= STAGE12: $sender_address ==> $local_part@$domain; setting acl_m2 = $acl_m2; WHITELIST for this addresses

# Переменная изменилась лишь если это были те же самые получатели,что и общались
# при внесении данных в транспорте. Для остальных этот домен так и остался
# без изменений. Соответственно надо сделать его и для остальных белым.
  warn	condition	= ${if eq{${lookup mysql{SELECT 1 FROM `domain_whitelist` \
				WHERE `domain_ip` = \
				'${quote_mysql:$sender_host_address}' \
				LIMIT 1}}}{1}{yes}{no}}
	hosts		= !+relay_from_hosts : *
	set acl_m2	= 1
#	logwrite	= STAGE13: $sender_address ==> $local_part@$domain; setting acl_m2 = $acl_m2; WHITELIST for ALL domains







#	warn		logwrite = Variables: \
#sender_address = $sender_address; sender_host_name = $sender_host_name; \
#sender_helo_name = $sender_helo_name; sender_ident = $sender_ident; \
#host_lookup_failed = $host_lookup_failed; \
#return_path = $return_path; recipients_count = $recipients_count; rcpt_count = \
#$rcpt_count; rcpt_defer_count = $rcpt_defer_count; rcpt_fail_count = \
#$rcpt_fail_count; received_count = $received_count; received_for = \
#$received_for

includes/400.acl_check_rcpt_end.conf

Код: Выделить всё

# Конец конфигурации проверки отправителя

# Сбрасываем спамерскую переменную, если домен в белом списке
	warn	condition	= ${if eq{$acl_m2}{1}{yes}{no}}
		logwrite	= Resetting acl_m0 $acl_m0 --> 0, host in whitelist ($sender_address ==> $local_part@$domain)
		set acl_m0	= 0
#		logwrite	= Resetting acl_m0 $acl_m0 --> 0, host in whitelist ($sender_address ==> $local_part@$domain)

  # Задержка. Режется довольно много не-MTA - спамерских скриптиков.
  warn
	set acl_c0	= 5s
  warn
	# 
	condition	= ${if !eq{$acl_m0}{0}{yes}{no}}
	condition	= ${if <{$acl_m0}{150}{yes}{no}}
	set acl_c0	= 15s
  warn
	# Вычисляем задержку на основании насчитанных за спам очков:
	condition	= ${if !eq{$acl_m0}{0}{yes}{no}}
	condition	= ${if >{$acl_m0}{150}{yes}{no}}
	set acl_c0	= ${eval:$acl_m0/10}s
  warn
	# ставим задержку в 0 секунд своим хостам
	hosts = +relay_from_hosts
	set acl_c0	= 0s
  warn
	# Ставим нулевую задержку хостам, с которми юзеры переписываются
	condition	= ${if eq{$acl_m2}{1}{yes}{no}}
	set acl_c0	= 0s
  warn
	# пишем в логи задержку (если оно вам надо)
#	logwrite = Delay $acl_c0 (spam counter = $acl_m0; white host = $acl_m2) for $sender_host_name \
#[$sender_host_address] with HELO=$sender_helo_name. Mail \
#from $sender_address to $local_part@$domain.
        delay		= $acl_c0

  # для фильтра - устанавливаем переменные (отладка)
#  warn	set acl_m4	= $sender_address
#	set acl_m5	= $local_part@$domain

                          
  # проверяем пользователей из файла альясов
	accept	domains	= $primary_hostname
		verify	= recipient

  # Проверка получателя в виртуальных доменах.
  # Если не проходит, то проверяется следующий ACL,
  # и если непрошёл и там - deny
	accept	domains	= +local_domains
		endpass
		message	= "Unknown user for this domain"
		condition = ${if eq{${lookup mysql{SELECT 1 FROM `alias` WHERE \
			`address`=LCASE('${quote_mysql:$local_part@$domain}') OR \
			`address`=LCASE('${quote_mysql:@$domain}') AND `active`='1' \
			ORDER BY SUBSTRING_INDEX(`address`,'@',1) DESC LIMIT 1}}}{1}{yes}{no}}
	
  # Проверяем получателя в релейных доменах
  # Опять-таки если не проходит -> следующий ACL,
  # и если непрошёл и там - deny
  accept  domains       = +relay_to_domains
          endpass
          message       = "No route to host..."
          verify        = recipient

  # Рубаем тех, кто в блэк-листах. Серваки перебираются
  # сверху вниз, если не хост не найден на первом, то
  # запрашивается второй, и т.д. Если не найден ни в одном
  # из списка - то почта пропускается.
  deny		message	= "you in blacklist - $dnslist_domain --> $dnslist_text; $dnslist_value"
		delay	= 30s
		dnslists	=	cbl.abuseat.org : \
					dynablock.njabl.org : \ 
					dul.dnsbl.sorbs.net : \
					list.dsbl.org : \
					sbl-xbl.spamhaus.org
					
  # Разрешаем почту от доменов в списке relay_from_hosts
  accept  hosts         = +relay_from_hosts

  # Если неподошло ни одно правило - чувак явно ищет
  # открытый релей. Пшёл прочь.  :) 
  deny		message	= "Access deny - this not open relay!"
		delay	= 30s
includes/500.acl_check_data.conf

Код: Выделить всё

# Проверяем тело письма

# Рубаем письма с китайскими сиволами
  deny	message		= "this is spam - denied"
  	condition	= ${if match{$message_body} \
        	      {105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
        	      {yes}{no}}

# Рубаем по расширениям
  deny	message = contains $found_extension file (blacklisted).
  	demime  = com:vbs:bat:pif:scr:exe

# проверяем MIME
  deny  message = This message contains a MIME error ($demime_reason)
        demime = *
        condition = ${if >{$demime_errorlevel}{2}{1}{0}}

  # Проверяем письмо на вирусы
# deny malware = *
  warn malware = *
  logwrite = VIRUS from host $sender_host_name [$sender_host_address]. \
  Mail from $sender_address to $local_part@$domain.
  set acl_m1 = 1
  logwrite = "In e-mail found VIRUS - $malware_name"

# Сообщения с NUL-символами
        deny	message		= This message contains NUL characters
	        log_message	= NUL characters!
        	condition	= ${if >{$body_zerocount}{0}{1}{0}}

# Синтаксис заголовков 
	deny	message		= Incorrect headers syntax
		hosts		= !+relay_from_hosts:*
#		condition	= ${if >{$acl_m0}{190}{yes}{no}}
		!verify		= header_syntax

# проверяем скрытые копии (немногие юзеры пользуются этим, пусть лучше
# отдельными письмами пишут) у тех, у кого уже есть спамерские очки
	deny	message		= Administrative denied 'blind' ('hidden') copy messages
		condition	= ${if >{$acl_m0}{110}{yes}{no}}
		hosts		= !+relay_from_hosts:*
		verify		= not_blind

  # Вводим ACL для заполнения таблицы что и куда ходило
#  warn	condition = ${lookup mysql{INSERT INTO `mail_history` (`to`, `from`, \
#			`message_size`,`sending_timestamp`) VALUES \
#			('$recipients', '$sender_address', \
#			'$message_size', UNIX_TIMESTAMP())}}


# отладка - выводим пеерменную - надо найти про отправителя конверта.
#       warn    logwrite        = return_path = $return_path; sender_address \
#= $sender_address; sender_address_local_part@sender_address_domain = \
#$sender_address_local_part@$sender_address_domain; reply_address = $reply_address

# проверяем нету ли в поле From адреса с которым переписываемся (web интерфейсы
# любят подставлять себя - поэтому тут и изгаляемся.)
        warn    condition       = ${if eq{${lookup mysql{SELECT 1 FROM `sended_list` \
                                WHERE `user_to` = \
                                LCASE(SUBSTR('${quote_mysql:$reply_address}', \
                                POSITION('<' IN '${quote_mysql:$reply_address}') +1, \
                                POSITION('>' IN '${quote_mysql:$reply_address}') \
                                - POSITION('<' IN '${quote_mysql:$reply_address}') -1) \
                                ) AND `user_from` \
                                = LCASE('${quote_mysql:$local_part@$domain}') AND \
                                `last_mail_timestamp` < `last_mail_timestamp` \
                                + (60*24*60*60) LIMIT 1}}}{1}{yes}{no}}

                condition       = ${lookup mysql{INSERT IGNORE INTO `domain_whitelist` \
                                (`domainname`, `domain_ip`, `added_timestamp`, \
                                `last_mail_timestamp`, `mail_count`) \
                                VALUES (LCASE('${quote_mysql:$sender_address_domain}'), \
                                '${quote_mysql:$sender_host_address}', \
                                UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1') ON \
                                DUPLICATE KEY UPDATE \
                                `last_mail_timestamp` = UNIX_TIMESTAMP(), \
                                `mail_count` = `mail_count` + 1}}
                hosts           = !+relay_from_hosts : *
                set acl_m2      = 1

  # Если есть необходимость - тут проверки на спам

  # Пропускаем остальное
  accept

includes/600.routers.conf

Код: Выделить всё

# Конфигурация роутеров

# Поиск маршрута к хосту в DNS. Если маршрут не найден в DNS -
# то это `унроутабле аддресс`. Не проверяются локальные
# домены, 0.0.0.0 и 127.0.0.0/8
dnslookup:
  driver = dnslookup
  domains = ! +local_domains
  transport = remote_smtp
  ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
  no_more

# системные альясы
system_aliases:
  driver = redirect
#  domains = mail.gptel.ru : mail2.gptel.ru
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/aliases}}
  user = mailnull
  group = mail
  file_transport = address_file
  pipe_transport = address_pipe


# локальные пользователи
##localuser:
#  driver = accept
##  domains = mail.gptel.ru : mail2.gptel.ru
#  check_local_user
#  transport = dovecot_delivery
#  cannot_route_message = Unknown user

localuser:
        driver = accept
        domains = ametist.derzhava.com
        check_local_user
#       local_part_suffix = +* : -*
#       local_part_suffix_optional
        transport = local_delivery
        cannot_route_message = Unknown user





# смотрим альясы
mysql_aliases:
    driver      = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT LCASE(`goto`) FROM `alias` WHERE \
		`address`=LCASE('${quote_mysql:$local_part@$domain}') OR \
		`address`=LCASE('${quote_mysql:@$domain}') AND `active`='1' \
		ORDER BY SUBSTRING_INDEX(`address`,'@',1) DESC LIMIT 1}}

# вводим спамерский роутиг
#spam_transport:
#  driver = accept
#  condition = ${if match{$h_X-Spam:}{YES}}
#  transport = dovecot_spam_delivery



# Всё что осталось - это локальные адресаты.
# Доставляем почту в dovecot
dovecot_user:
  driver = accept
  condition = ${lookup mysql{SELECT LCASE(`goto`) FROM \
		`alias` WHERE \
		`address`=LCASE('${quote_mysql:$local_part@$domain}') OR \
		`address`=LCASE('${quote_mysql:@$domain}') AND `active`='1' \
		ORDER BY SUBSTRING_INDEX(`address`,'@',1) DESC LIMIT 1}{yes}{no}}
  transport = dovecot_delivery
  cannot_route_message = Unknown user



includes/700.transports.conf

Код: Выделить всё

# Конфигурация транспортов

# Доставка на удалённые хосты - по SMTP
remote_smtp:
  driver	= smtp
  headers_add	= "X-Descriptions: powered by www.lissyara.su"
  hosts_avoid_esmtp	=  ${lookup mysql{INSERT IGNORE INTO `sended_list` \
			(`user_from`, `user_to`, `added_timestamp`, \
			`last_mail_timestamp`, `mail_count`) VALUES \
			(LCASE('${quote_mysql:$sender_address}'), \
			LCASE('${quote_mysql:$local_part@$domain}'), \
			UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1') ON DUPLICATE \
			KEY UPDATE `last_mail_timestamp` = UNIX_TIMESTAMP(), \
			`mail_count` = `mail_count` + 1}}

# Доставка локальным адресатам - в dovecot
dovecot_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull

dovecot_spam_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -m SPAM
  message_prefix =
  message_suffix =
  delivery_date_add
  envelope_to_add
  return_path_add
  log_output
  user = mailnull

local_delivery:
  driver = appendfile
  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  user = $local_part
  mode = 0660
  no_mode_fail_narrower


# Имя программы
address_pipe:
  driver = pipe
  return_output

address_file:
  driver = appendfile
  delivery_date_add
  envelope_to_add
  return_path_add

# Транспорт для автоответов
address_reply:
  driver = autoreply

# В никуда
null_transport:
  driver = appendfile
  file = /dev/null

includes/800.retry_and_rewrite.conf

Код: Выделить всё

# Конфигурация повторов и перезаписи адресов

# Начинаются повторы недоставленных писем.
begin retry

# Этот кусок я не трогал. Думаю разработчики лучше знают,
# какие тут должны быть цифирьки. Если же вы это знаете
# лучше их - меняйте. Хотя... А какого, если Вы такой
# умный, читаете этот мануал? Может ну, их, цифирьки, а?  :) 
# Address or Domain  Error   Retries
# -----------------  -----   -------
*                    *       F,2h,15m; G,16h,1h,1.5; F,4d,6h


# преобразование адресов. У меня такого нету.
begin rewrite
includes/900.authenticators.conf

Код: Выделить всё

# Аутентификация для исходящих сообщений.

# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
auth_plain:
  driver = plaintext
  public_name = PLAIN
  server_condition = ${lookup mysql{SELECT LCASE(`username`) FROM \
                     `mailbox` WHERE `username` = \
                     LCASE('${quote_mysql:$1}') AND `password` = \
                     '${quote_mysql:$2}' AND `active`='1'}{yes}{no}}
  server_prompts = :
  server_set_id = $2

# Вроде по этому оутглюк, а по предыдущему нетскейп.
auth_login:
  driver = plaintext
  public_name = LOGIN
  server_condition = ${lookup mysql{SELECT LCASE(`username`) FROM \
                     `mailbox` WHERE `username` = \
                     LCASE('${quote_mysql:$1}') AND `password` = \
                     '${quote_mysql:$2}' AND `active`='1'}{yes}{no}}
  server_prompts = Username:: : Password::
  server_set_id = $1

# А так авторизуется "Летучая Мышь" - TheBat!
auth_cram_md5:
  driver = cram_md5
  public_name = CRAM-MD5
  server_secret = ${lookup mysql{SELECT `password` FROM \
                        `mailbox` WHERE `username` \
                        = LCASE('${quote_mysql:$1}') AND `active`='1'} \
			{$value}fail}
  server_set_id = $1
====================
базы данных по диалап хостам всяким - допилено не полностью, на чё-то ругается, надо отлаживать.
db/dialup_hosts

Код: Выделить всё

# for test - mx.grand-prix.ru
#^\.*grand\.*

# dialup hosts
^\.*dsl\.*
^\.*dialup\.*
^\.*dialin\.*
^\.*pool\.*
^\.*peer\.*
^\.*dhcp\.*
^\.*dynamic\.*
^\.*cable\.*
^\.*ppp\.*

# expressions for digit in hosts
^\d+[-\.]\d+[-\.]\d+[-\.]
^\d{5,}

# by ded3axap
^.*([1-9]+)\\-([0-9]+)\\-([0-9]+)\\-([1-9]+).*
^.*([1-9]+).([0-9]+).([0-9]+).([1-9]+).*
^.*pool.*
^.*dial.*
^.*dyn.*
^.*ppp.*
^.*fbx.*
^.*cable.*
^.*dsl.*
^.*dynamic.*
^.*fibertel.*
^.*broadband.*
^.*hsd1.*
^.*telecable.*
^.*dhcp.*
^.*kabel.*
^.*client.*
^.*in-addr.*
^.*user.*
^.*cpe.*
^.*tampabay.*
^.*phx1.*
^.*static.*
^.*rev.*
^.*speedy.*
^.*genericrev.*
^.*cdma.*
^.*catv.*
^.*customer.*

# optional - by ded3axap
^.*rima-tde\\.net
^.*comcast\\.net
^.*pppoe\\.mtu-net\\.ru
^.*proxad\\.net
^.*bezeqint\\.net
^.*arcor-ip\\.net
^.*novis\\.pt
^.*rr\\.com
^.*verizon\\.net
^.*chello\\.nl
^.*ono\\.com
^.*t-dialin\\.net
^.*telenet\\.be
^.*virtua.com\\.br
^.*veloxzone.com\\.br
^.*tpnet\\.pl
^.*com\\.au
^.*asianet\\.co\\.th
^.*interbusiness\\.it
^.*webandnetworksolutions\\.com
^.*xtra.co\\.nz
^.*atlanticbb\\.net
^.*sinor\\.ru
^.*tiscali\\.fr
^.*wanadoo\\.fr
^.*pacbell\\.net
^.*prodigy\\.net
^.*charter\\.com
^.*barak-online\\.net
^.*qwest\\.net
^.*cm\\.vtr\\.net
^.*link\\.com\\.eg
^.*t-ipconnect\\.de
^.*mindspring\\.com
^.*telesp\\.net\\.br
^.*home\\.nl
^.*cable\\.ntl\\.com
^.*netvision\\.net\\.il
^.*btcentralplus\\.com
^.*surewest\\.net
^.*anteldata\\.net\\.uy
^.*mm\\.pl
^.*euskaltel\\.es
^.*satnet\\.net
^.*kabelbw\\.de
^.*skylink\\.ru
^.*consumerpcinc\\.com
^.*yourhostingaccount\\.com

Системный фильтр - сразу - урезан больше всего - у меня тут копирование по отделам почты....
filters/system-filter

Код: Выделить всё

logfile /var/log/exim/system-filter.log

############# ELIRON #######################


# проверяем, нет ли вирусов
if $acl_m1 contains "1"
then
    # копируем письма. с вирусами нам не нужны.
    # null - это ситемный аляс на доставку в /dev/null
    # проще указать ящик или выкинуть письмо вообще.
    deliver null
    #no_more
else

# Спам

#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (before)"
# Проверяем содержимое переменной про спам (содержит ли цифры)
if $acl_m0 matches ^\\d+
then
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (after first if)"
        # Строим новую тему письма - если спам
        # Проверяем содержимое переменной со счётчиком спамерских очков.
        # На данный момент считаем - что если 60 и более - это спам.

        # до перезаписи зголовков форвардим спам на спамкоп
#        if $acl_m0 is above 120
 #       then
  #              # копируем письма. с вирусами нам не нужны.
   #             unseen pipe /usr/local/etc/exim/filters/spam.cop.pl
    #            #no_more
     #   endif


        # Добавляем заголовки с объяснением происходящего
        headers add "X-Spam-Description: if spam count > 60 - this is spam"
        headers add "X-Spam-Count: $acl_m0"


        if $acl_m0 is above 59
        then

                headers add "Old-Subject: $h_subject:"
                headers remove "Subject"
                headers add "Subject: (*** SPAM ***) $h_old-subject:"
                headers add "X-Spam: YES"
                # Старый заголовок оставляем, на всякий случай
                #headers remove "Old-Subject"
                logwrite "EXIM FILTER: Spam count = $acl_m0 ; Added SPAM header"

        endif
# Закрытие - содердит цифры
endif
# закрываем проверку на вирусы в письме
endif
=================
таблицы БД следующим постом - в этом окошке уже невозможно редактировать - много букав - ниасилвает, тупит на вставке по минуте
Последний раз редактировалось Alex Keda 2007-03-30 12:31:25, всего редактировалось 6 раз.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-26 10:29:15

база доменов верхнего уровня

Код: Выделить всё

-- phpMyAdmin SQL Dump
-- version 2.9.2
-- http://www.phpmyadmin.net
-- 
-- Хост: localhost
-- Время создания: Фев 26 2007 г., 10:24
-- Версия сервера: 5.0.33
-- Версия PHP: 4.4.4
-- 
-- База данных: `exim`
-- 

-- --------------------------------------------------------

-- 
-- Структура таблицы `list_top_level_domains`
-- 

CREATE TABLE `list_top_level_domains` (
  `unic_id` int(3) NOT NULL auto_increment,
  `zone` varchar(15) collate cp1251_bin NOT NULL default '',
  `description` varchar(64) collate cp1251_bin NOT NULL default '',
  PRIMARY KEY  (`unic_id`),
  UNIQUE KEY `zone` (`zone`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin COMMENT='List all of top-level domains, from http://www.iana.org/' AUTO_INCREMENT=269 ;

-- 
-- Дамп данных таблицы `list_top_level_domains`
-- 

INSERT INTO `list_top_level_domains` VALUES (1, 0x2e6163, 0x417363656e73696f6e2049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (2, 0x2e6164, 0x416e646f727261);
INSERT INTO `list_top_level_domains` VALUES (3, 0x2e6165, 0x556e69746564204172616220456d697261746573);
INSERT INTO `list_top_level_domains` VALUES (4, 0x2e6166, 0x41666768616e697374616e);
INSERT INTO `list_top_level_domains` VALUES (5, 0x2e6167, 0x416e746967756120616e642042617262756461);
INSERT INTO `list_top_level_domains` VALUES (6, 0x2e6169, 0x416e6775696c6c61);
INSERT INTO `list_top_level_domains` VALUES (7, 0x2e616c, 0x416c62616e6961);
INSERT INTO `list_top_level_domains` VALUES (8, 0x2e616d, 0x41726d656e6961);
INSERT INTO `list_top_level_domains` VALUES (9, 0x2e616e, 0x4e65746865726c616e647320416e74696c6c6573);
INSERT INTO `list_top_level_domains` VALUES (10, 0x2e616f, 0x416e676f6c61);
INSERT INTO `list_top_level_domains` VALUES (11, 0x2e6171, 0x416e7461726374696361);
INSERT INTO `list_top_level_domains` VALUES (12, 0x2e6172, 0x417267656e74696e61);
INSERT INTO `list_top_level_domains` VALUES (13, 0x2e6173, 0x416d65726963616e2053616d6f61);
INSERT INTO `list_top_level_domains` VALUES (14, 0x2e6174, 0x41757374726961);
INSERT INTO `list_top_level_domains` VALUES (15, 0x2e6175, 0x4175737472616c6961);
INSERT INTO `list_top_level_domains` VALUES (16, 0x2e6177, 0x4172756261);
INSERT INTO `list_top_level_domains` VALUES (17, 0x2e6178, 0x416c616e642049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (18, 0x2e617a, 0x417a65726261696a616e);
INSERT INTO `list_top_level_domains` VALUES (19, 0x2e6261, 0x426f736e696120616e64204865727a65676f76696e61);
INSERT INTO `list_top_level_domains` VALUES (20, 0x2e6262, 0x4261726261646f73);
INSERT INTO `list_top_level_domains` VALUES (21, 0x2e6264, 0x42616e676c6164657368);
INSERT INTO `list_top_level_domains` VALUES (22, 0x2e6265, 0x42656c6769756d);
INSERT INTO `list_top_level_domains` VALUES (23, 0x2e6266, 0x4275726b696e61204661736f);
INSERT INTO `list_top_level_domains` VALUES (24, 0x2e6267, 0x42756c6761726961);
INSERT INTO `list_top_level_domains` VALUES (25, 0x2e6268, 0x4261687261696e);
INSERT INTO `list_top_level_domains` VALUES (26, 0x2e6269, 0x427572756e6469);
INSERT INTO `list_top_level_domains` VALUES (27, 0x2e626a, 0x42656e696e);
INSERT INTO `list_top_level_domains` VALUES (28, 0x2e626d, 0x4265726d756461);
INSERT INTO `list_top_level_domains` VALUES (29, 0x2e626e, 0x4272756e656920446172757373616c616d);
INSERT INTO `list_top_level_domains` VALUES (30, 0x2e626f, 0x426f6c69766961);
INSERT INTO `list_top_level_domains` VALUES (31, 0x2e6272, 0x4272617a696c);
INSERT INTO `list_top_level_domains` VALUES (32, 0x2e6273, 0x426168616d6173);
INSERT INTO `list_top_level_domains` VALUES (33, 0x2e6274, 0x42687574616e);
INSERT INTO `list_top_level_domains` VALUES (34, 0x2e6276, 0x426f757665742049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (35, 0x2e6277, 0x426f747377616e61);
INSERT INTO `list_top_level_domains` VALUES (36, 0x2e6279, 0x42656c61727573);
INSERT INTO `list_top_level_domains` VALUES (37, 0x2e627a, 0x42656c697a65);
INSERT INTO `list_top_level_domains` VALUES (38, 0x2e6361, 0x43616e616461);
INSERT INTO `list_top_level_domains` VALUES (39, 0x2e6363, 0x436f636f7320284b65656c696e67292049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (40, 0x2e6364, 0x436f6e676f2c205468652044656d6f6372617469632052657075626c6963206f);
INSERT INTO `list_top_level_domains` VALUES (41, 0x2e6366, 0x43656e7472616c204166726963616e2052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (42, 0x2e6367, 0x436f6e676f2c2052657075626c6963206f66);
INSERT INTO `list_top_level_domains` VALUES (43, 0x2e6368, 0x537769747a65726c616e64);
INSERT INTO `list_top_level_domains` VALUES (44, 0x2e6369, 0x436f746520642749766f697265);
INSERT INTO `list_top_level_domains` VALUES (45, 0x2e636b, 0x436f6f6b2049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (46, 0x2e636c, 0x4368696c65);
INSERT INTO `list_top_level_domains` VALUES (47, 0x2e636d, 0x43616d65726f6f6e);
INSERT INTO `list_top_level_domains` VALUES (48, 0x2e636e, 0x4368696e61);
INSERT INTO `list_top_level_domains` VALUES (49, 0x2e636f, 0x436f6c6f6d626961);
INSERT INTO `list_top_level_domains` VALUES (50, 0x2e6372, 0x436f7374612052696361);
INSERT INTO `list_top_level_domains` VALUES (51, 0x2e6375, 0x43756261);
INSERT INTO `list_top_level_domains` VALUES (52, 0x2e6376, 0x43617065205665726465);
INSERT INTO `list_top_level_domains` VALUES (53, 0x2e6378, 0x4368726973746d61732049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (54, 0x2e6379, 0x437970727573);
INSERT INTO `list_top_level_domains` VALUES (55, 0x2e637a, 0x437a6563682052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (56, 0x2e6465, 0x4765726d616e79);
INSERT INTO `list_top_level_domains` VALUES (57, 0x2e646a, 0x446a69626f757469);
INSERT INTO `list_top_level_domains` VALUES (58, 0x2e646b, 0x44656e6d61726b);
INSERT INTO `list_top_level_domains` VALUES (59, 0x2e646d, 0x446f6d696e696361);
INSERT INTO `list_top_level_domains` VALUES (60, 0x2e646f, 0x446f6d696e6963616e2052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (61, 0x2e647a, 0x416c6765726961);
INSERT INTO `list_top_level_domains` VALUES (62, 0x2e6563, 0x45637561646f72);
INSERT INTO `list_top_level_domains` VALUES (63, 0x2e6565, 0x4573746f6e6961);
INSERT INTO `list_top_level_domains` VALUES (64, 0x2e6567, 0x4567797074);
INSERT INTO `list_top_level_domains` VALUES (65, 0x2e6568, 0x5765737465726e20536168617261);
INSERT INTO `list_top_level_domains` VALUES (66, 0x2e6572, 0x45726974726561);
INSERT INTO `list_top_level_domains` VALUES (67, 0x2e6573, 0x537061696e);
INSERT INTO `list_top_level_domains` VALUES (68, 0x2e6574, 0x457468696f706961);
INSERT INTO `list_top_level_domains` VALUES (69, 0x2e6575, 0x4575726f7065616e20556e696f6e);
INSERT INTO `list_top_level_domains` VALUES (70, 0x2e6669, 0x46696e6c616e64);
INSERT INTO `list_top_level_domains` VALUES (71, 0x2e666a, 0x46696a69);
INSERT INTO `list_top_level_domains` VALUES (72, 0x2e666b, 0x46616c6b6c616e642049736c616e647320284d616c76696e617329);
INSERT INTO `list_top_level_domains` VALUES (73, 0x2e666d, 0x4d6963726f6e657369612c2046656465726174656420537461746573206f66);
INSERT INTO `list_top_level_domains` VALUES (74, 0x2e666f, 0x4661726f652049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (75, 0x2e6672, 0x4672616e6365);
INSERT INTO `list_top_level_domains` VALUES (76, 0x2e6761, 0x4761626f6e);
INSERT INTO `list_top_level_domains` VALUES (77, 0x2e6762, 0x556e69746564204b696e67646f6d);
INSERT INTO `list_top_level_domains` VALUES (78, 0x2e6764, 0x4772656e616461);
INSERT INTO `list_top_level_domains` VALUES (79, 0x2e6765, 0x47656f72676961);
INSERT INTO `list_top_level_domains` VALUES (80, 0x2e6766, 0x4672656e636820477569616e61);
INSERT INTO `list_top_level_domains` VALUES (81, 0x2e6767, 0x477565726e736579);
INSERT INTO `list_top_level_domains` VALUES (82, 0x2e6768, 0x4768616e61);
INSERT INTO `list_top_level_domains` VALUES (83, 0x2e6769, 0x47696272616c746172);
INSERT INTO `list_top_level_domains` VALUES (84, 0x2e676c, 0x477265656e6c616e64);
INSERT INTO `list_top_level_domains` VALUES (85, 0x2e676d, 0x47616d626961);
INSERT INTO `list_top_level_domains` VALUES (86, 0x2e676e, 0x4775696e6561);
INSERT INTO `list_top_level_domains` VALUES (87, 0x2e6770, 0x47756164656c6f757065);
INSERT INTO `list_top_level_domains` VALUES (88, 0x2e6771, 0x45717561746f7269616c204775696e6561);
INSERT INTO `list_top_level_domains` VALUES (89, 0x2e6772, 0x477265656365);
INSERT INTO `list_top_level_domains` VALUES (90, 0x2e6773, 0x536f7574682047656f7267696120616e642074686520536f7574682053616e64);
INSERT INTO `list_top_level_domains` VALUES (91, 0x2e6774, 0x47756174656d616c61);
INSERT INTO `list_top_level_domains` VALUES (92, 0x2e6775, 0x4775616d);
INSERT INTO `list_top_level_domains` VALUES (93, 0x2e6777, 0x4775696e65612d426973736175);
INSERT INTO `list_top_level_domains` VALUES (94, 0x2e6779, 0x477579616e61);
INSERT INTO `list_top_level_domains` VALUES (95, 0x2e686b, 0x486f6e67204b6f6e67);
INSERT INTO `list_top_level_domains` VALUES (96, 0x2e686d, 0x486561726420616e64204d63446f6e616c642049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (97, 0x2e686e, 0x486f6e6475726173);
INSERT INTO `list_top_level_domains` VALUES (98, 0x2e6872, 0x43726f617469612f4872766174736b61);
INSERT INTO `list_top_level_domains` VALUES (99, 0x2e6874, 0x4861697469);
INSERT INTO `list_top_level_domains` VALUES (100, 0x2e6875, 0x48756e67617279);
INSERT INTO `list_top_level_domains` VALUES (101, 0x2e6964, 0x496e646f6e65736961);
INSERT INTO `list_top_level_domains` VALUES (102, 0x2e6965, 0x4972656c616e64);
INSERT INTO `list_top_level_domains` VALUES (103, 0x2e696c, 0x49737261656c);
INSERT INTO `list_top_level_domains` VALUES (104, 0x2e696d, 0x49736c65206f66204d616e);
INSERT INTO `list_top_level_domains` VALUES (105, 0x2e696e, 0x496e646961);
INSERT INTO `list_top_level_domains` VALUES (106, 0x2e696f, 0x4272697469736820496e6469616e204f6365616e205465727269746f7279);
INSERT INTO `list_top_level_domains` VALUES (107, 0x2e6971, 0x49726171);
INSERT INTO `list_top_level_domains` VALUES (108, 0x2e6972, 0x4972616e2c2049736c616d69632052657075626c6963206f66);
INSERT INTO `list_top_level_domains` VALUES (109, 0x2e6973, 0x4963656c616e64);
INSERT INTO `list_top_level_domains` VALUES (110, 0x2e6974, 0x4974616c79);
INSERT INTO `list_top_level_domains` VALUES (111, 0x2e6a65, 0x4a6572736579);
INSERT INTO `list_top_level_domains` VALUES (112, 0x2e6a6d, 0x4a616d61696361);
INSERT INTO `list_top_level_domains` VALUES (113, 0x2e6a6f, 0x4a6f7264616e);
INSERT INTO `list_top_level_domains` VALUES (114, 0x2e6a70, 0x4a6170616e);
INSERT INTO `list_top_level_domains` VALUES (115, 0x2e6b65, 0x4b656e7961);
INSERT INTO `list_top_level_domains` VALUES (116, 0x2e6b67, 0x4b797267797a7374616e);
INSERT INTO `list_top_level_domains` VALUES (117, 0x2e6b68, 0x43616d626f646961);
INSERT INTO `list_top_level_domains` VALUES (118, 0x2e6b69, 0x4b69726962617469);
INSERT INTO `list_top_level_domains` VALUES (119, 0x2e6b6d, 0x436f6d6f726f73);
INSERT INTO `list_top_level_domains` VALUES (120, 0x2e6b6e, 0x5361696e74204b6974747320616e64204e65766973);
INSERT INTO `list_top_level_domains` VALUES (121, 0x2e6b70, 0x4b6f7265612c2044656d6f6372617469632050656f706c652773205265707562);
INSERT INTO `list_top_level_domains` VALUES (122, 0x2e6b72, 0x4b6f7265612c2052657075626c6963206f66);
INSERT INTO `list_top_level_domains` VALUES (123, 0x2e6b77, 0x4b7577616974);
INSERT INTO `list_top_level_domains` VALUES (124, 0x2e6b79, 0x4361796d616e2049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (125, 0x2e6b7a, 0x4b617a616b687374616e);
INSERT INTO `list_top_level_domains` VALUES (126, 0x2e6c61, 0x4c616f2050656f706c6527732044656d6f6372617469632052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (127, 0x2e6c62, 0x4c6562616e6f6e);
INSERT INTO `list_top_level_domains` VALUES (128, 0x2e6c63, 0x5361696e74204c75636961);
INSERT INTO `list_top_level_domains` VALUES (129, 0x2e6c69, 0x4c6965636874656e737465696e);
INSERT INTO `list_top_level_domains` VALUES (130, 0x2e6c6b, 0x537269204c616e6b61);
INSERT INTO `list_top_level_domains` VALUES (131, 0x2e6c72, 0x4c696265726961);
INSERT INTO `list_top_level_domains` VALUES (132, 0x2e6c73, 0x4c65736f74686f);
INSERT INTO `list_top_level_domains` VALUES (133, 0x2e6c74, 0x4c69746875616e6961);
INSERT INTO `list_top_level_domains` VALUES (134, 0x2e6c75, 0x4c7578656d626f757267);
INSERT INTO `list_top_level_domains` VALUES (135, 0x2e6c76, 0x4c6174766961);
INSERT INTO `list_top_level_domains` VALUES (136, 0x2e6c79, 0x4c696279616e2041726162204a616d61686972697961);
INSERT INTO `list_top_level_domains` VALUES (137, 0x2e6d61, 0x4d6f726f63636f);
INSERT INTO `list_top_level_domains` VALUES (138, 0x2e6d63, 0x4d6f6e61636f);
INSERT INTO `list_top_level_domains` VALUES (139, 0x2e6d64, 0x4d6f6c646f76612c2052657075626c6963206f66);
INSERT INTO `list_top_level_domains` VALUES (140, 0x2e6d65, 0x4d6f6e74656e6567726f);
INSERT INTO `list_top_level_domains` VALUES (141, 0x2e6d67, 0x4d616461676173636172);
INSERT INTO `list_top_level_domains` VALUES (142, 0x2e6d68, 0x4d61727368616c6c2049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (143, 0x2e6d6b, 0x4d616365646f6e69612c2054686520466f726d6572205975676f736c61762052);
INSERT INTO `list_top_level_domains` VALUES (144, 0x2e6d6c, 0x4d616c69);
INSERT INTO `list_top_level_domains` VALUES (145, 0x2e6d6d, 0x4d79616e6d6172);
INSERT INTO `list_top_level_domains` VALUES (146, 0x2e6d6e, 0x4d6f6e676f6c6961);
INSERT INTO `list_top_level_domains` VALUES (147, 0x2e6d6f, 0x4d6163616f);
INSERT INTO `list_top_level_domains` VALUES (148, 0x2e6d70, 0x4e6f72746865726e204d617269616e612049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (149, 0x2e6d71, 0x4d617274696e69717565);
INSERT INTO `list_top_level_domains` VALUES (150, 0x2e6d72, 0x4d6175726974616e6961);
INSERT INTO `list_top_level_domains` VALUES (151, 0x2e6d73, 0x4d6f6e74736572726174);
INSERT INTO `list_top_level_domains` VALUES (152, 0x2e6d74, 0x4d616c7461);
INSERT INTO `list_top_level_domains` VALUES (153, 0x2e6d75, 0x4d6175726974697573);
INSERT INTO `list_top_level_domains` VALUES (154, 0x2e6d76, 0x4d616c6469766573);
INSERT INTO `list_top_level_domains` VALUES (155, 0x2e6d77, 0x4d616c617769);
INSERT INTO `list_top_level_domains` VALUES (156, 0x2e6d78, 0x4d657869636f);
INSERT INTO `list_top_level_domains` VALUES (157, 0x2e6d79, 0x4d616c6179736961);
INSERT INTO `list_top_level_domains` VALUES (158, 0x2e6d7a, 0x4d6f7a616d6269717565);
INSERT INTO `list_top_level_domains` VALUES (159, 0x2e6e61, 0x4e616d69626961);
INSERT INTO `list_top_level_domains` VALUES (160, 0x2e6e63, 0x4e65772043616c65646f6e6961);
INSERT INTO `list_top_level_domains` VALUES (161, 0x2e6e65, 0x4e69676572);
INSERT INTO `list_top_level_domains` VALUES (162, 0x2e6e66, 0x4e6f72666f6c6b2049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (163, 0x2e6e67, 0x4e696765726961);
INSERT INTO `list_top_level_domains` VALUES (164, 0x2e6e69, 0x4e6963617261677561);
INSERT INTO `list_top_level_domains` VALUES (165, 0x2e6e6c, 0x4e65746865726c616e6473);
INSERT INTO `list_top_level_domains` VALUES (166, 0x2e6e6f, 0x4e6f72776179);
INSERT INTO `list_top_level_domains` VALUES (167, 0x2e6e70, 0x4e6570616c);
INSERT INTO `list_top_level_domains` VALUES (168, 0x2e6e72, 0x4e61757275);
INSERT INTO `list_top_level_domains` VALUES (169, 0x2e6e75, 0x4e697565);
INSERT INTO `list_top_level_domains` VALUES (170, 0x2e6e7a, 0x4e6577205a65616c616e64);
INSERT INTO `list_top_level_domains` VALUES (171, 0x2e6f6d, 0x4f6d616e);
INSERT INTO `list_top_level_domains` VALUES (172, 0x2e7061, 0x50616e616d61);
INSERT INTO `list_top_level_domains` VALUES (173, 0x2e7065, 0x50657275);
INSERT INTO `list_top_level_domains` VALUES (174, 0x2e7066, 0x4672656e636820506f6c796e65736961);
INSERT INTO `list_top_level_domains` VALUES (175, 0x2e7067, 0x5061707561204e6577204775696e6561);
INSERT INTO `list_top_level_domains` VALUES (176, 0x2e7068, 0x5068696c697070696e6573);
INSERT INTO `list_top_level_domains` VALUES (177, 0x2e706b, 0x50616b697374616e);
INSERT INTO `list_top_level_domains` VALUES (178, 0x2e706c, 0x506f6c616e64);
INSERT INTO `list_top_level_domains` VALUES (179, 0x2e706d, 0x5361696e742050696572726520616e64204d697175656c6f6e);
INSERT INTO `list_top_level_domains` VALUES (180, 0x2e706e, 0x506974636169726e2049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (181, 0x2e7072, 0x50756572746f205269636f);
INSERT INTO `list_top_level_domains` VALUES (182, 0x2e7073, 0x50616c657374696e69616e205465727269746f72792c204f63637570696564);
INSERT INTO `list_top_level_domains` VALUES (183, 0x2e7074, 0x506f72747567616c);
INSERT INTO `list_top_level_domains` VALUES (184, 0x2e7077, 0x50616c6175);
INSERT INTO `list_top_level_domains` VALUES (185, 0x2e7079, 0x5061726167756179);
INSERT INTO `list_top_level_domains` VALUES (186, 0x2e7161, 0x5161746172);
INSERT INTO `list_top_level_domains` VALUES (187, 0x2e7265, 0x5265756e696f6e2049736c616e64);
INSERT INTO `list_top_level_domains` VALUES (188, 0x2e726f, 0x526f6d616e6961);
INSERT INTO `list_top_level_domains` VALUES (189, 0x2e7273, 0x536572626961);
INSERT INTO `list_top_level_domains` VALUES (190, 0x2e7275, 0x5275737369616e2046656465726174696f6e);
INSERT INTO `list_top_level_domains` VALUES (191, 0x2e7277, 0x5277616e6461);
INSERT INTO `list_top_level_domains` VALUES (192, 0x2e7361, 0x536175646920417261626961);
INSERT INTO `list_top_level_domains` VALUES (193, 0x2e7362, 0x536f6c6f6d6f6e2049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (194, 0x2e7363, 0x5365796368656c6c6573);
INSERT INTO `list_top_level_domains` VALUES (195, 0x2e7364, 0x537564616e);
INSERT INTO `list_top_level_domains` VALUES (196, 0x2e7365, 0x53776564656e);
INSERT INTO `list_top_level_domains` VALUES (197, 0x2e7367, 0x53696e6761706f7265);
INSERT INTO `list_top_level_domains` VALUES (198, 0x2e7368, 0x5361696e742048656c656e61);
INSERT INTO `list_top_level_domains` VALUES (199, 0x2e7369, 0x536c6f76656e6961);
INSERT INTO `list_top_level_domains` VALUES (200, 0x2e736a, 0x5376616c6261726420616e64204a616e204d6179656e2049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (201, 0x2e736b, 0x536c6f76616b2052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (202, 0x2e736c, 0x536965727261204c656f6e65);
INSERT INTO `list_top_level_domains` VALUES (203, 0x2e736d, 0x53616e204d6172696e6f);
INSERT INTO `list_top_level_domains` VALUES (204, 0x2e736e, 0x53656e6567616c);
INSERT INTO `list_top_level_domains` VALUES (205, 0x2e736f, 0x536f6d616c6961);
INSERT INTO `list_top_level_domains` VALUES (206, 0x2e7372, 0x537572696e616d65);
INSERT INTO `list_top_level_domains` VALUES (207, 0x2e7374, 0x53616f20546f6d6520616e64205072696e63697065);
INSERT INTO `list_top_level_domains` VALUES (208, 0x2e7375, 0x536f7669657420556e696f6e20286265696e6720706861736564206f757429);
INSERT INTO `list_top_level_domains` VALUES (209, 0x2e7376, 0x456c2053616c7661646f72);
INSERT INTO `list_top_level_domains` VALUES (210, 0x2e7379, 0x53797269616e20417261622052657075626c6963);
INSERT INTO `list_top_level_domains` VALUES (211, 0x2e737a, 0x5377617a696c616e64);
INSERT INTO `list_top_level_domains` VALUES (212, 0x2e7463, 0x5475726b7320616e6420436169636f732049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (213, 0x2e7464, 0x43686164);
INSERT INTO `list_top_level_domains` VALUES (214, 0x2e7466, 0x4672656e636820536f75746865726e205465727269746f72696573);
INSERT INTO `list_top_level_domains` VALUES (215, 0x2e7467, 0x546f676f);
INSERT INTO `list_top_level_domains` VALUES (216, 0x2e7468, 0x546861696c616e64);
INSERT INTO `list_top_level_domains` VALUES (217, 0x2e746a, 0x54616a696b697374616e);
INSERT INTO `list_top_level_domains` VALUES (218, 0x2e746b, 0x546f6b656c6175);
INSERT INTO `list_top_level_domains` VALUES (219, 0x2e746c, 0x54696d6f722d4c65737465);
INSERT INTO `list_top_level_domains` VALUES (220, 0x2e746d, 0x5475726b6d656e697374616e);
INSERT INTO `list_top_level_domains` VALUES (221, 0x2e746e, 0x54756e69736961);
INSERT INTO `list_top_level_domains` VALUES (222, 0x2e746f, 0x546f6e6761);
INSERT INTO `list_top_level_domains` VALUES (223, 0x2e7470, 0x456173742054696d6f72);
INSERT INTO `list_top_level_domains` VALUES (224, 0x2e7472, 0x5475726b6579);
INSERT INTO `list_top_level_domains` VALUES (225, 0x2e7474, 0x5472696e6964616420616e6420546f6261676f);
INSERT INTO `list_top_level_domains` VALUES (226, 0x2e7476, 0x547576616c75);
INSERT INTO `list_top_level_domains` VALUES (227, 0x2e7477, 0x54616977616e);
INSERT INTO `list_top_level_domains` VALUES (228, 0x2e747a, 0x54616e7a616e6961);
INSERT INTO `list_top_level_domains` VALUES (229, 0x2e7561, 0x556b7261696e65);
INSERT INTO `list_top_level_domains` VALUES (230, 0x2e7567, 0x5567616e6461);
INSERT INTO `list_top_level_domains` VALUES (231, 0x2e756b, 0x556e69746564204b696e67646f6d);
INSERT INTO `list_top_level_domains` VALUES (232, 0x2e756d, 0x556e6974656420537461746573204d696e6f72204f75746c79696e672049736c);
INSERT INTO `list_top_level_domains` VALUES (233, 0x2e7573, 0x556e6974656420537461746573);
INSERT INTO `list_top_level_domains` VALUES (234, 0x2e7579, 0x55727567756179);
INSERT INTO `list_top_level_domains` VALUES (235, 0x2e757a, 0x557a62656b697374616e);
INSERT INTO `list_top_level_domains` VALUES (236, 0x2e7661, 0x486f6c792053656520285661746963616e204369747920537461746529);
INSERT INTO `list_top_level_domains` VALUES (237, 0x2e7663, 0x5361696e742056696e63656e7420616e6420746865204772656e6164696e6573);
INSERT INTO `list_top_level_domains` VALUES (238, 0x2e7665, 0x56656e657a75656c61);
INSERT INTO `list_top_level_domains` VALUES (239, 0x2e7667, 0x56697267696e2049736c616e64732c2042726974697368);
INSERT INTO `list_top_level_domains` VALUES (240, 0x2e7669, 0x56697267696e2049736c616e64732c2055);
INSERT INTO `list_top_level_domains` VALUES (241, 0x2e766e, 0x566965746e616d);
INSERT INTO `list_top_level_domains` VALUES (242, 0x2e7675, 0x56616e75617475);
INSERT INTO `list_top_level_domains` VALUES (243, 0x2e7766, 0x57616c6c697320616e6420467574756e612049736c616e6473);
INSERT INTO `list_top_level_domains` VALUES (244, 0x2e7773, 0x53616d6f61);
INSERT INTO `list_top_level_domains` VALUES (245, 0x2e7965, 0x59656d656e);
INSERT INTO `list_top_level_domains` VALUES (246, 0x2e7974, 0x4d61796f747465);
INSERT INTO `list_top_level_domains` VALUES (247, 0x2e7975, 0x5975676f736c61766961);
INSERT INTO `list_top_level_domains` VALUES (248, 0x2e7a61, 0x536f75746820416672696361);
INSERT INTO `list_top_level_domains` VALUES (249, 0x2e7a6d, 0x5a616d626961);
INSERT INTO `list_top_level_domains` VALUES (250, 0x2e7a77, 0x5a696d6261627765);
INSERT INTO `list_top_level_domains` VALUES (251, 0x2e636f6d, 0x6f7065726174656420627920566572695369676e20476c6f62616c205265676973747279205365727669636573);
INSERT INTO `list_top_level_domains` VALUES (252, 0x2e6e6574, 0x6f7065726174656420627920566572695369676e20476c6f62616c205265676973747279205365727669636573);
INSERT INTO `list_top_level_domains` VALUES (253, 0x2e62697a, 0x7265737472696374656420746f20627573696e6573736573);
INSERT INTO `list_top_level_domains` VALUES (254, 0x2e6f7267, 0x20696e74656e64656420746f20736572766520746865206e6f6e636f6d6d65726369616c20636f6d6d756e6974792c2062757420616c6c2061726520656c6967);
INSERT INTO `list_top_level_domains` VALUES (255, 0x2e6165726f, 0x726573657276656420666f72206d656d62657273206f6620746865206169722d7472616e73706f727420696e647573747279);
INSERT INTO `list_top_level_domains` VALUES (256, 0x2e636174, 0x726573657276656420666f722074686520436174616c616e206c696e6775697374696320616e642063756c747572616c20636f6d6d756e697479);
INSERT INTO `list_top_level_domains` VALUES (257, 0x2e636f6f70, 0x726573657276656420666f7220636f6f7065726174697665206173736f63696174696f6e73);
INSERT INTO `list_top_level_domains` VALUES (258, 0x2e696e666f, 0x6f70657261746564206279204166696c696173204c696d69746564);
INSERT INTO `list_top_level_domains` VALUES (259, 0x2e6a6f6273, 0x726573657276656420666f722068756d616e207265736f75726365206d616e6167657273);
INSERT INTO `list_top_level_domains` VALUES (260, 0x2e6d6f6269, 0x726573657276656420666f7220636f6e73756d65727320616e642070726f766964657273206f66206d6f62696c652070726f647563747320616e642073657276);
INSERT INTO `list_top_level_domains` VALUES (261, 0x2e6d757a65756d, 0x726573657276656420666f72206d757365756d73);
INSERT INTO `list_top_level_domains` VALUES (262, 0x2e6e616d65, 0x726573657276656420666f7220696e646976696475616c73);
INSERT INTO `list_top_level_domains` VALUES (263, 0x2e70726f, 0x7265737472696374656420746f2063726564656e7469616c65642070726f66657373696f6e616c7320616e642072656c6174656420656e746974696573);
INSERT INTO `list_top_level_domains` VALUES (264, 0x2e74726176656c, 0x726573657276656420666f7220656e7469746965732077686f7365207072696d6172792061726561206f6620616374697669747920697320696e207468652074);
INSERT INTO `list_top_level_domains` VALUES (265, 0x2e656475, 0x726573657276656420666f7220706f73747365636f6e6461727920696e737469747574696f6e73206163637265646974656420627920616e206167656e637920);
INSERT INTO `list_top_level_domains` VALUES (266, 0x2e6d696c, 0x7265736572766564206578636c75736976656c7920666f722074686520556e6974656420537461746573204d696c6974617279);
INSERT INTO `list_top_level_domains` VALUES (267, 0x2e696e74, 0x75736564206f6e6c7920666f72207265676973746572696e67206f7267616e697a6174696f6e732065737461626c697368656420627920696e7465726e617469);
INSERT INTO `list_top_level_domains` VALUES (268, 0x2e676f76, 0x7265736572766564206578636c75736976656c7920666f722074686520556e697465642053746174657320476f7665726e6d656e74);
таблицы для белых доменов

Код: Выделить всё

-- 
-- Структура таблицы `sended_list`
-- 

CREATE TABLE `sended_list` (
  `id` int(32) NOT NULL auto_increment,
  `user_from` varchar(64) collate cp1251_bin NOT NULL,
  `user_to` varchar(64) collate cp1251_bin NOT NULL,
  `added_timestamp` int(32) NOT NULL,
  `last_mail_timestamp` int(32) NOT NULL,
  `mail_count` int(6) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `user_from` (`user_from`,`user_to`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin COMMENT='Таблица белых хостов' AUTO_INCREMENT=0 ;

Код: Выделить всё

-- 
-- Структура таблицы `domain_whitelist`
-- 

CREATE TABLE `domain_whitelist` (
  `id` int(9) NOT NULL auto_increment,
  `domainname` varchar(64) collate cp1251_bin NOT NULL,
  `domain_ip` varchar(16) collate cp1251_bin NOT NULL,
  `added_timestamp` int(32) NOT NULL,
  `last_mail_timestamp` int(32) NOT NULL,
  `mail_count` int(9) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `domainname` (`domainname`,`domain_ip`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin COMMENT='Таблица белых доменов' AUTO_INCREMENT=0 ;
скрипт для обслуживания БД (у меня раз в сутки по крону)

Код: Выделить всё

more /usr/local/scripts/work/delete_from_exim_whitelist.sh
#!/bin/sh

# Дропаем домены в белом списке, которые старше 60 дней. Если переписка всё
# ещё идёт, то в таблице отправленных останутся записи - там дропается
# по дате последней отправки
/usr/local/bin/mysql --user=exim --password=exim --database=exim \
        --execute="DELETE FROM \`domain_whitelist\` WHERE \`added_timestamp\` \
                        < (UNIX_TIMESTAMP() - 60*24*3600)"

# Дропаем из списка отправленных записи которые не обновлялись более 60 дней.
/usr/local/bin/mysql --user=exim --password=exim --database=exim \
        --execute="DELETE FROM \`sended_list\` WHERE \`last_mail_timestamp\` \
                        < (UNIX_TIMESTAMP() - 60*24*3600)"

# Дропаем рикошеты. Чтоб не мешались.
/usr/local/bin/mysql --user=exim --password=exim --database=exim \
        --execute="DELETE FROM \`sended_list\` WHERE \`user_from\` = ''"
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-26 10:33:48

пользователи локальной машины - системные, через /etc/aliases
ну и всё пожалуй :)))
==========
может ещё чё допилить?

P.S. Конфиг как есть - со всеми ошмётками от отладок и комментами - видно что где было и куда пеехало. причины, обычно, тоже указаны...
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-26 13:20:52

ага. первый баг - про локальных юзеров. Поправлены 600 и 700
спасибо неизвестному товарисчу из аськи (имя к сожалению не отобразилось :()
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Непрочитанное сообщение Alex Keda » 2007-02-26 13:46:35

Ещё - таблицы даны не все!!!
даны тока те, которых нет в родном постфиксадминовском дампе.
т.е. отвечающие за спам. Остальные - оттуда!
прочие настройки - в соответсвтии с этим - http://www.lissyara.su/?id=1173
Убей их всех! Бог потом рассортирует...

Qaz
мл. сержант
Сообщения: 113
Зарегистрирован: 2007-02-17 1:24:39
Контактная информация:

Непрочитанное сообщение Qaz » 2007-03-14 16:27:47

Итак...у меня была задача поставить на работе почтовый сервак, и по ряду причин выбрал связку Exim+dovecot с базами в мускуле и с админкой postfixadmin, а тут какраз хорошый человек dikens3 кинул линк на эту статью и взялся переделывать я свои старые конфиги на новые, и в процессе работы у меня возникнуло много всяких траблов связаных с особенностями нужного мне результата и отсутствием знаний, потому хочу привести чуть модифицированные конфиги, авось попадётса еще один такой мозг как я, то какраз заюзает мой конфиг...вот
итак всё начинаетса у нас с файлика configure, у меня он аналогичен приведённому выше, в нём мы инклудим наши розбитые на куски конфиги)
# Главные настройки

# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...


# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mydomain.com

# Вводим данные для подключения к MySQL серверу.

# словечко `hide`, вначале, означает, что при
# вызове проверки конфига командой
# exim -bV config_file эти данные не будут отображаться.
# Если без него - то будут показаны... Формат записи:
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/exim/exim/exim

# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = ${lookup mysql{SELECT LCASE(`domain`) \
FROM `domain` WHERE \
`domain`=LCASE('${quote_mysql:${domain}}') AND \
`active`='1'}} : $primary_hostname : *.mydomain.com

#незнаю насколько коректно то что вверху, и нада ли оно вообще

# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.
domainlist relay_to_domains = ${lookup mysql{SELECT LCASE(`domain`) \
FROM `domain` WHERE \
`domain`=LCASE('${quote_mysql:${domain}}') AND \
`active`='1'}} : *.mydomain.com
##насчёт этой строки тоже не уверен

# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /etc/hosts - результатом было
# непонимание `localhost` но пониманием 127.0.0.1/8
hostlist relay_from_hosts = localhost : 127.0.0.0/8 : 192.168.0.0/24: localhost.mydomain.com
##у меня внесён мой локалхост сюда и подсеть

# Вводим названия acl`ов для проверки почты. (В общем-то, это
# необязательно, если вы делаете открытый релей, или хотите
# принимать вообще всю почту с любого хоста для любых
# получателей... Тока потом не жалуйтесь что у Вас спам
# и провайдер выкатывает немеряный счёт :))
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data

# Прикручиваем антивирус - при условии, что exim собран
# с его поддержкой. В качестве антивиря юзаем ClamAV,
# ибо - ПО должно быть свободным! :)
# Итак, указываем местоположение сокета clamd.
av_scanner = clamd:/var/run/clamav/clamd

# Адрес куда слать на проверку спама (SpamAssasin), но я
# это не юзаю. Не так много у меня спама...
# spamd_address = 127.0.0.1 783

# Имя домена добавляемое для локальных отправителей (реальных
# юзеров системы) т.е. почта отправляемая от root, будет от
# root@домен_указанный_здесь. Если пункт незадан, то используется
# имя хоста из `primary_hostname`. Логичней было бы написать здесь
# lissyara.su, но мне удобней иначе:
qualify_domain = mydomain.com

# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mydomain.com

# А это как раз кусок вышеописанного анахронизма - про почту в
# виде user@[222.222.222.222] - принимать её или нет. По дефолту
# (когда строка закомментирована) значение - false. Если захотите
# поставить true то надо будет добавить в список доменов
# комбинацию @[] - она означает `все локальные адреса`
allow_domain_literals = false

# Пользователь от которого работает exim
exim_user = mailnull

# группа в кторой работает exim
exim_group = mail

# запрещаем работу доставки под юзером root - в целях безопасности
never_users = root

# Проверяем соответствие прямой и обратной зон для всех хостов.
# Тока зачем это нужно - даже и незнаю... Спам на этом не режется...
# Зато возможны проблемы - если сервер зоны скажет `сервер файлед`
# то почту от этого хоста Вы не получите :)
#host_lookup = *

# Тоже анахронизм (на самом деле, не такой уж анахронизм, но все давно
# забили на ident и закрыли файрволлом tcp:113...) Это проверка - Ваш
# хост спрашивает у удалённого, с которого было подключение, а кто
# собстно ко мне подключился на такой-то порт? Если на удалённом хосте
# работает identd - он может ответить (а может и не ответить - как
# настроить), скажет UID пользователя от которого установлено
# соединение, тип ОС, и имя пользователя. Теперь, понимаете, почему
# у всех оно зарублено и файрволлами позакрыто? :) Это же палево :)
# Тока на мой взгляд, если на сервере всё настроено правильно -
# то вовсе это и не страшно.
# Короче - если хостс поставить * то будет проверять все. Таймаут -
# если поставить 0 то не будет ждать ответа ни от кого. По
# вышеописанным причинам - отключаем
#rfc1413_hosts = *
rfc1413_query_timeout = 0s

# По дефолту, экзим отфутболивает все `неквалифицированные` адреса,
# состоящие тока из локальной части. Для того чтобы разрешить такие письма
# определённых хостов используются эти директивы:
# для `неквалифицированных` отправителей
sender_unqualified_hosts = +relay_from_hosts
# для `неквалифицированных` получателей
recipient_unqualified_hosts = +relay_from_hosts

# Интересный пункт, тока я не вполне понимаю его логику.
# Позволяет выполнять что-то типа - пришло сообщение на
# локальный ящик user%test.su@lissyara.su и
# переправляет его на user@test.su. Делается это для
# перечисленного списка доменов (* - все):
# percent_hack_domains = *

# Если сообщение было недоставлено, то генерится соощение
# об ошибке. Если сообщение об ошибке не удалось доставить
# то оно замораживается на указанный в этом пункте срок,
# после чего снова попытка доставить его. При очередной
# неудаче - сообщение удаляется.
ignore_bounce_errors_after = 45m

# Замороженные сообщения, находящиеся в очереди, дольше
# указанного времени удаляются и генерится сообщение
# об ошибке (при условии, что это не было недоставленное
# сообщение об ошибке :))
timeout_frozen_after = 15d

# собсно на этом штатный конфиг кончился, но
# меня-то это не устраивает... Поэтому пошли пункты,
# почёрпнутые из других источников.

# список адресов, через запятую, на которые засылаются
# сообщения о замороженных сообщениях (о замороженых
# уведомлениях о заморозке, сообщения не генерятся. - я
# надеюсь эта строка понятна :))
#freeze_tell = qaz@mydomain.com

# Список хостов, почта от которых принимается, несмотря
# на ошибки в HELO/EHLO (тут указана моя подсеть)
helo_accept_junk_hosts = 192.168.0.0/24

# Через какое время повторять попытку доставки
# замороженного сообщения
auto_thaw = 1h

# Приветствие сервера
smtp_banner = "$primary_hostname, ESMTP EXIM $version_number"

# Максимальное число одновременных подключений по
# SMTP. Рассчитывать надо исходя из нагрузки на сервер
smtp_accept_max = 50

# максимальное число сообщений принимаемое за одно соединение
# от удалённого сервера (или пользователя). C числом 25
# я имел проблемы тока один раз - когда у меня три дня лежал
# инет и после его подъёма попёрли мессаги. Но у меня не так
# много почты - всего 30 пользователей.
smtp_accept_max_per_connection = 25

# чё-то про логи и борьбу с флудом - я так понимаю -
# максимальное число сообщений записываемых в логи
smtp_connect_backlog = 30

# максимальное число коннектов с одного хоста
smtp_accept_max_per_host = 20

# Ход ладьёй - для увеличения производительности,
# директория `spool` внутри, разбивается на
# директории - это ускоряет обработку
split_spool_directory = true

# Если у сообщения много адресатов на удалённых хостах,
# то запускатеся до указанного числа максимально число
# параллельных процессов доставки
remote_max_parallel = 15

# при генерации сообщения об ошибке прикладывать
# не всё сообщение, а кусок (от начала) указанного
# размера (иногда полезно и целиком - в таком случае
# просто закомментируйте эту строку)
return_size_limit = 70k

# размер сообщения. У меня стоит относительно большой
# размер (`относительно` - потому, что на большинстве
# хостов оно ограничено 2-5-10мб, либо стоит анлим.)
message_size_limit = 10M

# разрешаем неположенные символы в HELO (столкнулся
# с этим случайно - имя фирмы состояло из двух слов
# и какой-то раздолбай домен обозвал my_firme_name
# прям с подчёркиваниями... Виндовые клиенты при
# соединении радостно рапортовали о себе
# `vasya.my_firme_name` ну а экзим их футболил :))
helo_allow_chars = _

# Принудительная синхронизация. Если отправитель
# торопится подавать команды, не дождавшись ответа,
# то он посылается далеко и надолго :) Немного,
# спам режется.
smtp_enforce_sync = true

# Выбираем, что мы будем логировать
# + - писать в логи,
# - - Не писать в логи.
# +all_parents - все входящие?
# +connection_reject - разорваные соединения
# +incoming_interface - интерфейс (реально - IP)
# +lost_incoming_connections - потеряные входящие
# соединения
# +received_sender - отправитель
# +received_recipients - получатель
# +smtp_confirmation - подтверждения SMTP?
# +smtp_syntax_error - ошибки синтаксиса SMTP
# +smtp_protocol_error - ошибки протокола SMTP
# -queue_run - работа очереди (замороженные мессаги)
log_selector = \
+all \
# -incoming_port \
# -incoming_interface \
-arguments \
-smtp_connection \
-lost_incoming_connection \
-queue_run \
-received_sender \

# Системный фильтр, копирование проходящей почты
system_filter = /usr/local/etc/exim/filters/system-filter
system_filter_pipe_transport = address_pipe
system_filter_user = mailnull
system_filter_group = mail



# Убираем собственную временную метку exim`a из логов, её ставит
# сам syslogd - нефига дублировать
syslog_timestamp = no
log_file_path = syslog : /var/log/exim/%s-%D.log
в 200ом конфиге у меня только одно различие, когда я прикрутил squirrelmail у меня вылезла такая фигня
Mar 14 15:01:52 fire exim[76506]: H=localhost.mydomain.com (mydomain.com) [127.0.0.1]:60425 I=[127.0.0.1]:25 F=<qaz@mydomain.com> rejected RCPT <evilqaz@gmail.com>: remote host used our name in HELO/EHLO greeting - spam_host.
пришлось отключить там проверку
# Рубаем хело с нашим именем
deny condition = ${if match_domain{$sender_helo_name} \
{$primary_hostname:+local_domains:+relay_to_domains} \
{true}{false}}
message = Message was delivered by ratware - own
log_message = remote host used our name in HELO/EHLO greeting - spam_host.
delay = 30s
300ый конфиг...там всё как у Лиса
400ый конфиг...тут был зарыт самый страшный косяк, у Лиса юзеры аутентифицируютса когда отправляют, у меня отправка без аутентификации и была соответственно задержка, вобщем если вдруг у кого будет такая фигня, у меня это решилось путём
# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.
deny message = "you in blacklist - $dnslist_domain --> $dnslist_text; $dnslist_value"
hosts = !*.mydomain.com : *
delay = 30s
dnslists = dynablock.njabl.org : \
500ый конфиг привожу полностью
# Проверяем тело письма

# Рубаем письма с китайскими сиволами
deny message = "this is spam - denied"
condition = ${if match{$message_body} \
{105[-_]*51[-_]*86|778[-_]*98[-_]*94} \
{yes}{no}}

# складываем мыла с вложеными в них рисунками весом до 25 Кб в спамовый ящик
# как показала практика очень много таких писем спамовых приходит
# эту штуку мне показал Zedik
warn message = "Email contain blacklisted files - $found_extension"
condition = ${if <{$message_size}{25K}}
demime = gif:jpg:jpeg
set acl_m1 = 2

# Рубаем по расширениям
deny message = contains $found_extension file (blacklisted).
demime = com:vbs:bat:pif:scr:exe

# проверяем MIME
deny message = This message contains a MIME error ($demime_reason)
demime = *
condition = ${if >{$demime_errorlevel}{2}{1}{0}}

# Проверяем письмо на вирусы, если есть вирусы у меня они складируютса
# в ящик quarantine@mydomain.com, сделано это потому что некоторые наши
# подразделения присылали почту с макросами в вордовских файлах
# deny malware = *
warn malware = *
logwrite = VIRUS from host $sender_host_name [$sender_host_address]. \
Mail from $sender_address to $local_part@$domain.
set acl_m1 = 1
logwrite = "In e-mail found VIRUS - $malware_name"

# Сообщения с NUL-символами
deny message = This message contains NUL characters
log_message = NUL characters!
condition = ${if >{$body_zerocount}{0}{1}{0}}
# Синтаксис заголовков
# закомменчено - очень много сообщений нормальных рубится...
# deny message = Incorrect headers syntax
# hosts = !+relay_from_hosts:*
# condition = ${if >{$acl_m0}{190}{yes}{no}}
# verify = header_syntax

# проверяем скрытые копии (немногие юзеры пользуются этим, пусть лучше
# отдельными письмами пишут) у тех, у кого уже есть спамерские очки
deny message = Administrative denied 'blind' ('hidden') copy messages
condition = ${if >{$acl_m0}{110}{yes}{no}}
hosts = !+relay_from_hosts:*
verify = not_blind

# Вводим ACL для заполнения таблицы что и куда ходило
# warn condition = ${lookup mysql{INSERT INTO `mail_history` (`to`, `from`, \
# `message_size`,`sending_timestamp`) VALUES \
# ('$recipients', '$sender_address', \
# '$message_size', UNIX_TIMESTAMP())}}

# проверяем нету ли в поле From адреса с которым переписываемся (web интерфейсы
# любят подставлять себя - поэтому тут и изгаляемся.)
warn condition = ${if eq{${lookup mysql{SELECT 1 FROM `sended_list` \
WHERE `user_to` = \
LCASE(SUBSTR('${quote_mysql:$reply_address}', \
POSITION('<' IN '${quote_mysql:$reply_address}') +1, \
POSITION('>' IN '${quote_mysql:$reply_address}') \
- POSITION('<' IN '${quote_mysql:$reply_address}') -1) \
) AND `user_from` \
= LCASE('${quote_mysql:$local_part@$domain}') AND \
`last_mail_timestamp` < `last_mail_timestamp` \
+ (60*24*60*60) LIMIT 1}}}{1}{yes}{no}}
condition = ${lookup mysql{INSERT IGNORE INTO `domain_whitelist` \
(`domainname`, `domain_ip`, `added_timestamp`, \
`last_mail_timestamp`, `mail_count`) \
VALUES (LCASE('${quote_mysql:$sender_address_domain}'), \
'${quote_mysql:$sender_host_address}', \
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), '1') ON \
DUPLICATE KEY UPDATE \
`last_mail_timestamp` = UNIX_TIMESTAMP(), \
`mail_count` = `mail_count` + 1}}
hosts = !+relay_from_hosts : *
set acl_m2 = 1


# Если есть необходимость - тут проверки на спам

# Пропускаем остальное
accept
у меня еще немного изменены конфиги роутеров и транспорта ибо я пыталса прикрутить DSPAM, но поскольку я сам незнаю работает он у меня коректно или нет я их приводить не буду, тем более всё это есть в статье посвященной DSPAM'у на сайте.
Теперь приведу конфиг системного фильтра, он немножко отличаетса от оригинального
logfile /var/log/exim/system-filter.log

############# ELIRON #######################


# проверяем, нет ли вирусов
if $acl_m1 contains "1"
then
# у меня письма с вирусами доставляютса в ящик quarantine@mydomain.com
# null - это ситемный аляс на доставку в /dev/null
# проще указать ящик или выкинуть письмо вообще.
deliver quarantine@mydomain.com
#no_more
else

# Письма с рисунками, у меня они пересылаютса на spam@mydomain.com
# авось какое-то нормальное письмо попадёт туды
if $acl_m1 contains "2"
then
deliver spam@mydomain.com
else
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (before)"
# Проверяем содержимое переменной про спам (содержит ли цифры)
if $acl_m0 matches ^\\d+
then
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (after first if)"
# Строим новую тему письма - если спам
# Проверяем содержимое переменной со счётчиком спамерских очков.
# На данный момент считаем - что если 60 и более - это спам.

# у меня всё что больше 59 пересылаетса на отдельный ящик
# сделано было так потому что некоторые письма у которых был
# спам каунт 170 где-то всёравно юзерам доставлялись, а для меня это критично
# поскольку есть такие которые сидят на модемах и для них время приёма почты
# очень критично, и есть главный узел связи скажим так где сидит человек который
# проверяет почту, если что-то нормальное попадает в спам он уже говорит мне
# к слову скажу что такое случаетса очень редко, как правило письмо у которого
# очков больше 60 спам полюбому
if $acl_m0 is above 59
then
# # копируем письма. с вирусами нам не нужны.
deliver spam@mydomain.com
# #no_more
endif
# Добавляем заголовки с объяснением происходящего
headers add "X-Spam-Description: if spam count > 60 - this is spam"
headers add "X-Spam-Count: $acl_m0"


if $acl_m0 is above 58
then

headers add "Old-Subject: $h_subject:"
headers remove "Subject"
headers add "Subject: (*** SPAM ***) $h_old-subject:"
headers add "X-Spam: YES"
# Старый заголовок оставляем, на всякий случай
#headers remove "Old-Subject"
logwrite "EXIM FILTER: Spam count = $acl_m0 ; Added SPAM header"

endif
# Закрытие - содердит цифры
endif
# закрываем проверку на вирусы в письме
endif
#закрываем пересылку письм с рисунками
endif
ну и последнее это диал ап хосты...это мой первый почтовый сервак который я поставил потому когда смотрел откуда идёт спамовая почта во многом это была Бразилия, Япония, Франция...с которыми у нас уж точно нет контактов, потому в конфиг диал-ап хостов я добавил такое вот:
^.*\\.br
^.*\\.fr
^.*\\.jp
^.*\\.ne\\.jp
^.*\\.uk
^.*\\.sg
^.*\\.us
^.*\\.my
^.*\\.bg
^.*\\.cz
тоесть полностью закрыл от этих доменов почту...впринципе я считаю такое можна сделать любому у кого нет контактов с ними) тем более что почта никуда не денетса а скинетса в spam@mydomain.com

ну вроде и всё...от прошлого админа мне осталса postfix+pop3ad(вроде так называетса не помню) и спама которого приходило очень много...с помощью всех этих действий спама стало в несколько раз меньше и могу даже сказать что в маштабах почты приходящей вообще его практически нет за что честь и хвала многоуважаемому Лису :)
Последний раз редактировалось Qaz 2008-05-12 17:12:29, всего редактировалось 1 раз.

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Непрочитанное сообщение Alex_hha » 2007-05-30 15:33:39

^.*\\.br
...
...
...
^.*\\.cz
так будет более правильно, имхо

\.(br|fr|jp||ne|jp|uk|sg|us|my|bg|cz)$

Qaz
мл. сержант
Сообщения: 113
Зарегистрирован: 2007-02-17 1:24:39
Контактная информация:

Непрочитанное сообщение Qaz » 2007-05-31 14:01:10

exim[57533]: failed to expand "\.{tv|se|ca|nl|cn|au|pt|do|hu|eg|ro|gr|tr|az|dk|br|fr|jp|it|ne|jp|uk|sg|us|my|bg|cz}$" while checking a list: $ not followed by letter, digit, or {

exim[57227]: failed to expand "\.(tv|se|ca|nl|cn|au|pt|do|hu|eg|ro|gr|tr|az|dk|br|fr|jp|it|ne|jp|uk|sg|us|my|bg|cz)$" while checking a list: $ not followed by letter, digit, or {

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Непрочитанное сообщение Alex_hha » 2007-05-31 14:45:51

Я привел пример для pcre, наверное в экзиме немного подругому.

Еще есть несколько замечаний. Довольно таки давно использую postfixadmin в связке с postfix. Сейчас как раз изучаю экзим. Так вот я считаю что два параметра, а именно local_domains и relay_to_domains заданы не совсем верно.

domainlist local_domains = ${lookup mysql{select domain FROM domain WHERE domain='$domain' and active='1' and backupmx='0'}}

domainlist relay_to_domains = ${lookup mysql{select domain FROM domain WHERE domain='$domain' AND active='1' AND backupmx='1'}}

надо учитывать поле backupmx

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Непрочитанное сообщение Alex_hha » 2007-05-31 18:09:42

Из документации к экзиму

The backslash before the $ is needed because string expansion also interprets dollar characters.

По идее так

\\.(br|fr|jp||ne|jp|uk|sg|us|my|bg|cz)\$

Garison
рядовой
Сообщения: 28
Зарегистрирован: 2007-06-14 22:15:26

Непрочитанное сообщение Garison » 2007-06-18 23:33:57

Сделал по конфигу, что привел lissyara :
но теперь в логе дает следушее
"ACL m0 set dafault as 0 for host=garison.msweb [192.168.0.3] with HELO=[192.168.0.3] (domain in e-mail = msweb.no-ip.org)"
2007-06-19 03:04:37 H=garison.msweb [192.168.0.3]:4513 I=[192.168.0.155]:25 F=<ali@msweb.no-ip.org> rejected RCPT <ali@msweb.no-ip.org>
2007-06-19 03:04:37 H=garison.msweb [192.168.0.3]:4513 I=[192.168.0.155]:25 incomplete transaction (RSET) from <ali@msweb.no-ip.org>
2007-06-19 03:04:37 SMTP connection from garison.msweb [192.168.0.3]:4513 I=[192.168.0.155]:25 closed by QUIT
Не могу понять, где режет, шлю системному юзеру, с компа из локалке с компа на сервант.
Ктати эту тему перенести бы в раздел MTA

Alex_hha
лейтенант
Сообщения: 755
Зарегистрирован: 2005-11-06 18:25:26
Контактная информация:

Непрочитанное сообщение Alex_hha » 2007-06-19 9:17:46

У экзима есть одна ОЧЕНЬ замечательная вещь для тестирования

# (echo "EHLO mazda.akko.com.ua" ; echo "MAIL FROM:<alex_hha@mail.ru>" ; echo "RCPT TO:<test@sys-adm.org.ua>" ; echo "QUIT") | exim -d -bhc xxx.xxx.xxx.xxx > test.log 2>&1

и потом смотришь test.log. При этом экзим не надо запускать. ОЧЕНЬ УДОБНО ТЕСТИРОВАТЬ. У постфикса нет ничего подобного.

Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение AlkoGekS » 2007-11-20 10:49:20

В статье про Dovecot нет следующего пункта в дампе базы:

Код: Выделить всё

CREATE TABLE `alias` (
 `address` varchar(255) NOT NULL default '',
 `goto` text NOT NULL,
 `domain` varchar(255) NOT NULL default '',
 `created` datetime NOT NULL default '0000-00-00 00:00:00',
 `modified` datetime NOT NULL default '0000-00-00 00:00:00',
 `active` tinyint(1) NOT NULL default '1',
 `copy_mail` int(1) NOT NULL default '1',
 PRIMARY KEY  (`address`),
 KEY `address` (`address`)
) TYPE=MyISAM COMMENT='Exim and Dovecot Admin - Virtual Aliases';
Конкретнее строчки:

Код: Выделить всё

`copy_mail` int(1) NOT NULL default '1',

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Alex Keda » 2007-11-20 11:59:40

а потому как это наносное :)
Убей их всех! Бог потом рассортирует...

Аватара пользователя
AlkoGekS
сержант
Сообщения: 152
Зарегистрирован: 2007-05-22 11:30:29
Контактная информация:

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение AlkoGekS » 2007-11-22 10:20:56

Лис, толи это косяк, толи я что-то не понимаю:
Файл - includes/200.acl_check_rcpt.conf

Код: Выделить всё

# Проверка получателей
# На данный момент юзается она переменная - $acl_m0 - очки спамерские
  # Вводим переменную acl_m2 - в ней будет счётчик,
  # сколько очков спамерских насчиталось...
  warn   set acl_m0    = 0
  #   logwrite      = "ACL m0 set dafault as $acl_m0 for host=$sender_host_name with HELO=$sender_helo_name
acl_m2
В этом файле мы ее не вводим вообще вроде как.

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Morty » 2007-11-27 16:20:02

взялся на тестовой машине поковырять , первое что ругнулось на SPF...в 300ом конфиге
но это щас поправим - пересоберем экзим
тоесть разница статьи http://www.lissyara.su/?id=1173 и здешнего...Экзим нада собирать с SPF

Код: Выделить всё

WITH_SPF=               yes
в /etc/make.conf в раздел по сборке экзима

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Morty » 2007-11-30 23:41:55

на этих выходных начну тестить связку на боевом серваке
конфиги,бд,скрипты уже перекинул. Пересобрал с СПФ. Сделал поправки на "местный ветер". Правда пока без дспама.
Но впечатления уже, от этой Лисяреной "заточки" Экзима яркие :D
понравились заголовки которые добавляет

Код: Выделить всё

X-Spam-Description: if spam count > 60 - this is spam
и далее -))
на выходных еще посмотрю...докину наверно ДСПам
а в понедельник буду прятаться под лестницей от злых юзерей :mrgreen: :mrgreen:


Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Morty » 2007-12-01 15:33:31

извиняюсь за свою поспешность ...насчет дспама -)
он похоже не нужен будет в этом конфиге.
Этот вариант канечно БОМБА.
Лисяре респект 5 раз :!: :D

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Morty » 2007-12-02 21:48:46

Кому нада для дефолтовых настроек Роундкуба , чтобы оцененый экзимом спам скалдывался в папку СПАМ
700 конфиг

Код: Выделить всё

dovecot_spam_delivery:
  driver = pipe
  command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain -m Junk
т.к у раундкуба по умолчанию папка спам - Junk

Аватара пользователя
Morty
ст. лейтенант
Сообщения: 1370
Зарегистрирован: 2007-07-17 23:25:12

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Morty » 2007-12-21 13:38:08

Лисяра а можно эту статью с форума в раздел Статей перенести ?
Боюсь чтоб "вниз" не ушла...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35145
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: [EXIM + DOVECOT + WHITE LIST] надо статью или не надо?

Непрочитанное сообщение Alex Keda » 2007-12-21 13:43:35

а что в ней такого-то?
белые листы есть в статье про эксчейндж на сайте...
Убей их всех! Бог потом рассортирует...