| 
 | ||
|  | 
	 Постановка задачи
	 Необходимо создать почтовую систему среднего офиса (до 50-100 клиентов) с
	 надежной защитой от вирусов и СПАМа, а также c возможностью безопасного
	 использования из-за пределов корпоративной сети. Самым важным и сложным
	 моментом в рассматриваемой задаче (судя по моему скромному опыту) является
	 избавление от СПАМа, объем которого в последнее время достигает
	 катастрофических значений. Существует масса статей, описывающих различные
	 этапы борьбы со СПАМом. Я пробовал множество вариантов, но ни один из них не
	 устроил меня на 100%. Поэтому пришлось экспериментировать, собирая все по
	 кусочкам. Ниже описана конфигурация почтовой системы, которую мы используем в
	 настоящий момент. Всех все устраивает уже два года, т.к. неожиданные письма
	 появляются крайне редко, хотя менеджеры регулярно публикуют свои адреса на
	 различных общедоступных сайтах.
 	
 	 Исходные данные
 	 Имеется сервер с FreeBSD, находящийся на входе подсети центрального офиса.
 	 В качестве MTA мы будем использовать Postfix. На вопрос: "почему?"
 	 уже много раз отвечали до меня, например в статье Создаем почтовую систему
 	 среднего и малого офиса на основе FreeBSD Postfix + dr.web + popa3d +
 	 pflogsumm. Архитектура Postfix рассмотрена в статье Архитектура, принципы и
 	 теория работы Postfix, диагностика возможных проблем - в статье Postfix: диагностируем и
 	 устраняем неисправности. Кроме Postfix нам понадобится следующее
 	 программное обеспечение: для шифрования SMTP-трафика - OpenSSL;
 	 для аутентификации удаленных SMTP-клиентов - Cyrus-SASL2 +
 	 Cyrus-SASL2-saslauthd; для связи Postfix с системами защиты от
 	 вирусов и СПАМа - Amavisd-New; для защиты от вирусов -
 	 ClamAV; для защиты от СПАМа - SpamAssassin + DCC + Pyzor
 	 + Razor-Agents; для хранения баз данных SpamAssasin -
 	 сервер MySQL (процесс настройки сервера MySQL не
 	 расматривается в данной статье за исключением создания базы данных и
 	 пользователя SpamAssassin); для формирования информативных отчетов (они
 	 нужны сисадминам для разрешения проблем) - pflogsumm; для
 	 формирования красивых отчетов (они нужны руководству для дополнительного
 	 осознания того, что сисадмин не туниядец) - AWStats; для
 	 обеспечения доступа к отчетам - сервер Apache (процесс
 	 настройки сервера Apache не рассматривается в данной статье за исключением
 	 добавления возможности отображения отчетов о работе почтовой системы). Все
 	 перечисленное программное обеспечение будет устанавливаться из портов,
 	 поэтому я настоятельно рекомендую Вам обновить
 	 их перед выполнением действий, описанных ниже (лично я использовал
 	 FreeBSD 4.10 и последние версии портов для нее). Ссылки на источники
 	 информации будут приводиться применительно к конкретным разделам статьи.
 	
 	 Установка и начальная настройка Postfix
 	 Установку Postfix необходимо выполнить из портов:
 	 
 	 cd /usr/ports/mail/postfix
 	 В окне конфигурации, которое появляется в процессе выполнения команды
 	 
 	 make install
 	 
make install, необходимо отметить опции: [X] PCRE Perl
 	 Compatible Regular Expressions, [X] SASL2 Cyrus SASLv2 (Simple
 	 Auth. and Sec. Layer), [X] TLS Enable SSL and TLS
 	 support. Если окно конфигурации не появилось, выполните команду
 	 make config. В самом конце процесса установки Вам будет задан
 	 запрос о замене используемого по умолчанию MTA, на который нужно ответить
 	 утвердительно. Для того, чтобы Postfix запускался при загрузке операционной
 	 системы, необходимо выполнить требование команды make install
 	 - добавить в файл /etc/rc.conf следующие строки:
 	 
	 sendmail_enable="YES"
 	 Файлы конфигурации Postfix хранятся в папке
 	 
sendmail_flags="-bd"
	 sendmail_pidfile="/var/spool/postfix/pid/master.pid"
	 sendmail_procname="/usr/local/libexec/postfix/master"
	 sendmail_outbound_enable="NO"
	 sendmail_submit_enable="NO"
	 sendmail_msp_queue_enable="NO"
	 
/usr/local/etc/postfix. На данном этапе для нас интересны два
 	 файла: main.cf (главный файл конфигурации) и
 	 aliases (файл, описывающий псевдонимы). В файле main.cf
 	 необходимо изменить следующие значения (подробное описание всех опций,
 	 которые можно задать в данном файле, приведено в postconf(5)):
 	 
 	 myhostname = host.domain.com
 	 Естественно, host.domain.com и domain.com нужно заменить на FQDN сервера и
 	 домена, а список my_networks откорректировать в соответствии с конфигурацией
 	 сети. В файле aliases (подробное описание формата данного файла приведено в
 	 aliases(5)) необходимо
 	 задать псевдоним пользователя 
 	 mydomain = domain.com
 	 myorigin = $mydomain
 	 inet_interfaces = all
 	 mydestination = $mydomain
 	 my_networks = 127.0.0.0/8, 192.168.0.0/24
 	 alias_database = hash:/usr/local/etc/postfix/aliases
 	 
root, а затем выполнить команду
 	 newaliases. Не забудьте, что для корректной работы SMTP-сервера
 	 Ваш брандмауэр должен разрешать прохождение TCP-трафика на все нужные адреса
 	 сервера порт 25, поэтому добавьте соответствующие правила, если они
 	 отсутствуют. На этом первичная настройка Postfix заканчивается. Можно
 	 запустить Postfix командой postfix start, посмотреть сообщения,
 	 которые пишутся в /var/log/maillog, и проверить
 	 работоспособность сервера, подключившись к 25 порту локального хоста с
 	 помошью клиента telnet, как описано здесь. Однако,
 	 даже если ошибок нет, расслабляться еще очень рано, т.к. сервер является
 	 достаточно легкой добычей для СПАМеров.
   	
   	 Добавление поддержки аутентификации SMTP
   	 Аутентификация SMTP, функционирование которой описано в документе
   	 RFC-2554, предназначена для разграничения доступа пользователей к
   	 почтовому серверу на основании их учетных данных (имен и паролей).
   	 Мы будем использовать аутентификацию SMTP для авторизации пользователей,
   	 находящихся за пределами доверенных сетей (т.е. сетей, описанных в
   	 параметре my_networks, рассмотренном выше). Для аутентификации
   	 пользователей, имеющих почтовые клиенты, работающие под Windows (такие как
   	 Microsoft Outlook, Microsoft Outlook Express, The Bat! и т.д.), нам
   	 потребуются методы аутентификации LOGIN и PLAIN.
   	 Пароли пользователей мы будем брать из основной базы данных паролей
   	 операционной системы. Для реализации аутентификации SMTP мы будем
   	 использовать Cyrus-SASL2 и Cyrus-SASL2-saslauthd. Действия, описанные в
   	 данном разделе, выполнялись под руководством статьи Postfix SASL + TLS +
   	 FreeBSD howto by Tim Yocum. В первую очередь необходимо установить
   	 Cyrus-SASL2 и Cyrus-SASL2-salauthd из портов:
   	 
   	 cd /usr/ports/security/cyrus-sasl2Все лишние (в смысле не используемые нами) возможности
   	 Cyrus-SASL2 нужно отключить:
   	 
   	 make install
   	 cd ../cyrus-sasl2-saslauthd
   	 make install
   	 
   	 cd /usr/local/lib/sasl2
   	 В папке /usr/local/lib/sasl2 содержится два файла конфигурации
   	 Cyrus-SASL2: 
   	 mkdir deactivated
   	 mv *anonymous* deactivated
   	 mv *crammd5* deactivated
   	 mv *digestmd5* deactivated
   	 mv *ntlm* deactivated
   	 mv *opt* deactivated
   	 mv *sasldb* deactivated
   	 
sendmail.conf (для использования совместно с
   	 Sendmail) и smtpd.conf (для использования совместно с
   	 Postfix). Нас интересует второй, содержимое которого нужно заменить на:
   	 
pwcheck_method: saslauthd
   	 Такое значение параметра 
   	 
pwcheck_method заставляет
   	 Cyrus-SASL2 использовать для аутентификации Cyrus-SASL2-saslauthd. Файл
   	 sendmail.conf можно переместить в папку deactivated. Для того, чтобы
   	 Cyrus-SASL2-saslauthd запускался при загрузке операционной системы и
   	 использовал ее базу данных паролей, необходимо добавить в файл
   	 /etc/rc.conf следующие строки:
   	 
   	 saslauthd_enable="YES"
   	 После настройки Cyrus-SASL2 и Cyrus-SASL2-saslauthd необходимо включить
   	 поддержку SASL2 в файле main.cf:
   	 
   	 saslauthd_flags="-a getpwent"
   	 
   	 smtpd_sasl_auth_enable = yes
   	 Указанные параметры имеют следующие значения:
   	 
   	 smtpd_sasl_security_options = noanonymous
   	 smtpd_sasl_local_domain = $mydomain
   	 broken_sasl_auth_clients = yes
   	 
smtpd_sasl_auth_enable - включение поддержки SASL,
   	 smtpd_sasl_security_options - дополнительные опции SASL (в
   	 нашем случае запрет анонимной аутентификации),
   	 smtpd_sasl_local_domain - доменная часть имени пользователя
   	 (в нашем случае используется имя домена, т.е. при настройке почтовых
   	 клиентов в разделе "Аутентификация SMTP" можно просто
   	 устанавливать опцию "Использовать параметры получения почты
   	 POP3", а не задавать имя пользователя и пароль),
   	 broken_sasl_auth_clients - опция необходима для поддержки
   	 старых версий почтовых клиентов, например Microsoft Outlook Express 4 и
   	 Microsoft Exchange 5, использующих другую форму команды AUTH,
   	 которая описана в документе RFC-4954. На этом добавление поддержки SASL к
   	 Postfix заканчивается (естественно, необходимо откорректировать
   	 соответствующие наборы правил *_restrictions в файле main.cf,
   	 о чем будет сказано ниже). Остается перезапустить Postfix командой
   	 postfix reload и начать пользоваться аутентификацией SMTP.
   	 Однако не стоит торопиться, т.к. аутентификация SMTP максимально
   	 эффективна совместно с TLS-шифрованием трафика.
	
	 Добавление поддержки TLS-шифрования трафика
	 TLS-шифрование трафика предназначено для обеспечения защиты трафика при
	 взаимодействии клиентов, находящихся за пределами доверенных сетей, с нашим
	 сервером, а также при взаимодействии нашего сервера c другими почтовыми
	 серверами. Для TLS-шифрования трафика мы будем использовать функции OpenSSL и
	 самоподписной доверенный сертификат X.509. Действия, описанные в данном
	 разделе, выполнялись под руководством статьи Postfix SASL + TLS +
   	 FreeBSD howto by Tim Yocum. Для создания самоподписного доверенного
   	 сертификата, находясь в каталоге /usr/local/etc/postfix, необходимо
   	 выполнить команду:
   	 
   	 openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 3650
	 Команда 
   	 
req заставляет OpenSSL создать сертификат, ключи:
	 -new - cоздать запрос на сертификат, -nodes - не
	 шифровать закрытый ключ, -x509 (совместно с -new) - создать
	 самоподписной сертификат, -keyout - задает местонахождение
	 закрытого ключа, -out - задает местонахождение самоподписного
	 сертификата, -days - задает время действия сертификата (365x10
	 дней, что приблизительно равно десяти годам). В процессе выполнения команды
	 на экран будут выданы запросы о вводе таких параметров как: Country
	 Name, State or Province Name; Locality Name;
	 Organization Name; Organizational Unit Name;
	 Common Name; Email Address. Самым важным параметром
	 является значение Common Name. В нашем случае оно должно
	 совпадать с FQDN сервера, по которому клиенты будут обращаться к нему для
	 отправки почты. После генерации сертификата необходимо включить поддержку
	 TLS в файле main.cf:
	 
	 smtp_use_tls = yes
	 Указанные параметры имеют следующие значения: 
	 smtpd_use_tls = yes
	 smtpd_tls_auth_only = yes
	 smtp_tls_note_starttls_offer = yes
	 smtpd_tls_key_file = /usr/local/etc/postfix/smtpd.pem
	 smtpd_tls_cert_file = /usr/local/etc/postfix/smtpd.pem
	 smtpd_tls_CAfile = /usr/local/etc/postfix/smtpd.pem
	 smtpd_tls_loglevel = 1
	 smtpd_tls_received_header = yes
	 smtpd_tls_session_cache_timeout = 3600s
	 tls_random_source = dev:/dev/urandom
	 
smtp_use_tls -
	 использовать TLS, если удаленный сервер сообщает о поддержке TLS,
	 smtpd_use_tls - сообщать клиентам о поддержке TLS,
	 smtpd_tls_auth_only - использовать аутентификацию SMTP только
	 для TLS-соединений, smtp_tls_note_starttls_offer - фиксировать в
	 логе имена серверов, выдающих сообщение STARTTLS, поддержка TLS
	 для которых не включена, smtpd_tls_key_file - местонахождение
	 закрытого ключа сервера, smtpd_tls_cert_file - местонахождение
	 сертификата сервера, smtpd_tls_CAfile - местонахождение
	 самоподписного доверенного сертификата, smtpd_tls_loglevel -
	 детальность сообщений о TLS-активности, выводимых в лог,
	 smtpd_tls_received_header - запрашивать заголовки сообщений с
	 информацией о версии протокола и алгоритме шифрования,
	 smtpd_tls_session_cache_timeout - время, в течение которого
	 данные в кэше TLS-сессии считаются актуальными,
	 tls_random_source - имя устройства-генератора псевдослучайных
	 чисел (PRNG). Для того, чтобы Postfix принимал TLS-соединения на специальный
	 порт (465/SMTPS, а не 25/SMTP), в файле
	 /usr/local/etc/postfix/master.cf необходимо раскомментировать
	 строки:
	 
	 smtps inet n - n - - smtpd
	 Не забудьте, что Ваш брандмауэр должен разрешать прохождение TCP-трафика на
	 адреса нужных интерфейсов сервера порт 465, поэтому добавьте соответствующие
	 правила, если они отсутствуют. На этом добавление поддержки TLS-шифрования
	 трафика к Postfix заканчивается. Остается перезапустить Postfix и начать
	 пользоваться аутентификацией SMTP и TLS-шифрованием трафика.
	
  -o smtpd_tls_wrappermode=yes
	   -o smtpd_sasl_auth_enable=yes
	 
	 Защита от вирусов и СПАМа средствами Postfix
	 Средства защиты от вирусов и СПАМа, встроенные в Postfix, описаны в документе
	 Postfix SMTP relay
	 and access control. Я также рекомендую Вам обратиться к подразделу
	 "UCE/Virus" раздела
	 "Howtos and FAQs" официального сайта Postfix и внимательно
	 почитать статьи, которые OpenNET выдаст
	 по запросу "postfix spam". Я предлагаю достаточно жесткую политику
	 защиты от вирусов и СПАМа, которая не исключает потерю некоторых валидных
	 сообщений, отправленных с некорректно настроенных серверов, которых в России
	 достаточно много. В первый месяц использования описанной конфигурации Вам
	 придется внимательно анализировать логи, генерируемые pflogsumm. Затем иногда
	 нужно будет вручную обновлять содержимое соответствующих файлов (этот момент
	 подробно описан ниже). Некоторые могут не согласиться с таким подходом.
	 Выбирать Вам. Лично мне проще добавить одну-две строки за месяц, чем
	 ежедневно выгребать кучи СПАМа из пользовательских почтовых ящиков.
	 На этом философия заканчивается, и я перехожу к описанию настроек. Внимание,
	 все файлы, описанные в данном разделе, должны находиться в папке 
	 /usr/local/etc/postfix, также в эту папку необходимо переходить перед
	 выполнением любой из описанных в данном разделе команд. Изменение любого из
	 параметров, задаваемых в файле main.cf вступает в силу только после
	 перезапуска Postfix. В отдельно отмеченных случаях перезапуску должно
	 предшествовать выполнение команды postmap.
Начинаем с
	 изменения файла main.cf. В первую очередь необходимо ограничить максимальный
	 размер почтовых ящиков и сообщений значениями 50 МБайт и 10 МБайт (мне
	 кажется, что эти цифры более чем достаточны):
	 
	 mailbox_size_limit = 52428800
	 Затем необходимо изменить коды ответов сервера об ошибках доставки сообщений,
	 чтобы ПО СПАМера имело меньше шансов адекватного анализа причин невозможности
	 доставки сообщений:
	 
	 message_size_limit = 10485760
	 
	 invalid_hostname_reject_code = 550Затем необходимо запретить использование адресов, отличных от
	 определенных в документе RFC-821, запретить использование команды
	 
	 non_fqdn_reject_code = 550
	 unknown_address_reject_code = 550
	 unknown_client_reject_code = 550
	 unknown_hostname_reject_code = 550
	 unverified_recipient_reject_code = 550
	 unverified_sender_reject_code = 550
	 
VRFY и потребовать обязательное использование команды
	 HELO/EHLO:
	 
	 strict_rfc821_envelopes = yesДалее следует очень важный параметр
	 
	 disable_vrfy_command = yes
	 smtpd_helo_required = yes
	 
smtpd_delay_reject. Я настоятельно рекомендую не изменять его
	 значение по умолчанию (yes). В противном случае сеанс связи с
	 почтовым сервером будет обрываться при срабатывании первого из ограничений,
	 под которое попал клиент, и Вы даже не узнаете о потере возможно валидных
	 сообщений и, соответственно, не сможете оперативно изменить настройки для их
	 беспрепятственной доставки.
 В связи с использованием отложенной
	 обработки ограничений можно поместить все ограничения доступа к почтовому
	 серверу на этапах установки соединения, получения команд
	 HELO/EHLO и MAIL FROM в раздел, описывающий
	 ограничения доступа на этапе получения команды RCPT TO, оставив
	 пустыми остальные из перечисленных разделов:
	 
	 smtpd_client_restrictions =
	 Указанные ограничения доступа имеют следующие значения:
	 
	 smtpd_helo_restrictions = 
	 smtpd_sender_restrictions =
	 smtpd_recipient_restrictions =
	   permit_mynetworks,
	   permit_sasl_authenticated,
	   reject_unauth_destination,
	   reject_unauth_pipelining,
	   check_client_access hash:/usr/local/etc/postfix/access_client,
	   check_client_access pcre:/usr/local/etc/postfix/access_client.pcre,
	   reject_unknown_client_hostname,
	   check_helo_access hash:/usr/local/etc/postfix/access_helo,
	   reject_invalid_helo_hostname,
	   reject_non_fqdn_helo_hostname,
	   reject_unknown_helo_hostname,
	   check_sender_access hash:/usr/local/etc/postfix/access_sender,
	   reject_non_fqdn_sender,
	   reject_unknown_sender_domain,
	   reject_unverified_sender,
 	   reject_non_fqdn_recipient,
	   reject_unknown_recipient_domain,
	   reject_unverified_recipient,
	   reject_rbl_client cbl.abuseat.org,
	   reject_rbl_client combined.njabl.org,
	   reject_rbl_client dnsbl.njabl.org,
	   reject_rbl_client dul.ru,
	   reject_rbl_client dynablock.njabl.org,
	   reject_rbl_client opm.blitzed.org,
	   reject_rhsbl_client blackhole.securitysage.com,
	   reject_rhsbl_client rhsbl.sorbs.net,
	   reject_rhsbl_sender blackhole.securitysage.com,
	   reject_rhsbl_sender rhsbl.sorbs.net,
	   permit
	 
permit_mynetworks - разрешить доступ из доверенных сетей,
	 permit_sasl_authenticated - разрешить доступ клиентам, прошедшим
	 процедуру аутентификации SMTP, reject_unauth_destination - если
	 наш сервер является конечной точкой следования почтового сообщения (сервер
	 может быть релеем для других доменов, но в нашем случае эта возможность не
	 используется) запретить отправку сообщений, получатели которых находятся за
	 пределами доменов, описанных в параметрах $mydestination,
	 $inet_interfaces и $virtual_maps (говоря другими
	 словами, запретить Postfix быть открытым релеем),
	 reject_unauth_pipelining - запретить некорректное использование
	 команд конвейерной обработки, check_client_access hash:... -
	 проверить, разрешен ли доступ в файле, являющемся параметром данного
	 ограничения (файл access_client имеет формат, описанный в access(5), его содержимое и
	 рекомендации по использованию приведены ниже), check_client_access
	 pcre:... - ограничение аналогично предыдущему, за исключением того,
	 что используется другой формат файла (файл access_client.pcre
	 имеет формат, описанный в pcre_table(5), его
	 содержимое приведено ниже), reject_unknown_client_hostname -
	 запретить доступ клиентам, не зарегистрированным в DNS, 
	 check_helo_access hash:... - проверить, разрешено ли выданное клиентом
	 приветствие в файле, являющемся параметром данного ограничения (файл имеет
	 формат, описанный в access(5), его содержимое и
	 рекомендации по использованию приведены ниже),
	 reject_invalid_helo_hostname - запретить доступ, если имя
	 хоста, содержащееся в выданном клиентом приветствии, имеет некорректный
	 синтаксис, reject_non_fqdn_helo_hostname - запретить доступ,
	 если имя хоста, содержащееся в выданном клиентом приветствии, не является
	 FQDN, reject_unknown_helo_hostname - запретить доступ, если для
	 имени хоста, содержащемся в выданном клиентом приветствии, не существует A
	 или MX запись в DNS, check_sender_access hash:... - проверить,
	 разрешен ли адрес отправителя сообщения в файле, являющемся параметром
	 данного ограничения (файл имеет формат, описанный в access(5), его содержимое и
	 рекомендации по использованию приведены ниже), reject_non_fqdn_sender
	  - запретить доступ, если адрес отправителя сообщения имеет
	 некорректный формат, reject_unknown_sender_domain - запретить
	 доступ, если для имени домена адреса отправителя не существует A или MX
	 запись в DNS, reject_unverified_sender - запретить доступ, если
	 адрес отправителя не может быть проверен (механизм проверки описан в Postfix
	 Address Verification Howto), reject_non_fqdn_recipient, -
	 запретить доступ, если адрес получателя сообщения имеет некорректный формат,
	 reject_unknown_recipient_domain - запретить доступ, если для
	 имени домена адреса получателя не существует A или MX запись в DNS, 
	 reject_unverified_recipient, - запретить доступ, если адрес получателя
	 не может быть проверен (механизм проверки описан в Postfix
	 Address Verification Howto), reject_rbl_client - проверить
	 адрес сети клиента по блэклисту, адрес которого является параметром данного
	 ограничения, reject_rhsbl_client - проверить имя домена клиента
	 по блэклисту, адрес которого является параметром данного ограничения, 
	 reject_rhsbl_sender - проверить имя домена, содержащееся в адресе
	 отправителя, по блэклисту, адрес которого является параметром данного
	 ограничения, permit - разрешить доступ. Внимение, список
	 блэклистов, а также их использование на этапе анализа заголовков
	 сообщений, - спорный вопрос. Я исходил из соображений экономии трафика
	 и минимизации нагрузки на процессор сервера со стороны ПО, анализирующего
	 текст сообщений. 
Далее следует запретить использование команды 
	 ETRN из-за пределов доверенных сетей:
	 
	 smtpd_etrn_restrictions = 
	 После сохранения файла main.cf необходимо создать файлы
	 
	   permit_mynetworks,
	   reject
	 
access_client, access_client.pcre,
	 access_helo и access_sender:
	 
	 touch access_client access_client.pcre access_helo access_sender
	 Файл 
	 
access_client предназначен в основном для разрешения
	 доступа с хостов, которые не зарегистрированы в DNS (в России таких немало),
	 или попали в какой-либо блэклист (среди таких часто оказываются бесплатные
	 почтовые системы, доски объявлений, форумы и т.п.). Для таких хостов
	 необходимо задать правила вида <IP-адрес> OK и/или
	 hostname OK. Для того, чтобы запретить доступ какому-либо
	 клиенту, необходимо использовать REJECT вместо OK.
	 После изменения файла access_client необходимо выполнить команду:
	 
	 postmap access_client
	 Файл 
	 
access_client.pcre предназначен для блокировки абонентов
	 dial-up, кабельных и xdsl сетей, которые не сочли нужным зарегистрировать
	 "нормальное" имя в DNS. Большая часть таких абонентов - СПАМеры.
	 Если Вам все же нужно принимать сообщения от одного из таких абонентов,
	 добавьте его имя хоста или IP-адрес в файл access_client, рассмотренный выше.
	 Файл access_client.pcre имеет следующее содержимое (коды ошибок и сообщения,
	 выдаваемые при блокировке клиентов, можно изменить на свое усмотрение):
	 
	 /[ax]dsl.*\..*\..*/i REJECT  Your message looks like SPAM
	 Файл 
	 /\.dsl.*\..*\..*/i   REJECT  Your message looks like SPAM
	 /cable.*\..*\..*/i   REJECT  Your message looks like SPAM
	 /client.*\..*\..*/i  REJECT  Your message looks like SPAM
	 /dhcp.*\..*\..*/i    REJECT Your message looks like SPAM
	 /dial.*\..*\..*/i    REJECT  Your message looks like SPAM
	 /dialup.*\..*\..*/i  REJECT  Your message looks like SPAM
	 /dslam.*\..*\..*/i   REJECT  Your message looks like SPAM
	 /host.*\..*\..*/i    REJECT  Your message looks like SPAM
	 /node.*\..*\..*/i    REJECT  Your message looks like SPAM
	 /pool.*\..*\..*/i    REJECT  Your message looks like SPAM
	 /ppp.*\..*\..*/i     REJECT  Your message looks like SPAM
	 /user.*\..*\..*/i    REJECT  Your message looks like SPAM
	 
access_helo предназначен для блокировки абонентов, выдающих
	 в приветствии имена, связанные с "localhost", или одно из FQDN
	 нашего сервера. Большая часть таких абонентов - СПАМеры. Также в данном файле
	 можно разрешить доступ клиентам, выдающим некорректное приветствие, от
	 которых все же нужно получать сообщения. Мой файл access_helo имеет следующее
	 содержимое:
	 
	 127.0.0.1             REJECT Your server configured incorrectly
	 Первые 11 правил запрещают доступ клиентам, выдающим некорректное приветсвие
	 (domain.com необходимо заменить на FQDN нашего домена, 1.2.3.4 - на IP-адрес
	 нашего сервера, а вместо name1.domain.com - nameN.domain.com подставить все
	 FQDN нашего сервера, заданные в DNS записями типа A и CNAME), 3 последних
	 правила разрешают доступ нужным нам коряво настроенным клиентам (коды ошибок
	 и сообщения, выдаваемые при блокировке клиентов, можно изменить на свое
	 усмотрение). После изменения файла access_helo необходимо выполнить
	 команду:
	 
	 localhost             REJECT Your server configured incorrectly
	 localhost.localdomain REJECT Your server configured incorrectly
	 localhost.domain.com  REJECT Your server configured incorrectly
	 10                    REJECT Your server configured incorrectly
	 172.16                REJECT Your server configured incorrectly
	 192.168               REJECT Your server configured incorrectly
	 1.2.3.4               REJECT Your server configured incorrectly
	 name1.domain.com      REJECT Your server configured incorrectly
	 name2.domain.com      REJECT Your server configured incorrectly
	 name3.domain.com      REJECT Your server configured incorrectly
	 mail3.kc.sss          OK
	 prommkmos.PMK.local   OK
	 prommkmos2.PMK.local  OK
	 
	 postmap access_helo
	 Файл 
	 
access_sender предназначен в основном для разрешения
	 доступа отправителей, адреса или имена доменов которых попали в какой-либо
	 блэклист, или удаленный сервер запрещает проверку их существования. Для
	 разрешения доступа нужного отправителя или всех отправителей нужного домена
	 необходимо добавить правила вида <Почтовый адрес отправителя>
	 OK или @<Имя домена отправителя> OK,
	 соответственно. После изменения файла access_sender необходимо выполнить
	 команду:
	 
	 postmap access_sender
	 Осталось запретить получение сообщений, в которые вложены исполняемые файлы
	 (файлы с расширением 
	 
acm, ax, bat,
	 bin, bpl, cat, chm,
	 cmd, com, cpl, dat,
	 dll, dpl, drv, exe,
	 hlp, inf, ini, msc,
	 nls, ocx, olb, pif,
	 rom, scr, sys, tlb,
	 vbs, vxd), которые, как правило, не рассылаются по
	 электронной почте, поэтому очень вероятно, что это вирусы или троянские
	 программы, а также трафикоемкие файлы, такие как аудиозаписи (файлы с
	 расширением 669, aac, aif,
	 aiff, amf, au, far,
	 it, itz, kar, m3u,
	 m4a, mdz, mid, midi,
	 miz, mmf, mod, mp1,
	 mp2, mp3, mp4, mtm,
	 nsa, nst, ogg, okt,
	 pls, ptm, rmi, s3m,
	 s3z, snd, stm, stz,
	 ult, voc, vaw, wma,
	 xm, xmz) и видеоклипы (файлы с расширением
	 asf, avi, m2v, mov,
	 mpeg, mpg, nsv, qt,
	 wmv). Для запрета отправки перечисленных файлов необходимо
	 использовать механизм фильтрации заголовков почтовых сообщений, описанный в
	 header_checks(5). В
	 первую очередь необходимо указать в файле main.cf, где находятся файлы с
	 правилами фильтрации не закодированных и закодированных MIME заголовков
	 (данные файлы имеют формат, описанный в regexp_table(5)):
	 
	 header_checks = regexp:/usr/local/etc/postfix/header_checks
	 Затем необходимо создать файлы 
	 mime_header_checks = regexp:/usr/local/etc/postfix/mime_header_checks
	 
header_checks и
	 mime_header_checks:
	 
touch header_checks mime_header_checks
	 Файл 
	 
header_checks должен содержать по одной строке для каждого
	 типа файлов (ниже приведены две строки для файлов с расширениями com и ехе,
	 для всех остальных типов файлов необходимо добавить аналогичные строки):
	 
	 /^Content-(Type|Disposition):.*name[[:space:]]*=.*\.com/ REJECT
	 Файл 
	 /^Content-(Type|Disposition):.*name[[:space:]]*=.*\.com/ REJECT
	 
mime_header_checks также должен содержать по одной строке
	 для каждого типа файлов (ниже приведены две строки для файлов с расширениями
	 com и ехе, для всех остальных типов файлов необходимо добавить аналогичные
	 строки):
	 
	 /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)com)(\?=)?"?\s*$/ REJECT
	 Во многих источниках рекомендуется добавлять в файл header_checks правила,
	 блокирующие сообщения, содержащие определенные поля в заголовке, например:
	 
	 /^\s*Content-(Disposition|Type).*name\s*=\s*"?(.+(\.|2E)exe)(\?=)?"?\s*$/ REJECT
	 
	 /^Bel-Tracking: .*/    REJECT
	 На сайте Postfix: Anti-Spam
	 Utilities доступно множество файлов, содержащих правила фильтрации
	 заголовков сообщений, также следует ознакомиться с тем, что Google выдаст по запросу
	 "header_checks".
	 /^Hel-Tracking: .*/    REJECT
	 /^Kel-Tracking: .*/    REJECT
	 /^BIC-Tracking: .*/    REJECT
	 /^Lid-Tracking: .*/    REJECT
	 /^X-Mailer: Avalanche/ REJECT
	 
Вторая группа правил, рекомендуемая для
	 использования в файле header_checks, предназначена для удаления определенных
	 полей из заголовков сообщений, например, поля с запросом подтверждения
	 прочтения, которое часто используется СПАМерами для подтверждения
	 существования почтового адреса:
	 
	 /^Disposition-Notification-To:/ IGNORE
	 На этом я заканчиваю описание настроек Postfix, обеспечивающих защиту от
	 вирусов и СПАМа (чуть позже останется немного подправить файлы main.cf и
	 macter.cf для стыковки Amavisd-New и Postfix). Конфигурация почтовой системы,
	 полученная на данном этапе, вполне работоспособна, но я все же рекомендую не
	 торопиться использовать ее, пока не будет установлено, настроено и подключено
	 специальное ПО для борьбы с вирусами и СПАМом. Только совместно с ним можно
	 реализовать максимально эффективную комплексную защиту.
	
	 
Установка и настройка ClamAV
	 Установку ClamAV необходимо выполнить
	 из портов:
	 
	 cd /usr/ports/security/clamav
	 В окне конфигурации, которое появляется в процессе выполнения команды
	 
	 make install
	 
make install, необходимо отметить опции: [X] ARC Enable
	 arch archives support, [X] ARJ Enable arj archives
	 support, [X] LHA Enable lha archives support и [X]
	 UNZOO Enable zoo archives support. Если окно конфигурации не
	 появилось, выполните команду make config. После завершения
	 установки ClamAV необходимо создать два файла:
	 
	 cd /usr/local/etc
	 Файл 
touch clamd.conf freshclam.conf
	 
clamd.conf задает конфигурацию антивирусного демона
	 clamd и имеет следующее содержимое:
	 
	 LogFile /var/log/clamav/clamd.log
	 Указанные параметры имеют следующие значения: 
	 LogClean
	 LogTime
	 PidFile /var/run/clamav/clamd.pid
	 DatabaseDirectory /var/db/clamav
	 LocalSocket /var/run/clamav/clamd
	 FixStaleSocket
	 User clamav
	 AllowSupplementaryGroups
	 ScanPE
	 ScanOLE2
	 ScanMail
	 ScanHTML
	 ScanArchive
	 ScanRAR
	 
LogFile -
	 местонахождение лог-файла, LogClean - отображать в лог-файле не
	 зараженные файлы, LogTime - отображать в лог-файле время
	 выполнения всех операций, PidFile - местонахождение файла,
	 содержащего идентификатор процесса clamd, DatabaseDirectory -
	 местонахождение антивирусных баз, LocalSocket - местонахождение
	 локального сокета, который "слушает" демон,
	 FixStaleSocket - удалять сокет, оставшийся после некорректного
	 завершения работы clamd, User - пользователь, от имени которого
	 работает clamd, AllowSupplementaryGroups - учитывать права
	 доступа для дополнительных групп, ScanPE, ScanOLE2,
	 ScanMail, ScanHTML, ScanArchive и
	 ScanRAR - сканировать PE-EXE файлы Win32, объекты OLE2,
	 почтовые сообщения, гипертекстовые документы, архивы и архивы RAR,
	 соответственно.
Файл freshclam.conf задает конфигурацию
	 системы обновления антивирусных баз freshclam и имеет следующее
	 содержимое:
	 
	 DatabaseDirectory /var/db/clamav
	 Указанные параметры имеют следующие значения: 
	 UpdateLogFile /var/log/clamav/freshclam.log
	 PidFile /var/run/clamav/freshclam.pid
	 DatabaseOwner clamav
	 AllowSupplementaryGroups
	 DatabaseMirror database.clamav.net
	 Checks 8
	 NotifyClamd
	 
DatabaseDirectory
	 - местонахождение антивирусных баз, UpdateLogFile -
	 местонахождение лог-файла, PidFile - местонахождение файла,
	 содержащего идентификатор процесса freshclam, DatabaseOwner -
	 пользователь - владелец, антивирусных баз,
	 AllowSupplementaryGroups - учитывать права доступа для
	 дополнительных групп, DatabaseMirror - источник получения
	 обновлений антивирусных баз, Checks - количество проверок
	 появления обновлений (в нашем случае 8 раз за сутки или каждые 3 часа),
	 NotifyClamd - извещать clamd о том, что антивирусные базы
	 обновились.
Для того, чтобы clamd и freshclam запускались при загрузке
	 операционной системы, необходимо добавить в файл /etc/rc.conf
	 следующие строки:
	 
	 clamav_clamd_enable="YES"
	 На этом настройка ClamAV заканчивается. Можно запустить clamd (командой
	 
	 clamav_freshclam_enable="YES"
	 
/usr/local/etc/rc.d/clamd.sh start) и freshclam (командой
	 /usr/local/etc/rc.d/freshclam.sh start) и посмотреть сообщения,
	 которые пишутся в /var/log/clamav/clamd.log и
	 /var/log/clamav/freshclam.log, соответственно.
 	
Установка и настройка DCC
 	 Установку DCC
 	 необходимо	выполнить из портов:
 	 
 	 cd /usr/ports/mail/dcc-dccd
 	 Какая-либо дополнительная настройка не требуется. Работоспособность DCC
 	 можно проверить, выполнив команду 
 	 make install
 	 
cdcc 'info'. Внимание, для
 	 корректной работы DCC Ваш брандмауэр должен разрешать прохождение
 	 UDP-трафика с 6277 порта серверов, находящихся во внешней сети, поэтому
 	 добавьте соответствующие правила, если они отсутствуют.
  	
Установка и настройка Pyzor
 	 Установку Pyzor необходимо
 	 выполнить из портов:
 	 
 	 cd /usr/ports/mail/pyzor
 	 После завершения установки Pyzor необходимо выполнить команду 
 	 make install
 	 
pyzor
 	 discover, после чего в Вашей домашней папке появится папка
 	 .pyzor, а в ней файл servers. На данном этапе
 	 настройка Pyzor заканчивается.
 	
Установка и настройка Razor-Agents
 	 Установку Razor-Agents
 	 необходимо выполнить из портов:
 	 
 	 cd /usr/ports/mail/razor-agents
 	 После завершения установки Razor-Agents необходимо выполнить команды
 	 
 	 make install
 	 
razor-admin -create и razor-admin -register, после
 	 чего в Вашей домашней папке появится папка .razor, а в ней
 	 несколько файлов. На данном этапе настройка Razor заканчивается.
   	
Установка и настройка SpamAssassin
   	 В первую очередь проверьте версию интерпретатора Perl, установленного в
   	 системе по умолчанию, по команде perl -v. Если она меньше
   	 5.8, Вам необходимо установить Perl 5.8 из портов и сделать его
   	 обработчиком Perl по умолчанию:
   	 
   	 cd /usr/ports/lang/perl5.8
   	 После этого необходимо создать базу данных 
   	 make install
   	 cd work
   	 chmod +x use.perl
   	 ./use.perl port
   	 
spamassasin и
   	 пользователя spamassassin для работы с этой базой данных.
   	 Запустите клиент MySQL по команде mysql -u <имя
   	 пользователя-администратора> -p, введите пароль и выполните
   	 команды:
   	 
   	 CREATE DATABASE spamassassin;
   	 После выхода из mysql необходимо создать таблицы базы данных spamassassin:
   	 
   	 GRANT SELECT,INSERT,UPDATE,DELETE ON spamassassin.* TO spamassasin IDENTIFIED BY 'spamassassin';
   	 
   	 cd /usr/local/share/doc/p5-Mail-SpamAssassin/sql
   	 После выполнения подготовительных процедур можно приступить к установке SpamAssassin из портов:
   	 
   	 mysql -u <имя пользователя-администратора> -p spamassassin < awl_mysql.sql
   	 mysql -u <имя пользователя-администратора> -p spamassassin < bayes_mysql.sql
   	 mysql -u <имя пользователя-администратора> -p spamassassin < userpref_mysql.sql
   	 
   	 cd /usr/ports/mail/p5-Mail-SpamAssassin
   	 В окне конфигурации, которое появляется в процессе выполнения команды
   	 
   	 make install
   	 
make install, дополнительно к отмеченным по умолчанию
   	 необходимо отметить опции: [X] MYSQL Add MySQL support и
   	 [X] RAZOR Add Vipul's Razor support. Если окно конфигурации
   	 не появилось, выполните команду make config. После завершения
   	 установки SpamAssassin необходимо отредактировать главный файл
   	 конфигурации local.cf, находящийся в папке
   	 /usr/local/etc/mail/spamassassin. Содержимое данного файла
   	 приведено ниже (подробное описание всех опций, которые можно задать в
   	 файле local.cf, можно получить по команде perldoc
   	 Mail::SpamAssassin::Conf):
   	 
   	 report_safe              0
	 Указанные параметры имеют следующие значения: 
	 ok_locales               en ru
	 trusted_networks         127. 192.168.0.
	 use_pyzor                1
	 use_razor2               1
	 skip_rbl_checks          0
	 dns_available            yes
	 use_bayes                1
	 use_bayes_rules          1
	 bayes_auto_learn         1
	 auto_whitelist_factory   Mail::SpamAssassin::SQLBasedAddrList
	 user_awl_dsn             DBI:mysql:spamassassin:localhost
	 user_awl_sql_username    spamassassin
	 user_awl_sql_password    spamassassin
	 bayes_store_module       Mail::SpamAssassin::BayesStore::SQL
	 bayes_sql_dsn            DBI:mysql:spamassassin:localhost
	 bayes_sql_username       spamassassin
	 bayes_sql_password       spamassassin
	 user_scores_dsn          DBI:mysql:spamassassin:localhost
	 user_scores_sql_username spamassassin
	 user_scores_sql_password spamassassin
	 
report_safe -
	 режим модификации сообщения, если оно расценено как СПАМ (в наше случае такую
	 модификацию выполняет Amavisd-New), ok_locales - разрешенные
	 языки сообщений, trusted_networks - список доверенных сетей
	 (сообщения, отправленные из этих сетей не могут быть расценены как СПАМ),
	 use_pyzor - использовать Pyzor при проверке сообщений,
	 use_razor2 - использовать Razor-Agents при проверке сообщений,
	 skip_rbl_checks - отключить проверку сообщений по блэклистам (в
	 нашем случае проверка включена), dns_available - доступность
	 службы DNS (по умолчанию SpamAssassin проверяет доступность DNS, предполагая
	 наличие возможных проблем с сетью, в нашем случае проверки отключены),
	 use_bayes - использовать Bayes-алгоритмы при проверке сообщений,
	 use_bayes_rules - использовать "родные" правила Bayes
	 совместно с правилами, полученными в процессе обучения,
	 bayes_auto_learn - использовать автоматическое обучение Bayes,
	 auto_whitelist_factory - модуль доступа к источнику данных,
	 содержащему таблицу AWL, user_awl_dsn - имя источника данных,
	 содержащего таблицу AWL, user_awl_sql_username и
	 user_awl_sql_password - имя пользователя и пароль для доступа к
	 источнику данных, содержащему таблицу AWL, bayes_store_module -
	 модуль доступа к источнику данных, содержащему таблицы Bayes,
	 bayes_sql_dsn - имя источника данных, содержащего таблицы Bayes,
	 bayes_sql_username и bayes_sql_password - имя
	 пользователя и пароль для доступа к источнику данных, содержащему таблицы
	 Bayes, user_scores_dsn - источник данных, содержащий таблицу
	 пользовательских настроек, user_scores_sql_username и
	 user_scores_sql_password - имя пользователя и пароль для доступа
	 к источнику данных, содержащему таблицу пользовательских настроек. Для
	 проверки синтаксиса файла local.cf можно использовать команду
	 spamassassin --lint.
Для включения поддержки DCC необходимо
	 раскомментировать строку loadplugin Mail::SpamAssassin::
	 Plugin::DCC в файле
	 /usr/local/etc/mail/spamassassin/v310.pre.
На данном этапе
	 настройка SpamAssassin заканчивается. Внимание, алгоритмы Bayes начнут
	 работать не сразу, а только после накопления достаточного количества данных,
	 происходящего в процессе самообучения. Для максимальной эффективности
	 SpamAssassin нужно дополнительно обучить. Для этого требуется накопить
	 несколько сотен "нормальных" сообщений и несколько сотен сообщений,
	 являющихся СПАМом (по умолчанию по 200 сообщений). Когда сообщения накоплены,
	 необходимо выполнить команды:
	 
	 sa-learn --ham <файл в формате mailbox / папка, содержащая сообщения в формате msg>
	 Лично я не проводил обучение. Сначала не было времени, а потом отпало желание
	 (СПАМ фиксировался и фиксируется достаточно четко). Когда-нибудь я
	 обязательно исправлюсь. 
   	
	 sa-learn --spam <файл в формате mailbox / папка, содержащая сообщения в формате msg>
	 
Установка и настройка Amavisd-New
   	 Установку Amavisd-New
 	 необходимо выполнить из портов:
 	 
 	 cd /usr/ports/security/amavisd-new
 	 В окне конфигурации, которое появляется в процессе выполнения команды
 	 
 	 make install
 	 
make install, необходимо отметить опции: [X] BDB Use
 	 BerkeleyDB for nanny/cache/snmp, [X] SPAMASSASSIN Use mail /
 	 p5-Mail-SpamAssassin, [X] File Use newer file(1) utility from
 	 ports, [X] UNRAR RAR support with archives/unrar и
 	 [X] ARJ support with archivers/arj. Если окно конфигурации не
 	 появилось, выполните команду make config. После завершения
 	 установки необходимо отредактировать файл конфигурации
 	 amavisd.conf, находящийся в папке /usr/local/etc.
 	 В моем случае данный файл имеет следующее содержимое:
 	 
	 use strict;
	 Значения и возможные варианты задания всех параметров, содержащихся в файле
	 amavisd.conf, достаточно подробно описаны в файле
	 
	 #############################################################################
	 # Section I - Essential daemon and MTA settings #############################
	 #############################################################################
	 $MYHOME = '/var/amavis';
	 $mydomain = 'domain.com';
	 $daemon_user = 'vscan';
	 $daemon_group = 'vscan';
	 $TEMPBASE = "$MYHOME/tmp";
	 $db_home = "$MYHOME/db";
	 $helpers_home = $MYHOME;
	 $pid_file = "$MYHOME/amavisd.pid";
	 $lock_file = "$MYHOME/amavisd.lock";
	 $ENV{TMPDIR} = $TEMPBASE;
	 $enable_db = 1;
	 $enable_global_cache = 1;
	 $forward_method = 'smtp:[127.0.0.1]:10025';
	 $notify_method = $forward_method;
	 $max_servers = 2;
	 $max_requests = 10;
	 $child_timeout= 20*60;
	 @local_domains_acl = (".");
	 #############################################################################
	 # Section II - MTA specific #################################################
	 #############################################################################
	 $insert_received_line = 1;
	 $unix_socketname = "$MYHOME/amavisd.sock";
	 $inet_socket_port = 10024;
	 @inet_acl = qw(127.0.0.1);
	 #############################################################################
	 # Section III - Logging #####################################################
	 #############################################################################
	 $DO_SYSLOG = 1;
	 $SYSLOG_LEVEL = 'mail.info';
	 $log_level = 0;
	 $log_recip_templ = undef;
	 #############################################################################
	 # Section IV - Notifications/DSN, bounce/reject/discard/pass, quarantine ####
	 #############################################################################
	 $hdr_encoding = 'koi8-r';
	 $bdy_encoding = 'koi8-r';
	 $final_virus_destiny = D_DISCARD;
	 $final_banned_destiny = D_DISCARD;
	 $final_spam_destiny = D_DISCARD;
	 $final_bad_header_destiny = D_PASS;
	 $warnvirussender = 0;
	 $warnspamsender = 0;
	 $warnbannedsender = 0;
	 $warnbadhsender = 0;
	 $warnvirusrecip = 0;
	 $warnbannedrecip = 0;
	 $warnbadhrecip = 0;
	 $warn_offsite = 0;
	 $virus_admin = "virusalert\@$mydomain";
	 $spam_admin = "spamalert\@$mydomain";
	 $mailfrom_notify_admin = "virusalert\@$mydomain";
	 $mailfrom_notify_recip = "virusalert\@$mydomain";
	 $mailfrom_notify_spamadmin = "spamalert\@$mydomain";
	 $mailfrom_to_quarantine = 'virus or spam';
	 $QUARANTINEDIR = '/var/virusmails';
	 $virus_quarantine_method = 'local:virus-%i-%n';
	 $spam_quarantine_method = 'local:spam-%i-%n';
	 $virus_quarantine_to = 'virus-quarantine';
	 $spam_quarantine_to = 'spam-quarantine';
	 $X_HEADER_TAG = 'X-Virus-Scanned';
	 $X_HEADER_LINE = "by Amavisd-New and ClamAV at mail.domain.com";
	 $remove_existing_x_scanned_headers = 1;
	 $remove_existing_spam_headers  = 1;
	 #############################################################################
	 # Section V - Per-recipient and per-sender handling, whitelisting, etc. #####
	 #############################################################################
	 $sql_select_white_black_list = undef;
	 $recipient_delimiter = '+';
	 $localpart_is_case_sensitive = 0;
	 #############################################################################
	 # Section VI - Resource limits ##############################################
	 #############################################################################
	 $MAXLEVELS = 14;
	 $MAXFILES = 1500;
	 $MIN_EXPANSION_QUOTA = 100*1024;
	 $MAX_EXPANSION_QUOTA = 300*1024*1024;
	 $MIN_EXPANSION_FACTOR = 5;
	 $MAX_EXPANSION_FACTOR = 500;
	 $virus_check_negative_ttl = 3*60;
	 $virus_check_positive_ttl = 30*60;
	 $spam_check_negative_ttl = 30*60;
	 $spam_check_positive_ttl = 30*60;
	 #############################################################################
	 # Section VII - External programs, virus scanners ###########################
	 #############################################################################
	 $bypass_decode_parts = 1;
	 $path = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/usr/bin:/bin';
	 $file = 'file';
	 $dspam = 'dspam';
	 @decoders = (
	   ['mail', \&do_mime_decode],
  	   ['asc', \&do_ascii],
  	   ['uue', \&do_ascii],
  	   ['hqx', \&do_ascii],
  	   ['ync', \&do_ascii],
  	   ['F', \&do_uncompress, ['unfreeze','freeze -d','melt','fcat'] ],
  	   ['Z', \&do_uncompress, ['uncompress','gzip -d','zcat'] ],
  	   ['gz', \&do_gunzip],
  	   ['gz', \&do_uncompress, 'gzip -d'],
  	   ['bz2', \&do_uncompress, 'bzip2 -d'],
  	   ['lzo', \&do_uncompress, 'lzop -d'],
  	   ['rpm', \&do_uncompress, ['rpm2cpio.pl','rpm2cpio'] ],
  	   ['cpio', \&do_pax_cpio, ['pax','gcpio','cpio'] ],
  	   ['tar', \&do_pax_cpio, ['pax','gcpio','cpio'] ],
  	   ['tar', \&do_tar],
  	   ['deb', \&do_ar, 'ar'],
  	   ['zip', \&do_unzip],
  	   ['rar', \&do_unrar, ['rar','unrar'] ],
  	   ['arj', \&do_unarj, ['arj','unarj'] ],
  	   ['arc', \&do_arc, ['nomarch','arc'] ],
  	   ['zoo', \&do_zoo, 'zoo'],
  	   ['lha', \&do_lha, 'lha'],
  	   ['cab', \&do_cabextract, 'cabextract'],
  	   ['tnef', \&do_tnef_ext, 'tnef'],
  	   ['tnef', \&do_tnef],
  	   ['exe', \&do_executable, ['rar','unrar'], 'lha', ['arj','unarj'] ],
	 );
	 $sa_local_tests_only = 0;
	 $sa_mail_body_size_limit = 256*1024;
	 $sa_spam_modifies_subj = 1;
	 $sa_spam_subject_tag = '***SPAM*** ';
	 $sa_tag_level_deflt = 2;
	 $sa_tag2_level_deflt = 8;
	 $sa_kill_level_deflt = 10;
	 @av_scanners = (
 	 ['ClamAV-Clamd',
   	   \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd"],
   	   qr/\bOK$/, qr/\bFOUND$/,
   	   qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
	 );
	 @av_scanners_backup = (
  	   ['ClamAV-ClamScan', 'clamscan',
       "--stdout --disable-summary -r --tempdir=$TEMPBASE {}", [0], [1],
       qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
	 );
	 #############################################################################
	 # Section VIII - Debugging ##################################################
	 #############################################################################
	 @debug_sender_acl = ( "root\@$mydomain" );
	 $sa_debug = 0;
	 1;
	 
/usr/local/etc/amavisd.conf.dist. Для того, чтобы Amavisd-New
 	 корректно заработал с приведенным файлом конфигурации, достаточно изменить
 	 domain.com на FQDN Вашего домена и определить псевдонимы пользователей
 	 spamalert и virusalert в файле alieses. Если в процессе отладки возникнет
 	 необходимость полностью отключить функции защиты от СПАМа, добавьте строку
 	 @bypass_spam_checks_maps = (1);. Для полного отключения защиты
 	 от вирусов нужно добавить строку
 	 @bypass_virus_checks_maps = (1);. Внимание, параметры
 	 $sa_tag_level_deflt (оценка, при которой к заголовкам сообщений
 	 добавляются соответствующие X-Spam-тэги), $sa_tag2_level_deflt
 	 (оценка, при которой сообщения помечаются как СПАМ),
 	 $sa_kill_level_deflt (оценка, при которой с сообщениями
 	 выполняется предопределенные действия, в нашем случае уничтожение) имеют
 	 достаточно гуманные значения, которые вполне меня устраивают. Чем сильнее
 	 Вы уменьшите эти числа, тем лучше будет фиксироваться СПАМ, но
 	 одновременно возрастет вероятность потери валидных сообщений. Лучше всего
 	 определить эти значения экспериментальным путем. Я не буду описывать все
 	 строки файла amavisd.conf. Во-первых, их слишком много, а во-вторых, их
 	 досканально описали гораздо раньше меня. Лично я пользовался статьей Создание почтовой системы на
 	 базе exim, dbmail, amavisd-new и postgresql, которую настоятельно
 	 рекомендую и Вам для осуществления более тонкой настройки Amavisd-New.
 	 Для того, чтобы SpamAssassin, запускаемый Amavisd-New, мог использовать
 	 Pyzor и Razor-Agents необходимо переместить папки, содержащие их
 	 конфигурационные файлы, в домашнюю папку пользователя vscan, от
 	 имени которого работает Amavisd-New, и изменить их владельца:
 	 
 	 cd /var/amavis
 	 Для того, чтобы Postfix корректно взаимодействовал с Amavisd-New, т.е.
 	 отправлял сообщения для проверки на 10024 порт локального интерфейса,
 	 который "слушает" Amavisd-New, и принимал их назад на 10025 порте
 	 локального интерфейса, необходимо добавить в файл
 	 
 	 mv ~/.pyzor .
 	 mv ~/.razor .
 	 chown -R vscan:vscan .pyzor .razor
 	 
/usr/local/etc/postfix/main.cf строки:
 	 
 	 content_filter=smtp-amavis:[127.0.0.1]:10024
 	 и в файл 
 	 receive_override_options = no_address_mappings
 	 
/usr/local/etc/postfix/master.cf строки:
 	 
 	 smtp-amavis unix - - n - 4 smtp
     Для того, чтобы Amavisd-New запускался при загрузке операционной системы
     необходимо добавить в файл 
 	   -o smtp_data_done_timeout=1200
 	   -o smtp_send_xforward_command=yes
 	   -o disable_dns_lookups=yes
 	 127.0.0.1:10025 inet n - n - - smtpd
       -o content_filter=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o smtpd_restriction_classes=
       -o smtpd_client_restrictions=
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8
       -o strict_rfc821_envelopes=yes
       -o smtpd_error_sleep_time=0
       -o smtpd_soft_error_limit=1001
       -o smtpd_hard_error_limit=1000
     
/etc/rc.conf строку:
     
     amavisd_enable = "YES"
     На этом настройка Amavisd-New заканчивается. Можно запустить его командой
     
     
/usr/local/etc/rc.d/amavisd.sh start и посмотреть сообщения,
 	 которые пишутся в /var/log/maillog. Естественно, нужно
 	 перезапустить и Posfix. Если ошибки отсутствуют, то в заголовках сообщений
 	 теперь можно увидеть поля X-Virus-Scanned,
 	 X-Spam-Scope, X-Spam-Level и
 	 X-Spam-Status, а в папке /var/virusmails
 	 отвергнутые сообщения.
 	
Установка и настройка Pflogsumm
 	 Установку Pflogsumm
 	 необходимо выполнить из портов:
 	 
 	 cd /usr/ports/mail/pflogsumm
 	 Какая-либо дополнительная настройка не требуется. Остается создать несколько
 	 скриптов, заставляющих pflogsumm формировать отчеты за заданные интервалы
 	 времени, и обеспечить их запуск с помощью cron.
 	 В моей системе ежедневный отчет обновляется каждый час в течение рабочего
 	 дня, а также один раз в начале следующего дня (чтобы добавить информацию о
 	 том, что произошло после завершения рабочего дня до полуночи включительно).
 	 Для хранения отчетов я использую папку 
 	 make install
 	 
pflogsumm, находящуюся в
 	 корневой папке одного из виртуальных хостов Apache (в моем случае этот
 	 виртуальный хост служит исключительно для доступа к различным статистическим
 	 отчетам о работе служб коммуникационного сервера, конфигурация данного
 	 виртуального хоста приведена ниже). Папка pflogsumm содержит три вложенных
 	 папки. Вложенная папка current содержит ежедневные отчеты за
 	 текущий месяц, previous - ежедневные отчеты за предыдущий
 	 месяц, archive - архивы отчетов за предыдущие месяцы (один
 	 tar.bz2-файл за каждый месяц, содержащий соответствующие ежедневные отчеты).
 	 Приведенные ниже скрипты написаны под руководством статьи Создаем почтовую
 	 систему среднего и малого офиса на основе FreeBSD Postfix + dr.web + popa3d
 	 + pflogsumm, подробно объясняющей технологию использования pflogsumm.
 	 
Для формирования / обновления ежедневных отчетов в
 	 течение рабочего дня служит скрипт account.hourly, имеющий
 	 следующее содержимое:
 	 
 	 #!/bin/sh
 	 Для обновления ежедневных отчетов в начале следующего дня служит скрипт
 	 
 	 srvroot=<Путь к корневой папке виртуального хоста>
 	 echo "$srvroot/pflogsumm/current/" > /tmp/pflogsumm.name
 	 date "+%d-%m-%Y" >> /tmp/pflogsumm.name
 	 /usr/local/bin/pflogsumm -d today /var/log/maillog --smtpd_stats --mailq --problems_first
 	 --rej_add_from --verbose_msg_detail --iso_date_time > `tr -d "\n" < /tmp/pflogsumm.name`
 	 rm /tmp/pflogsumm.name
 	 
account.daily, имеющий следующее содержимое:
 	 
 	 #!/bin/sh
 	 Для упаковки ежедневных отчетов за предыдущий месяц и переноса их в архив, а
 	 также для переноса отчетов за текущий месяц в папку отчетов за предыдущий
 	 месяц в первый день месяца служит скрипт 
 	 srvroot=<Путь к корневой папке виртуального хоста>
 	 /usr/bin/zcat /var/log/maillog.0.gz > /tmp/pflogsumm.maillog
 	 echo "$srvroot/pflogsumm/current/" > /tmp/pflogsumm.name
 	 date -v-1d "+%d-%m-%Y" >> /tmp/pflogsumm.name
 	 /usr/local/bin/pflogsumm -d yesterday /tmp/pflogsumm.maillog --smtpd_stats --mailq
 	 --problems_first --rej_add_from --verbose_msg_detail --iso_date_time > `tr -d "\n"
 	 < /tmp/pflogsumm.name`
rm /tmp/pflogsumm.maillog
 	 rm /tmp/pflogsumm.name
 	 
account.monthly,
 	 имеющий следующее содержимое:
 	 
 	 #!/bin/sh
	 Для того, чтобы описанные скрипты запускались в нужное время (account.hourly
	 ежедневно в 8:45, 9:45...20:45, account.daily ежедневно в 0:30,
	 account.monthly ежемесячно 1 числа в 1:15), необходимо добавить в файл
	 
 	 arcdate=$(date -v-2m "+%m.%Y")
 	 srvroot=<Путь к корневой папке виртуального хоста>
 	 cd $srvroot/pflogsumm/previous
/usr/bin/tar -cf $srvroot/pflogsumm/archive/pflogsumm.$arcdate.tar --remove-files *
	 /usr/bin/bzip2 -f9 $srvroot/pflogsumm/archive/pflogsumm.$arcdate.tar
	 mv $srvroot/pflogsumm/current/* $srvroot/pflogsumm/previous
	 
/etc/crontab строки:
	 
	 45 8-20 * * * root <Путь к скрипту>/account.hourly
	 Конфигурация виртуального name-based хоста для доступа к статистическим
	 отчетам имеет следующий вид:
	 
	 30 0    * * * root <Путь к скрипту>/account.daily
	 15 1    1 * * root <Путь к скрипту>/account.monthly
	 
	 <VirtualHost <IP-адрес>:80>
	 Вам нужно заменить stat.company.com на FQDN Вашего сервера, поставить
	 реальные IP-адреса и добавить необходимых пользователей в файл
	 
     ServerName stat.company.com
       DocumentRoot "/data/httpd/stat-company-com/html"
       ErrorLog /data/httpd/stat-company-com/logs/httpd-error.log
       CustomLog /data/httpd/stat-company-com/logs/httpd-access.log combined
       <Directory "/data/httpd/stat-company-com/html">
         AuthName "This server require authorization!"
         AuthUserFile /usr/local/etc/apache/htpasswd
         AuthType Basic
         Require user <Список пользователей, которым разрешен доступ>
         Options Indexes
         Order deny,allow
         Deny from all
         Allow from ...
         Allow from ...
       </Directory>
	 </VirtualHost>
	 
htpasswd и в директиву Require user. О том, как это
	 сделать, подробно написано в разделе Authentication,
	 Authorization, and Access Control официальной документации Apache.
	 На этом настройка pflogsumm заканчивается. Остается перезапустить Apache
	 командой apachectl restart. Теперь Вы можете в любой момент
	 времени посмотреть состояние почтовой системы через браузер. Однако, если
	 отчеты, сформированные pflogsumm, увидит руководство, в лучшем случае Вы
	 заметите легкий испуг, в худшем - недоверие к Вам, как к специалисту.
 	
Установка и настройка AWStats
 	 Установку AWStats необходимо
 	 выполнить из портов:
 	 
 	 cd /usr/ports/www/awstats
 	 Внимание, в моей системе папка, содержащая компоненты AWStats, находится в
 	 папке 
 	 make install
 	 
/usr/local, поэтому не забудьте исправить соответствующие
 	 пути в файлах конфигурации AWStats и Apache. Также не забудьте исправить
 	 stat.company.com и company.com на FQDN Вашего сервера и домена. Отчет
 	 AWStats о работе почтового сервера обновляется каждый час в течение рабочего
 	 дня, а также один раз в начале следующего дня (чтобы добавить информацию о
 	 том, что произошло после завершения рабочего дня до полуночи включительно).
 	 В связи с этим используются два файла конфигурации, которые в
 	 соответствующие моменты времени копируются в файл
 	 /etc/awstats/awstats.mail.conf.
 	 Файл конфигурации /etc/awstats/awstats.postfix.conf,
 	 используемый при выполнении команд обновления базы данных AWStats в течение
 	 рабочего дня, имеет следующее содержимое:
 	 
	 #############################################################################
	 Основное внимание следует уделить параметрам данного файла, содержащимся в
	 секции 
	 # MAIN SETUP SECTION
	 #############################################################################
	 LogFile="/usr/local/awstats/tools/maillogconvert.pl standard < /var/log/maillog |"
	 LogType=M
	 LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd"
	 DirData="/data/httpd/awstats"
	 DirCgi="/awstats"
	 DirIcons="/awstatsicons"
	 SiteDomain="mail.company.com"
	 HostAliases="127.0.0.1 localhost REGEX[company\.com$]"
	 AllowFullYearView=3
	 AllowToUpdateStatsFromBrowser=0
	 #############################################################################
	 # OPTIONAL ACCURACY SETUP SECTION
	 #############################################################################
	 LevelForBrowsersDetection=0
	 LevelForOSDetection=0
	 LevelForRefererAnalyze=0
	 LevelForRobotsDetection=0
	 LevelForWormsDetection=0
	 LevelForSearchEnginesDetection=0
	 LevelForFileTypesDetection=0
	 #############################################################################
	 # OPTIONAL APPEARANCE SETUP SECTION
	 #############################################################################
	 UseFramesWhenCGI=0
	 ShowSummary=HB
	 ShowMonthStats=HB
	 ShowDaysOfMonthStats=HB
	 ShowDaysOfWeekStats=HB
	 ShowHoursStats=HB
	 ShowDomainsStats=0
	 ShowHostsStats=HBL
	 ShowAuthenticatedUsers=0
	 ShowRobotsStats=0
	 ShowEMailSenders=HBML
	 ShowEMailReceivers=HBML
	 ShowSessionsStats=0
	 ShowPagesStats=0
	 ShowFileTypesStats=0
	 ShowFileSizesStats=0
	 ShowBrowsersStats=0
	 ShowOSStats=0
	 ShowOriginStats=0
	 ShowKeyphrasesStats=0
	 ShowKeywordsStats=0
	 ShowMiscStats=0
	 ShowHTTPErrorsStats=0
	 ShowSMTPErrorsStats=1
	 #############################################################################
	 # PLUGINS
	 #############################################################################
	 LoadPlugin="decodeutfkeys"
	 
MAIN SETUP SECTION. Эти параметры имеют следующие
	 значения: LogFile - местонахождение лог-файла, используемого для
	 получения данных, LogType - тип используемого лог-файла (в нашем
	 случае лог-файл почтового сервера), LogFormat - формат
	 используемого лог-файла (подробное описание данного параметра приведено в
	 документе AWStats
	 configuration directives / options), DirData -
	 местонахождение базы данных AWStats, DirCgi - виртуальный путь
	 (относительно FQDN сервера, через который осуществляется доступ к отчетам) к
	 папке с CGI-скриптами AWStats,	DirIcons - виртуальный путь
	 (относительно FQDN сервера, через который осуществляется доступ к отчетам) к
	 папке с пиктограммами, используемыми в отчетах AWStats,
	 SiteDomain -  "главное" FQDN сервера,
	 HostAliases - все имена-псевдонимы сервера,
	 AllowFullYearView - разрешение CLI и CGI формирования годовых
	 отчетов (параметр предназначен для экономии процессорного времени, по
	 умолчанию разрешено формирование только через командную строку, в нашем
	 случае, как через командную строку, так и через браузер, т.к. особых тормозов
	 ни в том, ни в другом случае я не заметил),
	 AllowToUpdateStatsFromBrowser - разрешение обновления статистики
	 через браузер (в нашем случае отключено по соображениям безопасности).
	 Параметры, содержащиеся в секциях OPTIONAL ACCURACY SETUP
	 SECTION и OPTIONAL APPEARANCE SETUP SECTION, задают
	 некоторые режимы работы AWStats и внешний вид отчетов. Скорее всего Вам не
	 придется изменять их значения. В разделе PLUGINS включен
	 единственный плагин, предназначенный для корректного отображения UTF-символов
	 в отчетах.
Для ежечасного обновления базы данных в течение рабочего дня
	 необходимо добавить в скрипт account.hourly, рассмотренный выше,
	 строки:
	 
	 cp /etc/awstats/awstats.postfix.conf /etc/awstats/awstats.mail.conf
	 Файл конфигурации 
	 /usr/local/awstats/cgi-bin/awstats.pl -config=mail -update
	 
/etc/awstats/awstats.postfix2.conf,
	 используемый при выполнении команды обновления базы данных AWStats в начале
	 следующего дня, отличается от рассмотренного выше только значением параметра
	 LogFile, которое связано с автоматической ротацией лог-файлов
	 почтового сервера. Параметр LogFile в данном случае должен иметь значение:
	 
	 "/usr/bin/gzip -cd /var/log/maillog.0.gz | /usr/local/awstats/tools/maillogconvert.pl standard |"Для обновления базы данных AWStats в начале следущего дня
	 необходимо добавить в скрипт 
	 
account.daily, рассмотренный выше,
	 строки:
	 
cp
	 /etc/awstats/awstats.postfix2.conf /etc/awstats/awstats.mail.conf
	 Затем необходимо добавить в конфигурацию виртуального хоста, предназначенного
	 для доступа к отчетам AWStats следующие строки:
	 
	 /usr/local/awstats/cgi-bin/awstats.pl -config=mail -update
	 
	 Alias /js/ "/usr/local/awstats/js/"
     Директивы 
	 Alias /awstatsclasses "/usr/local/awstats/classes/"
     Alias /awstatscss "/usr/local/awstats/css/"
     Alias /awstatsicons "/usr/local/awstats/icons/"
     ScriptAlias /awstats/ "/usr/local/awstats/cgi-bin/"
     RedirectPermanent /awstats/mail http://stat.company.com/awstats/awstats.pl?config=mail
     
Alias и ScriptAlias задают виртуальные
     пути (относительно FQDN сервера, через который осуществляется доступ к
     отчетам) к папкам, содержащим компоненты, используемые в отчетах AWStats,
     директива RedirectPermanent используется для повышения
     удобства (по умолчанию для доступа к отчету AWStats о работе почтовой
     системы в браузере требуется ввести URL
     http://stat.company.com/awstats/awstats.pl?config=mail, в
     нашем случае - http://stat.company.com/awstats/mail). На
     этом настройка AWStats заканчивается. Остается перезапустить Apache и
     продемонстрировать руководству, как работает вверенная Вам почтовая
     система. Лично я не пользуюсь отчетами AWStats (применительно к почтовой
     системе, хотя, например, для анализа статистики доступа к Web-серверам
     AWStats, как мне кажется, незаменим), т.к. меня не беспокоит, кому и
     сколько писем отправляют менеджеры, однако, для укращения темперамента
     некоторых личностей красивые отчеты
     AWStats просто необходимы.
    
Заключение
 	 Кажется, я написал все, что хотел или все, что вспомнил. Наверняка многие
 	 части описанной конфигурации можно оптимизировать и повысить их
 	 эффективность, что я возможно и сделаю, благодаря Вашим советам. Тем не
 	 менее, я надеюсь, что написанное здесь окажется хотя бы частично полезным,
 	 особенно начинающим сисадминам. Если в процессе настройки возникнут
 	 какие-либо проблемы, задавайте мне вопросы,
 	 анализируйте соответствующие лог-файлы и внимательно читайте Форум
 	 OpenNET. 
 	
При любом использовании материала не забывайте добавить ссылку на SergeySL
homepage: http://sergeysl.pnz.ru/.
| Закладки на сайте Проследить за страницей | Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |