Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora

Установка почтового сервера 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 mail

команды postfix mail

Мы установили 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
главное меня Squirrelmail для установки

главное меня Squirrelmail для установки

Начнем по порядку, вводим цифру 1.

конфигурация SquirrelMail

конфигурация SquirrelMail

Введите название организации и нажмите Enter:
linux-notes.org

К таким образом, настройте все детали, такие как организация, логотип, название провайдера в приведенном выше мастера. После того как вы закончите, нажмите кнопку «S», чтобы сохранить изменения и нажмите «R», чтобы вернуться обратно в главное меню.

Теперь введите «2» и перейдем к настройкам сервера почты, нужно тут будет ввести доменное имя и почтового агент и т.д.:

конфигурация SquirrelMail, вкладка под номером 2

конфигурация SquirrelMail, вкладка под номером 2

Введите «1», ввод почтового домена (например у меня это linux-notes.org) и нажмите клавишу ввода.

Введите «3» и перейдите от Sendmail к Postfix (т.е. SMTP):

конфигурация SquirrelMail, вкладка под номером 3

конфигурация SquirrelMail, вкладка под номером 3

Введите «2», чтобы переключиться с почтовой системы Sendmail на Postfix как показано на рисунке ниже.

переключиться с почтовой системы Sendmail на Postfix

переключиться с почтовой системы 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». Спасибо что используете мой сайт.

3 thoughts on “Установка почтового сервера Postfix, Dovecot и SquirrelMail в CentOS/Redhat/Fedora

  1. Отличная статья!
    Очень мне помогла в настройке простой домашней почтовой системы для проверки нотификаций.

    Автор молодец! так держать.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *