Наиболее распространенными методами шифрования на данный момент являются:
□ 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 <[email protected]>
(host map: lookup (flenovm.ru): deferred)
<[email protected]>
Из первой строки видно, что в очереди находится одно сообщение. Вторая строка включает дату посылки и адрес отправителя — [email protected] В последней строке отображается получатель сообщения — [email protected];
□ 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', 'binsmrsh')
В данном случае в скобках указано два параметра: имя командного интерпретатора и каталог, в котором он располагается. Убедитесь, что в вашей системе именно такой путь, или измените параметр.
По умолчанию интерпретатор 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, но для мощного компьютера его можно повысить, чтобы эффективнее использовать процессор, а для слабого — уменьшить;