ЕВГЕНИЙ ЛИТВИНЕНКО
Настраиваем основные компоненты почтового сервера
Конфигурирование почтового сервера – задача далеко не легкая. Множество почтовых программ и их настроек могут стать для неопытного системного администратора настоящей головной болью. Описываемая в статье система проста в конфигурировании и практически не требует отладки.
С егодня мы рассмотрим настройу почтового сервера на базе ALT Linux Master 2.4. Настройка системы основывается на проекте TNMailServer Project (http://www.techie.org/Projects/TNMailServer-Full.aspx), создатели которого предоставили структуру базы данных и удобный веб-интерфейс для администрирования почтового сервера. Проект TNMailServer отличается от аналогов простотой в настройке.
Почтовый сервер состоит из нескольких взаимосвязанных элементов. Наличие некоторых из них является обязательным, других – опциональным. В нашем случае используется следующая рабочая связка: Postfix + MySQL + Courier?IMAP + fetchmail + SquirrelMail. Рассмотрим функциональное назначение отдельных компонентов:
- Postfix – популярный MTA (Mail Transfer Agent), предназначенный для приема/передачи писем.
- MySQL – сервер баз данных. В данном случае он необходим для хранения пользовательских аккаунтов. Вместо него можно использовать другие БД, например, PostgreSQL или службу каталогов LDAP. А можно и просто текстовые файлы.
- Courier-IMAP – сервис доступа к почте, поддерживающий протокол IMAP4 и POP3 (опционально).
- Fetchmail – утилита для приема почты. В ее задачи входит доставка почты от провайдера. Используется только в том случае, если реальный почтовый ящик находится у провайдера. (Данная методика также может применяться, если канал доступа к сети Интернет недостаточно широк. Таким образом, письма ходят по каналу не постоянно, а забираются через определенные промежутки времени).
- SquirrelMail – удобный и простой веб-интерфейс для доступа к почте.
Для установки вышеперечисленных пакетов дается следующая команда:
# apt-get install postfix postfix-mysql courier-imap courier-authdaemon-mysql fetchmail squirrelmail
Конфигурирование базы данных
Теперь необходимо создать базу данных и таблицы в ней. Структуры таблиц создаются согласно рекомендациям разработчиков проекта TNMailServer (см. файл на сайте журнала www.samag.ru, в разделе «Исходный код» или на сайте проекта TNMailServer Project – http://techie.org/Projects/TNMailServer.aspx?selForm=01-Introduction).
Сервер принимает запросы к базе данных по запуску следующей команды:
# mysql -u root -p
Названия полей непринципиальны, так как в конфигурационном файле Postfix указывается, что в конкретном поле будет храниться.
Настройка Postfix
Далее настраиваем Postfix. Конфигурационные файлы пакета находятся в каталоге /etc/postfix. В файле main.cf изменяются следующие параметры:
myhostname = mail.net.lps
указываем доменное имя почтового узла.
mydomain = net.lps
в этом параметре указывается имя обслуживаемого домена.
inet_interfaces = 127.0.0.1
в параметре указываются сетевые интерфейсы, на которых принимает запросы Postfix. Так как в дальнейшем работа с почтой будет производиться через веб-интерфейс, то указываем только loopback-интерфейс, что повышает уровень безопасности системы в целом. Теперь к Postfix могут обратиться только локальные приложения.
virtual_mailbox_base = /opt/vmail
указываем каталог, в котором будет храниться содержимое почтовых ящиков.
В приведенном примере используется каталог /opt, так как он расположен на отдельном разделе. Традиционно почта хранится в каталоге /var.
virtual_mail_box = 50000000
в этом параметре назначается максимальный размер почтового ящика (~50 Мб).
Теперь необходимо указать поля базы данных, которые будет использовать Postfix:
virtual_alias_maps = proxy:mysql:/etc/postfix/ TNMailServer-Alias.cf
данная переменная отвечает за извлечение из базы email-адреса перенаправления почты (форвардинг).
Файл TNMailServer-Alias.cf содержит следующие данные:
user = postfix
password = password
hosts = localhost
dbname = TNMailServer
table = TNAccount
select_field = ForwardAddress
where_field = EmailAddress
additional_conditions = and active=1
где:
- user – имя пользователя базы данных;
- password – пароль;
- table – имя таблицы в базе данных;
- hosts – доменное имя хоста, на котором расположен сервер баз данных;
- dbname – имя базы данных;
- select_field – содержит имя поля таблицы, данные из которого необходимо извлечь;
- where_field – содержит имя поля, по условию которого извлекается значение из select_field.
В данном примере мы извлекаем адрес перенаправления почтовых сообщений из записи, которая содержит необходимый e-mail-адрес.
virtual_mailbox_domains = proxy:mysql:/etc/postfix/ TNMailServer-Domain.cf
этот параметр отвечает за извлечение из БД имен виртуальных доменов.
Файл TNMailServer-Domain.cf помимо общих записей содержит следующее:
table = TNDomain
select_field = Name
where_field = Name
В поле Name содержится имя виртуального домена.
virtual_mailbox_maps = proxy:mysql:/etc/postfix/ TNMailServer-Mailbox.cf
данный параметр отвечает за извлечение из БД пути к почтовому ящику.
Файл TNMailServer-Mailbox.cf содержит следующее:
table = TNAccount
select_field = MailDirLocation
where_field = EmailAddress
Поле MailDirLocation содержит путь к каталогу почтового ящика относительно пути, указанного в параметре virtual_mailbox_base.
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/ TNMailServer-Quota.cf
здесь определяется максимальный размер почтового ящика (используется, если поле содержит значение отличное от нуля, иначе используется значение, указанное в параметре virtual_mail_box из файла main.cf).
В файле TNMailServer-Quota.cf хранится следующее:
table = TNAccount
select_field = Quota
where_field = EmailAddress
Теперь необходимо указать, куда направлять почту, которая адресована во «внешний мир». Здесь определяется адрес сервера:
relay_host = gts.lg.ua
В конфигурационном файле также присутствуют строки, в которых записаны идентификаторы пользователя и группы. Этому пользователю принадлежат каталоги почтовых ящиков и их файлы. Так как работа с почтой будет производиться через веб-интерфейс, то необходимо указать идентификаторы пользователя и группы, от имени которого работает веб-сервер Apache.
Идентификаторы пользователей (UID) хранятся в файле /etc/passwd, идентификаторы групп (GID) – в файле /etc/group. Пользователь apache обычно имеет идентификатор пользователя/группы 96. Однако, чтобы в этом удостовериться, даем команду:
# id apache
Теперь необходимо внести соответствующие изменения в файл /etc/postfix/main.cf:
virtual_minimum_uid = 96
virtual_uid_maps = static:96
virtual_gid_maps = static:96
Остальные настройки можно оставить по умолчанию.
Настройка IMAP-сервера
Теперь необходимо настроить Courier-IMAP. Конфигурационные файлы сервиса находятся в каталоге /etc/courier-imap. Courier-IMAP для авторизации пользователей почты использует свой компонент authdaemon. Данный компонент может использовать различные виды серверов баз данных, для хранения пользовательских аккаунтов. Для работы с MySQL устанавливается модуль authdaemon-mysql. (Так как утилита apt-get ставит все пакеты, от которых зависит устанавливаемый пакет, то достаточно дать команду для установки пакета authdaemon-mysql, чтобы apt-get установил также пакеты courier-imap и authdaemon.)
Для того чтобы Courier-IMAP использовал authdaemon, в файле /etc/courier-imap/imapd правится следующая строка:
AUTHMODULES = "authdaemon"
В файле /etc/courier-imap/authdaemon.conf подключаем модуль поддержки MySQL:
authmodulelist="authmysql"
Используемые поля базы данных прописываются в конфигурационном файле /etc/courier-imap/authdaemon-mysql.conf:
DEFAULT_DOMAIN net.lps # имя обслуживаемого домена
MYSQL_SERVER localhost # доменное имя сервера БД
MYSQL_DATABASE TNMailServer # имя БД
MYSQL_USERNAME courier # имя пользователя БД
MYSQL_PASSWORD password # пароль
MYSQL_OPT 0
MYSQL_USER_TABLE TNAccount # имя таблицы в БД
MYSQL_LOGIN_FIELD EmailAddress # имя поля, содержащее адрес электронной почты
MYSQL_NAME_FIELD FullName # полное имя пользователя
MYSQL_CLEAR_PWFIELD Password # пароль на почтовый ящик
MYSQL_HOME_FIELD '/opt/vmail' # путь к каталогу, в котором хранится содержимое почтовых ящиков
MYSQL_MAILDIR_FIELD MailDirLocation # путь к почтовому ящику относительно пути, указанного в MYSQL_HOME_FIELD
MYSQL_GID_FIELD '96' # идентификатор группы
MYSQL_UID_FIELD '96' # идентификатор пользователя
MYSQL_QUOTA_FIELD Quota # максимальный размер ящика
# шаблон запроса
MYSQL_QUERY_LASTREAD UPDATE TNAccount SET LastLogin=now() WHERE EmailAddress=’%s’
Настройка интерфейса управления
Для администрирования системы (в частности, для создания почтовых ящиков) предназначен веб-интерфейс. Его архив находится в сети Интернет по адресу: http://www.techie.org/downloads/tnmailserveradmin-1.4.1.tgz. Указанный архив распаковывается в каталог с веб-содержимым (по умолчанию /var/www). После этого можно администрировать почтовый сервер с любого компьютера, оснащенного веб-браузером.
Тестирование и отладка системы
Создав два тестовых ящика, можно проверить работоспособность почтовой системы. Для этого необходимо подключиться к нашему SMTP-серверу через утилиту telnet:
# telnet localhost 25
Если сервер запущен, то программа покажет его приглашение:
220 mail.net.lps ESMTP Postfix |
После этого сервер готов принимать команды. Сначала необходимо «представиться», дав команду HELO имя_домена:
HELO net.lps
Сервер возвратит ответ:
Теперь можно отправлять письмо. Сначала нужно написать e-mail отправителя:
MAIL FROM:"test1@net.lps"
Если e-mail-адрес корректный, то сервер возвратит код ответа 250:
В противном случае сервер возвратит код ошибки ~500 и укажет причину. После того как сервер принял адрес отправителя, необходимо ввести адрес получателя:
RCPT TO:"test2@net.lps"
Сервер возвращает ответ:
Теперь можно вводить текст письма. Сначала дается команда DATA.
Сервер сообщит, что можно вводить текст. Для окончания ввода необходимо нажать клавиши <.> :
После окончания ввода текста можно отключаться, для чего дается команда QUIT.
После выполнения этой операции в почтовом ящике test2@net.lps должно появиться письмо от test1@net.lps. Для проверки необходимо подключиться к IMAP4- или POP3-серверу. Команды POP3-сервера несколько проще, поэтому используется подключение к POP3-серверу:
# telnet localhost 110
Корректно работающий сервер выдаст приглашение к вводу команд:
Для получения доступа к письмам нужно ввести имя пользователя и пароль:
USER test2@net.lps
PASS password
Ответ сервера:
+OK Password required
+OK logged in
|
Теперь нужно запросить количество писем в ящике. Это делается командой LIST.
Сервер выдаст ответ в следующем виде: «номер_сообщения его_размер»:
Для прочтения сообщения №1 дается команда RETR:
RETR 1
Убедившись, что сообщение дошло до адресата, отключаемся:
QUIT
Настройка веб-интерфейса
Теперь необходимо предоставить доступ пользователям к почте. Есть два варианта:
- Через порты (143 IMAP/110 POP3). Клиент может работать с почтой через почтовые программы, например, The BAT!, Outlook Express.
- Через веб-интерфейс. Клиент работает с почтой через веб-интерфейс.
Второй способ более надежен, так как доступ к сетевым портам открыт только с локальной машины. В данном проекте для доступа к почте используется SquirrelMail. При установке файлы программы копируются в каталог с веб-содержимым. Если пакет был установлен из архива, взятого на сайте разработчика, то конфигурационный файл SquirrelMail хранится в подкаталоге config пакета. Разработчики ALM немного усовершенствовали пакет. Поэтому если SquirrelMail установлен из репозитария ALM, то конфигурационный файл хранится в подкаталоге /etc/squirrelmail. А в подкаталоге config находится только символическая ссылка на файл. Однако файл править нет необходимости, так как разработчики пакета предусмотрели скрипт на языке Perl.
Запуская скрипт, мы интерактивно настраиваем все параметры. Скрипт называется config.pl, и находится он в подкаталоге config.
После запуска скрипта раскрывается меню. Настройки, касающиеся доступа к IMAP-серверу, отображаются после выбора второго пункта меню (Server Settings). Здесь указывается обслуживаемый домен (net.lps), доменное имя хоста IMAP-сервера (localhost), а также конкретное название IMAP-сервера (courier).
После выбора пункта Save Data, данные записываются в конфигурационный файл.
Настройка Fetchmail
Утилита fetchmail позволяет забирать почту от провайдера интернет-услуг и передавать ее локальной почтовой службе. Конфигурационный файл fetchmail всего один. Это /etc/fetchmailrc. В нем устанавливаются следующие параметры:
set daemon 1200
Здесь устанавливается интервал в секундах между запусками демона fetchmail. Почта забирается раз в 20 минут.
poll gts.lg.ua with proto POP3
В этой строке указываются доменное имя сервера почты провайдера (gts.lg.ua) и протокол доступа к почте (POP3).
localdomains politex-college.lg.ua
В этом параметре записывается имя домена, на который приходит почта.
user "politex" there with password "password" to * here
Здесь записывается имя пользователя почты (politex) и его пароль (password). Строка «to * here» говорит сервису, что полученную почту необходимо передавать локальному SMTP-серверу.
Теперь на файл /etc/fetchmailrc надо назначить необходимые права доступа. Утилита fetchmail довольно чувствительна к изменению прав на этот файл, и не запускается, если не выставлены необходимые права доступа. По умолчанию владелец этого файла root. Изменяем его на пользователя fetchmail:
# chown fetchmail:fetchmail /etc/fetchmailrc
Права на этот файл должны быть следующими: владелец может выполнять любые операции, группа – только запускать на выполнение:
# chmod 710 /etc/fetchmailrc
Примечание: после внесения изменений в конфигурационные файлы какого-либо сервиса, для того чтобы изменения вступили в силу, необходимо его перезапустить. Для этого дается команда:
# service имя_сервиса restart
Перечень всех сервисов можно посмотреть в каталоге /etc/rc.d/init.d.
В данной статье рассмотрено конфигурирование только самых необходимых компонентов. При желании вы можете увеличить функциональность почтового сервера, добавляя дополнительные модули (например, антивирус и спам-фильтр).