В связи с использование самой стабильной версии почтового сервиса на базе iRedMail
, я произведу замену вместо связки
Ubuntu 18.04 Server + iRedMail 1.4.2
будет Ubuntu 22.04 Server + iRedMail 1.6.2
. Так сказать все самое последнее для бесплатного использования на домашних ресурсах где мой новый домен @ekzorchik.com
. Цель наработать опыт и расписать все в заметках дабы уйти от публичный почтовых сервисов на всё свое.
Шаг №1:
Обновляю информацию по пакетам системы:
ekzorchik@mail:~$ sudo rm -f /var/lib/dpkg/lock-frontend/lock ekzorchik@mail:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@mail:~$ sudo apt-get update
Шаг №2:
Текущие правила для брандмаэуера на системе Ubuntu 20.04 Server
которая выступает, как wireguard
сервер и обладающая белым IP
-адресом и связывающая воедино локальную сеть на которой будет разворачиваться почтовый сервер:
root@ekzorchik:~# sudo firewall-cmd --info-zone=external external (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh ports: 8060/tcp 8070/tcp 22400/tcp 31200/udp protocols: masquerade: yes forward-ports: port=25:proto=tcp:toport=25:toaddr=172.33.2.14 port=80:proto=tcp:toport=80:toaddr=172.33.2.14 port=993:proto=tcp:toport=993:toaddr=172.33.2.14 port=465:proto=tcp:toport=465:toaddr=172.33.2.14 port=443:proto=tcp:toport=443:toaddr=172.33.2.14 source-ports: icmp-blocks: rich rules: root@ekzorchik:~#
Шаг №3:
Удаляю старые правила на проброс порта которые были когда почтовый сервер был на базе связки Ubuntu 18.04 Server + iRedMail 1.4.2
sudo firewall-cmd --zone=external --remove-forward-port=port=25:proto=tcp:toport=25:toaddr=172.33.2.14 --permanent sudo firewall-cmd --zone=external --remove-forward-port=port=80:proto=tcp:toport=80:toaddr=172.33.2.14 --permanent sudo firewall-cmd --zone=external --remove-forward-port=port=443:proto=tcp:toport=443:toaddr=172.33.2.14 --permanent sudo firewall-cmd --zone=external --remove-forward-port=port=465:proto=tcp:toport=465:toaddr=172.33.2.14 --permanent sudo firewall-cmd --zone=external --remove-forward-port=port=993:proto=tcp:toport=993:toaddr=172.33.2.14 --permanent
Шаг №4:
Добавляю правила проброс порта для нужд почтового сервера с учетом внутреннего IP
адреса системы Ubuntu 22.04 Server:
sudo firewall-cmd --zone=external --add-forward-port=port=25:proto=tcp:toport=25:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=80:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=143:proto=tcp:toport=143:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toport=443:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=465:proto=tcp:toport=465:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=587:proto=tcp:toport=587:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --add-forward-port=port=993:proto=tcp:toport=993:toaddr=172.33.2.15 --permanent sudo firewall-cmd --reload
Шаг №5:
Изменяю имя хоста системы Ubuntu 22.04 Server:
ekzorchik@srv-us2204a:~$ sudo nano /etc/hosts # обязательно должен быть FQDN формат 127.0.0.1 mail.polygon.local mail localhost ekzorchik@srv-us2204a:~$ sudo nano /etc/hostname mail.polygon.local
Шаг №6:
Скачиваю версию пакета iRedMail 1.6.2
и произвожу установку:
ekzorchik@mail:~$ wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.2.tar.gz ekzorchik@mail:~$ ls -lh 1.6.2.tar.gz -rw-rw-r-- 1 ekzorchik ekzorchik 240K Dec 28 08:25 1.6.2.tar.gz ekzorchik@mail:~$ file 1.6.2.tar.gz 1.6.2.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 1310720 ekzorchik@mail:~$ ekzorchik@mail:~$ tar zxf 1.6.2.tar.gz ekzorchik@mail:~$ cd iRedMail-1.6.2/ ekzorchik@mail:~/iRedMail-1.6.2$ ekzorchik@mail:~/iRedMail-1.6.2$ chmod +x iRedMail.sh ekzorchik@mail:~/iRedMail-1.6.2$ sudo ./iRedMail.sh Adding component(s) 'multiverse' to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel. нажимаю клавишу Enter
Adding component(s) ‘universe’ to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel. нажимаю клавишу Enter
Отвечаю на вопросы мастер установки через скрипт
Please specify a directory (in lowercase) used to store user mailbox. Default is: /var/vmail нажимаю Next
Choose a web server you want to run: выбираю Nginx и нажимаю Next
Choose preferred backend used to store mail accounts: выбираю MariaDB (клавишей "ПРОБЕЛ" отмечаю) и нажимаю Next
Please specify password for MySQL administrator root on server 127.0.0.1: указываю PASSWORD
Please specify your first mail domain name: указываю ekzorchik.com и нажимаю Next
Please specify password for the mail domain administrator: (postmaster@ekzorchik.com) указываю PASSWORD и нажимаю Next
Компоненты для установки выбираю: Roundcubemail, iRedAdmin, netdata и нажимаю Next
********************** Review your settings *****************************
*************************************************************************
* Storage base directory: /var/vmail
* Mailboxes:
* Daily backup of SQL/LDAP databases:
* Store mail accounts in: MariaDB
* Web server: Nginx
* First mail domain name: ekzorchik.com
* Mail domain admin: postmaster@ekzorchik.com
* Additional components: Roundcubemail netdata iRedAdmin
< Question > Continue? [y|N] нажимаю клавишу «y»
и начинается процесс скачивания пакетов, установка и настройка с учетом мастера
< Question > Would you like to use firewall rules provided by iRedMail?
< Question > File: /etc/nftables.conf, with SSHD ports: 22. [Y|n] нажимаю клавишу «n»
и установка завершена
********************************************************************
* URLs of installed web applications:
*
* — Roundcube webmail: https://mail.polygon.local/mail/
* — netdata (monitor): https://mail.polygon.local/netdata/
*
* — Web admin panel (iRedAdmin): https://mail.polygon.local/iredadmin/
*
* You can login to above links with below credential:
*
* — Username: postmaster@ekzorchik.com
* — Password: PASSWORD
*
*
********************************************************************
* Congratulations, mail server setup completed successfully. Please
* read below file for more information:
*
* — /home/ekzorchik/iRedMail-1.6.2/iRedMail.tips
*
* And it’s sent to your mail account postmaster@ekzorchik.com.
*
********************* WARNING **************************************
*
* Please reboot your system to enable all mail services.
*
********************************************************************
ekzorchik@mail:~/iRedMail-1.6.2$ ekzorchik@mail:~/iRedMail-1.6.2$ cd ~/ ekzorchik@mail:~$
Шаг №7:
Вношу изменения в main.cf
сервиса Postfix:
ekzorchik@mail:~$ sudo nano /etc/postfix/main.cf #myhostname = mail.polygon.local #myorigin = mail.polygon.local #mydomain = mail.polygon.local myhostname = ekzorchik.com myorigin = mail.ekzorchik.com mydomain = ekzorchik.com mynetworks = 127.0.0.1 [::1], 172.33.2.0/24 ekzorchik@mail:~$ sudo postconf ekzorchik@mail:~$ sudo reboot
Шаг №8:
Проверяю, что могу авторизоваться в Web
—панели администрирования своего развернутого почтового сервиса на своих ресурсах:
запускаю браузер и обращаюсь на URL: https://mail.ekzorchik.com/iredadmin
окно что "Подключение не защищено"
это нормально, т.к. у нас сейчас сертификат самоподписанный.
Нажимаю "Дополнительные" - "Перейти на сайт mail.ekzorchik.com (небезопасно)"
и меня встречает окно авторизации в Web
-панель Управления вашими домена и учетными записями, авторизуюсь
Username: postmaster@domainname
Password: пароль который вы задавали при установке iredmail через скрипт инсталляции
язык я оставляю по умолчанию English (US)
и нажимаю Login
Шаг №9:
Как и на установке где была связка Ubuntu 18.04 + iRedMail 1.4.2
устанавливаю SSL
сертификат от Let's Encrypt:
ekzorchik@mail:~$ sudo certbot certificates Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No certificates found. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ekzorchik@mail:~$ ekzorchik@mail:~$ sudo certbot certonly --webroot --agree-tos --email support@ekzorchik.ru -d mail.ekzorchik.com -w /var/www/html/ Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Requesting a certificate for mail.ekzorchik.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/mail.ekzorchik.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/mail.ekzorchik.com/privkey.pem This certificate expires on 2023-03-28. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. We were unable to subscribe you the EFF mailing list because your e-mail address appears to be invalid. You can try again later by visiting https://act.eff.org. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ekzorchik@mail:~$
Шаг №10:
Чтобы полученный сертификат от Let's Encrypt
обновлялся самостоятельно каждые 90
дней (по умолчанию) нужно:
ekzorchik@mail:~$ sudo crontab -e @reboot /usr/sbin/ntpdate -s 0.pool.ntp.org > /dev/null # iRedMail: Backup MySQL databases on 03:30 AM 30 3 * * * /bin/bash /var/vmail/backup/backup_mysql.sh # iRedAPD: Clean up expired tracking records hourly. 1 * * * * python3 /opt/iredapd/tools/cleanup_db.py >/dev/null # iRedAPD: Convert SPF DNS record of specified domain names to IP # addresses/networks hourly. 2 * * * * python3 /opt/iredapd/tools/spf_to_greylist_whitelists.py >/dev/null # iRedMail: Cleanup Amavisd database 1 2 * * * python3 /opt/www/iredadmin/tools/cleanup_amavisd_db.py >/dev/null # iRedAdmin: Clean up sql database. 1 * * * * python3 /opt/www/iredadmin/tools/cleanup_db.py >/dev/null 2>&1 # iRedAdmin: Delete mailboxes on file system which belong to removed accounts. 1 * * * * python3 /opt/www/iredadmin/tools/delete_mailboxes.py # iRedMail: Cleanup Roundcube SQL database 2 2 * * * /usr/bin/php /opt/www/roundcubemail/bin/cleandb.sh >/dev/null # iRedMail: Cleanup Roundcube temporary files under 'temp/' directory 2 2 * * * /usr/bin/php /opt/www/roundcubemail/bin/gc.sh >/dev/null @daily letsencrypt renew --quiet && systemctl reload postfix dovecot nginx
Шаг №11:
После получения сертификата TLS
, давайте сконфигурируем nginx:
ekzorchik@mail:~$ sudo nano /etc/nginx/templates/ssl.tmpl #ssl_certificate /etc/ssl/certs/iRedMail.crt; #ssl_certificate_key /etc/ssl/private/iRedMail.key; ssl_certificate /etc/letsencrypt/live/mail.ekzorchik.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mail.ekzorchik.com/privkey.pem; ekzorchik@mail:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@mail:~$ sudo systemctl restart nginx
Шаг №12:
Проверяем что теперь доступ в Web
—интерфейс администрирования ("/iredadmin")
и Web
—интерфейс почтового ящика ("/mail"
) идет исключительно через полученный сертификат от Let's Encrypted:
— ответ «Да», теперь вместо самоподписанного сертификата используется нормальный.
Шаг №13:
Формирую DKIM
запись и прописываю ее на DNS
—хостере:
ekzorchik@mail:~$ sudo amavisd-new showkeys ; key#1 2048 bits, s=dkim, d=ekzorchik.com, /var/lib/dkim/ekzorchik.com.pem dkim._domainkey.ekzorchik.com. 3600 TXT ( "v=DKIM1; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUTCtnejIcHFKolxwr8a" "BYilWF4u0A6JZmB0caUBxCDByUT8Wv3wfNPVZtCFp7ur+uKabmWL5uaPFoh/w9sM" "q9kPky2IQAwyNazrBHdLPkzOL9n9ZkPBBJ/Mxh9nS3iaKrplp3Yeb98cfvAT5XB1" "3fPZ3cFuyl1klEVYJWcgPVHapAwDeUZEb7ln1dPrdDV6HKrpdm3hxFkmhMXqLgJs" "eTLkYDtHVF2ZOVPJbf5xK2tUKM/3jA34wbVUndQAQr2/EXBoRzm0Hz/kUdkxFa8M" "xGufqb5xJM1VC0LUJVr6JnSsAQLxEOpJ15muWeB+DpMdER6RPbryZkg4YWtZkPti" "RwIDAQAB")
путем форматирования вывода выше через редактор Notepad++
получаю
v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUTCtnejIcHFKolxwr8aBYilWF4u0A6JZmB0caUBxCDByUT8Wv3wfNPVZtCFp7ur+uKabmWL5uaPFoh/w9sMq9kPky2IQAwyNazrBHdLPkzOL9n9ZkPBBJ/Mxh9nS3iaKrplp3Yeb98cfvAT5XB13fPZ3cFuyl1klEVYJWcgPVHapAwDeUZEb7ln1dPrdDV6HKrpdm3hxFkmhMXqLgJseTLkYDtHVF2ZOVPJbf5xK2tUKM/3jA34wbVUndQAQr2/EXBoRzm0Hz/kUdkxFa8MxGufqb5xJM1VC0LUJVr6JnSsAQLxEOpJ15muWeB+DpMdER6RPbryZkg4YWtZkPtiRwIDAQAB
и теперь прописываю на DNS
-хостинге где куплено DNS
-имя:
На заметку: Также сформированную при установке DKIM
запись можно взять из файла ekzorchik@mail:~$ sudo nano ~/iRedMail-1.6.2/iRedMail.tips
Проверяем, что все правильно сделали:
ekzorchik@mail:~$ sudo amavisd-new testkeys TESTING#1 ekzorchik.com: dkim._domainkey.ekzorchik.com => pass ekzorchik@mail:~$
Шаг №14:
Формирую DMARC
запись и прописываю ее на DNS
—хостере:
DMARC
запись — отвечает за проверку подлинности отправителя. В настройках регистратора создадим новую запись:
DNS record - TXT
Name - _dmarc
Value - v=DMARC1; p=none; pct=100; rua=mailto:dmarc-reports@ekzorchik.com
TTL - 5 min
Шаг №15:
Реализуем схему подключения к почтовому серверу через почтовые клиенты:
IMAP:
mail.ekzorchik.com
993
SSL/TLS
SMTP:
mail.ekzorchik.com
465
SSL/TLS
ekzorchik@mail:~$ sudo nano /etc/postfix/main.cf #smtpd_tls_key_file = /etc/ssl/private/iRedMail.key #smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt #smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt smtpd_tls_key_file = /etc/letsencrypt/live/mail.ekzorchik.com/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mail.ekzorchik.com/cert.pem smtpd_tls_CAfile = /etc/letsencrypt/live/mail.ekzorchik.com/chain.pem smtpd_tls_CApath = /etc/ssl/certs ekzorchik@mail:~$ sudo postconf ekzorchik@mail:~$ sudo systemctl restart postfix ekzorchik@mail:~$ sudo systemctl reload dovecot ekzorchik@mail:~$ sudo nano /etc/postfix/master.cf # smtps, port 465, force SSL connection. 465 inet n - n - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o content_filter=smtp-amavis:[127.0.0.1]:10026 ekzorchik@mail:~$ sudo postconf
На заметку: исходя и портов выше которые нужны для работы почтового сервера я оставляю правила проброс порта на firewalld: 25,80,443,465,993
порты: 143,587
— убираю
sudo firewall-cmd --zone=external --remove-forward-port=port=143:proto=tcp:toport=143:toaddr=172.33.2.15 --permanent sudo firewall-cmd --zone=external --remove-forward-port=port=587:proto=tcp:toport=587:toaddr=172.33.2.15 --permanent sudo firewall-cmd --reload
Шаг №16:
Те домены с которыми часто будет вестись переписка следует добавить в белый список:
Для этого воспользуемся заметкой "Как управлять белыми списками в iRedMail"
На заметку: Важный нюанс по данной заметке, у меня в заметках используется утилита firewalld
версии 0.8.2
(в OS: Ubuntu 20.04
где Wireguard
работает в качестве сервера — все работает, как и написано в заметках моего блога), а начиная с версии 1.0
root@ekzorchik:~# dpkg -l | grep firewalld | head -n 1 ii firewalld 0.8.2-1 all dynamically managed firewall with support for network zones root@ekzorchik:~#
по умолчанию блокируется транзитный трафик между зонами хоть и включена настройка net.ipv4.ip_forward=1
, это дело не меняет. А в Ubuntu 22.04
уже устанавливается версия firewalld = 1.1.1-1ubuntu1
и все применяя к ней исходя из моих заметок получается что не работает, т.е. если Вы на Ubuntu 22.04 Server
поднимаете Wireguard
-сервер, в этом случае нужно разрешить прохождение трафика с помощью policy object
, к примеру создав правило: client-to-inet
firewall-cmd --permanent --new-policy client-to-inet firewall-cmd --permanent --policy client-to-inet --set-target ACCEPT firewall-cmd --permanent --policy client-to-inet --add-ingress-zone internal firewall-cmd --permanent --policy client-to-inet --add-egress-zone external firewall-cmd --reload
после интернет при подключении через Wireguard
с клиентской системы к Ubuntu 22.04 Server
(Wireguard
-сервер) начинает работать, а туннель как устанавливался так и устанавливается.
Итого, я для себя разобрал как поднять почтовый сервер на базе связки: Ubuntu 22.04 + iRedmail 1.6.2
+ домашний сервер и подключение во вне через wireguard
туннель, также получен сертификат от Let's Encrypt
, почтовый ящик подключается через 993/tcp & 465/tcp.
На этом пока заметка завершена, с уважением автор блога Олло Александра aka ekzorchik.