Главная > Программы > Postfix Строим почтовый сервер. Postfix+Dovecot+Mysql. Часть Первая: pop3/imap серверСтроим почтовый сервер. Postfix+Dovecot+Mysql. Часть Первая: pop3/imap серверНи для кого не секрет, что электронная почта в настоящее время является важнейшим элементом коммуникации. И хоть у меня и нет статистики, но я более чем уверен, что объем электронных почтовых сообщений уже давно превзошел объем обычных писем. Это делает электронную почту критически важным сервисом в процессе функционирования отдельного предприятия. Соответственно на системного администратора ложится тяжелый груз ответственности за функционирование этой службы. И все бы хорошо, казалось бы, поставил сервер и забыл, но... Не все так просто. Электронная почта, без преувеличения можно сказать, стала настоящим полем боя, между спаммерами, стремящимся завалить пользователя всякого рода рекламными сообщениями, и системными администраторами и программистами, стремящимися оградить пользователей от нежелательных сообщений. И я вынужден констатировать победу спаммеров, во всяком случае на сегодняшний день это так. Но тем не менее используя определенные средства можно свести объем нежелательной почты до вполне разумных пределов. В моем понимании это не более 1% от количества полезных почтовых сообщений. Вторая проблема состоит в том какое решение выбрать. Почтовых серверов несть числа. И потребитель оказывается перед нелегким выбором, что использовать. И этот выбор не легок. Хочется обеспечить максимальную безопасность и удобство, а зачастую это вещи не совместимые. Кроме этого к современным почтовым системам, бизнес предъявляет требования не свойственные классической электронной почте. Яркий пример тому Exchange компании Microsoft и Lotus от IBM. Назвать эти системы групповой работы почтовыми серверами невозможно. Скорее это комбайны, отдельной незначительной функцией которых, по недоразумению является передача почты. И к сожалению создатели этих систем в угоду функциональности принести именно безопасность. Кроме дырявости самих этих замечательных (я не иронизирую) серверов, стоит отметить и дырявость их клиентов. В отношении Outlook, это уже притча во языцах. Кроме этого встроенные средства фильтрации спама и вирусов у этих продуктов оставляют желать много лучшего. Есть сторонние платные решения, но они стоят не малых денег, увеличивая стоимость и без того не дешевых выше обозначенных продуктов. Не плохие результаты дает совмещение решений, когда в качестве релея используется свободное решение, а внутри сети сервер групповой работы Exchange или Lotus. Но в этом моем скромном труде, я не буду это рассматривать. Об этом уже написано довольно много. Но далеко не всем нужен весь функционал Exchange или Lotus, да и стоимость решения не всем по карману. Около двух лет описываемое тут решение проработало без единого глюка. Функционала данного решения вполне хватает. А безопасность несравнимо выше дорогостоящих платных решений. И это не пустые слова. Процент отклоненного спама составляет 99%, а вирусов зарегистрировано не более десятка в год. Итак перед нами стоит задача построить почтовую систему которая использует MYSQL в качестве хранилища учетных записей и паролей. Умеет фильтровать спам и вирусы. Поддерживает SMTP авторизацию и TLS. В *nix системах почта именно строится, я не оговорился. Для решения мной были выбраны
Оба эти сервера можно собрать с поддержкой MYSQL, кроме этого у Dovecot есть LDA (Local Delivery Agent) который без танцев с бубном прикручивается к Postfix. Но самое главное, с моей точки зрения, не считая легкости конфигурирования, это проверенная безопасность этих серверов. В отличие от дырявого Sendmail, в котором постоянно находили критические дыры, эти серверы были написаны с оглядкой на безопасность. Прежде чем начать устанавливать потовую систему вам нужно создать все необходимые записи в DNS. Очень важно, чтобы кроме записи в прямой зоне, была еще и запись в обратной, без этого вообще не стоит устанавливать почтовый сервер. Обратная зона ДОЛЖНА БЫТЬ. Большинство почтовых серверов ОБЯЗАТЕЛЬНО делают обратный DNS запрос и если полученный ответ не совпадает с прямым запросом, делается вывод о том, что вы спаммер. Наш сервер будет работать под управлением операционной системы CentOS x86 Так как CentOS по умолчанию предоставляет postfix собранным только с поддержкой LDAP, то нам необходимо сделать некоторые изменения, а именно отредактировать файлик /etc/yum.repos.d/CentOS-Base.repo и добавить exclude=postfix* в раздел [base] и [update], а вот в разделе [centosplus] поставить enabled=1 и добавить includepkgs=postfix* Теперь подключим дополнительный репозиторий – rpmforge. [den@centos ~]$ sudo wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.$dist.rf.$arch.rpm
[den@centos ~]$ sudo rpm -Uhv rpmforge-release-0.5.1-1.$dist.rf.$arch.rpm С репозиториями пока все. Теперь можно приступать к конфигурированию наших серверов. Я обычно начинаю с pop3/imap сервера. yum install dovecot
Переименуем файл /etc/dovecot-example.conf в /etc/dovecot.conf [den@centos ~]$ sudo vi /etc/dovecot.conf # Base directory where to store runtime data. base_dir = /var/run/dovecot/ # Каталог где Dovecot хранит свои сокеты и прочие нужные ему вещи. protocols = imap imaps pop3 pop3s listen = * # Слушаем на всех интерфейсах disable_plaintext_auth = no log_path = /var/log/dovecot/dovecot.log #Путь до файла лога info_log_path = /var/log/dovecot/info-dovecot.log #Путь до файла информационного лога #log_timestamp = "%b %d %H:%M:%S " #Формат лога ssl_disable = no #Не запрещаем SSL/TLS, для нашей схемы шифрование просто необходимо! ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem #Пути до кодированного X.509 сертификата и секретного ключа, читаются эти файлы основным процессом еще до того как привилегии будут понижены, так что доступ на чтение должен иметь только root! В /usr/share/doc/dovecto-версия/examples есть скрипт mkcert.sh с помощью которого мы все необходимое сгененрируем. ssl_key_file = /etc/pki/dovecot/private/dovecot.pem login_dir = /var/run/dovecot/login #Директория где процесс аутентификации размещает свой сокет. login_user = dovecot #Пользователь из под которого работает процесс логина. login_process_per_connection = yes #Один процесс обрабатывает один логин. Это более безопасно но требует больше ресурсов. login_processes_count = 3 #Количество запускаемых процессов логина. # Greeting message for clients. login_greeting = Dovecot ready. mail_location = maildir:/var/spool/mail/virtual/ #Очень важный для нас параметр. Место где находятся почтовые директории пользователей. #Диапазон UID пользователей, для того чтобы пользователи не пересекались с системными пользователями. Мы жестко укажем uid пользователя vmail который будет владельцем почтовых директорий. Этого пользователя и все необходимое мы создадим чуть позже. first_valid_uid = 203 last_valid_uid = 203 first_valid_gid = 203 last_valid_gid = 203 ## ## IMAP specific settings ## protocol imap { #Расположение исполняемого файла авторизации login_executable = /usr/libexec/dovecot/imap-login #Расположение исполняемого файла IMAP mail_executable = /usr/libexec/dovecot/imap #Расположение подключаемых модулей, я использую квоты. mail_plugins = quota imap_quota mail_plugin_dir = /usr/lib/dovecot/imap #Не посылаем список возможностей IMAP в приветственном сообщении login_greeting_capability = no #Обрабатываем общеизвестные ошибки IMAP клиентов. imap_client_workarounds = outlook-idle delay-newmail netscape-eoh } ## ## POP3 specific settings ## protocol pop3 { # Login executable location. #Расположение исполняемого файла pop3 авторизации login_executable = /usr/libexec/dovecot/pop3-login #Расположение исполняемого файла pop3 mail_executable = /usr/libexec/dovecot/pop3 #Не пытаемся выявить новые сообщения для pop3 ради экономии дискового ввода/вывода. pop3_no_flag_updates = no #Не поддерживаем команду LAST, некоторые почтовые клиенты ее еще поддерживают, но мне такие не попадались. pop3_enable_last = no #Формат UIDL (уникального почтового идентификатора), поставил как советует автор. pop3_uidl_format = %08Xu%08Xv #Подключаем квоты для pop3 mail_plugins = quota mail_plugin_dir = /usr/lib/dovecot/pop3 #Обрабатываем известные ошибки почтовых клиентов для pop3 pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } ## ## LDA specific settings ## protocol lda { # Куда слать отвергнутые письма. Очевидно, что раз уж они были приняты MTA, то тут они могут быть отвергнуты только по одной причине- превышении квоты. postmaster_address = postmaster@example.com #Указываем FQDN своего сервера, куда писать логи доставки и в каком формате. hostname = mail.example.com log_path = /var/log/dovecot/delivery.log info_log_path = /var/log/dovecot/delivery-info.log #Все те же квоты. mail_plugins = quota mail_plugin_dir = /usr/lib/dovecot/lda #Путь к сокету. auth_socket_path = /var/run/dovecot/auth-master } ## ## Authentication processes ## # Расположение процесса аутентификации auth_executable = /usr/libexec/dovecot/dovecot-auth auth default { #Список механизмов mechanisms = plain login #Далее начинается самое важное, указываем базу данных паролей, можно одновременно использовать несколько баз. Но у меня такой нужды не было. Поэтому используется только то, что мне необходимо. passdb sql { args = /etc/sql.conf } #База данных пользователей: userdb sql { args = /etc/sql.conf } user = root #Путь к сокету и права доступа к нему. socket listen { master { path = /var/run/dovecot/auth-master mode = 0660 # Default user/group is the one who started dovecot-auth (root) user = vmail group = vmail } client { # Assuming the default Postfix $queue_directory setting path = /var/spool/postfix/private/auth mode = 0660 #Assuming the default Postfix user and group user = postfix group = postfix } } } #Задаем квоты. plugin { quota = maildir:storage=1024000 } Теперь создадим пользователя и группу vmail который будет владельцем почты, именно от этого пользователя будет работать процесс imap и осуществляться доставка почты в ящики пользователей. sudo groupadd -g 203 vmail sudo useradd -u 203 -d /dev/null -s /bin/false -g vmail vmail
Проследите чтобы uid и gid были уникальными, выше мы указывали uid и gid именно этого пользователя и группы. Будьте внимательны. Создадим конфиг подключения к mysql для Dovecot. Как вы уже поняли это должен быть файл /etc/sql.conf driver = mysql connect = host=localhost dbname=postfix user=postfix password=yourpass
user_query = SELECT concat('/var/spool/mail/virtual/', maildir) as home, concat('maildir:/var/spool/mail/virtual/', maildir) as mail, 203 AS uid, 203 AS gid, concat('maildir:storage=', quota) AS quota FROM mailbox WHERE username = '%u' AND active = '1' password_query = SELECT username as user, password, concat('/var/spool/mail/virtual/', maildir) as userdb_home, concat('maildir:/var/spool/mail/virtual/', maildir) as userdb_mail, 203 as userdb_uid, 203 as userdb_gid FROM mailbox WHERE username = '%u' AND active = '1' Теперь нам необходимо настроить и запустить MYSQL сервер и создать базы. Я обычно начинаю с mysql. Установим базы, зададим пароль для рута, сделаем чтоб сервер запускался при старте:
[den@centos ~]$ sudo mysql_install_db
[den@centos ~]$ sudo service mysqld start Starting MySQL: [ OK ] [den@centos ~]$ sudo chkconfig mysqld on [den@centos ~]$ sudo /usr/bin/mysqladmin -u root password 'new-password' [den@centos ~]$ mysql -u root -p #Вводим свой пароль CREATE DATABASE postfix; GRANT ALL ON postfix.* TO postfix@localhost IDENTIFIED BY "yourpassword"; Теперь пишем в гугле postfixadmin и качаем последнюю версию, распаковываем и кладем в /var/www/html. mysql --database=postfix -u postfix -p < DATABASE_MYSQL.TXT
Таким образом, мы создали базу данных с таблицами для наших пользователей. [ req ]
default_bits = 1024 #Длина ключа encrypt_key = yes distinguished_name = req_dn x509_extensions = cert_type prompt = no [ req_dn ] # country (2 letter code) C=RU #Код страны # State or Province Name (full name) ST= Bobruysk Reg #Регион # Locality Name (eg. city) L=Bobruysk #Название населенного пункта # Organization (eg. company) O=Dovecot #Компания, организация Organizational Unit Name (eg. section) OU=IMAP server #Отдел в компнии, организации # Common Name (*.example.com is also possible) CN=imap.example.com #Самое важное! Тут надо написать FQDN вашего сервера! # E-mail contact emailAddress=postmaster@example.com #Контакты [ cert_type ] nsCertType = server Делаем скрипт запускаемым и выполняем его: sudo /usr/share/doc/dovecot-1.0.7/examples/mkcert.sh
Сертификат и ключ должен лежать по указанным нами путям. Но при таком раскладе почтовый клиент будет ругаться на сертификат, так что лучше его купить. Нам осталось создать директорию где будет лежать почта: sudo mkdir /var/spool/mail/vmail
И сделать хозяином этой директории созданного нами для этого пользователя vmail: sudo chown vmail:vmail /var/spool/mail/vmail
Теперь запускаем dovecot и проверяем его работоспособность: sudo service dovecot start
telnet localhost 110 В ответ мы должны получить: [den@centos ~]$ telnet localhost 110
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK Dovecot ready. С Dovecot пок все, переходим к Postfix... Copyright © ABC-BIT 2010 Главная > Программы > Postfix |