Первоначальная настройка CentOS7
1. Ставим систему. Установка стандартная. При ней создаются все необходимые разделы, раздел home размещается на lvm-томе, что позволяет в дальнейшем его расширение.
2. Настраиваем фаерволл через утилиту firewalld. В самом простом случае этого инструмента достаточно. Для более тонкой настройки можно включить стандартный iptables. Как это сделать ищите в интернете =)
Примеры:
1 2 3 4 5 6 7 8 |
#firewall-cmd --permanent --list-all (просмотр какие правила уже есть) #firewall-cmd --permanent --zone=public --set-target=DROP (действие по умолчанию) # firewall-cmd --permanent --zone=public --remove-service=smtp (удалить правило) # firewall-cmd --permanent --zone=public --add-service=smtp (добавить правило) # firewall-cmd --permanent --zone=public --add-port=2234/tcp (добавить порт) # firewall-cmd --permanent --zone=public --add-port=2234/tcp (удалить порт) |
Добавляем что нужно в нашем случае. При условии что одна сетевая в сервере:
1 2 3 4 5 6 7 8 9 10 |
# firewall-cmd --permanent --zone=public --add-service=smtp # firewall-cmd --permanent --zone=public --add-service=smtps # firewall-cmd --permanent --zone=public --add-service=imap # firewall-cmd --permanent --zone=public --add-service=imaps # firewall-cmd --permanent --zone=public --add-service=http # firewall-cmd --permanent --zone=public –add-service=https # firewall-cmd –reload (перезагрузка правил без разрыва соединений) # firewall-cmd –complete-reload (с разрывом) |
3. Ставим необходимые утилиты:
1 2 3 |
# yum install bind-utils net-utils |
4. Настраиваем часовой пояс:
1 2 3 |
# timedatectl set-timezone Europe/Moscow |
5. Проверяем установлен ли сервис синхронизации времени chrony: yum install chrony. Усли его нет то он установится. После чего включаем его:
1 2 3 4 |
# systemctl start chronyd # systemctl enable chronyd |
И проверяем запустился ли он:
1 2 3 |
# systemctl status chronyd |
6. Устанавливаем MariaDB сервер и запускаем его:
1 2 3 4 5 |
# yum install mariadb-server mariadb-devel # systemctl start mariadb # systemctl enable mariadb |
7. Запускаем первоначальную настройку МарииДБ, где ставим рут пароль, удаляем тестового пользователя и базу:
1 2 3 |
# /usr/bin/mysql_secure_installation |
8. Создаем базу данных для postfix и dovecot:
1 2 3 4 5 6 7 8 |
# mysql -p Enter password: mysql> CREATE DATABASE mail; mysql> CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfixPassword'; mysql> GRANT ALL PRIVILEGES ON `mail`.* TO 'postfix'@'localhost'; mysql> exit |
9. Ставим EPEL-репозиторий:
1 2 3 |
# sudo yum install epel-release |
10. Устанавливаем apache, php и необходимые модули:
1 2 3 4 5 6 |
# yum install httpd # yum install php php-mysql php-mbstring php-imap # systemctl enable httpd # systemctl start httpd |
11. Ставим Postfixadmin:
1 2 3 4 5 6 7 |
# yum install wget # wget https://sourceforge.net/projects/postfixadmin/files/latest/download -O postfixadmin.tar.gz # tar -C /data/www/ -xvf postfixadmin.tar.gz # mv /data/www/postfixadmin-3.2/ /data/www/postfixadmin/ # chown -R apache:apache /data/www/postfixadmin/ |
Сразу ставим dovecot (иначе не работает хеширование пароля dovecot:CRAM-MD5)
1 2 3 |
# yum install dovecot dovecot-mysql |
Создаем в /etc/httpd/conf.d файлик pfadmin.conf (в моем случае я открыл к нему доступ только из локалки):
1 2 3 4 5 6 7 8 |
<Directory "/data/www/postfixadmin/public"> Options FollowSymLinks AllowOverride all Require ip 192.168.0. </Directory> Alias /pfadmin /data/www/postfixadmin/public |
Создаем в директории /data/www/postfixadmin папку templates_c и даем на нее полные права для apache:apache
Копируем файл config.inc.php в config.local.php и правим в нем настройки:
1 2 3 4 5 6 |
$CONF['configured'] = true; // По-умолчанию, false $CONF['database_name'] = 'mail'; // По-умолчанию, postfix $CONF['database_password'] = 'postfixPassword'; // Пароль от пользователя postfix в базе данных. $CONF['encrypt'] = 'dovecot:CRAM-MD5'; |
Заходим на страничку http://ipaddress/setup и задаем пароль на установку и копируем хеш пароля в config.local.php в переменную $CONF[‘setup_password’]
После этого обновляем странице, опять набираем пароль установки, email админа, и пароль админа. Все! Суперадмин создан. Можно заходить.
Если вы забыли логин/пароль суперпользователя postfixadmin (который вы вводите на странице http://бла-бла-бла/postfixadmin/ ), вы можете сделать вот что:
Узнать логин (логины) суперпользователя postfixadmin:
1 2 3 4 5 |
# mysql -u root -p mysql> use mail; mysql> select * from admin; |
Поле username – это логин. Поле password – хеш пароля.
Сброс пароля суперпользователя postfixadmin:
В файле postfixadmin/config.inc.php ищем параметр $CONF[‘encrypt’]’.
Его значение – тиш хеширования. В зависимости от него, генерируем пароль с помощью команды.
Например, если $CONF[‘encrypt’] = ‘dovecot:CRAM-MD5′ то новый пароль сгенерируем так:
1 2 3 |
# dovecot pw -s CRAM-MD5 -p testTEST123 | sed 's/{CRAM-MD5}//' |
2858fffd54326fff886f30f05357d4d690cf61f6583533a6f5b1f30f7dea1cd2
Полученную строку подставляем в поле password нашего суперюзера postfixadmin (например, это может быть admin@mailserver.local):
mysql> update admin set password=’2858fffd54326fff886f30f05357d4d690cf61f6583533a6f5b1f30f7dea1cd2′ where username=’admin@mailserver.local’;
Теперь администратор postfixadmin “admin@mailserver.local” имеет пароль “testTEST123”. Логинимся, меняем его на нормальный пароль. Почему сразу не сделать хороший пароль? Потому что мы все команды вводим в консоли и если не стереть всю историю команд, наш пароль будет виден всем, кто может работать в консоли.
12. Установка postfix (если не установлен)
1 2 3 |
# yum install postfix |
13. Создадим пользователя и группу от которых будет работать почтовая система, а также папку где будет храниться вся почта:
1 2 3 4 5 6 7 |
# groupadd -g 5000 vmail # useradd -g vmail -u 5000 vmail -d /home/vmail -m # mkdir /var/vmail # chown -R vmail:vmail /var/vmail # chmod -R 777 /var/vmail |
13. Все настройки хранятся в файлах main.cf и master.cf. Поэтому сделаем их бэкап перед правкой.
14. Добавляем в самый конец master.cf (два пробела перед flags обязательны):
1 2 3 4 |
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d $(recipient) |
15. Еще надо дать права vmail:vmail на запись логов:
1 2 3 |
chown vmail:vmail /var/log/dovecot.log |
16. Конфиг-файлы с запросами к базе данных для postfix генерируются специальный скриптом, который лежит в папке documents постфиксадмина.
17. Минимальные конфиги для постфикс и давкот на данном этапе наже. Далее, начиная с настройки SSL от LetsEncrypt, мы будем только добавлять в эти файлы необходимые настойки.
dovecot.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# Конфиги из папки ниже использовать не будем. Всё будем в одном файле #!include conf.d/*.conf # imaps и pop3s - Dovecot 2.* по-умолчанию их включает. protocols = imap pop3 listen = * # Завершать все дочерние процессы, если завершен мастер-процесс shutdown_clients = yes # Владелец почты (также см. конфиг Postfix): mail_uid = vmail mail_gid = vmail # Минимальный uid пользователей. По умолчанию 500. Параметр необязателен. Нужен для того, чтобы обычные пользователи # не могли зайти как служка или привилегированный пользователь. first_valid_uid = 5000 last_valid_uid = 5000 # Лог-файлы. log_path = /var/log/dovecot.log # Отладка. После настройки можно отключить mail_debug = yes auth_verbose = yes auth_debug = yes auth_debug_passwords = yes # SSL ssl = no #ssl_cert = </etc/pki/dovecot/certs/server.crt #ssl_key = </etc/pki/dovecot/private/server.key ssl_protocols = TLSv1 TLSv1.1 TLSv1.2 !SSLv2 !SSLv3 ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL # Запрет аутентификации открытым текстом. Если yes, то plaintext только после установки SSL/TLS соединения. disable_plaintext_auth = no # Список разрешенных символов в имене пользователя. auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@ # Расположение и формат файлов почты (%d - домен, %n - имя пользователя). mail_location = maildir:/data/vmail/%d/%n # Если при аутентификации не указан домен, то добавить этот (в данном примере - пустой) auth_default_realm = # Доступные варианты аутентификации (PLAIN, DIGEST-MD5, CRAM-MD5...). # В настройках почтового клиента указываем "зашифрованный пароль". Если PLAIN, то пароль без шифрования. auth_mechanisms = CRAM-MD5 # Приветственное сообщение login_greeting = POP3/IMAP server ready. # Одно из самых важных мест - предоставление сокетов для аутентификации пользователей. # Если настроено неверно - ничего работать не будет! service auth { # Указывает, что данный сокет будет использовать SMTP сервер для аутентификации. # Указывается пользователь, группа и права доступа к сокету. В данном случае это postfix # ("mail_owner = postfix" в файле /etc/postfix/main.cf). unix_listener /var/spool/postfix/private/auth { user = postfix group = postfix mode = 0660 } unix_listener auth-master { user = vmail group = vmail mode = 0660 } unix_listener auth-userdb { user = vmail group = vmail mode = 0660 } } # Запрос параметров виртуальных почтовых пользователей # (логин, пароль, домен, активный/неактивный и др.) userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } # Plugins protocol imap { imap_client_workarounds = tb-extra-mailbox-sep mail_plugins = autocreate } protocol pop3 { pop3_client_workarounds = outlook-no-nuls oe-ns-eoh pop3_uidl_format = %08Xu%08Xv } protocol lda { # Куда будут перенаправлены недоставленные письма postmaster_address = postmaster@localhost auth_socket_path = /var/run/dovecot/auth-master } plugin { auth_socket_path = /var/run/dovecot/auth-master # Plugin: autocreate. Создаем и подписываемся на папки IMAP. autocreate = INBOX autocreate2 = Sent autocreate3 = Trash autocreate4 = Drafts autocreate5 = Junk autosubscribe = INBOX autosubscribe2 = Sent autosubscribe3 = Trash autosubscribe4 = Drafts autosubscribe5 = Junk # Plugin: квоты. # http://wiki2.dovecot.org/Quota/Configuration #quota = maildir:User quota #quota_rule = *:storage=1GB #quota_rule2 = Trash:storage=+10%% # 10% of 1GB = 100MB #quota_rule3 = Junk:storage=+10%% # 10% of 1GB = 100MB #quota_rule4 = Drafts:storage=+10%% # 10% of 1GB = 100MB } |
dovecot-mysql.conf:
1 2 3 4 5 6 7 8 9 |
driver = mysql connect = host=localhost dbname=mail user=postfix password=паролькбазе default_pass_scheme = CRAM-MD5 password_query = SELECT username AS user,domain,password FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT username AS user, '5000' AS uid, '5000' AS gid FROM mailbox WHERE username = '%u' AND domain = '%d' AND active = '1' |
main.cf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
queue_directory = /var/spool/postfix command_directory = /usr/sbin daemon_directory = /usr/libexec/postfix data_directory = /var/lib/postfix mail_owner = postfix myhostname = mail.site.ru mydomain = site.ru myorigin = $myhostname inet_interfaces = all #inet_protocols = ipv4 mydestination = $myhostname, localhost.$mydomain, localhost local_recipient_maps = $virtual_mailbox_maps, $virtual_alias_maps unknown_local_recipient_reject_code = 550 mynetworks = 127.0.0.0/8 alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases home_mailbox = Maildir/ mail_spool_directory = /var/spool/mail #header_checks = regexp:/etc/postfix/header_checks smtpd_banner = $myhostname ESMTP $mail_name 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 = 51200000 virtual_transport = dovecot #dovecot_destination_recipient_limit=1 ### Auth smtpd_sasl_auth_enable=yes broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth ### Relay Domains: #relay_domains = mysql:/etc/postfix/sql/mysql_relay_domains.cf ### Virtual Domains: virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf # if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.) virtual_mailbox_base = /data/vmail # or whereever you want to store the mails # Additional for quota support (у нас доставкой в локальные ящики и подсчетом квот соответственно занимается dovecot) #virtual_create_maildirsize = yes #virtual_mailbox_extended = yes #virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf #virtual_mailbox_limit_override = yes #virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later. #virtual_overquota_bounce = yes virtual_minimum_uid = 5000 #virtual_minimum_gid = 5000 virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 ### Restrictions smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, permit smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname, permit smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_sender_login_mismatch, permit # Проверки на стадии rcpt smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_invalid_hostname, reject_unverified_recipient, reject_rbl_client zen.spamhaus.org, permit # Проверки на стадии передачи тела письма smtpd_data_restrictions = reject_unauth_pipelining, reject_multi_recipient_bounce, permit smtpd_etrn_restrictions = reject smtpd_helo_required = yes smtpd_discard_ehlo_keywords = etrn, silent-discard smtpd_forbidden_commands = CONNECT GET POST disable_vrfy_command = yes ### TLS #smtpd_use_tls = yes #smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem #smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem #smtp_tls_security_level=may #smtpd_tls_mandatory_protocols=TLSv1, TLSv1.1, TLSv1.2, !SSLv2, !SSLv3 #smtpd_tls_auth_only = yes smtp_tls_loglevel = 1 smtpd_tls_loglevel = 1 |
master.cf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # Do not forget to execute "postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy #submission inet n - n - - smtpd # -o syslog_name=postfix/submission # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -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_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_reject_unlisted_recipient=no # -o smtpd_client_restrictions=$mua_client_restrictions # -o smtpd_helo_restrictions=$mua_helo_restrictions # -o smtpd_sender_restrictions=$mua_sender_restrictions # -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #628 inet n - n - - qmqpd pickup unix n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr unix n - n 300 1 qmgr #qmgr unix n - n 300 1 oqmgr 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 # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 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 # # ==================================================================== # Interfaces to non-Postfix software. Be sure to examine the manual # pages of the non-Postfix software to find out what options it wants. # # Many of the following services use the Postfix pipe(8) delivery # agent. See the pipe(8) man page for information about ${recipient} # and other message envelope options. # ==================================================================== # # maildrop. See the Postfix MAILDROP_README file for details. # Also specify in main.cf: maildrop_destination_recipient_limit=1 # #maildrop unix - n n - - pipe # flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} # # ==================================================================== # # Recent Cyrus versions can use the existing "lmtp" master.cf entry. # # Specify in cyrus.conf: # lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4 # # Specify in main.cf one or more of the following: # mailbox_transport = lmtp:inet:localhost # virtual_transport = lmtp:inet:localhost # # ==================================================================== # # Cyrus 2.1.5 (Amos Gouaux) # Also specify in main.cf: cyrus_destination_recipient_limit=1 # #cyrus unix - n n - - pipe # user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user} # # ==================================================================== # # Old example of delivery via Cyrus. # #old-cyrus unix - n n - - pipe # flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user} # # ==================================================================== # # See the Postfix UUCP_README file for configuration details. # #uucp unix - n n - - pipe # flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) # # ==================================================================== # # Other external delivery methods. # #ifmail unix - n n - - pipe # flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) # #bsmtp unix - n n - - pipe # flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient # #scalemail-backend unix - n n - 2 pipe # flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store # ${nexthop} ${user} ${extension} # #mailman unix - n n - - pipe # flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py # ${nexthop} ${user} dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -d $(recipient) |
Вот и все . Это минимальная конфигурация с которой уже можно работать. Здесь же есть инструкция по получению SSL/TLS с сертификата от Let’s Encrypt. Настройку postfix/dovecot на работу с ними мы рассмотрим в следующей статье.
Оставить комментарий