Почтовый сервер быстрого приготовления на t2.micro с EC2 под управлением CentOS 7

Работа из учетной записи администратора, root оставьте для расчетов и проверки состояния счета, последнее рекомендую делать почаще, так как оплата производится за количество использованных ресурсов. Услуги Amazon, задействованые в данном хауту — в рамках бесплатного аккаунта, если вы самостоятельно не нажмете еще на какую-нибудь кнопочку в панели управления Amazon.

Ингредиенты


  • Основные:
    1. Учетная запись Amazon Web Services с правами AdministratorAccess (не root).
    2. LAMP.
    3. Postfix + Policyd + Amavisd + SpamAssassin + ClamAV.
    4. Dovecot + Roundcude (плагины: filesystem_attachments, jqueryui, managesieve, password).
    5. iRedAdmin.
  • Сопутствующие:
    1. Домен.
    2. Учетная запись ClouDNS.

Инструменты


  1. PuTTY.
  2. PuTTYgen.
  3. FileZilla Client.
  4. Mozilla Thunderbird.

Условные обозначения


  • => Следующее действие.
  • Цитата — Ответ в интерпретаторе.
  • domain.tk — Заменить на ваш домен!
  • 5.175.174.8 — Заменить на ваш Elastic IP!
  • Next — Next: Configure Instance Details.

Способ приготовления


  • В панели управления Amazon создаем инстанс, раздел для хранения почтовых данных, Elastic IP, политику безопасности:
    Открываем EC2: Instances => кнопка Launch Instance => AWS Marketplace => CentOS 7 (x86_64) with Updates HVM => оставляем как есть (t2.micro) => Next => запишите себе Network по умолчанию (например: 172.31.0.0/16) => выберите Subnet (например: 172.31.32.0/20) => отметьте Protect against accidental termination => Next => Next => Key: EC2 => Value: mailServer => Next => Select an existing security group (default) => Review and Launch => Launch => Выберите: Create a new key pair => Key pair name: EC2t2micro-mS => Download Key Pair => Сохраните в надежное место => отметьте чекбокс => Launch Instance => кнопка View Instances

    Открываем EC2: Volumes => Create Volume => Size (GiB): 1 => Availability Zone: при создании инстанса выбирали "...1a" значит снова выбираем "...1a" => Create => выбираем вновь созданный Volume (размер 1GiB) => Actions => Attach Volume => выбираете инстанс с установленной CentOS 7 (8GiB) => Attach

    Открываем EC2: Elastic IPs => Allocate New Address => Yes, Allocate => Выберите созданный адрес => Actions => Associate Address => Instance: выберите ваш интстанс => Associate

    Открываем EC2: Security Groups => выбираем группу безопасности (default) => вкладка Inbound => кнопка Edit => удаляем All traffic => кнопка Add Rule:

    для всех: Source: 0.0.0.0/0 (Anywhere)

    Custom ICMP Rule: Echo Reply и Echo Request

    Протокол UDP:
    DNS (UDP): 53

    Протокол TCP:
    DNS (TCP): 53
    POP3: 110
    POP3S: 995
    IMAP: 143
    IMAPS: 993
    SMTP: 25
    SMTPS: 465
    HTTP: 80
    HTTPS: 443
    LDAP: 389
    MYSQL/Aurora: 3306
    SSH: 22
    Custom TCP Rule: 24, 111, 387, 587, 2000, 4190, 7777, 9998, 10024, 10025, 10031, 43011, 43200, 43220, 43259, 43325, 43362
    Итого: 32 правила.
    Проверить номера портов можно после завершения установки:
    sudo netstat -anpe

  • В панели управления ClouDNS создаем DNS-записи:
    domain.tk A 5.175.174.8 1h(TTL)
    domain.tk MX 10 mail.domain.tk 1h(TTL)
    domain.tk NS ns11.cloudns.net 1h(TTL)
    domain.tk NS ns12.cloudns.net 1h(TTL)
    domain.tk NS ns13.cloudns.net 1h(TTL)
    domain.tk NS ns14.cloudns.net 1h(TTL)
    domain.tk TXT v=spf1 a mx ip4:5.17… 1h(TTL)
    ftp.domain.tk A 5.175.174.8 1h(TTL)
    mail.domain.tk A 5.175.174.8 1h(TTL)
    mail._domainkey.domain… TXT k=rsa; p=fMA0GCSq… 1h(TTL)
    pop.domain.tk A 5.175.174.8 1h(TTL)
    www.domain.tk CNAME domain.tk 1h(TTL)
    _domainkey.domain.tk TXT t=y; o=~; 1h(TTL)

    => Проверяем: http://intodns.com/domain.tk.

  • Открываем PuTTY Key Generator => Load => All files => Save private key => Да => Имя файла: EC2t2micro-mS => закрываем PuTTY Key Generator

  • Открываем PuTTY => SSH => Auth => Browse… => Выбираем EC2t2micro-mS.ppk => Open => Session => HostName (or IP address): ваш Elastic IP => Saved Sessions: EC2t2micro-mS => Save => Open => Да => centos => Enter =>
    cat /etc/redhat-release

    CentOS Linux release 7.0.1406 (Core)

    sudo yum -y update

    lsblk

    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda 202:0 0 8G 0 disk
    L-xvda1 202:1 0 8G 0 part /
    xvdf 202:80 0 1G 0 disk

    Смотрим:
    sudo file -s /dev/xvda1

    SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

    sudo mkfs -t xfs /dev/xvdf

    meta-data=/dev/xvdf isize=256 agcount=4, agsize=65536 blks
    = sectsz=512 attr=2, projid32bit=1
    = crc=0 finobt=0
    data = bsize=4096 blocks=262144, imaxpct=25
    = sunit=0 swidth=0 blks
    naming =version 2 bsize=4096 ascii-ci=0 ftype=0
    log =internal log bsize=4096 blocks=2560, version=2
    = sectsz=512 sunit=0 blks, lazy-count=1
    realtime =none extsz=4096 blocks=0, rtextents=0

    Проверяем:
    sudo file -s /dev/xvdf

    /dev/xvdf: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

    sudo mkdir -p /data/mail/

    sudo mount /dev/xvdf /data/mail/

    Проверяем:
    lsblk

    NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    xvda 202:0 0 8G 0 disk
    L-xvda1 202:1 0 8G 0 part /
    xvdf 202:80 0 1G 0 disk /data/mail

    sudo cp /etc/fstab /etc/fstab.orig

    sudo vi /etc/fstab

    [Insert]

    # Add a new line to the end of the file for your volume using the following format.
    # device_name mount_point file_system_type fs_mntops fs_freq fs_passno
    /dev/xvdf        /data/mail        xfs         defaults,nofail        0        2

    [Esc] :wq [Enter]

    sudo mount -a

    Если есть ошибки перезагружаться нельзя пока не исправите. Больше информации.

    sudo vi /etc/hosts

    [Insert]

    127.0.0.1   mail.domain.tk mail localhost localhost.localdomain

    [Esc] :wq [Enter]

    Проверяем:
    sudo cat /etc/hosts

    127.0.0.1 mail.citr.tk mail localhost localhost.localdomain
    #127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

    yum repolist all

    C7.0.1406-base/x86_64 CentOS-7.0.1406 — Base disabled
    C7.0.1406-centosplus/x86_64 CentOS-7.0.1406 — CentOSPlus disabled
    C7.0.1406-extras/x86_64 CentOS-7.0.1406 — Extras disabled
    C7.0.1406-fasttrack/x86_64 CentOS-7.0.1406 — CentOSPlus disabled
    C7.0.1406-updates/x86_64 CentOS-7.0.1406 — Updates disabled
    base/7/x86_64 CentOS-7 — Base enabled: 8,652
    base-debuginfo/x86_64 CentOS-7 — Debuginfo disabled
    base-source/7 CentOS-7 — Base Sources disabled
    centosplus/7/x86_64 CentOS-7 — Plus disabled
    centosplus-source/7 CentOS-7 — Plus Sources disabled
    cr/7/x86_64 CentOS-7 — cr disabled
    extras/7/x86_64 CentOS-7 — Extras enabled: 149
    extras-source/7 CentOS-7 — Extras Sources disabled
    fasttrack/7/x86_64 CentOS-7 — fasttrack disabled
    updates/7/x86_64 CentOS-7 — Updates enabled: 1,198
    updates-source/7 CentOS-7 — Updates Sources disabled

    Ничего лишнего!

    sudo yum install php php-mysql

    … 5.4.16-36.e17_1 ...

    => y => Скачать на жесткий диск и распаковать.
    Залейте папку iRedMail-0.9.2 с помощью FileZilla (Редактирование => настройки => SFTP => Добавить файл с ключом (EC2t2micro-mS.ppk) ip — ваш Elastic IP => Соединиться). Проследите чтобы все файлы были переданы успешно.
    sudo cp -r /home/centos/iRedMail-0.9.2 /root

    Проверяем:
    sudo ls /root

    iRedMail-0.9.2

    rm -rf /home/centos/iRedMail-0.9.2

    Отключаем и больше не включаем:
    sudo vi /etc/selinux/config

    [Insert]

    SELINUX=disabled

    [Esc] :wq [Enter]

    Проверяем:
    sudo cat /etc/selinux/config

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    # enforcing — SELinux security policy is enforced.
    # permissive — SELinux prints warnings instead of enforcing.
    # disabled — No SELinux policy is loaded.
    #SELINUX=enforcing
    SELINUX=disabled
    # SELINUXTYPE= can take one of these two values:
    # targeted — Targeted processes are protected,
    # minimum — Modification of targeted policy. Only selected processes are protected.
    # mls — Multi Level Security protection.
    SELINUXTYPE=targeted

    sudo reboot

    Проверяем:
    getenforce

    Disabled

    sudo su -

    vi /etc/hostname

    [Insert]

    # Удаляем старое значение [D][D] на строке под курсором
    mail.domain.tk

    [Esc] :wq [Enter]

    Проверяем:
    sudo cat /etc/hostname

    mail.domain.tk

    hostname mail.domain.tk

    Проверяем:
    hostname

    mail.domain.tk

    cd /root/iRedMail-0.9.2

    bash iRedMail.sh

    => Yes
    => /data/mail
    => Apache
    => MariaDB
    => Создайте root-пароль БД
    =>
    => postmaster-пароль
    => DKIM signing/verification
    iRadAdmin
    Roundcubemail
    Awstats
    => y за исключением use firewall rulesn
    => Обновляем базу ClamAV, правда не с первого разу…
    ********************************************************************
    * Congratulations, mail server setup completed successfully. Please
    * read below file for more information:
    *
    * — /root/iRedMail-0.9.2/iRedMail.tips
    *
    * And it's sent to your mail account postmaster@citr.tk.
    *
    ********************* WARNING **************************************
    *
    * Rebooting your system is required to enable mail services.
    *
    ********************************************************************

    Выход из root:
    exit

    sudo reboot

    Проверяем, если все правильно, то ссылки будут ссылаться на ваш домен:
    sudo cat /root/iRedMail-0.9.2/iRedMail.tips

    Перемещаем в безопасное место:
    sudo cat /root/iRedMail-0.9.2/config

    sudo rm -f /root/iRedMail-0.9.2/config

    Так как после перезагрузки системы hostname слетает:
    sudo hostname mail.domain.tk

    sudo rm -f /var/www/html/index.html

    sudo chmod 777 /var/www/html

    => с помощью FileZilla заливаете ваш index-файл сюда: /var/www/html

    sudo chmod 755 /var/www/html

    sudo yum -y update

    sudo openssl passwd -1 Ваш postmaster-пароль

    # Значения будут отличаться.
    $1$2dQ48hyz$.mCLeDSdPkP3fxVmARsB.0

    mysql -u root -p

    => Введите root-пароль БД.

    USE vmail;

    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

    Database changed

    UPDATE mailbox SET password='$1$2dQ48hyz$.mCLeDSdPkP3fxVmARsB.0' WHERE username='postmaster@domain.tk';

    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

    exit

    exit

  • Пробуем готовый продукт


    domain.tk/iredadmin
    mail.domain.tk/mail
    mail.domain.tk/cluebringer
    mail.domain.tk/awstats/awstats.pl?config=web
    mail.domain.tk/awstats/awstats.pl?config=smtp
    Mozilla Thunderbird


Источники информации:


  1. Install iRedMail on Red Hat Enterprise Linux, CentOS
  2. Making an Amazon EBS Volume Available for Use
  3. Reset user password
Поделиться публикацией

Похожие публикации

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 11

    +2
    В чем соль? в амазоне? или в каких то тонкостях настройки?
    SELINUX=disabled
    может не стоит? не долго ведь освоить
    sudo chmod 777 /var/www/html
    воу воу полегче
      0
      в амазоне, у них свой фаервол
        +1
        да как бы SELINUX и не фаервол вовсе
          0
          iredmail не работает с SELINUX
            +1
            Тогда простите, а почему 777 на /var/www/html
              –5
              ну это косяк) не знаю, меня не разу не взламывали, была один раз попытка и то, там у хостера был косяк с доступом) перегадили мне кодировку) я съехала потом оттуда) да и переустановить инстанс по этому же хауту — 15 мин, засекала) кому нужен мой хлам) 755, щас добавлю строчку
                0
                А пояснить в ответе почему минусуем это наверно очень страшно, боимся наверное, что заминусуют в ответ. Сколько минусов не ставь а тот кто последует моим советам очень быстро развернет надежный почтовый сервер, если собирать самостоятельно по частям и задать где-нибудь на форуме вопрос о конфигурировании postfix, то в ответ будет в лучшем случае ссылка на ман, ну а в противоположном случае на платную электронную книжечку.
      +3
      Старые добрые простыни команд:)
        –1
        совершенно верно, просто собранные в нужной последовательности)
          +1
          Если честно, то это был сарказм:) Т.к. обычно все это заменяется ансиблами, шефами и т.д.
            0
            Писала по мере установки, сразу в notepad закидывала команды, без прицела на уникальность и тд Срочно надо было переехать с закрывшегося хостинга.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое