Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora
В данной теме»Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora» я расскажу как я установил Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora. В сочетании именно таких утилит, удобно и хорошо работать.
Первым делом что нам нужно сделать это нужно удалить Sendmail если мы хотим установить Postfix, а они не дружат между собой.
# yum erase sendmail ssmtp
Или:
# yum remove sendmail ssmtp
Следующим действием следует отключение SELinux (если не знаете как это сделать, читаем материал):
Как отключить SELinux на CentOS?
Выше предоставил хороший мануал как это лучше сделать.
Если имеется firewall на сервере, необходимо разрешить доступ к следующим портам:
- SMTP работает на: 25
- POP3 работает на: 110
- IMAP работает на: 143
- SMTP (безопасный) работает на: 465
- MSA работает на: 587
- IMAP (безопасный) работает на: 993
- POP3 (безопасный) работает на: 995
Нужно выключить iptables для этого выполните:
# /etc/init.d/iptables stop # chkconfig iptables off
PS: Не обязательно выключать IPtables, а верным решением — будет проброс нужных портов для использования почты. Для этого, можно ознакомится со следующей статьей:
Открытие портов в IPtables для почты на Linux
Имеется:
1. Имя хоста : captain-notes
2. Ip адресс : 31.187.70.238
3. Доменное имя ( мой домен) : linux-notes.org
Всю эту информацию можно получить выполнив команду:
# vim /etc/hosts
Настройка DNS
Очень важно настроить DNS-записи, в частности записи MX, на панели управления доменом. Войдите в свою панель управления доменом и измените настройки DNS, чтобы добавить следующие записи записей MX. Типичная запись MX будет выглядеть следующим образом:
Type Host Destination Priority TTL MX @ mail.linux-notes.org 10 3600 A mail 31.187.70.238 3600
Где MX (Mail Exchangers) — является типом записи. Далее идет значение для хоста, вы можете либо ввести свое доменное имя, либо вы также можете использовать @, который представляет значение имени зоны, которое совпадает с вашим именем домена. Далее вам нужно будет ввести имя хоста или полное доменное имя вашего почтового сервера.
Следующее значение является приоритетом. Самое низкое число является приоритетом. Например, 0 будет иметь наивысший приоритет, а 20 будет иметь более низкий приоритет. Приоритет используется, потому что мы можем добавить несколько записей MX для одного домена, почта пересылается на сервер с самым высоким приоритетом. Если сервер с наивысшим приоритетом недоступен, почта будет перенаправлена на сервер, имеющий второй наивысший приоритет. Далее идет TTL( Time to Live).
Очень важно, чтобы вы также установили запись A для вашего имени хоста полного FQDN почтового сервера. Опять выберите тип — запись A, хост должен быть именем хоста, которое вы используете в своем FQDN, например, в этом случае мы использовали имя хоста как mail.linux-notes.org, следовательно наш хост будет почтой. Затем, в пункте назначения, введите IP-адрес вашего сервера.
После того, как вы настроите свои настройки DNS, вам нужно будет подождать некоторое время, чтобы распространить DNS. Обычно это занимает около двух часов. После распространения вы можете проверить свои записи MX и убедиться что все прошло хорошо. Это можно сделать несколькими способами:
- Используя онлайн утилиты
- Локально ( через консоль)
Я приведу пример с использованием консоли.
Для начала, смотрим какую информацию содержит домен:
$ dig linux-notes.org
31.187.70.238
И проверяем какие NS-ы используется:
$ dig NS linux-notes.org +short ns2.r01.ru. ns1.r01.ru.
И, финальная проверка на работоспособность MX:
$ dig MX linux-notes.org +short @ns1.r01.ru. 10 mail.linux-notes.org.
И на всякий случай:
$ host mail.linux-notes.org ns1.r01.ru. Using domain server: Name: ns1.r01.ru. Address: 89.111.160.32#53 Aliases: mail.linux-notes.org has address 31.187.70.238
Как видно с вывода, все работает корректно.
Архитектура почтовых систем
Архитектура почтовых систем, выглядет так:
Но более детально я расскажу немного позже.
И так, я в своей статье приведу пример установки:
- MTA – почтовый сервер -Postfix (SMTP);
- MDA – сервер Dovecot (POP3/IMAP);
- Squirrelmail – веб-интерфейс для пользователей.
Перед настройкой postfix нам необходимо настроить SSL, который будет использоваться для шифрования и защиты электронных писем. Для этого, я создам папку в которой будут содержаться сертификат и ключ:
# mkdir /etc/postfix/ssl && cd $_
Теперь, нужно будет создать SSL-сертификаты. Если у вас нет установленного openssl, вы можете установить его, используя следующую команду:
# yum -y install openssl
Теперь запустите следующую команду, чтобы создать сертификат и ключ:
# openssl req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -nodes -days 365
Вот пример моего:
Generating a 2048 bit RSA private key ......................+++ .......................+++ writing new private key to 'server.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:UA State or Province Name (full name) []:Ukraine Locality Name (eg, city) [Default City]:Kiev Organization Name (eg, company) [Default Company Ltd]:linux-notes Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:captain-notes Email Address []:solo.metal@bigmir.net
А сейчас, можно приступать к установки постфикса.
Но перед тем как мы это сделаем,я создам тестового пользователя для теста и назову его ‘Postfix’, так же установим мы ему пароль.
# useradd mail_user # passwd mail_user
Установка почтового сервера — Postfix.
Установим необходимое ПО:
# yum install cyrus-sasl cyrus-imapd -y
Пожалуй я начну установку почтового сервера под названием postfix:
# yum install postfix -y
Нужно сейчас поправить немного конфигурационый файл Postfix.
Раскомментируйте нужные строчки (удалите знак #) в конфиге в вашей конфигурации которые сопоставляются с вашей почтовой системой:
# vim /etc/postfix/main.cf
И приводим к такому виду:
# # Строка № 75 или где то приближенно - раскоментируйте и установите имя для почтового сервера FQDN # # myhostname = your-host-name # у меня это captain-notes # # строка 83 или где то рядом - раскомментируйте и пропишите ваше доменное имя # # mydomain = your_domain_name # у меня это linux-notes.org # # Строка 99 (у вас может немного отличаться) - просто раскомментировать # # myorigin = $mydomain # # Строка 116 # # inet_interfaces = all # # Линия 119 - Изменить на all # # inet_protocols = all # # Линия 164 - закомментируйте ее# # #mydestination = $myhostname, localhost.$mydomain, localhost, # # Линия 165 - Раскомментировать # # mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain # # Линия 264 - Раскомментировать и добавить диапазон IP-# # mynetworks = your_IP's, 127.0.0.0/8 # # Линия 419 - Раскомментировать # # home_mailbox = mail/
- myhostname: имя хоста системы (зостнейм).
- mydomain: это доменное имя для почтового сервера (это может быть реальное или фальшивое доменное имя).
- myorigin: это доменное имя, которое, по-видимому, отправляет и доставляет почту.
- inet_interfaces: устанавливает сетевые интерфейсы, на которые Postfix может получать почту. Они должны включать по крайней мере localhost и локальный домен.
- mydestination: список доменов на которые будут доставлена почта (то есть этот сервер является конечным адресом электронной почты, адресованным этим доменам).
- mynetworks: список доверенных IP-адресов, которые могут отправлять или ретранслировать почту через сервер. Пользователи, пытающиеся отправить электронную почту через сервер ( IP которых не было прописано тут), будут отклонены.
- relay_domains: список доменов назначения, на которые эта система будет отправлять почту. Установив его пустым, это гарантирует, что наш почтовый сервер не действует как открытое реле для ненадежных сетей.
- home_mailbox: задает путь к почтовому ящику относительно домашнего каталога пользователей и также определяет стиль почтового ящика, который будет использоваться. Postfix поддерживает как форматы Maildir, так и mbox, и читателям рекомендуется читать о достоинствах каждого для себя. Однако в этой статье мы выбрали формат Maildir (конечная косая черта указывает формат Maildir. Чтобы указать формат mbox, читатель будет использовать home_mailbox = Mailbox).
Мой готовый и рабочий конфиг…..
$ cat /etc/postfix/main.cf | grep -Ev '^$|^#' queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = captain-notes mydomain = linux-notes.org myorigin = $mydomain inet_interfaces = all inet_protocols = all mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain virtual_alias_maps = hash:/etc/postfix/virtual unknown_local_recipient_reject_code = 550 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 31.187.70.238 relayhost = recipient_delimiter = + home_mailbox = mail mailbox_command = /usr/bin/procmail -f -a "$USER" header_checks = regexp:/etc/postfix/header_checks smtpd_banner = $myhostname ESMTP $mail_name biff = no debug_peer_level = 2 debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5 sendmail_path = /usr/sbin/sendmail.postfix newaliases_path = /usr/bin/newaliases.postfix mailq_path = /usr/bin/mailq.postfix setgid_group = postdrop html_directory = no manpage_directory = /usr/share/man sample_directory = /usr/share/doc/postfix-2.10.1/samples readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES message_size_limit = 10485760 mailbox_size_limit = 1073741824 #mailbox_size_limit = 0 smtpd_use_tls = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = #smtpd_sasl_local_domain = smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_auth_enable = yes smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination smtp_tls_security_level = may smtpd_tls_security_level = may smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 smtpd_tls_key_file = /etc/postfix/ssl/server.key smtpd_tls_cert_file = /etc/postfix/ssl/server.crt smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom smtpd_tls_protocols = !SSLv2, !SSLv3
Теперь откройте другой конфигурационный файл:
# vim /etc/postfix/master.cf
Находим:
# service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd
И прописываем ( вставляем строки ниже):
submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING
Полный конфиг выглядит вот так:
$ cat /etc/postfix/master.cf | grep -Ev '^$|^#' smtp inet n - n - - smtpd submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_wrappermode=no -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth smtps inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o milter_macro_daemon_name=ORIGINATING pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp relay unix - - n - - smtp showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache
После чего делаем перезапуск постфикса:
# /etc/init.d/postfix restart
или просто запустите выполнив:
# service postfix restart
Разницы особой нет в этих 2 командах.
PS: Если имеется CentOS/RHEL 7:
# systemctl restart postfix
Добавим сервис в автозагрузку:
# chkconfig postfix on
PS: Если имеется CentOS/RHEL 7:
# systemctl enable postfix
Время протестировать работу сервера. Отправим 1 тестовое письмо.
Этом можно сделать следующим образом:
# telnet localhost 25
Так же можно использовать команду:
# telnet localhost smtp
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 captain-notes ESMTP Exim 4.77 Sun, 08 Jun 2014 21:00:57 -0400
ehlo localhost # Введите данную команду #
250-captain-notes Hello localhost [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
mail from:<mail_user> # Введите эту команду — почта, адрес отправителя. Пользователь Postfix -созданный выше #
250 OK
rcpt to:<mail_user> ## Введите этот — адрес электронной почты для приема почты # #
250 Accepted
data # # Введите это вход с электронной почты # #
354 Enter message, ending with «.» on a line by itself
для теста, введу просто слово test # # Введите текст письма # #
. ## Символ «.» (точка) служит для завершения текста письма.##
250 OK id=1WtnyS-0007f6-EV
quit ## Выход.##
221 captain-notes closing connection
Connection closed by foreign host.
[root@captain-notes linux-notes.org]#
Чтобы увидеть что работает нужно перейти в папку и посмотреть:
# ls /home/mail_user/mail/new/
Выдаст:
1657554886.Vfd00la67f8M778970.captain-notes
Можно вывести это сообщение с помощью команды «cat». Ниже приведена таблица с командами для postfix.
Мы установили Postfix SMTP-сервер на CentOS /Redhat/Fedora и следующим шагом будет установка Dovecot.
Добавлю то, что все логи почтового сервера сохраняются в папке /var/log/mail/. По этому, если нужно прочитать их в реальном режиме времени, выполните:
# tail -f /var/log/mail/info
Иногда нужно бывает посмотреть на очередь сообщений сервера, то делается это:
# mailq
Можно так же форсировать отправку писем из очереди:
# postfix flush
При проверке лога (maillog), получил ошибку:
Command output: procmail: Couldn't create "/var/spool/mail/nobody" procmail: Couldn't read "//captain" )
Решил ее:
$ sudo chmod g+s /usr/bin/procmail
Установка Dovecot,POP3/IMAP-сервера на CentOS /Redhat/Fedora
Dovecot является утилитой с открытым исходным кодом IMAP и POP3 почтовый сервер для систем Unix и Linux.Чтобы начать установку, просто выполните команду:
# yum install dovecot -y
После чего нужно настроить конфигурацию Dovecot.
Редактируйте эти строки, чтобы использовать постфиксное использование пользователя и группу для Dovecot:
# vim /etc/dovecot/conf.d/10-master.conf
И приводим к виду:
# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix }
Идем далее, открываем следующий файл:
# vim /etc/dovecot/conf.d/10-auth.conf
Находим:
[...] auth_mechanisms = plain [...]
Меняем на:
auth_mechanisms = plain login
Раскоментируйте (удалите #), чтобы определить каталог почты, которую мы определили в конфигурации Postfix:
# vim /etc/dovecot/conf.d/10-mail.conf
Находим
[...] #mail_location = [...]
Меняем на:
mail_location = mail:~/mail
Почти уже закончили, но нужно изменить следующий файл:
# vim /etc/dovecot/conf.d/20-pop3.conf
Находим:
#pop3_uidl_format = %08Xu%08Xv
Приводим к виду:
pop3_uidl_format = %08Xu%08Xv
Раскомментируйте (удалите #), нужно открыть IMAP, POP3 на Dovecot
# vim /etc/dovecot/dovecot.conf
Приводим к виду:
[...] # Protocols we want to be serving. protocols = imap pop3 # у меня все было по дефолту и я не менял тут ничего. [...]
Перезапустите службу Dovecot:
# /etc/init.d/dovecot restart
Или:
# service dovecot restart
PS: Если имеется CentOS/RHEL 7:
# systemctl restart dovecot
Добавим сервис dovecot в автозагрузку:
# chkconfig dovecot on
PS: Если имеется CentOS/RHEL 7:
# systemctl enable dovecot
Тестовое соединение и проверка почты на Dovecot
# telnet localhost pop3
Trying ::1…
Connected to localhost.
Escape character is ‘^]’.
+OK Dovecot ready.
user mail_user # # Войдите в систему как пользователь Postfix # #
+OK
pass mail_user_password # # Ввод пароля пользователя # #
+OK Logged in.
list
+OK 1 messages:
1 442
.
retr 1
+OK 442 octets
Return-Path: <Postfix@linux-notes.org>
X-Original-To: Postfix
Delivered-To: Postfix@linux-notes.org
Received: from localhost (localhost [127.0.0.1])
by mail.linux-notes.org (Postfix) with ESMTP id D2897A1DFE
for <admin>; Sat, 12 March 2014 04:32:17 -0700 (PDT)
Message-Id: <20141111123232.D2897A1DFE@mail.linux-notes.org>
Date: Sat, 12 Oct 2013 04:32:17 -0700 (PDT)
From: Postfix@linux-notes.org
To: undisclosed-recipients:;test
.
quit
+OK Logging out.
Connection closed by foreign host.
Мы установили Dovecot на нашем сервере Mail. Пользоваться консольной отправкой писем неудобно,по этому я установлю веб-интерфейс, на примере Squirrelmail.
Нужно установить SquirrelMail.
Установите репозиторий EPEL на CentOS / Redhat/Fedora
И выполните команду для установки:
# yum install squirrelmail
Настройка Squirrelmail измените параметры в зависимости от требований.
# cd /usr/share/squirrelmail/config/ # ./conf.pl
Начнем по порядку, вводим цифру 1.
Введите название организации и нажмите Enter:
linux-notes.org
К таким образом, настройте все детали, такие как организация, логотип, название провайдера в приведенном выше мастера. После того как вы закончите, нажмите кнопку «S», чтобы сохранить изменения и нажмите «R», чтобы вернуться обратно в главное меню.
Теперь введите «2» и перейдем к настройкам сервера почты, нужно тут будет ввести доменное имя и почтового агент и т.д.:
Введите «1», ввод почтового домена (например у меня это linux-notes.org) и нажмите клавишу ввода.
Введите «3» и перейдите от Sendmail к Postfix (т.е. SMTP):
Введите «2», чтобы переключиться с почтовой системы Sendmail на Postfix как показано на рисунке ниже.
Теперь введите «S», а затем «Q» для сохранения и выхода конфигурацию с Squirrelmail.
Теперь нужно создать squirrelmail виртуальный хост в конфиге апача:
# vim /etc/httpd/conf/httpd.conf Alias /squirrelmail /usr/share/squirrelmail <Directory /usr/share/squirrelmail> Options Indexes FollowSymLinks RewriteEngine On AllowOverride All DirectoryIndex index.php Order allow,deny Allow from all </Directory>
# /etc/init.d/httpd restart
После все всей установки я создам пользователя captainua и создадим ему пароль:
# useradd captainua # passwd captainua
Чтобы проверить работу перейдите по ссылке:
http://your_ip_server/squirrelmail/src/configtest.php
Чтобы начать пользоваться почтой перейдите по ссылке:
http://your_ip_server/squirrelmail/src/login.php
Включим свои iptables:
# /etc/init.d/iptables start # chkconfig iptables on
Вот и все пока. Мы успешно настроили локальный почтовый сервер, который будет служить для приема / отправки писем в локальной сети. Но если хотите настроить общественный почтовый сервер для отправки и получения почты для внешней вашей сети, то вы должны настроить почтовый сервер с открытым IP и вписать MX- записи вашего почтового сервера в их DNS-сервера, и все, готово! Все будет так же, как я описал выше.На этом я завершу свою тему «Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora». Спасибо что используете мой сайт.
Привет!
/home/mail_user/mail/new/ — ты это откуда берешь?
Отличная статья!
Очень мне помогла в настройке простой домашней почтовой системы для проверки нотификаций.
Автор молодец! так держать.
Спасибо. Очень рад что сайт помогает не только мне, но и другим людям 😉