Библиотека сайта rus-linux.net
E-mail серверы
Улучшение безопасности E-Mail пакетом Procmail
SSL в сочетании с серверами POP и IMAP
Некоммерческий софт для списков рассылки
Обзор
Simple Mail Transfer Protocol (SMTP) одна из наиболее важных услуг Internet. Firewalling SMTP простой: SMTP работает на порте 25, протокол tcp:
ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 25 ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 25 ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 25
или
ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 25 ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 25 ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 25
E-mail серверы
Sendmail
Sendmail наиболее распространенный сервер почты. Но сейчас его активно вытесняет пакет Postfix.
Sendmail заработал себя очень плохую репутацию защиты, однако новые версии исправили почти все ошибки. К тому же, добавлена система противоспамовой обороны. Подробности о Sendmail и исходниках есть на http://www.sendmail.org.
Chrooting Sendmail хорошая опция, но требует много работы, и так как он все равно работает как root, довольно спорно относительно эффективности (так как root может убегать из тюрьмы chroot'ed).
Обновление Sendmail не особенно трудная задача. Лучше всего использовать ряд 8.9 из-за минимума ошибок и противоспамовой обороны. Можно скачать исходники с ftp://ftp.sendmail.org, но откомпилировать Sendmail не так просто.
Sendmail должен быть доступен из внешнего мира только при приеме почты. Sendmail лучше не запускать в режиме демона (когда он ждет соединений), можно запустить его в режиме очереди, когда он время от времени просыпается и доставляет почту, скопившую в очереди.
Для такого запуска поправьте скрипт запуска Sendmail, и замените в нем строку:
sendmail -bd -q1h
на строку:
sendmail -q1h
Пожалуйста обратите внимание: если Вы используете систему, чтобы послать большое количество email, Вы можете установить время обработки очереди ниже, возможно, "-q15m" (обрабатывать очередь каждые 15 минут).
Теперь о системе противоспамовой обороны. В одной из win-программ я встретил настройку по умолчанию "Посылать в ответ файл", а в качестве имени файла было прописано "c:\windows\win386.swp". Здесь все не настолько радикально. Sendmail настраивается несколькими файлами настройки (применительно к Sendmail 8.9.x):
/etc/sendmail.cf
Основной файл настройки, также сообщает, где искать другие файлы
конфигурации.
/etc/mail
Вы можете определять расположение файлов конфигурации в sendmail.cf, обычно
люди помещают их в /etc или в /etc/mail.
access
База данных списков доступа, позволяет Вам отклонять email из некоторых
источников (IP или доменов). Мой файл доступа выглядит следующим образом:
10.0.0 RELAY spam.com REJECT
Что означает 10.0.0.* (хостам моей внутренней сети) разрешено использовать сервер для передачи почты куда угодно, а все со *.spam.com будет отклонено. Имеются интерактивные списки известных спамеров, обычно они 5-10,000 записей в длину, что может серьезно препятствовать эффективности sendmail (поскольку каждое подключение проверяется по этому списку), с другой стороны использование Вашей sendmail-машины, чтобы посылать spam куда хуже.
aliases
Файл псевдонимов, позволяет Вам управлять доставкой почты, локальной для
системы. Большинство пакетов списков рассылки используют данный файл, чтобы
получить почту, посланную спискам, и направить ее программам, которые
фактически обрабатывают их. Не забудьте выполнить команду "newaliases" после
редактирования этого файла и затем перезапустить sendmail.
domaintable
Таблица обрабатываемых доменов (полезно для виртуальных хостов).
majordomo
Файл конфигурации для majordomo.
sendmail.cw
Файл, содержащий имена хостов, для которых мы получаем email, полезно если Вы
являетесь хостом более чем для одного домена.
sendmail.hf
расположение справочного файла (зайдите в telnet на 25 и введите
"HELP")
virtusertable
Таблица виртуальных пользователей для отображения их в реальные (например,
sales@example.org в john@example.org).
Sendmail 8.9.x (и предыдущие версии) реально не поддерживал регистрацию всего email. Обещана такая поддержка в Sendmail 8.10.x. До тех пор имеются 2 пути регистрации email, первый изящный и регистрирует email приходящий пользователям на основании имени пользователя. Второй метод не изящен и включает простой необработанный файл регистрации всех SMTP транзакций, Вы должны написать некоторый сортировщик (вероятно, на perl) чтобы сделать файл регистрации полезным.
Почта (входящие SMTP подключения, чтобы быть более точным) сначала фильтруется файлом доступа, здесь мы можем отклонить почту из некоторого домена/IP и передать почту из некоторых хостов (например, с внутренней сети машин под windows). Все локальные домены будут проверены через файл sendmail.cw. Почта будет обработана в соответствии с заданными правилами и поставлена в очередь для локальной доставки, затем будет проверен файл virtusertable, который представляет соответствия адресов именам пользователя, например так:
seifried@seifried.org alias-seifried listuser@seifried.org listuser @seifried.org mangled-emails
Последнее правило перехватывает письма с поврежденными адресами и
пересылает их в специально выделенный ящик. Будет также проверен файл
псевдонимов и почта будет доставлена в соответствии с записями в нем.
Например, мой псевдоним для seifried такой:
alias-seifried: seifried, "/var/backup-spool/seifried"
Этим путем мой email попадает в мой основной и резервный почтовые ящики. Если я удалю письмо, оно уцелеет в другом ящике! Microsoft Outlook... Приведу перевод данной фразы, который дал пакет Stylus, по-моему, это один из тех, увы, немногих случаев, когда машинный перевод себя оправдал: "Перспектива Microsoft решает к рвоте когда-нибудь и брандспойту мои почтовые ящики.". Кратко и выразительно... И, увы, очень правильно. Это также полезно для корпораций, поскольку Вы теперь имеете копию всего входящего email на основании имени пользователя, и можете позволять (или не позволять) им обращаться к файлу, содержащему сохраненную почту.
Одна проблема при использовании правила catch-all для домена (то есть, для @seifried.org): Вы должны создать псевдоним для КАЖДОГО пользователя и списка рассылки. Иначе при просмотре списка, если не будет найдена запись для конкретного адреса (например, mailing-list@seifried.org), вся почта для него окажется в ящике для почты с поврежденным адресом. Так что с этим правилом надо поосторожней.
Второй метод очень прост, Вы просто запускаете sendmail с -X опцией и определяете файл, чтобы регистрировать все транзакции. Этот файл будет становиться очень большим очень быстро, я не рекомендовал бы использовать этот метод регистрации почты без крайней необходимости.
Dynamic Relay Authorization Control
Dynamic Relay Authorization Control (DRAC) связывается с Вашим сервером POP/IMAP, чтобы временно предоставить доступ к SMTP хостам, которые успешно авторизуются и обрабатывают почту. Вы можете получить пакет с http://mail.cc.umanitoba.ca/drac/index.html.
Postfix
Postfix агент передачи почты (mail transfer agent, MTA) нацеленный на защиту, быстродействие и легкость конфигурации. Единственная часть Postfix, который выполняется как root главная управляющая программа, точно названная ⌠master■, она вызывает несколько других программ, чтобы обработать почту к очереди (⌠pickup■), управлять очередью, ждать входящих подключений, доставлять отсроченную почту и так далее (⌠qmgr■), чтобы фактически посылать и получать почту (⌠smtpd■) и так далее. Каждая часть Postfix очень хорошо обдумана, и обычно делает одну или две задачи, но очень хорошо. Например, вместо модели sendmail, где поставленная в очередь почта просто выбрасывается в /var/spool/mqueue, в Postfix имеется общедоступный каталог ⌠maildrop■, который проверяется ⌠pickup■, который скармливает данные ⌠cleanup■, который перемещает почту (если она правильно сформатирована и так далее) в безопасный каталог очереди для фактической обработки.
Главные файлы настройки лежат в /etc/postfix, и имеется несколько файлов конфигурации, которые Вы должны иметь:
master.cf
Управляет поведением различных программ ⌠помощников■: они chroot'ed, максимальное число процессов, которые они могут выполнять и т.д. Вероятно самое лучшее оставить значения по умолчанию на большинстве серверов почты, если Вы не должны делать некоторую настройку для высоких загрузок или повышенной безопасности сервера.
main.cf
Этот файл близок к sendmail.cf (цель похожа, что касается формата, разница огромна). Он хорошо прокомментирован и устанавливает все главные переменные, расположения и формат различных файлов, содержащих информацию типа виртуальных адресов пользователей и связанной информации.
Имеется список переменных и расположений файлов, которые Вы будете обычно должны установить, файл /etc/postfix/main.cf часто плохо прокомментирован. Пожалуйста обратите внимание, что следующие примеры записей в main.cf не полный main.cf.
# what is the machines hostname? myhostname = mail.example.org
# what is the domain name? mydomain = example.org
# what do I label mail as ⌠from■? myorigin = $mydomain
# which interfaces do I run on? All of them usually. inet_interfaces = all
# a file containing a list of host names and fully qualified domains names I # receive mail for, usually they are listed like: # mydestination = localhost, $myhostname, etc # but I much prefer to keep them listed in a file. mydestination = /etc/postfix/mydestination
# map of incoming usernames. ⌠man 5 virtual■ virtual_maps = hash:/etc/postfix/virtual
# alias mappings (like /etc/aliases in sendmail), ⌠man 5 aliases■ alias_maps = hash:/etc/postfix/aliases
# alias database, you might have different settings. ⌠man 5 aliases■ alias_database = hash:/etc/postfix/aliases
# where to deliver email, Mailbox format or Maildir (traditional # /var/spool/mail). home_mailbox = Maildir/
# where to keep mail, usually /var/spool/mail/ but you can easily change it mail_spool_directory = /var/spool/mail
# what command do we use to deliver email? /usr/bin/procmail is the default # but if you want to use scanmail which is the AMaViS anti-virus tie in # software simply put: mailbox_command = /usr/sbin/scanmails
# who do I relay email for, again you can list them, or keep them in # a file (one per line). relay_domains = /etc/postfix/relaydomains
# list of local networks (by default we relay mail for these hosts). mynetworks = 10.0.0.0/24, 127.0.0.0/8
# what do we display to people connecting to port 25? By default it displays # the version number which I do not. smtpd_banner = $myhostname ESMTP $mail_name
Вообще говоря, любые файлы, которые просто вносят в список один элемент на строку (подобно /etc/postfix/mydestination или /etc/postfix/relaydomains) обычно сохраняются как плоские текстовые файлы. Файлы, которые содержат отображения (то есть псевдонимы, где Вы имеете записи вроде ⌠root: someuser■) должны быть превращены в hashed-файлы базы данных для быстродействия (Вы можете определять тип файла как hash, dbm, и т.д.).
Подобно большинству IBM-программ, Postfix имеет очень замороченную лицензию, но обычно имеет открытые исходники и свободен. Postfix доступен на http://www.postfix.org. Двоичный пакет postfix можно скачать с:
ftp://contrib.redhat.com/contrib/libc6/i386
ftp://ftp.debian.org/pub/debian/dists/potato/main/binary-i386/mail
ftp://ftp.suse.com/pub/suse/i386/6.2/suse/n1
Sendmail Pro
Sendmail Pro представляет собой коммерческую версию Sendmail с поддержкой. Доступен на http://www.sendmail.com. Я так и не смог получить демонстрашку или найти того, кто получил, так что не могу сказать, какая тут разница. Но компания сообщила мне, что он использует то же самое ядро кода.
QMAIL
Qmail (аналог postfix) был создан как прямой ответ для устранения дефектов Sendmail. Qmail распространяется по GPL, но только в исходниках, так что Вам придется их компилировать. Вы должны также получить разрешение авторов прежде, чем Вы сделаете и распространите любые изменения (ничего хорошего, но таковы жизнь и авторы...). Очень небольшой код в Qmail выполняется как root, , и это очень модульно сравнено с Sendmail (который является довольно монолитным куском кода). Вы можете загрузить исходники с http://www.qmail.org.
Zmailer
Zmailer представляет собой GPL mailer, доступный на http://www.zmailer.org. Он поддерживает обработку crypto и вообще хорошо написан.
DMail
DMail коммерческий почтовый сервер, открытых исходников не имеет. Пробная версия доступна на http://netwinsite.com/dmail_first.htm.
nullmailer
nullmailer посылает почту интеллектуальным хостам (relays), так что локальная машина не должна выполнять программное обеспечение сервера. Доступен на http://em.ca/~bruceg/nullmailer.
MasqMail
MasqMail собирает письма в автономном режиме, а потом быстро обменивается почтой при связи с ISP. Может быть настроен на несколько ISP с адресом возврата и тому подобным. Загрузить можно с http://merlin.uni-sw.gwdg.de/~okurth/masqmail.
POP серверы
POP (post Office Protocol) является относительно простым протоколом, который позволяет Вам получать почту с сервера и удалять ее. Основные команды: USER, PASS (используется для регистрации), LIST (для получения списка писем и их размеров), RETR (для получения почты) и DELE (для удаления почты).
WU IMAPD (contains the default popd for most distros)
POP и IMAP сильно связаны, но очень различны, так что я опишу их по отдельности. POP просто позволяетвносить в список сообщения, получать и удалять их. Имеется много серверов POP для Linux, которые входят во многие дистрибутивы. Основные проблемы с POP подобны многим другим протоколам; usernames и пароли передаются открытым текстом. POP может работать с SSL, однако не все клиенты почты поддерживает SSL, большинство серверов POP приходит конфигурированным, чтобы использовать TCP_WRAPPERS, что является превосходным методом для ограничения доступа. Пожалуйста см. раздел по TCP_WRAPPERS для большего количества информации. POP работает как root так как должен обращаться к почтовым ящикам пользователей), и разумеется в разных серверах есть разные дыры... POP работает через порты 109 и 110 (109 в основном устаревший), по протоколу tcp. Сервер Washington University IMAPD также приходит с сервером pop. Скачать можно с http://www.washington.edu/imap.
ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 110 ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 110 ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 110
или
ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 110 ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 110 ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 110
Cyrus
Cyrus является сервером imap (также поддерживает pop и kpop), нацеленным на ▒закрытые▓ среды. То есть то, что пользователи не будут иметь никакого доступа к серверу, кроме imap или pop. Это позволяет Cyrus сохранять почту намного более безопасным способом и учитывает более простое управление больших инсталляций. Cyrus не GNU-лицензирован, но относительно ⌠free ■, и доступен на http://asg.web.cmu.edu/cyrus/imapd. Набор дополнительных утилит для Cyrus можно скачать с ftp://ftp.hr.vc-graz.ac.at/cyrus-tools.
IDS POP
IDS (It Doesn▓t Suck) POP облегченный вариант popd для небольших систем. Доступен по GPL на http://www.nodomainname.net/software/ids-pop.
GNU pop3d
Маленький и шустрый pop daemon, доступен по GNU на http://www.nodomainname.net/software/gnu-pop3d.shtml.
Qpopper
Qpopper freeware-продукт Qualcomm (разработчика пакета Eudora). Я его не рекомендую (исходники можно скачать с ftp://ftp.qualcomm.com/eudora/servers/unix/popper/). Доступен на http://eudora.qualcomm.com/freeware/qpop.html.
IMAP
IMAP существенно более продвинутый протокол. Он позволяет не только получать почту с сервера, но и управлять ей на сервере (создавать папки для хранения почты на сервере, например). Возможна работа с несколькими почтовыми ящиками, несколько пользователей могут разделять почтовый ящик, можно сначала загружать только заголовки писем для их анализа.
WU IMAPD (imapd по умолчанию для большинства дистрибутивов)
IMAP представляет собой усиленный POP. Он позволяет не только получать почту с сервера, но и управлять ей на сервере (создавать папки для хранения почты на сервере, например). Возможна работа с несколькими почтовыми ящиками, несколько пользователей могут разделять почтовый ящик, можно сначала загружать только заголовки писем для их анализа. IMAP идеален для любого серьезного применения e-mail. По умолчанию серверы POP и IMAP, поставляемые в большинстве дистрибутивов (объединенные в один пакет, названный, что достаточно странно, imapd) покрывают все потребности.
IMAP также запускается как root, хотя imapd обычно понижается к привилегии пользователя, обращающегося к нему, и не может быть легко установлен, чтобы выполняться как не-root пользователь, так как он должен открывать почтовые ящики (а в случае IMAP создает папки, файлы и т.д. в основном каталоге пользователя), так что он не может при запуске иметь привилегии кого-либо, кроме root. Однако, после идентификации пользователя, принятие его привилегий вполне возможно. При этом данные серверы не могут быть chroot'ed (IMAP нужен доступ к /var/spool/mail и в основной каталог пользователя). Самая лучшая стратегия: своевременно обновлять софт. Washington University (WU) IMAPD доступен на http://www.washington.edu/imap.
IMAP работает через порт 143, и многие серверы IMAPD поддерживают TCP_WRAPPERS, делая блокировку относительно легкой.
ipfwadm -I -a accept -P tcp -S 10.0.0.0/8 -D 0.0.0.0/0 143 ipfwadm -I -a accept -P tcp -S some.trusted.host -D 0.0.0.0/0 143 ipfwadm -I -a deny -P tcp -S 0.0.0.0/0 -D 0.0.0.0/0 143
или
ipchains -A input -p tcp -j ACCEPT -s 10.0.0.0/8 -d 0.0.0.0/0 143 ipchains -A input -p tcp -j ACCEPT -s some.trusted.host -d 0.0.0.0/0 143 ipchains -A input -p tcp -j DENY -s 0.0.0.0/0 -d 0.0.0.0/0 143
Cyrus
Cyrus является сервером imap (также поддерживает pop и kpop), нацеленным на ▒закрытые▓ среды. То есть то, что пользователи не будут иметь никакого доступа к серверу, кроме imap или pop. Это позволяет Cyrus сохранять почту намного более безопасным способом и учитывает более простое управление больших инсталляций. Cyrus не GNU-лицензирован, но относительно ⌠free ■, и доступен на http://asg.web.cmu.edu/cyrus/imapd. Набор дополнительных утилит для Cyrus можно скачать с ftp://ftp.hr.vc-graz.ac.at/cyrus-tools.
Courier-IMAP
Courier-IMAP легкий сервер IMAP определенно для использования с почтовыми ящиками стиля Maildir (не /var/spool/mail). Скачать можно с http://www.inter7.com/courierimap.
Проверка почты на вирусы
Linux нечувствительна к вирусам, но они могут доставить МНОГО проблем на Windows-клиентах.
AMaViS
AMaViS использует программы третьих фирм (например, McAfee) для проверки на вирусы входящей почты. Получить AMaViS можно на http://aachalon.de/AMaViS. Обязательно берите последнюю версию!
Использование AMAVIS с Sendmail относительно просто, он имеет программу, названную "scanmail", который действует как замена для procmail (обычно программа, которая обрабатывает локальную доставку email). Когда email приходит вместо того, чтобы использовать procmail, чтобы доставить почту, Sendmail вызывает scanmail, который распаковывает и декодирует любые вложения и затем использует вирусный сканер (по Вашему выбору), чтобы просмотреть вложения. Если никакой вирус не найден, то доставка почты идет как обычно. Если вирус найден, email послан назад отправителю с сообщением, что они послали вирус, и будет послан email получателю, сообщающий о человеке, который послал им вирус. Инструкции смотрите на http://satan.oih.rwth-aachen.de/AMaViS/amavis.html.
Так как Postfix может использовать procmail, чтобы делать локальную доставку почты, это должно работать в теории без проблем. Практически требуется приложить несколько больше усилий, чтобы работать правильно. Замените строку в файле main.cf:
mailbox_command = /usr/bin/procmail
на строку:
mailbox_command = /usr/sbin/scanmails
и перезапустите postfix. Для локального предупреждения (предполагаемому адресату вируса) имя машины (sundog, mailserver01) должно быть упомянуто в ⌠mydestination■ в файле main.cf, иначе предупреждение не будет послано вовсе. Вы должны (и большинство сайтов так делают) переназначить root email на пользователя использующего файл псевдонимов, иначе предупреждения не будут доходить до него. По умолчанию также почта к ⌠virusalert■ перенаправлена к root, Вы должны также переназначить эту почту нормальному пользователю.
Улучшение безопасности E-Mail пакетом Procmail
procmail (по умолчанию обычный локальный транспортный агент для почты) имеет широкое разнообразие свойств, которые могут использоваться, чтобы помочь обезопасить почту. Подробности ищите на ftp://ftp.rubyriver.com/pub/jhardin/antispam/procmail-security.html.
SSL в сочетании с серверами POP и IMAP
simap stream tcp nowait root /usr/sbin/stunnel imapd -l imapd
RANDFILE = stunnel.rnd [ req ] default_bits = 1024 encrypt_key = no distinguished_name = req_dn x509_extensions = cert_type [ req_dn ] countryName = Country Name (2 letter code) organizationName = Organization Name (eg, company) 0.commonName = Common Name (FQDN of your server) [ cert_type ] nsCertType = server
openssl req -new -x509 -days 365 -config /etc/stunnel.cnf -out /etc/stunnel.pem -keyout stunnel.pem openssl x509 -subject -dates -fingerprint -noout -in stunnel.pem
Некоммерческий софт для списков рассылки
SmartList
Majordomo
http://www.greatcircle.com/majordomo
Minordomo
http://www.nodomainname.net/software/minordomo
Sympa
Listar
Written by Kurt Seifried