Это основа, спасибо Ihtiandr.

Fedora Core 4
мой /etc/mail/sendmail.mc
насколько я понимаю, dnl в начале строки обозначает комментарий, но в также он стоит в конце некоторых рабочих опций. что это значит нужно смотреть в инструкции к макропроцессору m4.

divert(-1)dnl
dnl #
dnl # This is the sendmail macro config file for m4. If you make changes to
dnl # /etc/mail/sendmail.mc, you will need to regenerate the
dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is
dnl # installed and then performing a
dnl #
dnl # make -C /etc/mail
dnl #
include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for Red Hat Linux')dnl
OSTYPE(`linux')dnl
dnl #
dnl # default logging level is 9, you might want to set it higher to
dnl # debug the configuration
dnl #
dnl define(`confLOG_LEVEL', `9')dnl
dnl #
dnl # Uncomment and edit the following line if your outgoing mail needs to
dnl # be sent out through an external mail server:
dnl #
dnl define(`SMART_HOST',`smtp.your.provider')
dnl #
define(`confDEF_USER_ID',``8:12'')dnl
dnl define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
dnl #
dnl # The following allows relaying if the user authenticates, and disallows
dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
dnl #
dnl define(`confAUTH_OPTIONS', `A p')dnl
dnl #
dnl # PLAIN is the preferred plaintext authentication method and used by
dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
dnl # use LOGIN. Other mechanisms should be used if the connection is not
dnl # guaranteed secure.
dnl # Please remember that saslauthd needs to be running for AUTH.
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl #
dnl # Rudimentary information on creating certificates for sendmail TLS:
dnl # make -C /usr/share/ssl/certs usage
dnl # or use the included makecert.sh script
dnl #
define(`CERT_DIR',`/etc/mail/certs')
define(`confCACERT_PATH',`CERT_DIR')
define(`confCACERT',`CERT_DIR/cacert.pem')
define(`confSERVER_CERT',`CERT_DIR/cert.pem')
define(`confSERVER_KEY',`CERT_DIR/key.pem')
define(`confCLIENT_CERT',`CERT_DIR/cert.pem')
define(`confCLIENT_KEY',`CERT_DIR/key.pem')


dnl #
dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP's
dnl # slapd, which requires the file to be readble by group ldap
dnl #
dnl define(`confDONT_BLAME_SENDMAIL',`groupreadablekeyfile')dnl
dnl #
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
define(`confTO_IDENT', `0')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl #
dnl # The -t option will retry delivery if e.g. the user runs over his quota.
dnl #
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl-?

#возможно это нужно для обеспечения работы DNSBL
FEATURE(`blacklist_recipients')dnl - ?
EXPOSED_USER(`root')dnl - ?
dnl #
dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for
dnl # mail from MUAs that authenticate. Roaming users who can't reach their
dnl # preferred sendmail daemon due to port 25 being blocked or redirected find
dnl # this useful.
dnl #
dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 465, but
dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed
dnl # by STARTTLS is preferred, but roaming clients using Outlook Express can't
dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
dnl # and doesn't support the deprecated smtps; Evolution <1.1.1 uses smtps
dnl # when SSL is enabled-- STARTTLS support is available in version 1.1.1.
dnl #
dnl # For this to work your OpenSSL certificates must be configured.
dnl #
dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
dnl #
dnl # The following causes sendmail to additionally listen on the IPv6 loopback
dnl # device. Remove the loopback address restriction listen to the network.
dnl #
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')dnl
dnl #
dnl # enable both ipv6 and ipv4 in sendmail:
dnl #
dnl DAEMON_OPTIONS(`Name=MTA-v4, Family=inet, Name=MTA-v6, Family=inet6')
dnl #
dnl # We strongly recommend not accepting unresolvable domains if you want to
dnl # protect yourself from spam. However, the laptop and users on computers
dnl # that do not have 24x7 DNS do need this.
dnl #
dnl FEATURE(`accept_unresolvable_domains')dnl - эту фичу закомментил
dnl #
dnl FEATURE(`relay_based_on_MX')dnl
dnl #
dnl # Also accept email sent to "localhost.localdomain" as local email.
dnl #
LOCAL_DOMAIN(`localhost.localdomain')dnl
dnl #
dnl # The following example makes mail from this host and any additional
dnl # specified domains appear to be sent from mydomain.com
dnl #
dnl MASQUERADE_AS(`mydomain.com')dnl
dnl #
dnl # masquerade not just the headers, but the envelope as well
dnl #
dnl FEATURE(masquerade_envelope)dnl
dnl #
dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
dnl #
dnl FEATURE(masquerade_entire_domain)dnl
dnl #
dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
#это собственно адреса сайтов DNSBL, но реализация от Ihtiandr расширена. чтобы можно было исключить пользователей которых нужно освободить от этой ступени защиты. добавляем FEATURE ('access_db')dnl и FEATURE ('delay_checks','friend')dnl. в /etc/mail/access добавляем пользователей которых осовбождаем. обновляем#/etc/mail/access_db
# cd /etc/mail
# makemap hash access < access
хорошее описание подключения DNSBL в sendmail

и еще

FEATURE(dnsbl, `bl.spamcop.net', `550 Mail from $&{client_addr} rejected - see bl.spamcop.net')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl
FEATURE(dnsbl, `cbl.abuseat.org', `550 Mail from $&{client_addr} rejected - see cbl.abuseat.org')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl
FEATURE(dnsbl, `dnsbl.njabl.org', `550 Mail from $&{client_addr} rejected - see dnsbl.njabl.org')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl
FEATURE(dnsbl, `dnsbl.sorbs.net', `550 Mail from $&{client_addr} rejected - see dnsbl.sorbs.net')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl
FEATURE(dnsbl, `list.dsbl.org', `550 Mail from $&{client_addr} rejected - see list.dsbl.org')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl
FEATURE(dnsbl, `zen.spamhaus.org', `550 Mail from $&{client_addr} rejected - see zen.spamhaus.org')
FEATURE(`access_db')dnl
FEATURE(`delay_checks',`friend')dnl

#Ожидаем 5000ms перед выдачей приглашения, если команды писал спам-бот раньше приглашения, то почту от него принимать не будем.
#точно не ясно. возможно нам звонят снаружи мы откликаемся и говорим что начнем принимать почту через 5000ms . спам бот не ждет это время а сразу пуляет письма а мы не принимаем. а нормальный ждет. также с точки зрения простого пользовтеля который отсылает письмо через наш серевер с помощью Thunderird это выглядит так, что он жмет кнопку отправить после этого идет пауза 5 секунд а потом только письмо начинает отправляться. чтобы этого избежать для пользователей нашей локальной сети нужно прописать эту сеть,сети в /etc/mail/access. с параметром GreetPause.
FEATURE(`delay_checks')dnl
FEATURE(`greet_pause', `5000')dnl


# antiflood
# Ограничим число процессов sendmail. Каждый процесс требует почти 2 мегабайта памяти
define(`confMAX_DAEMON_CHILDREN', `30')dnl


# Это различные таймауты. Бывает спамботы не закрывают соединение сами, тем самым
вызывают перерасход ресурсов, устраним это.
define(`confTO_CONNECT', `30s')dnl
define(`confTO_IDENT', `0')dnl
define(`confTO_COMMAND', `30s')dnl
define(`confTO_DATABLOCK', `2m')dnl
define(`confTO_STARTTLS', `2m')dnl
# Максимальное число коннектов в секунду
define(`confCONNECTION_RATE_THROTTLE', `10')dnl



MAILER(smtp)dnl
MAILER(procmail)dnl

#Прописываем milter-greylist.
INPUT_MAIL_FILTER(`greylist',`S=local:/var/milter-greylist/milter-greylist.sock,F=, T=S:1m;R:1m')dnl
# Различные опции - макросы нужные для работы milter-greylist
define(`confMILTER_MACROS_CONNECT', `j, {if_addr}')
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')
define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')
define(`confMILTER_MACROS_ENVRCPT', `{greylist}')

#Прописываем clamav-milter
#сокет должно совпадать со значением в /etc/sysconfig/clamav-milter
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clamav-milter.sock, F=, T=S:4m;R:4m')dnl

#Подключаем milter-greylist и clamav-milter
#сокет должно совпадать со значением в /etc/mail/greylist.conf
define(`confINPUT_MAIL_FILTERS', `greylist,clmilter')


после изменения sendmail.mc нужно дать команду

#m4 sendmail.mc > sendmaill.cf
так как sendmail реально читает и работает именно с sendmail.cf

на этом этапе может возникать ошибка вид ее не скажу. m4 ругается. происходит если в sendmail.cf используются неправильные кавычки в директивах, опциях . должно быть: первая обратная кавычка вторая замыкающая одинарная. пример
define(`confINPUT_MAIL_FILTERS', `greylist,clmilter')


далее защита против bogus helo. создаем файл /etc/mail/top-level-domain. в /etc/mail/sendmail.cf (внимание НЕ в /etc/mail/sendmail.mc) добавляем кусок. делалось на основе этого. как включить через sendmail.mc неясно, как указано сделать у Ihtiandr не проверял. соответственно данную поправку нужно вносить заново в /etc/mail/sendmail.cf каждый раз как мы поменяли /etc/sendmail.mc и после пересобрали /etc/sendmail.cf c помощью #m4 sendmail.mc > sendmaill.cf

чтобы работали некоторые фичи их поддержка должна быть включена при компиляции sendmail. вот фичи моего sendmail

# sendmail -d0.1
Version 8.13.1
Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS
USERDB USE_LDAP_INIT

============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = aceq7
(canonical domain name) $j = aceq7.narod.ru
(subdomain name) $m = narod.ru
(node name) $k = aceq7.narod.ru
========================================================

приставка milter означает mail-filter посредник между sendmail и другой прогой. milter-clamav - посредник между sendmail и clamav итп.

теперь о настройках Clamav.
при проверке письма на вирусы происходит следующий порядок sendmail -> clamav-milter -> clamd
все стабильно работает с версиями
clamav-db-0.92.1-1.rh9.rf
clamav-0.92.1-1.rh9.rf
clamav-milter-0.92.1-1.rh9.rf
clamd-0.92.1-1.rh9.rf
#clamd -V
ClamAV 0.92.1/8572/Wed Nov 5 15:59:50 2008
c другими соседними версиями Clamav наблюдается зависон после дня-трех дней и далее проверка писем прекращается. в инете внятной причины этого найти не удалось. мое подозрение что это дело связано с обновлением антивирусной базы через freshclam

/etc/clamd.conf

/etc/sysconfig/clamav-milter

в файле /etc/sysconfig/clamav-milter ключ --external обеспечивает что файлы на проверку отсылаются из clamav-milter --> --> в clamd. поэтому служба clamd должна быть запущена.

как проверить что связка clamd-clamav-milter-sendmail работает. посылаем пустое письмо себе и смотрим исходный текст письма. должно появится что то вроде X-virus status clean. но точно сейчас не помню нотификация в теле письма заложена по умолчанию или нужно где то прописать. потом вкладываем тестовый вирус, кстати такие есть в комплекте clamav и смотрим то ли в /var/log/maillog то ли /var/log/clamav/clamd.log то ли в /var/log/messages



настройки milter-greylist
/etc/mail/greylist.conf

экспериментальные данные интервалы когда приходят второе и третье повторные письма с известных mail серверов после отлупа первого
Gmail -17 мин +17мин
mail - 14 мин +14мин
rambler - 5 мин +10мин

sendmail, clamd,milter-greylist clamav все работает под одним пользователем (под одним ли -? уточнить ) возможно это необязательно.


если хотим чтобы письма адресованные одному направлялись нескольким то правим для этого /etc/aliases. после правки даем команду
#newaliases

для справки файлы
/etc/mail/relay-domains
/etc/mail/local-host-names

таким образом должны быть запущены сервисы : sendmail, clamd, clamav-milter, milter-greylist.

попутные полезные и очень полезные источники:
установка clamav + sendmail + freebsd

подключение DNSBL и milter-greylist к sendmail
в этой статье есть строка

# tail -f /var/log/mail.log |perl -p -e 's/Spam/\033\ <--- последний слэш это перенос строки
[46;1mSpam\033[0m/gi;'

у меня выделение с помощью такой команды не сработало. а сработало вот с такой

# tail -f /var/log/maillog |perl -p -e 's/Spam/\033\
[0;46m1mSpam\033[0;38m/gi'

или тоже самое в одну строчку

# tail -f /var/log/maillog | perl -p -e 's/Spam/\033[0;31mSpam\033[0;38m'
про выделение цветами смотри записную книжку вторая страница

установка clamav+sendmail

журнал системный администратор Как работает Sendmail? Полезные подробности Часть 1:

журнал системный администратор Как работает Sendmail? Полезные подробности Часть 2:

журнал системный администратор Как работает Sendmail? Полезные подробности Часть 3:

Компиляция, установка и конфигурация sendmail 8.8.x

включение sasl в sendmail

Clam AntiVirus Milter Setup and Debugging

mimedefang

установка milter-greylist

ClamAV и Spamassasin Postfix

clamav+sendmail-opennet

clamavmilter-opennet

Installing clamav-milter from FreeBSD Ports

greylisting

freebsd+Sendmail: Spamassassin and ClamAV

openbsd+Sendmail+Clamav+Мини-руководство "шаг за шагом"

установка spamassassin в freebsd

freebsd sendmail faq

freebsd How to Filter All Incoming (and/or Outgoing) Mail with procmail

Installing milter-greylist from FreeBSD Ports

Installing the SenderID Milter

freebsd POP-before-SMTP Relay Configuration


далее сменилось доменное имя (скажем box.net, почтовому серверу было выбрано имя mail.box.net и IP=192.168.11.6 ), соответственно нужно было изменить настройки в почтовом сервере. Что от чего зависит отлично описано здесь. :)

по этой же теме Виртуальный хостинг для sendmailно почти не использовал.

В моем случае я не пользуюсь virtusers(он пустой). Почта принимается с одного домена.


Что фактически было сделано.
1. написано письмо хостеру с просьбой изменить mx запись на сервере DNS на
mail.box.net
проверить можно так:
#nslookup - IPDNShostera
>set query=mx
>box.net
...

2. в /etc/mail/Local-host-names прописать box.net

3. в обратной зоне dns у провайдера (а не у хостера) было прописано
192.168.11.6 mail.box.net
чтоб почтовый сервер не причисляли к спамерам у тех у кого включена проверка обратной зоны.

4. /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.11.6 mail.box.net mail

/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mail.box.net

после изменения /etc/sysconfig/network нужно перезагрузить комп иначе sendmail как то не подцепляет изменение даже если перезапустить service network и service sendmail
описание файла /etc/sysconfig/network и кстати про назначениие и других файлов в папке /etc/sysconfig написано в /usr/share/doc/initscripts*/sysconfig.txt. Кстати там написано что HOSTNAME подразумевается fdqn но необязательно.

образец письма в этом случае.
[root@mail ~]# echo ""|mail -s "####" john

[john@mail mail]$ cat /var/spool/mail/john
From root@mail.box.net Fri Jan 9 15:25:22 2009
Return-Path: <root@mail.box.net>
Received: from mail.box.net (localhost.localdomain [127.0.0.1])
by mail.box.net (8.13.4/8.13.4) with ESMTP id n09FPLAS001937
for <john@mail.box.net>; Fri, 9 Jan 2009 15:25:21 GMT
Received: (from root@localhost)
by mail.box.net (8.13.4/8.13.4/Submit) id n09FPLrh001936
for john; Fri, 9 Jan 2009 15:25:21 GMT
Date: Fri, 9 Jan 2009 15:25:21 GMT
From: root <root@mail.box.net>
Message-Id: <200901091525.n09FPLrh001936@mail.box.net>
To: john@mail.box.net
Subject: ####

то есть везде фигурирует только mail.box.net
что пишет /var/log/maillog
#tail -4 /var/log/maillog
Jan 9 15:25:21 mail sendmail[1937]: n09FPLAS001937: from=<root@mail.box.net>, size=289, class=0, nrcpts=1, msgid=<200901091525.n09FPLrh001936@mail.box.net>, proto=ESMTP, daemon=MTA, relay=localhost.localdomain [127.0.0.1]
Jan 9 15:25:21 mail sendmail[1936]: n09FPLrh001936: to=john, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30025, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (n09FPLAS001937 Message accepted for delivery)
Jan 9 15:25:22 mail sendmail[1938]: n09FPLAS001937: to=<john@mail.box.net>, ctladdr=<root@mail.box.net> (0/0), delay=00:00:01, xdelay=00:00:01, mailer=local, pri=30496, dsn=2.0.0, stat=Sent
Jan 9 15:30:12 mail sendmail[1995]: n09FSPfA001995: from=root, size=0, class=0, nrcpts=0, msgid=<200901091528.n09FSPfA001995@mail.box.net>, relay=root@localhost
[root@mail ~]#

что отображает sendmail -d0.1
#sendmail -d0.1
...
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = mail
(canonical domain name) $j = mail.box.net
(subdomain name) $m = box.net
(node name) $k = mail.box.net
========================================================

что пишет hostname
[root@mail ~]# hostname -a
mail
[root@mail ~]# hostname -f
mail.box.net
[root@mail ~]# hostname -d
box.net
[root@mail ~]# hostname -s
mail
[root@mail ~]#




Также подробная,додельная статья по настройке sendmail, но не очень понятная и скучная :(



где то в статье nixp.ru про настройкиу freebsd для linux оида было сказао про ssh . про настройку отмены аутентификации по паролю а только по публичному ключу..
Сайт управляется системой uCoz