Pull to refresh

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

Reading time 7 min
Views 9.8K
Работа из учетной записи администратора, 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
Tags:
Hubs:
+1
Comments 11
Comments Comments 11

Articles