|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> почтовые системы
—> exim + exchange
Настройка exim (relay) и M$ exchange (почтарь внутри локалки)
Автор: lissyara.
Предистория. Делалось по заказу одного товарисча, с далёкого Сахалина. Ему нужен был, фактически, просто почтовый релей внутрь локалки, где стоял M$ Exchange. Однако, просто релей с перезаписью адресов - неинтересно. Поэтому, за основу был взят мой текущий конфиг exim+dovecot и допилен под текущие нужды. В частности, ввиду того, что внутри локалки используется адресация user@domain.local, была настроена перезапись адресов, с учётом, что внешних доменов у организации два - один с коротким именем, другой — с длинным (short-dom.ru и long-domain.ru). Отсюда - излишняя, пожалуй, сложность для просто релея.
Разумная критика приветствуется, однако, бред не по теме будет удалён :)
Итак. Исходные данные задачи. Два сервера на FreeBSD6.2, на каждом по два интерфейса - один наружу, другой внутрь. Два - потому, что нужна надёжность. Настройки будут разниться тока в части имён и IP, которые по возможности вынесены в макроопределения в начале конфига. Для проверки существоваания пользователей в домене (цель - генерить отлупы до приёма сообщения, на уровне "rcpt to:" - иначе, они могут пойти по фальшивому обратному адресу), exim будет лазить напрямую в виндовый ldap - для этого заведён специальный пользователь в домене, без права логинитсья.
Для удобства, конфиг почтаря был разбит на несколько кусков, т.к. с одним очень большим стало нереально тяжело работать (особенно на Сахалине, с лагом в две секунды на каждое действие). Была реализована схема с т.н. "белыми списками", подсказанная ded3axap`ом. Реализация, правда не его, моя собственная. Также, с сайта http://www.iana.org/ был утянут список всех доменов верхнего уровня - он используется в проверках HELO - существует ли такой домен (проверка регулярным выражением на синтаксис - всё же не так эффективна).
Итак. Обновляем порты, ставим exim. Для выставления всех опций один раз, и чтоб в дальнейшем не мучаться - как же я его собирал, выставляем нужные опции в /etc/make.conf, у меня он получился такой:
# default MySQL version
DEFAULT_MYSQL_VER=50
# default PHP version
DEFAULT_PHP_VER=4
PORTSDIR?= /usr/ports
.if ${.CURDIR} == ${PORTSDIR}/mail/exim
# Поддержка MySQL
WITH_MYSQL= yes
LOG_FILE_PATH?= syslog
# Контентное сканирование
WITH_CONTENT_SCAN= yes
# Дефолтовая кодировка заголовков
WITH_DEFAULT_CHARSET?= koi8-r
# Отключаем IPv6
WITHOUT_IPV6= yes
# Подрубаем LDAP
WITH_OPENLDAP= yes
# Версия BDB - в чём ведёт свои БД подсказок
WITH_BDB_VER= 1
# Проверки SPF
WITH_SPF= yes
# Подержка перекодировки (для заголовков)
WITH_ICONV= yes
.endif
# for perl5.8
.if ${.CURDIR} == ${PORTSDIR}/lang/perl5.8
WITH_THREADS=yes
.endif
# MySQL server
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
WITH_CHARSET=utf8
WITH_COLLATION=cp1251_bin
#WITH_LINUXTHREADS=yes
WITH_PROC_SCOPE_PTH=yes
.endif
# MySQL client
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
.endif
# vim
.if ${.CURDIR} == ${PORTSDIR}/editors/vim
WITHOUT_X11= yes
.endif
| Соответственно - вовсе не обязательно вносить все пункты, но я решил быть дословным :). После чего, можно ставить exim:
mail$ cd /usr/ports/mail/exim
mail$ make install clean
| И сервер MySQL (exim притащит, как зависимость, лишь клиента) - если он будет стоять на этой машине:
mail$ cd /usr/ports/databases/mysql50-server/
mail$ make install clean
| Собственно - насчёт муси - насколько обязательна версия 5.0 - утверждать не берусь, ибо лень лезть в документацию, но, что в 4.0 отстутствуют функции используемые в конфигурации - это абсолютно точно. Также, не забываем поставить антивирус, я ставил с опциями по-умолчанию:
mail$cd /usr/ports/security/clamav
mail$ make install clean
| Далее - рисуем конфиги. По ним комментариев немного, они и сами неплохо прокоментированы (заодно оставил все старые ошмётки, от процесса их создания - может кому-то пригодятся). Прошу тока обратить внимание на имена файлов, был уже прикол, когда боролись с глюками у одного товарисча, а оказалось что не инклюдятся файлы - и, фактически, он работал на пустом конфиге :).
/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
| /usr/local/etc/exim/includes/100.main.conf:
# Главняе настройки
# моя конфига экзма. Будь проклят тот день,
# когда мне пришла в голову мысль подписать
# русские поясния ко всем пунктам! :) Хоть и
# делал я это в первую очередь для себя -
# чтоб лучше понять его, но работа эта оказалась
# слишком масштабная и неблагодарная...
# Имя хоста. Используется в EHLO.
# Фигурирует в других пунктах, если они не заданы -
# типа qualify_domain и прочих..
# Если тут ничё не установлено (строка закомметрована)
# то используется то, что вернёт функция uname()
primary_hostname = mail.short-dom.ru
# Вводим данные для подключения к MySQL серверу.
# словечко `hide`, вначале, означает, что при
# вызове проверки конфига командой
# exim -bV config_file эти данные не будут отображаться.
# Если без него - то будут показаны... Формат записи:
# хост/имя_бд/пользователь/пароль
hide mysql_servers = localhost/exim_db/exim_user/exim_pass
# Эксчейнджевый домен
MS_EXCHANGE_DOMAIN = long-domain.local
# внутренний IP машины
INTERNAL_IP = 192.168.205.253
# внимание - изменённ дефолтовый разделитель списка!
ldap_default_servers = <; 192.168.205.2:3268
#; dc2.domain.org:3268
# макросы для работы с LDAP
LDAP_AD_BINDDN = exim
LDAP_AD_PASS = pass_user_exim_in_domain
LDAP_AD_BASE_DN = DC=long-domain,DC=local
# макрос для проверки пользователей в домене
LDAP_AD_MAIL_RCPT = \
user=LDAP_AD_BINDDN \
pass=LDAP_AD_PASS \
ldap:///LDAP_AD_BASE_DN?mail?sub?\
(&(|(objectClass=user)(objectClass=publicFolder)(objectClass=group))\
(|(proxyAddresses=${quote_ldap:${local_part}@MS_EXCHANGE_DOMAIN})\
(proxyAddresses=smtp:${quote_ldap:${local_part}@MS_EXCHANGE_DOMAIN}))\
(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
# Делаем список локальных доменов. Далее этот
# список будет фигурировать в виде +local_domains
# В данном случае домены выбираются из БД MySQL. Также
# можно их просто перечислить через двоеточие. Есть интересная
# возможность, можно указать юзер@[хост] - lissyara@[222.222.4.5]
domainlist local_domains = mail.short-dom.ru : relay.long-domain.ru
# делаем список доменов с которых разрешены релеи.
# Далее этот список будет в виде +relay_to_domains
# Можно использовать символы подстановки, типа:
# .... = *.my.domen.su : !spam.my.domen.su : first.su
# тогда пропускается всё, что похоже на *.my.domen.su, но
# от spam.my.domen.su релеится почта не будет.
domainlist relay_to_domains = long-domain.ru : short-dom.ru
# Составляем список хостов с которых разрешён неавторизованый
# релей. Обычно в нём находятся локальные сети, и локалхост...
# ЛокалХост в двух видах был внесён сознательно - пару раз
# сталкивался с кривым файлом /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 = mail.short-dom.ru
# Имя хоста для ситуации, обратной предыдущей, - это имя домена
# добавляемое к почте для системных юзеров, ну и вообще для почты
# пришедшей на адрес типа `root`, `lissyara`, & etc... Если этот
# пункт незадан то используется значение полученное из
# предыдущего пункта - `qualify_domain`
qualify_recipient = mail.short-dom.ru
# A это как раз кусок вышеописанного анахронизма - про почту в
# виде 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
| /usr/local/etc/exim/includes/200.acl_check_rcpt.conf:
# Проверка получателей
# принимать сообщения которые пришли с локалхоста,
# не по 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, 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.
delay = 30s
# Рубаем мудаков с недопустимыми символами в 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}
# Ограничения эксчейнджа - юзер не может начинаться/заканчиваться точкой.
deny message = Invalid address
senders = \N^\.|\.@\N
| /usr/local/etc/exim/includes/300.acl_check_rcpt_spam_rule.conf:
# Проверка на спам - по хосту
# тут оставлено много отладки - раскомментите что надо...
# # Вводим переменную acl_m0 - в ней будет счётчик,
# # сколько очков спамерских насчиталось...
warn set acl_m0 = 0
# logwrite = "ACL m0 set default 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 (на этом правиле огребают очков все
# уродцы с HELO типа 'friends' или 'localhost.localdomain')
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 не соответствует (спасибо dikens3 за наводку)
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"
# Вводим 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
| /usr/local/etc/exim/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
# Задержка. Режется довольно много не-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
# Рубаем тех, кто в блэк-листах. Серваки перебираются
# сверху вниз, если не хост не найден на первом, то
# запрашивается второй, и т.д. Если не найден ни в одном
# из списка - то почта пропускается.
deny message = "you in blacklist - $dnslist_domain --> \
$dnslist_text; $dnslist_value"
hosts = !+relay_from_hosts
dnslists = cbl.abuseat.org : \
dynablock.njabl.org : \
dul.dnsbl.sorbs.net : \
list.dsbl.org : \
sbl-xbl.spamhaus.org
delay = 30s
# для фильтра - устанавливаем переменные (отладка)
# warn set acl_m4 = $sender_address
# set acl_m5 = $local_part@$domain
# проверяем пользователей из файла альясов (системные)
accept domains = +local_domains
verify = recipient
# Проверяем пользователей в эксчейндже
deny domains = +relay_to_domains
message = "Unknown user for this domain"
# изначальное условие проверки юзера было такое. Однако, при письме на
# альяс, ldap возвращал адрес получателя, а не альяс (вполне логично :))
# пришлось использовать match вместо eq (a логичней вообще оставить
# проверку на ротерах а тут verify = recipient)
# condition = ${if !eq{${lookup ldap {LDAP_AD_MAIL_RCPT}}}\
# {${local_part}@MS_EXCHANGE_DOMAIN}{yes}{no}}
condition = ${if !match{${lookup ldap {LDAP_AD_MAIL_RCPT}}}\
{@MS_EXCHANGE_DOMAIN}{yes}{no}}
# accept domains = +relay_to_domains
# endpass
# message = "No route to host... $acl_verify_message"
# verify = recipient
# Разрешаем почту от доменов в списке relay_from_hosts
accept hosts = +relay_from_hosts
# приниаем почту для эксчейнджевых доменов
accept domains = +relay_to_domains
# Если неподошло ни одно правило - чувак явно ищет
# открытый релей. Пшёл прочь. :)
deny message = "Access deny - this not open relay!"
delay = 30s
| /usr/local/etc/exim/includes/500.acl_check_data.conf:
# Проверяем тело письма
# Рубаем по расширениям
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}}
# Синтаксис заголовков
# 2007-02-15: закомменчено - очень много сообщений нормальных рубится...
# 2007-02-28: добавлено условие про очки - стало нормально
# 2007-03-29: условие про очки убрано - всё пучком, я неправильно использовал,
# оно возвращает истину если заголовки корректны...
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
| /usr/local/etc/exim/includes/600.routers.conf:
# Конфигурация роутеров
# роутер для преобразования адресов из внешних во внутренние
conversion_router:
driver = redirect
# data = $local_part@MS_EXCHANGE_DOMAIN
# data = $local_part
data = ${lookup ldap {LDAP_AD_MAIL_RCPT}}
user = mailnull
group = mail
domains = +relay_to_domains
# умный роутер - шлём почту на внутренний эксчейндж (192.168.205.2)
exchange_router:
driver = "manualroute"
domains = MS_EXCHANGE_DOMAIN
# domains = +relay_to_domains
# data = $local_part
transport = remote_smtp
route_list = * 192.168.205.2
no_more
# Поиск маршрута к хосту в 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
data = ${lookup{$local_part}lsearch{/etc/aliases}}
user = mailnull
group = mail
file_transport = address_file
pipe_transport = address_pipe
allow_fail
allow_defer
# локальные пользователи
localuser:
driver = accept
check_local_user
transport = local_delivery
cannot_route_message = Unknown user
| /usr/local/etc/exim/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}}
# локальная доставка
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
| /usr/local/etc/exim/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
# основное правило перезаписи - внутренний на внешний домены
# однако, при отсылке внутри тоже пеерзаписывает, после
# обработки эксчейнджевым роутером.... Посему - извращаемся
*@MS_EXCHANGE_DOMAIN "${if eq{$interface_address}{INTERNAL_IP}\
{$1@long-domain.ru}fail}"
#*@MS_EXCHANGE_DOMAIN "${if or !}"
#*@MS_EXCHANGE_DOMAIN $1@long-domain.ru
*@short-dom.ru $1@long-domain.ru
| /usr/local/etc/exim/includes/900.authenticators.conf:
# Аутентификация для исходящих сообщений.
# А вот по какому методу авторизуется оутглюк - я уже и
# не помню... Хотя в своё время долго ковырялся,
# пока настроил... Толь plain, толь login...
#auth_plain:
# driver = plaintext
# public_name = PLAIN
# server_condition = ${lookup mysql{SELECT `username` FROM \
# `mailbox` WHERE `username` = \
# '${quote_mysql:$auth2}' AND `password` = \
# '${quote_mysql:$auth3}'}{yes}{no}}
# server_prompts = :
# server_set_id = $auth2
# Вроде по этому оутглюк, а по предыдущему нетскейп.
#auth_login:
# driver = plaintext
# public_name = LOGIN
# server_condition = ${lookup mysql{SELECT `username` FROM \
# `mailbox` WHERE `username` = \
# '${quote_mysql:$auth1}' AND `password` = \
# '${quote_mysql:$auth2}'}{yes}{no}}
# server_prompts = Username:: : Password::
# server_set_id = $auth1
# А так авторизуется "Летучая Мышь" - TheBat!
#auth_cram_md5:
# driver = cram_md5
# public_name = CRAM-MD5
# server_secret = ${lookup mysql{SELECT `password` FROM \
# `mailbox` WHERE `username` \
# = '${quote_mysql:$auth1}'}{$value}fail}
# server_set_id = $auth2
#
| /usr/local/etc/exim/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
| /usr/local/etc/exim/filters/system-filter:
logfile /var/log/exim/system-filter.log
# проверяем, нет ли вирусов
if $acl_m1 contains "1"
then
# копируем письма. с вирусами нам не нужны.
deliver viruses@eliron.ru
#no_more
else
# Спам
#logwrite "EXIM FILTER: debug - digit in variable acl_m0 = $acl_m0 (before)"
# Проверяем содержимое переменной про спам (содержит ли цифры)
if $acl_m0 matches ^\\d+
then
#logwrite "FILTER: debug - digit in variable acl_m0 = $acl_m0 (after first if)"
# Строим новую тему письма - если спам
# Проверяем содержимое переменной со счётчиком спамерских очков.
# На данный момент считаем - что если 60 и более - это спам.
# Добавляем заголовки с объяснением происходящего
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
#logwrite "EXIM FILTER: interface_address = $interface_address"
# перезапись заголовков, которые не окучены штатно - exim`ом
if $interface_address is INTERNAL_IP
then
headers add \
"Old-Disposition-Notification-To: $h_Disposition-Notification-To:"
headers add "Old-Return-Receipt-To: $h_Return-Receipt-To:"
headers remove "Disposition-Notification-To"
headers remove "Return-Receipt-To"
headers add "Disposition-Notification-To: <$sender_address>"
headers add "Return-Receipt-To: <$sender_address>"
logwrite "EXIM FILTER: heders rewritten in filter"
endif
# закрываем проверку на вирусы в письме
endif
| Теперь, нужно создать БД в MySQL, согласно приложенному дампу:
Дамп таблиц для exim`a
|
файл
|
скачан
|
размер
|
размещён
|
примечание
|
|
2533
|
35.2kb
|
2007-05-30
|
БД для exim`a - списки доменов верхнего уровня, таблицы для ведения т.н. "Белых списков" - доменов ск оторыми юзеры переписываются.
|
|
Также, создаём такой скриптик:
more /usr/local/scripts/work/delete_from_exim_whitelist.sh
#!/bin/sh
# Дропаем домены в белом списке, которые старше 60 дней. Если переписка всё
# ещё идёт, то в таблице отправленных останутся записи - там дропается
# по дате последней отправки
/usr/local/bin/mysql --user=exim_user --password=exim_pass --database=exim_db \
--execute="DELETE FROM \`domain_whitelist\` WHERE \`added_timestamp\` \
< (UNIX_TIMESTAMP() - 60*24*3600)"
# Дропаем из списка отправленных записи которые не обновлялись более 60 дней.
/usr/local/bin/mysql --user=exim_user --password=exim_pass --database=exim_db \
--execute="DELETE FROM \`sended_list\` WHERE \`last_mail_timestamp\` \
< (UNIX_TIMESTAMP() - 60*24*3600)"
# Дропаем рикошеты. Чтоб не мешались.
/usr/local/bin/mysql --user=exim_user --password=exim_pass --database=exim_db \
--execute="DELETE FROM \`sended_list\` WHERE \`user_from\` = ''"
| И пихаем его в крон - чтобы выполнялся раз в сутки - или чаще - как угодно. После чего можно всё запускать. Должно работать.
Про часть касающуюся эксчейнджа - ничё сказать не могу, не настраивал, тока знаю, что через коннектор настроена отправка через фряху, почты идущей наружу.
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?t=8490.
размещено: 2007-05-30,
последнее обновление: 2008-06-24,
автор: lissyara
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
2010-03-01, BlackCat
Шлюз: Часть 2
Конфигурация МСЭ pf для проброса портов с изменением порта назначения и без, а так же поддержки активного режима FTP и ограничения максимального размера сегмента
2010-03-01, BlackCat
Шлюз: Часть 1
Быстрая настройка шлюза/маршрутизатора с установлением PPPoE-соединения, поддержкой NAT и DNS-forwarding.
2010-02-23, Morty
darkstat
Простая считалка траффика, со встроенным веб-сервером. Очень маленькая, может делать отчеты трафика по хостам, портам, протоколам, а также строить графики
2010-01-23, gonzo111
squid+sams+sqstat
Пилим squid и sams - примеры конфигов с объяснениями. Установка SqStat.
2009-12-19, schizoid
mpd5 + radius + ng_car + Abills
Настройка pppoe-сервера с биллинговой системой Abills и шейпером ng_car
2009-11-16, lissyara
UFS->ZFS
Удалённая миграция с UFS на ZFS. Загрузка с раздела zfs. Настройка для работы с малым количеством памяти под архитектурой i386.
2009-11-13, gx_ua
fusefs-ntfs
Установка, настройка и использование fusefs-ntfs, драйвер NTFS, предназанченного для монтирования NTFS разделов под FreeBSD
2009-11-12, Morty
LiveCD
Создание собственного LiveCD с необходимыми вам изменениями, автоматизирование данного процесса, а так же вариант скоростной сборки СД.
2009-09-27, lissyara
Samba как PDC
Контроллер домена - аналог M$ NT4 домена под самбой, без использования LDAP и прочей хиромантии. Просто и быстро =)
2009-08-30, terminus
ipfw nat
Подробное руководство по ipfw nat, сложные случаи конфигурации.
2009-08-24, levantuev
HotSpot
Установка Hotspot системы в общественное заведение.
2009-08-18, lissyara
diskless
Создание бездисковых терминалов под управлением FreeBSD - с загрузкой по сети. Используются для старта rdesktop и подключения к виндовому серверу терминалов.
2009-07-29, BAV_Lug
Видеонаблюдение
Настройка бюджетного варианта видеонаблюдения на удаленном объекте
2009-07-22, Cancer
OpenLDAP адресная книга
Настройка и создание адресной книги на базе OpenLDAP + phpLDAPadmin
2009-06-30, SergeySL
AimSniff
Руководство по созданию системы мониторинга ICQ-переписки на базе AimSniff, использующей базу данных MySQL для хранения и Web-интерфейс WAS (Web Aim Sniff) для просмотра перехваченных сообщений
2009-06-25, atrium
Управление правами доступа
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX.
2009-06-16, DNK
Exim+PgSQL
Установка почтовой системы exim+pgsql на FreeBSD 7.1
2009-05-30, mvalery
HDD(mbr) -> HDD(gpt)
Как разбить диск размером более 2TB на разделы, сделать загрузочным, а затем перенести на него информацию с рабочей системы — донора.
2009-05-22, Cancer
SendXMPP
Отправка сообщений на Джаббер сервер по средствам SendXMPP
2009-05-11, Raven2000
Network UPS Tools
Network UPS Tools представляет собой набор программ, которые обеспечивают общий
интерфейс для мониторинга и администрирование UPS оборудования.
2009-04-29, m0ps
IPSEC over GRE with RIP
Пример IPSEC over GRE и динамическим роутингом (RIP), с ADSL в качестве последней мили на оборудовании Cisco.
2009-04-24, WhiteBear777
qemu network
Появилась необходимость поставить на БСД эмулятор(qemu) и настроить в качестве гостевой ОС Windows XP, предоставив ей выход в локалку и в сеть internet...
2009-04-22, vp
freebsd + huawei 162 gsm modem
В статье описывается простой способ подключения модема huawei 162 к freebsd + первичная настройка smstools
2009-04-12, mvalery
Мониторинг RAID
Мониторинг из командной строки RAID компаний AMCC 3ware, HighPoint, Dell (Perc 5/i и PERC 6/i) и LSI (MegaRAID SAS 8408E и SAS1078)
2009-04-09, texnotronic
RAID1 via LAN
Функциональности DRBD во FreeBSD можно добиться примонтировав блочное устройство по сети при помощи GEOM Gate (ggate) и добавив его в зеркало с локальным диском средствами gmirror.
2009-04-03, Raven2000
Оптимизация хоста для CMS
В последнее время на старый и не очень быстрый ПК (Celeron 800 RAM 256) мною было навешано с десяток сайтов и некоторые были из серии тяжелых CMS. И так нам дано FreeBSD 7.1 и ~10 сайтов/CMS.
2009-04-01, atrium
VSFTPD + AD && MySQL
Настройка самого безопасного сервера FTP - vsftpd.
2009-03-31, Dron
Peoplenet + C-motech (3G)
Описание подключения к сети Peoplenet посредством 3G модема С-motech CCu-650U на FreeBSD
2009-03-25, lissyara
mod_auth_external
mod_auth_external - авторизация пользователей в apache c помощью внешней программы - например, системных пользователей.
2009-03-24, gx_ua
Lightsquid
Частично lightsquid может заменить sams: быстрая и простая инсталляция, быстрый парсер, cgi скрипт для динамической генерации отчета, нет привязки к БД, различные графические отчеты, мультиязычный инт
2009-03-18, LHC
Установка Zabbix-1.6
Установка и первоначальная настройка системы мониторинга Zabbix (версия 1.6)
2009-03-16, Cancer
Принт-Сервер Samba+LPD & AD
Простейшая настройка Принт-Сервера на FreeBSD используя Samba+LPD & AD
2009-03-04, Mad_caterpillar
ipsec_vpnc
Настройка VPN IPSec концентратора на FreeBSD 6.2 для клиента cisco с использованием ipsec-tools и авторизацией в активной директории
2009-02-18, Andy
Free-SA
Программа анализирует log файлы Squid'а и формирует по ним отчет.
2009-02-02, Cancer
Openfire Jabber Server
Установка Jabber сервера на примере Openfire
2009-01-28, Cancer
mpd5 + сжатие и шифрование
Установка VPN сервера mpd5 + сжатие и шифрование
2009-01-26, vp
freebsd + webcamera
Подключение и настройка вебмкамеры для работы с freebsd на примере Logitech QCam STX
2009-01-10, Grishun_U_S
конфиг для офисов
В статье разбирается конфиг для офиса, пользователи которого имеют строгие ограничения по портам. Заворачиваем www трафик на транспарентный прокси, а остальное NAT'им. Эффективно делим канал интернет
2008-12-27, Storoge
sftp+chroot
Возникла необходимость дать возможность нескольким пользователям заливать на сервер контент для своих сайтов через sftp, чтобы при этом не страдала безопасность.
2008-12-13, Morty
PurefFTPd
Администрирование pureftpd-сервера с помощью вэб интерфейса Usermanager
2008-12-11, lissyara
termlog
Небольшая простая утилита, использующаяся для записи в файл всего что происходит на терминалах системы. Полезно, когда есть доступ по ssh у тех, кому не очень доверяете. Паранойя - это не плохо =)
2008-11-26, Cancer
SQUID+SAMS +Rejik-(ADLDAP)
Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-11-22, dvg_lab
php5-oci8
Решение проблем segmentation fault (core dumped) при работе с oracle8-client и php5-oci8
2008-11-21, m0ps
NTP
Пример настройки NTP сервера для локальной сети и клиента, для синхронизации времени с локальный NTP сервером. Обновление ntpd из портов.
2008-11-20, Cancer
SQUID+SAMS +Rejik-(NTLM)
Установка Прокси сервера SQUID с аутентификацией по NTL с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf, РЕЖИК собственно рубит банеры и запрещает пользователям хо
2008-11-20, UA
Hotspot
Настройка безпроводной точки доступа (WiFi) на freebsd
2008-11-12, Shaman
Enemy Territory
Появилась у меня такое желание поднять сервер Enemy Territory.
Поискал погуглил, ничего толкового не нашел пришлось все самому делать.
И вот решил поделиться опытом. Начинаем......
2008-11-11, lissyara
Samba+ NT ACL
Использование vfs самбы - модули full_audit и recycle. Настройка для использования в качестве файлопомойки с 500+ одновременно работающих юзеров. Раздача прав через нативный виндовый интерфейс.
2008-11-11, Raven2000
Upgrading OpenBSD
Сегодня мы будем обновлять OpenBSD. Систему необходимо поддерживать в актуальном виде и следить, чтобы все работало, как часы и все дырки были залатаны до прихода врага =)
2008-11-10, lexy
SMSTools 3
Как автоматизировать отправку и обработку входящих сообщений при помощи мобильного телефона, датакабеля и компа
2008-11-06, Cancer
Asterisk IP PBX
Установка VoiP сервера Asterisk IP PBX для соединения двух шлюзов и АТС
2008-10-30, atrium
Samba & CUPS & AD & ACL
Настройка Samba в роли доменного файл-сервера, и CUPS в роли принт-сервера для Windows клиентов
2008-10-17, Raven2000
src & ports
Конечно, в OpenBSD система портов никогда не сможет быть полной сравнение с той же системой во FreeBSD. Связано это с тем, что разработчики включают в порты лишь те приложение которые протестированн
2008-10-13, Morty
Mysql - базовое описание
Базовое описание и принципы работы с MySQL
2008-10-10, Cancer
exim&dovecot + fetchmail + SSL
Exim & Dovecot + Postfixadmin & Roundcube + Fetchmail & smtp_relay
С возможностью отправлять письма через смтп релей провайдера.
С использование SSL шифрование: POP3s IMAPs sSMTP
2008-10-09, m0ps
Дополнительные порты для роутера
Увеличение количества Ethernet портов маршрутизатора за счет свободных портов коммутатора пробросив vlan с сабинтерфейса роутера на интерфейс коммутатора.
2008-10-06, princeps
Bacula
Настройка сервера системы резервного копирования Bacula на FreeBSD для бэкапов FreeBSD и Windows машин
2008-10-02, zheromo
Postfix + DBMail
Создание почтовой системы на основе Postfix + DBMail + SASL2 + TLS + DSpam + ClamAV + RoundCubeWebMail
2008-10-02, Cancer
SugarForge CRM
SugarForge CRM предоставляет подавляющее большинство функциональных возможностей CRM систем
2008-09-12, arksu
ng_ipacct + squid
Подсчет трафика с помощью ng_ipacct. Связка ng_ipacct + squid + парсер логов + авторизатор + nginx + mysql и куча служебных скриптов для работы всей системы.
2008-09-03, Raven2000
GLPI
Мне надо было найти замену существующей программы инвентаризации, чтобы за компьютерами, принтерами, картриджами, лицензиями и тп был учет. Желательно с дополнительными бонусами типа системы подачи...
2008-09-03, salimk
POWERDNS
Статья о том как мигрировать с DNS сетвера ISC Bind на POWERDNS
2008-09-03, DNK
Rinetd
Редирект TCP портов с помощью утилиты rinetd - просто до безобразия - само прилодение простое, конфиг в одну строчку - что ещё надо для счастья? =)
2008-09-03, L!Ner
eGroupWare
Это сервер групповой работы. Он укомплектован собственным веб-интерфейсом, который обеспечивает доступ к вашим данным с любой платформы по всей планете.
2008-08-30, jafff
MAC адрес
У девайса VoIP Planet VIP-000 слетел MAC адрес и стал FF-FF-FF-FF-FF-FF, как я его востанавливал
2008-08-30, Morty
clonehdd
Перенесение, бэкапирование HDD,легко и просто
2008-07-31, Raven2000
Proxy Auto Configuration
Возникла необходимость автоматически настраивать прокси для всех компов и не бегать например если поменялось что-то на сервере прокси. Для этого давно существует технология Proxy Auto Configuration.
2008-07-29, f0s
NNTP сервер
Конфигурирование собственного NNTP-сервера.
2008-07-28, Al
spamooborona
настройка yandex spamooborona в качестве smtp-proxy для работы с exim
2008-07-28, Cancer
SQUID+SAMS +Rejik-(NCSA)
Установка Прокси сервера SQUID с красивой мордой SAMS и редиректором REJIK,для учета кто куда ходил + графики в pdf,РЕЖИК собственно рубит банеры и запрещает пользователям ходить на запрещенные сайты,
2008-07-20, Raven2000
Pax
Эта замечательная утилита поставляется с FreeBSD по умолчанию, и она имеет неплохой потенциал.
Можно создавать архивы модифицировать их, а так же живьем переносить всю операционную систему с данными
2008-07-16, Andy2k
BIND & AD
Настройка BIND для обслуживания запросов контроллеров Active Directory. Альтернатива поднятию DNS от Microsoft.
2008-07-16, aleksey.kravchenko
Samba (PDC+BDC)
Поднять главный (офис) и резервный (филиал) контроллер домена на базе Samba и OpenLDAP, организовать синхронизацию и репликацию между ними. Запись в LDAP должена выполняться только на PDC.
2008-07-14, aleksey.kravchenko
OpenVPN + LDAP
Статья о том, как настроить OpenVPN с авторизацией пользователей в OpenLDAP.
2008-07-14, aleksey.kravchenko
ProFTPd + LDAP
ProFTPd с авторизацией пользователей в OpenLDAP
2008-07-13, lissyara
Asus Eee PC
Дали на несколько дней поиграться Asus Eee PC - мелкий ноутбок по смешной цене. Ну, первым делом ставим правильный ОС и смотрим - что из этого получиться.
2008-07-09, terminus
DNS сервер Unbound
Установка и настройка кеширующего DNS сервера Unbound под управлением FreeBSD 7.0
2008-07-08, f0s
mozilla autoconfig
Автонастройка браузера и почты Mozilla Seamonkey пользователям
2008-07-05, lissyara
iftop
Утилита предназначена для мониторинга загрузки канала в режиме реального времени - позволяет видеть кто именно занял полосу. Полезно для организаций с FreeBSD на шлюзовой машине.
2008-07-02, manefesto
snd_hda
Патчим snd_hda для корректной работы с наушниками
2008-06-27, Grishun_U_S
dd : бэкапируем windows
Клонирование разделов windows с помощью загрузочного диска FreeBSD
2008-06-25, terminus
DNS сервер NSD
Установка и настройка авторитарного DNS сервера NSD под управлением FreeBSD 7.0
2008-06-17, Al
NetXtreme BCM5722
Драйвер для сетевой карты NetXtreme BCM5722 Gigabit Ethernet
2008-06-15, tango
Amanda
Установка и настройка сервера резервного копирования Amanda на FreeBSD.
2008-06-12, LMik
Виртуальный свитч
Статья описывает создание виртуального коммутатора для соединения удаленных физических ethernet сетей.
2008-06-08, littlesavage
SiS*Mirage*1 на D201GLY2
Как заставить работать видеоrарту SiS*Mirage*1 на материнской D201GLY2
2008-06-06, nsand
Рыбалка на FreeBSD
Стьатья о том как настроить рыбалку со спутника под FreeBSD
2008-06-06, nsand
TT budget S-1401
Настройка драйвера ttbudget (SkyStar3) под FreeBSD
2008-05-30, Andy2k
NOD32 mirror
Скрипт для создания зеркала обновлений для антивируса NOD. Автоматически ищет нужные логин-пароль для получения обновлений. В теории не требует обслуживания.
2008-05-25, Romzes
метаданные exif
Пример сортировки фотографий сделаных разными фотоаппаратами, с разными названиями, датами создания/модификации. Из под консоли, конечно.
2008-05-23, FenX
svn+apache+trac
Установка связки Apache2.2 + Subversion + Trac (Установка и настройка SVN сервера с доступом к репозиториям по http протоколу)
2008-05-22, Grishun_U_S
простой конфиг PF
В статье разбирается простой конфигурационный файл pf "изнутри можно все"
2008-05-20, KrivoSoft
HAVP
HAVP(HTTP AntiVirus proxy)- работает как http прокси, проверяющий файлики используя LibClamav. В заметке описан процес прикручивания антивируса к уже работающему прокси серверу squid.
2008-05-20, Covax
ALTQ в IPFW
Исполльзование ALTQ вместе с IPFW
2008-05-19, nonalog2007
pppoe
Настройка ADSL-модема для подключения к Интернет.
2008-05-04, Abigor
php + mssql
Настройка php на freebsd для работы с базами в mssql по доменной авторизации.
2008-04-28, serge
i386=>amd64
Рассматриваеться способ удаленной миграции с архитектуры i386 на amd64 на рабочем сервере.
2008-04-24, Mr.Y
Lan over Bluetooth
Статья описывает как используя Bluetooth, объединить две FreeBSD машины в сеть.
2008-04-19, lissyara
WiFi WPA
Подключение FreeBSD к беспроводной WiFi сети с использованием шифрования WPA.
2008-04-18, nikll
nginx+php-fpm+mysql
Статья о настройке мощного веб сервера который не ляжет от хорошей нагрузки.
2008-04-16, nikll
qmail-ldap + AD
Статья о том как я прикрутил qmail к АД win2003 (с упровлением почтовыми аккаунтами через консоль mmc из под винды)
2008-04-14, SHPAk
Приглашение csh/tcsh
Приглашение csh/tcsh не всегда удобно. Здесь описано как помянять оное...
2008-04-07, inspirra
deltup, xdelta, bdelta
Некоторые тонкости создания бинарных патчей. И использование "The dynamic deltup server network" для экономии на обновлениях исходников программ устанавливаемых из портов.
2008-04-02, fr33man
exim + cyrus-imapd
Руководство по настройке почтовой системы на базе OpenBSD-4.2: exim + cyrus-imapd + mysql
2008-03-30, Morty
LiveCD (+restore)
LiveCD, который развернет мне на жёсткий диск готовую настроенную систему
2008-03-25, lissyara
BlueTooth mouse
Краткое повествование о том, как привернуть BlueTooth мышь к FreeBSD. Краткое - потому как делается это с полпинка...
|
Комментарии пользователей [7 шт.]