Для кого-то Интернет — это просмотр сомнительных страниц на WWW, для некоторых — способ найти соперника в игре, а многие используют сеть для работы или обучения. Но все мы не можем жить без общения, и несмотря на новые технологии, которые выдумывают для облегчения общения (чаты, IRC, ICQ и т.д.), электронная почта жила, живет и будет жить. Именно с электронной почты начали развиваться сети, и это был один из первых сервисов Интернета.
Лично для меня почтовый клиент стал основной программой, которой я пользуюсь чаще всего. Это переписка с читателями, друзьями, начальством и т.д. Так уж получилось, что люди, с которыми я работаю, находятся в других городах и даже странах. Расстояние до самых ближайших партнеров более 1000 км, а до издательства — 1600 км. Если раньше это было сопряжено с большими проблемами, то теперь, благодаря компьютеру, я могу жить в теплых краях, а выполнять работы для компании, которая находится на Аляске. Таким образом, легко сохранить ноги в тепле, а зарабатывать деньги в холодных областях.
Как работает электронная почта (E-mail)? Рассмотрим основные моменты отправки письма:
1. Пользователь создает в почтовом клиенте (программа электронной почты) письмо, указывает получателя и отправляет его почтовому серверу. В настоящее время для передачи сообщений чаще всего используются SMTP-серверы, а для работы с ними — SMTP-протокол.
2. Сервер, получив письмо, определяет место назначения. Адрес состоит из двух частей: имени пользователя и имени сервера, разделенных между собой знаком. Например, djon@servername.com. Здесь djon — это имя пользователя, а servername.com — имя сервера. С помощью DNS можно узнать IP-адрес сервера servername.com, которому должно быть доставлено письмо.
3. Письмо направляется серверу, на котором зарегистрирован получатель.
4. Получив письмо, сервер servername.com помещает его в почтовый ящик пользователя djon.
5. Пользователь просматривает свой почтовый ящик с помощью почтового клиента и может скачать письмо для чтения.
Описанный процесс похож на работу традиционной почты. Вместо серверов там выступают почтовые отделения, которые сортируют почту в зависимости от адреса назначения и передают письма на узел связи получателя.
Как я уже заметил, для передачи сообщений используется протокол SMTP, разработанный еще на заре становления Интернета. Его функций уже давно недостаточно, но он не утратил своей актуальности.
Несколько десятков лет назад для работы с почтой широко использовался протокол UUCP (Unix to Unix Copy, копирование между Unix-системами). Но он был слишком сильно привязан к ОС и при этом обладал ограниченными возможностями, поэтому не получил должного распространения и в настоящее время практически не используется.
Для приема почты есть три протокола:
1. POP3 — Post Office Protocol v3 (Почтовый протокол), в настоящее время наиболее распространенный протокол приема почты.
2. IMAP4 — существуют две интерпретации этого сокращения: Internet Message Access Protocol (Протокол доступа к сообщениям в сети Интернет) и Interactive Mail Access Protocol (Протокол интерактивного доступа к электронной почте). Этот протокол обладает большими возможностями по сравнению с POP3.
3. MAPI — Messaging Application Programming Interface (Интерфейс прикладного программирования электронной почты корпорации Microsoft), используется в сетях Microsoft на серверах Microsoft Exchange.
Самым распространенным средством доставки почты в Linux является самая старая программа sendmail. Она обладает большими возможностями, но достаточно сложна в использовании. Из-за своего почтенного возраста в сервере sendmail сохранилась возможность передачи по протоколу UUCP, что сейчас не так часто встретишь.
Принцип же работы sendmail достаточно прост. Получив письмо от клиента, программа определяет получателя и заносит необходимую для доставки служебную информацию в заголовок этого письма. Дальнейшие действия зависят от настроек. Например, письмо может быть отослано немедленно или помещено в хранилище. Через определенные промежутки времени накопившиеся письма отправляются своим адресатам.
8.1. Настройка sendmail
Основной конфигурационный файл, который вам понадобится — /etc/sendmail.cf. Сервер sendmail имеет плохую репутацию в связи со сложностью настройки. Действительно, если даже бегло посмотреть на /etc/sendmail.cf, то делается жутко от одного только размера в 32 Кбайта (более 1000 строк). А если заглянуть внутрь файла, то становится еще страшнее от непонятных ключей и директив.
В файле конфигурации sendmail все параметры сгруппированы по разделам.
Разбиение оформляется в виде следующих строк:
##################
# local info #
##################
Такой комментарий указывает на то, что далее идет раздел local info. Таких секций несколько, например:
□ Local info — локальная информация, основные сведения о сервере и домене;
□ Options — настройки работы программы sendmail;
□ Message precedences — приоритеты сообщений;
□ Trusted users — доверенные пользователи;
□ Format of headers — форматы заголовков.
Рассмотреть все настройки в этой книге невозможно, тем более что конфигурационный файл в моей системе занимал 50 Кбайт. Если расписывать каждый параметр, понадобится отдельное издание. Наша задача — эффективность и безопасность, поэтому рассмотрим только настройки, касающиеся этих вопросов, и испытаем sendmail в действии.
Для упрощения конфигурирования sendmail в последних версиях этого почтового сервиса используется новый файл — sendmail.mc, который можно найти в директории /etc/mail. Пример содержимого файла можно увидеть в листинге 8.1.
Листинг 8.1. Фрагмент файла /etc/mail/sendmail.mc
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command:
dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include('/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID('linux setup for ASPLinux')dnl
OSTYPE('linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define('SMART_HOST','smtp.your.provider')
define('confDEF_USER_ID',''8:12'')dnl
undefine('UUCP_RELAY')dnl
undefine('BITNET_RELAY')dnl
...
...
Файл sendmail.mc имеет более простой формат, чем старый sendmail.cf, благодаря чему уменьшается вероятность допустить ошибку при конфигурировании. После исправлений sendmail.mc необходимо конвертировать в формат CF специальной командой, в результате чего получается файл /etc/sendmail.cf.
Мы в основном будем рассматривать параметры, которые нужно устанавливать в файл sendmail.cf, а если описывается параметр sendmail.mc-файла, то я буду явно указывать на это.
В гл. 2 я уже упоминал, что загрузка Linux может зависать при старте сервиса sendmail. Это происходит из-за того, что ваш почтовый сервер не может определить имя компьютера. Откройте файл /etc/hosts. В нем чаще всего будет только одна строка:
127.0.0.1 localhost.localdomain localhost
Подробно этот файл будет описан в гл. 11, когда мы будем рассматривать DNS. Сейчас нам надо знать, что эта строка описывает IP-адрес 127.0.0.1, который соответствует имени localhost. В любой системе такие адрес и имя указывают на вашу локальную машину. Когда в сетевых программах вы указываете localhost, то это имя преобразуется в IP-адрес 127.0.0.1.
Программа sendmail использует имя компьютера, которое вы указали во время установки ОС Linux. Выполните команду hostname, чтобы узнать его. В моем случае это FlenovM. Так уж получилось, что все сетевые обращения происходят не по имени, а по IP-адресу, a sendmail не может определить адрес по имени FlenovM, поэтому происходит зависание. Чтобы исправить эту ситуацию, добавьте в файл /etc/hosts строку:
192.168.77.1 FlenovM FlenovM
Только FlenovM нужно заменить на имя вашего компьютера и указать свой IP-адрес. После этого программу sendmail можно помещать в автозапуск, и она будет работать великолепно даже с настройками по умолчанию.
Каждому пользователю системы автоматически создается почтовый ящик, и если сервис sendmail запущен, то им уже можно пользоваться. Все почтовые ящики хранятся в директории /var/spool/mail/. Их имена соответствуют именам пользователей. Так для учетной записи root ящик будет расположен в папке /var/spool/mail/root.
Для работы с почтой нам нужен почтовый клиент, который будет отправлять письма серверу и принимать от него новые сообщения. Таких программ существует множество, и в некоторых дистрибутивах Linux я насчитывал до 7 различных клиентов. Какой выберете вы, зависит только от личных предпочтений.
Можно обойтись и без клиента, а соединение с сервером осуществлять напрямую через сервис Telnet. Благо команды SMTP достаточно простые и их легко использовать. В этом случае для отправки почты нужно подключиться к 25 порту (SMTP-порт), а для получения — к 110 (порт POP3).
8.2. Работа почты
Рассмотрим работу ящиков на примере почтового клиента KMail — графическая программа, которая у вас должна быть, если установлен KDE. Для ее запуска из главного меню Linux выберите строку Internet/KMail. Перед вами откроется окно, как на рис. 8.1.
Рис. 8.1. Главное окно программы KMail
Программа еще не знает, с каким почтовым ящиком мы хотим работать, это необходимо настроить. Нажмите меню Settings/Configure KMail. Перед вами откроется окно конфигурации. Выберите раздел Network, и вы увидите окно из двух вкладок: Sending и Receiving.
Рис. 8.2. Окно сетевых настроек
На вкладке Sending мы должны указать параметры сервера, через который будет происходить отправка. По умолчанию уже настроен локальный sendmail, но если почтовый сервер расположен на другом компьютере? Давайте удалим существующую запись (выделите и нажмите кнопку Remove), а потом создадим свою.
Нажмите кнопку Add для добавления новой записи. Перед вами появится окно выбора протокола: SMTP или Sendmail. Выбираем SMTP, как наиболее универсальный вариант. Вслед за этим откроется окно, в котором нужно указать параметры SMTP-сервера, через который мы будем посылать почту (рис. 8.3).
Рис. 8.3. Окно настроек SMTP-сервера
В этом окне нам нужно заполнить следующие поля:
□ Name — имя сервера, которое может быть любым;
□ Host — адрес SMTP-сервера. Если вы используете локальный сервер, то можно указать localhost или 127.0.0.1;
□ Port — порт SMTP-сервера. Чаще всего используется 25 порт, но это значение может быть изменено;
□ если сервер требует аутентификации, то поставьте галочку в Server requires authentication и заполните открывшиеся поля Login и Password.
Если вы не первый день в Интернете и работали с электронной почтой, то процесс создания параметров SMTP-сервера не должен вызвать проблем.
Теперь рассмотрим настройку сервера для чтения почты. Перейдите на вкладку Receiving, и вы увидите список серверов. Выделите имеющиеся записи и удалите. Нажмите кнопку Add, чтобы добавить сервер, через который мы будем получать почту. Перед вами откроется окно, в котором нужно выбрать тип сервера: Local mailbox, POP3, IMAP, Maildir Mailbox. Чаще используется POP3, и процесс его создания схож с SMTP-сервером. Вы также должны указать адрес сервера, порт (по умолчанию 110) и имя с паролем.
Наиболее интересным может оказаться использование локального ящика. Даже если SMTP-сервер не установлен, в системе создается директория с локальным почтовым ящиком, куда для администратора root помимо привычных E-mail попадают извещения по безопасности. Если вы работаете в консоли и увидели сообщение типа "You have new mail", то это означает, что в ваш ящик в локальной директории попало новое сообщение. Для его проверки лучше всего использовать почтовый клиент.
Итак, создадим новую учетную запись, чтобы можно было в удобном виде читать сообщения по безопасности. Щелкните кнопку Add, и перед вами появится окно выбора типа сервера. Укажите тип ящика Local mailbox и нажмите кнопку OK. Вы увидите окно создания нового аккаунта, как на рис. 8.4.
Рис. 8.4. Окно настроек аккаунта Local Mailbox
Здесь необходимо заполнить следующие поля:
□ Name — имя записи, может быть любым;
□ Location — расположение локального ящика. По умолчанию все ящики хранятся в директории /var/spool/mail/имя, где имя — это имя пользователя. Для администратора root размещение будет /var/spool/mail/root.
Остальные параметры, чаще всего, остаются заданными по умолчанию, если администратор не натворил чего-то особого в конфигурации.
Попробуйте прочитать почту разными протоколами. Убедитесь, что сообщения приходят на ваш почтовый ящик и доходят до получателя. Даже с настройками по умолчанию все должно работать верно. В дальнейшем мы рассмотрим некоторые специфичные настройки, которые помогут сделать ваш почтовый сервер более безопасным, но прежде чем приступать к улучшениям, нам нужно удостовериться, что работает базовый вариант.
8.2.1. Безопасность сообщений
E-mail-сообщения пересылаются по сети в виде чистого текста. Если злоумышленник перехватит такое сообщение, то без проблем сможет его прочитать. При передаче конфиденциальной информации необходимо использовать шифрование.
Наиболее распространенными методами шифрования на данный момент являются:
□ S/MIME (Secure/Multipurpose Internet Mail Extensions, безопасные многоцелевые расширения электронной почты в сети Интернет) — этот стандарт шифрования поддерживается в основном почтовыми клиентами Netscape и его клонами. Это накладывает некоторые ограничения, ведь не все пользователи привыкли пользоваться именно этими программами;
□ PGP — программа шифрования, используется во многих областях, в том числе и в почтовых сообщениях. Этот стандарт поддерживает большое количество почтовых клиентов. Существует несколько реализаций PGP, но многие специалисты рекомендуют использовать программу GnuPG. Нет, она не лучше других, потому что все PGP-клоны используют один и тот же принцип. Просто GnuPG разработана за пределами США, где уже не действует закон об ограничении длины ключа.
Таким образом, мы шифруем текст сообщения. Но сам протокол работает без шифрования, поэтому все пароли передаются по сети в чистом виде, и их тоже необходимо защитить. Для этого можно использовать один из современных стандартов RFC 1734 (MD5 APOP Challenge/Response), RFC 2095 (MD5 CRAM-HMAC Challenge/Response) или прибегнуть к помощи stunnel.
8.3. Полезные команды
Давайте рассмотрим некоторые команды, которые помогут вам в администрировании sendmail-сервера:
□ hoststat — показать состояние хостов, которые недавно работали с локальным почтовым сервером. Команда является эквивалентом sendmail -bh, которая по умолчанию неактивна;
□ mailq — отобразить краткую информацию о сообщениях в очереди, ожидающих обработки. Пример результата выполнения команды:
/var/spool/mqueue (1 request)
----Q-ID---- --Size-- -----Q-Time----- -----Sender/Recipient-----
j0IAnST11838 6 Tue Jan 18 13:49
(host map: lookup (flenovm.ru): deferred)
Из первой строки видно, что в очереди находится одно сообщение. Вторая строка включает дату посылки и адрес отправителя — flenov@flenovm.ru. В последней строке отображается получатель сообщения — root@flenovm.ru;
□ mailstats — отобразить статистику сообщений, включая количество переданных байт;
□ sendmail — это команда самого сервера sendmail. Запуская ее с различными ключами, можно увидеть достаточно много полезной информации. За более подробной справкой следует обратиться к документации man.
8.4. Безопасность sendmail
Безопасность сервиса sendmail далека от идеала, и в нем регулярно находят ошибки. По этому поводу администраторы и программисты начали слагать анекдоты и превратили сервис в объект насмехательств. Я слышал, что некоторые даже делали ставки на то, будет найдена ошибка в этом месяце или нет.
Как я и обещал, в данном разделе мы поговорим о некоторых параметрах, повышающих безопасность.
8.4.1. Баннер-болтун
Проблема безопасности начинается еще на этапе подключения. Сервис sendmail, как и большинство других служб, выдает строку приветствия, в которой содержится информация об имени и версии программы.
Хакер не должен знать об этих данных. Для этого необходимо изменить параметр SmtpGreetingMessage в файле /etc/sendmail.cf. В старых версиях sendmail этот параметр был равен:
SmtpGreetingMessage=$j Sendmail $v/$Z; $b
Самое опасное здесь — это ключ $v/$z, который отображает версию и само имя Sendmail. Именно поэтому он был убран в последних версиях.
Теперь значение этому параметру присваивается следующим образом:
SmtpGreetingMessage=$j $b
Если в вашей системе отображается что-то лишнее, то это необходимо убрать. Можно даже поставить сообщение другого сервиса:
SmtpGreetingMessage=$j IIS 5.0.1 $b
Любая удачная попытка ввести хакера в заблуждение — это выигрыш во времени, что равносильно маленькой победе.
8.4.2. Только отправка почты
Очень часто почтовые сервисы используют только для отправки почты. Например, на Web-серверах sendmail может стоять для того, чтобы прямо из сценариев на Perl или PHP можно было отсылать письмо. Если ваш сервер не будет принимать писем, то необходимо запретить этот режим. Для этого откройте файл /etc/sysconfig/sendmail и измените его содержимое:
DAEMON=yes
QUEUE="qlh"
Вторая строка задает параметры, которые будут передаваться программе sendmail при запуске. Чтобы возобновить прием почты, измените значение на -bd.
Если у вас нет директории /etc/sysconfig/sendmail (используется не во всех дистрибутивах), то придется редактировать сценарий /etc/rc.d/init.d/sendmail. Найдите в этом файле параметры, которые передаются программе, и измените их на qlh прямо в тексте сценария.
8.4.3. Права доступа
Ни один сервис в ОС не должен работать от имени администратора root. Если в коде программы будет найдена лазейка, позволяющая запускать команды, то можно считать систему потерянной, потому что директивы будут выполняться с правами root. Опытные пользователи компьютеров, наверное, помнят, что несколько лет назад, в sendmail чуть ли не каждую неделю находили ошибки, и большинство из них были критичными.
Сервис должен работать с правами пользователя, которому доступны только необходимые для работы директории и файлы. В sendmail это возможно сделать, и в последних версиях уже реализовано с помощью параметра RunAsUser:
0 RunAsUser=sendmail
По умолчанию эта строка может быть закомментирована. Уберите комментарий. Можно также явно добавить описание группы, с правами которой должна происходить работа:
0 RunAsUser=sendmail:mail
В данном случае sendmail — это имя пользователя, a mail — имя группы.
8.4.4. Лишние команды
Почтовый сервер обрабатывает множество команд, но не все из них могут оказаться полезными. Убедитесь, что в вашем конфигурационном файле присутствуют и не закрыты комментарием следующие строки:
0 PrivacyOptions=authwarnings
0 PrivacyOptions=noexpn
0 PrivacyOptions=novrfy
Можно также в одной команде перечислить все параметры через запятую:
0 PrivacyOptions=authwarnings,noexpn,novrfy
Наиболее опасной может оказаться для сервера опция VRFY, которая позволяет проверить существование почтового ящика. Именно ее запрещает третья строка в данном примере.
Вторая строка устанавливает параметр noexpn, запрещающий команду EXPN, которая позволяет по почтовому псевдониму определить E-mail-адрес или даже имя пользователя. С помощью этой директивы хакеры могут собирать себе списки для рассылки спама. Не стоит давать в руки злоумышленника такую информацию.
8.4.5. Выполнение внешних команд
В почтовом сервисе есть одна серьезная проблема — ему необходимо выполнять системные команды, а это всегда опасно. Если хакер сможет запустить такую команду без ведома администратора и с повышенными правами, то это грозит большими неприятностями. Именно поэтому мы понижали права, с которыми работает сервис, но этого недостаточно.
Чтобы запретить выполнение системных команд, необходимо заставить sendmal работать через безопасный интерпретатор команд. Для этого специально был разработан smrsh. Чтобы почтовый сервис использовал именно его, проще всего добавить следующую строку в файл sendmail.mc:
FEATURE('smrsh', '\bin\smrsh')
В данном случае в скобках указано два параметра: имя командного интерпретатора и каталог, в котором он располагается. Убедитесь, что в вашей системе именно такой путь, или измените параметр.
По умолчанию интерпретатор smrsh выполняет команды из каталога /usr/adm/sm.bin. Программы из других директорий запускать невозможно. Если в каталоге /usr/admsm.bin находятся только безопасные программы, то ваша система будет менее уязвима.
8.4.6. Доверенные пользователи
В сервисе sendmail можно создать список пользователей, которым вы доверяете отправлять сообщения без каких-либо предупреждений. Этот перечень находится в файле /etc/mail/trusted-users. Я не рекомендую вам здесь указывать реальных пользователей.
Но файл все же может быть полезен. В него можно добавить пользователя apache, чтобы проще было рассылать письма из Web-сценариев.
8.4.7. Отказ от обслуживания
Почтовые серверы довольно часто подвергаются атакам типа DoS, потому что они должны принимать соединения для обслуживаемых почтовых ящиков от любых пользователей. Таким образом, подключение на 25 и 110 порты, чаще всего, общедоступны.
Для защиты сервера от DoS-атак со стороны хакера нам помогут следующие параметры сервиса sendmail:
□ MaxDaemonChildren — ограничение количества одновременно запущенных процессов. С помощью этого параметра мы можем защитить ресурсы сервера (процессор) от излишней перегрузки. По умолчанию установлено значение 12, но для мощного компьютера его можно повысить, чтобы эффективнее использовать процессор, а для слабого — уменьшить;
□ ConnectionRateThrottle — максимальное количество открываемых соединений в секунду. По умолчанию этот параметр равен 3, и повышать его без особой надобности не стоит, только если вы уверены в производительности сервера.
8.5. Почтовая бомбардировка
С почтовой бомбардировкой я встретился первый раз почти 10 лет назад. Однажды я в чате оставил свой E-mail (до этого я никогда не светил своим адресом), и как назло в этот момент там сидел начинающий хакер, который просто ради шутки забросал меня почтовыми бомбами.
Что такое почтовая бомба? Это простое письмо с бесполезным содержимым любого размера. Хакеры забрасывают свою жертву такими посланиями, чтобы переполнить ящик и лишить его возможности принимать другие сообщения. Классическая задача DoS, только в отношении почтового ящика.
На первый взгляд, необходимо просто увеличить размер ящика или убрать лимит вовсе. Это самое неверное решение, поэтому забудьте про него. Если ящик не будет иметь предела, то хакер сможет произвести атаку DoS на сервер.
Почтовые сообщения — единственный способ закачать информацию на сервер. Когда злоумышленник отправляет E-mail-письмо, оно сохраняется там, пока не будет скачано пользователем. Слишком большое количество информации займет все пространство на жестком диске, и сервер больше не сможет принимать сообщения ни на один из почтовых ящиков.
Самая худшая ситуация при почтовой бомбардировке может возникнуть, когда почтовые ящики располагаются в директории по умолчанию (раздел /var). Если этот раздел будет переполнен, то сервер не сможет больше записывать в него информацию. В разделе /var хранятся еще и журналы безопасности. Если они не смогут пополняться, то сервер окажется полностью недоступным.
Ограничения на используемое под хранение писем пространство необходимо. Лучше потерять контроль над одним почтовым ящиком, чем над всем почтовым сервером.
От почтовой бомбардировки защититься нельзя, но можно попытаться усложнить задачу злоумышленника. Для этого нам понадобятся параметры, которые мы рассматривали в разд. 8.4.7. Помимо этого, желательно ограничить максимальный размер сообщения с помощью параметра MaxMessageSize до приемлемых пределов. Таким образом, злоумышленнику придется направлять на сервер множество маленьких писем вместо нескольких больших.
8.6. Спам
Проблема XXI информационного века — рассылка нежелательной корреспонденции. Это действительно болезнь, с которой надо бороться, а существующие методы пока не приносят необходимого результата, и спам отнимает большую часть нашего трафика.
Один из способов борьбы с нежелательной корреспонденцией — запрет серверов, с которых приходит спам. Но те, кто занимаются такими рассылками, находят все новые пути для обхода барьеров, в том числе использование общедоступных или взломанных в Интернете серверов.
Если хакер задействует ваш сервер для рассылки спама, то это грозит следующим:
□ лишние расходы на трафик, если вы оплачиваете каждый гигабайт информации;
□ дополнительная нагрузка на ресурсы. Рассылки в основном массовые и отнимают много процессорного времени, тем самым загружая канал связи.
Но помимо этого, если ваш сервер пару раз разошлет спам, он может попасть в черный список, и тогда вся ваша корреспонденция будет фильтроваться и не дойдет до адресата. Благодаря этому хакер может даже провести атаку DoS на почтовый сервис.
8.6.1. Блокировка приема спама
Прием нежелательной корреспонденции приводит к следующим негативным последствиям:
□ как мы уже говорили, излишние расходы на трафик, которые постоянно увеличиваются;
□ отвлекает внимание сотрудников вашей организации или пользователей сети, пользующихся услугами почтового сервера;
□ спам-сообщения нередко занимают слишком много места, и для их хранения на сервере требуется дополнительное дисковое пространство.
Причин борьбы со спамом намного больше, и я надеюсь, что описанных ваше уже достаточно, чтобы вы начали предпринимать какие-либо меры.
Фильтрация серверов
В sendmail есть возможность фильтровать серверы, с которых приходит нежелательная почта. Для этого лучше всего в файле sendmail.mc добавить строку с запретом. Проблема в том, что для различных версий sendmail эта строка выглядит по-разному:
Версия 8.10:
FEATURE(dnssbl, 'spam.domean.com', ' 550 Mail not accepted from this domain')dnl
Версия 8.11:
HACK('check_dnsbl', 'spam.domean.com', '', 'general', 'reason')dnl
В обеих строках spam.domean.com нужно заменить на адрес домена, с которого рассылается спам, чтобы заблокировать соединение с ним. Этот метод не очень эффективен, потому что были случаи, когда ошибочно блокировались безобидные серверы.
Однажды мой сервер, с которого происходит продажа программного обеспечения, был заблокирован в одном из спам-листов. Это были времена, когда в черные списки попадали и по делу, и просто так. Когда я рассылал своим пользователям их регистрационные ключи, то 10% сообщений возвращалось. Таким образом, некоторые пользователи не могли работать с нашими программами. Такое продолжалось в течение месяца, пока не убедились, что спам-листы перестали быть эффективными, и стали искать другие методы.
Фильтрация сообщений
Более точный метод — блокировка сообщений по их содержимому. Специализированная программа анализирует всю информацию, которая проходит через сервер, и ищет характерные признаки спам-рассылки. Если письмо определяется как спам, то оно удаляется.
Этот способ более эффективный, но по тексту очень сложно определить, является ли письмо рекламной рассылкой. Хакеры постоянно ищут новые пути обхода таких блокировок, поэтому процент фильтрации достаточно невысок. Вы можете настроить программу так, что она будет уничтожать все сообщения, в которых есть слова "купи", "продаю" и тому подобные термины, характерные для спама, но тогда могут быть удалены и необходимые вам письма.
Я не буду советовать никаких программ фильтрации нежелательной почты, потому что не вижу идеального решения. Но если вы захотите использовать подобный способ, то хочу только обратить ваше внимание на программу Spamassassin (http://spamassassin.apache.org/). В ней реализовано множество проверок, которые позволяют достаточно эффективно определять нежелательные сообщения.
Помимо этого, может пригодиться изменение параметра MaxRcptsPerMessage (команда sendmail сервера), который устанавливает максимальное количество получателей сообщения. Если их более 100, то это однозначно указывает на спам. Хотя в некоторых организациях используются почтовые рассылки всем сотрудникам, которые могут содержать до 1000 адресатов. В этом случае может быть уничтожено очень важное письмо, поэтому необходимо, чтобы администраторы отправляли письма не более чем 20 получателям за один раз.
8.6.2. Блокировка пересылки спама
При конфигурации почтового сервиса вы должны сделать так, чтобы злоумышленники не смогли посылать свой спам через ваш сервер. Вам необходимо произвести несколько настроек, чтобы массовая рассылка перестала быть эффективной:
□ по умолчанию протокол SMTP не требует авторизации, поэтому любой пользователь может подключиться к серверу и отправить письмо. Чтобы избежать этого, можно выполнить одно из следующих действий:
• запретить с помощью сетевого экрана подключение к SMTP-порту пользователей, которые находятся вне вашей сети. Эту защиту чаще всего используют провайдеры и администраторы частных или корпоративных сетей. С реализацией этого метода у вас не должно возникнуть проблем, потому что мы уже не раз ее рассматривали;
• разрешать отправку почты только в течение определенного времени (например, 10 минут) после приема почты по протоколу POP3. В момент проверки почты сервер производит авторизацию клиента, и по этим данным может временно создаваться разрешающая запись в сетевом экране (или другим способом) для доступа к SMTP. Теперь в течение 10 минут с этого IP-адреса можно проверять почту;
• использовать авторизацию SMTP. Изначально в стандарте на протокол отправки сообщений нет ничего об идентификации пользователя, поэтому не все серверы поддерживают ее. Но в sendmail и других мощных пакетах есть расширение, которое позволяет сделать авторизацию;
□ запретить отправку слишком большого количества писем с одного и того же IP-адреса. Вполне нормальным числом является 20. Пользователь не должен иметь права посылать более 20 писем за 10 минут;
□ запретить отправку писем большому количеству получателей, список которых может содержаться в поле "CC".
Существуют и другие методы, но даже этих будет достаточно.
В последних версиях sendmail уже по умолчанию разрешается пересылка почты только с тех компьютеров, которые прописаны в файле /etc/mail/access. В листинге 8.2 приведено содержимое этого файла.
Листинг 8.2. Файл /etc/mail/access
# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file, (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# Смотрите файл /usr/share/doc/sendmail/README.cf для получения
# информации по формату файла (ищите слово access_db в этом файле)
#
# by default we allow relaying from localhost...
# По умолчанию мы разрешаем рассылку только с локального хоста
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
В этом файле можно оставить разрешение для рассылки почты только с компьютеров внутренней сети или самого сервера. Для этого файл должен содержать следующие записи:
localhost RELAY
your_domain.com RELAY
Все остальные не смогут выполнять рассылку писем. Такой метод хорош только в том случае, когда серверы и компьютеры защищены. Если хакер проник в сеть, то он уже сможет разослать любой спам от имени пользователя сети. От этого никуда не деться. Если есть хоть какое-то разрешение, то им можно воспользоваться, и ваша задача сделать так, чтобы это было по крайней мере очень сложно.
Запрет рассылки не всегда может быть реализован, поэтому приходится использовать другие методы, например, заставить пользователей проверять почту по протоколу POP до отправки писем. Для осуществления этого метода можно воспользоваться сервисом pop-before-smtp (http://popsmtp.sourceforge.net), который проверяет журнал сообщений /var/log/maillog, и если в нем найдена удачная авторизация за определенный период, то отправка почты разрешена.
Единственный, но существенный недостаток этого способа заключается в том, что если на пути следования письма стоит анонимный прокси-сервер или маскирующий сетевой экран, то пакеты будут приходить с другим IP-адресом. Это значит, что все пользователи, которые подключены через тот же proxy/Firewall, также автоматически считаются авторизованными. Таким образом, поиск по IP-адресу записей в журнале не может дать 100 % защиты.
Наиболее предпочтительным является метод, при котором используется SMTP-авторизация (SMTP AUTH), которая описана в RFC 2554. В сервисе sendmail поддержка этого расширения существует еще с версии 8.10.
Если вы решили использовать SMTP AUTH, то убедитесь, что почтовые клиенты пользователей имеют возможность авторизации на сервере и при этом настроены на ее использование.
8.7. Заключение
Работу электронной почты мы рассмотрели поверхностно, потому что конфигурирование sendmail требует отдельной книги. В документации, которая идет с ОС (ее можно найти в каталоге /usr/share/sendmail-cf), вы можете прочитать достаточно подробные инструкции по настройке сервиса. Если в любой поисковой системе запустить поиск по контексту "Конфигурирование Sendmail", то перед вами откроется большой список материалов по этой теме.
Если этого окажется недостаточно, то можно приобрести книгу по данной теме, например, Sendmail, авторы Bryan Costales, Eric Allman, издательство O'Reilly.
Если вы только начинаете изучать почтовый сервис sendmail, то я рекомендую отталкиваться от конфигурационного файла по умолчанию.