Наложи ми се да правя сървър за електронна поща, който да е много лек и с минимални защити. Сървъра се определяше от: ● сървъра ще работи само във вътрешна защитена мрежа ● сървъра трябва да е много лек защото ще е върху слаб хардуер ● сървъра трябва да поддържа POP3 и IMAP ● сървъра трябва да се управлява през WEB Ръководех се от: https://www.tecmint.com/install-postfix-mail-server-with-webmail-in-debian/
apt install sudo -y nano /etc/sudoers root ALL=(ALL:ALL) ALL cccp ALL=(ALL:ALL) ALL
nano /etc/network/interfaces # The primary network interface # allow-hotplug ens32 # iface ens32 inet dhcp auto ens32 iface ens32 inet static address 192.168.11.67 netmask 255.255.255.0 gateway 192.168.11.1 /etc/init.d/networking restart
Обновяваме системата.
apt-get update -y apt-get upgrade -y
Инсталираме пакети необходими за системна администрация.
apt-get install curl net-tools bash-completion wget lsof nano -y
Дефинираме DNS първо да чете /etc/hosts файла.
nano /etc/host.conf order hosts,bind multi on
Следва да настроим FQDN.
hostnamectl set-hostname tar-mail.bgpost.bg echo "192.168.11.67 tar-mail.bgpost.bg tar-mail" >> /etc/hosts init 6 ### Това на практика е reboot reboot
След рестарта проверяваме какво сме сътворили.
hostname -f tar-mail.bgpost.bg cat /etc/hostname tar-mail
Тестваме дали домейна правилно отговаря за локалните заявки. Домейна няма да възпроизвежда заявки от външни мрежи, а само от локалната мрежа. В случая команди от рода на host, nslookup или dig няма да работят.
getent ahosts tar-mail.bgpost.bg 127.0.1.1 STREAM tar-mail.bgpost.bg 127.0.1.1 DGRAM 127.0.1.1 RAW 192.168.11.67 STREAM 192.168.11.67 DGRAM 192.168.11.67 RAW ping bgpost.bg ping tar-mail.bgpost.bg
Най-важната част от софтуера, необходим за правилното функционира не на пощенския сървър, е MTA агентът. MTA е софтуер , изграден в архитектура сървър-клиент, който отговаря за прехвърлянето на поща между пощенските сървъри. В това ръководство ще използваме Postfix като агент за прехвърляне на поща. За да инсталирате postfix в Debian от официални хранилища, изпълнете следната команда.
apt install postfix -y
Първо правим копие на конфигурационните файлове.
cp /etc/postfix/main.cf /etc/postfix/main.cf.original cp /etc/postfix/master.cf /etc/postfix/master.cf.original
След това конфигурираме /etc/postfix/main.cf.
nano /etc/postfix/main.cf # See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_security_level=may smtp_tls_CApath=/etc/ssl/certs smtp_tls_security_level=may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = tar-mail.bgpost.bg mydomain = tar-mail.bgpost.bg alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases # myorigin = /etc/mailname myorigin = $mydomain # mydestination = $myhostname, tar-mail.bgpost.bg, localhost.bgpost.bg, , localhost mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost relayhost = mynetworks = 127.0.0.0/8 192.168.11.0/24 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all # inet_protocols = all inet_protocols = ipv4 home_mailbox = Maildir/ # SMTP-Auth settings smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = $myhostname smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject
Да проверим конфигурацията.
postconf -n
Рестартираме услугата и проверяваме как работи.
/etc/init.d/postfix restart /etc/init.d/postfix status ● postfix.service - Postfix Mail Transport Agent Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled) Active: active (exited) since Tue 2024-06-18 04:59:50 EDT; 24s ago Process: 2401 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 2401 (code=exited, status=0/SUCCESS) CPU: 510us Jun 18 04:59:50 tar-mail systemd[1]: Starting Postfix Mail Transport Agent... Jun 18 04:59:50 tar-mail systemd[1]: Finished Postfix Mail Transport Agent. netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 480/sshd: /usr/sbin tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2398/master tcp6 0 0 :::22 :::* LISTEN 480/sshd: /usr/sbin
PostFix "слуша" на порт 25. До тук всичко е правилно.
За целта ни е необходим пакета mailutils.
apt-get install mailutils -y
Да изпратим писмо до root.
echo "mail body"| mail -s "test mail" root mailq Mail queue is empty mail No mail for root ls /root/Maildir/ cur new tmp ls /root/Maildir/new/ 1718701804.V801I34000aM309770.tar-mail cat /root/Maildir/new/1718701804.V801I34000aM309770.tar-mail Return-Path: <root@tar-mail.bgpost.bg> X-Original-To: root@tar-mail.bgpost.bg Delivered-To: root@tar-mail.bgpost.bg Received: by tar-mail.bgpost.bg (Postfix, from userid 0) id 49EC72A0483; Tue, 18 Jun 2024 05:10:04 -0400 (EDT) Subject: test mail To: <root@tar-mail.bgpost.bg> X-Mailer: mail (GNU Mailutils 3.10) Message-Id: <20240618091004.49EC72A0483@tar-mail.bgpost.bg> Date: Tue, 18 Jun 2024 05:10:04 -0400 (EDT) From: root <root@tar-mail.bgpost.bg> mail body
Може да проверим и логовете.
cat /var/log/mail.log Jun 18 04:43:02 tar-mail postfix/postfix-script[1421]: starting the Postfix mail system Jun 18 04:43:02 tar-mail postfix/master[1423]: daemon started -- version 3.5.24, configuration /etc/postfix Jun 18 04:59:50 tar-mail postfix/postfix-script[1846]: stopping the Postfix mail system Jun 18 04:59:50 tar-mail postfix/master[1423]: terminating on signal 15 Jun 18 04:59:50 tar-mail postfix/postfix-script[2396]: starting the Postfix mail system Jun 18 04:59:50 tar-mail postfix/master[2398]: daemon started -- version 3.5.24, configuration /etc/postfix Jun 18 05:10:04 tar-mail postfix/pickup[2399]: 49EC72A0483: uid=0 from=<root@tar-mail.bgpost.bg> Jun 18 05:10:04 tar-mail postfix/cleanup[2723]: 49EC72A0483: message-id=<20240618091004.49EC72A0483@tar-mail.bgpost.bg> Jun 18 05:10:04 tar-mail postfix/qmgr[2400]: 49EC72A0483: from=<root@tar-mail.bgpost.bg>, size=359, nrcpt=1 (queue active) Jun 18 05:10:04 tar-mail postfix/local[2725]: 49EC72A0483: to=<root@tar-mail.bgpost.bg>, relay=local, delay=0.01, delays=0.01/0/0/0, dsn=2.0.0, status=sent (delivered to maildir) Jun 18 05:10:04 tar-mail postfix/qmgr[2400]: 49EC72A0483: removed
Ще ползваме агент за доставка на пощата Dovecot. Агента работи с протоколи POP3 на портове (110, 995 за SSL) и протокол IMAP на портове (143, 993 за SSL). IMAP протокола отговаря за за четенето, изтриването или преместването на имейли между множество имейл клиенти. Освен това използва синхронизация, за да гарантира, че копие на всяко съобщение се записва на сървъра и позволява на потребителите да създават множество директории на сървъра и да преместват имейли в тези директории, за да сортират имейлите. POP3 протоколът няма да позволи на потребителите да създават множество директории на сървъра, за да сортират вашата поща. Имате само папката "Входящи", за да управлявате пощата. От горе казаното извода е, че ще инсталираме само Dovecot с протокола IMAP.
apt install dovecot-core dovecot-imapd -y
И да настроим Dovecot. Първоначално обаче правим копие на конфигурационните файлове.
cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.original cp /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.original cp /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.original cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.original cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.original cp /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.original cp /etc/dovecot/conf.d/15-mailboxes.conf /etc/dovecot/conf.d/15-mailboxes.conf.original cp /etc/dovecot/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext.original cp /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.original cp /etc/dovecot/conf.d/90-quota.conf /etc/dovecot/conf.d/90-quota.conf.original
И да настроим Dovecot. Първо нека да работи с IPv4 и IPv6 на всички интерфейси.
nano /etc/dovecot/dovecot.conf #listen = *, :: listen = *, ::
Да конфигурираме как да се удостоверяваме.
nano /etc/dovecot/conf.d/10-auth.conf #disable_plaintext_auth = yes disable_plaintext_auth = no auth_mechanisms = plain login
Да конфигурираме къде да се съхранява пощата.
nano /etc/dovecot/conf.d/10-mail.conf # mail_location = mbox:~/mail:INBOX=/var/mail/%u mail_location = maildir:~/Maildir
PostFix доставя писмата посредствено, а Dovecot позволява много повече неща. Затова PostFix ще даде права на Dovecot да съхрани получените писма. Връзката между PostFix и Dovecot се осъществява или чрез LDA (local delivery agent) или чрез LMTP. Втория е по-добър с по-добра производителност.
nano /etc/dovecot/conf.d/10-master.conf # Postfix smtp-auth #unix_listener /var/spool/postfix/private/auth { # mode = 0666 #} unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }
Рестартираме Dovecot и проверяваме на кои портове "слуша".
/etc/init.d/dovecot restart /etc/init.d/dovecot status netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 6244/dovecot tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 480/sshd: /usr/sbin tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 2398/master tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 6244/dovecot tcp6 0 0 :::143 :::* LISTEN 6244/dovecot tcp6 0 0 :::22 :::* LISTEN 480/sshd: /usr/sbin tcp6 0 0 :::993 :::* LISTEN 6244/dovecot
За целта е необходимо да се създаде втори потребител.
adduser tachko Adding user `tachko' ... Adding new group `tachko' (1001) ... Adding new user `tachko' (1001) with group `tachko' ... Creating home directory `/home/tachko' ... Copying files from `/etc/skel' ... New password: Pa$$ Retype new password: Pa$$ passwd: password updated successfully Changing the user information for tachko Enter the new value, or press ENTER for the default Full Name []:" натискаме Enter" Room Number []:" натискаме Enter" Work Phone []:" натискаме Enter" Home Phone []:" натискаме Enter" Other []:" натискаме Enter" Is the information correct? [Y/n]" натискаме Enter"
И самия тест.
nc localhost 25 220 tar-mail.bgpost.bg ESMTP Postfix (Debian/GNU) ehlo localhost 250-tar-mail.bgpost.bg 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-DSN 250-SMTPUTF8 250 CHUNKING mail from: root 250 2.1.0 Ok rcpt to: tachko 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> subject: test Mail body . 250 2.0.0 Ok: queued as 439812A082E quit 221 2.0.0 Bye
Да проверим в пощенската кутия какво имаме.
ls /home/tachko/Maildir/new/ 1718705171.V801I2c000dM487860.tar-mail
Имаме налично писмо. Всичко работи правилно. Можем да се свържем с пощенската кути чрез IMAP.
nc localhost 143 * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready. x1 LOGIN tachko Pa$$ x1 OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY PREVIEW=FUZZY STATUS=SIZE SAVEDATE LITERAL+ NOTIFY SPECIAL-USE] Logged in x2 LIST "" "*" * LIST (\HasNoChildren) "." INBOX x2 OK List completed (0.002 + 0.000 + 0.002 secs). x3 SELECT Inbox * FLAGS (\Answered \Flagged \Deleted \Seen \Draft) * OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted. * 1 EXISTS * 1 RECENT * OK [UNSEEN 1] First unseen. * OK [UIDVALIDITY 1718705591] UIDs valid * OK [UIDNEXT 2] Predicted next UID x3 OK [READ-WRITE] Select completed (0.002 + 0.000 + 0.001 secs). x4 LOGOUT * BYE Logging out x4 OK Logout completed (0.001 + 0.000 secs).
Потребителите ще управляват своите имейли чрез Rainloop Webmail клиент. За целта е необходим WEB сървър. Ще ползваме Apache. Също ще ползваме и PHP със съответните модули. Всичко това ще инсталираме наведнъж.
apt install apache2 php libapache2-mod-php php-curl php-xml -y cd /var/www/html/ mv ./index.html ./index.html.original ls index.html.original curl -sL https://repository.rainloop.net/installer.php | php [RainLoop Webmail Installer] * Connecting to repository ... * Downloading package ... * Complete downloading! * Installing package ... * Complete installing! * [Success] Installation is finished!
Да проверим. Ще администрираме. Влизаме на: http://192.168.11.67/?admin
Потребител admin и парола 12345
Да влезем с някои потребител на .
Влизаме като tachko@tar-mail.bgpost.bg и парола Pa$$.
За да добавите нов потребител:
echo 'export MAIL=$HOME/Maildir' >> /etc/profile useradd -m name_user passwd name_user
-m опцията на useradd указва да се генерира домашна папка на потребителя. Ако искате да пренасочите всички писма на root към определен потребител (в случая е tachko):
echo "root: tachko" >> /etc/aliases newaliases