Mail P1&P2: Xây dựng Mail Server IMAP, POP3 trên Debian để sử dụng mail trên máy tính & điện thoại

Tạo tài khoản quyền root và đổi tên máy chủ

Chạy các lệnh sau trên máy chủ với quyền root để cài đặt sudo.

$apt install sudo

Đăng nhập vào chế độ root.

$sudo -s

Tạo người dùng mới và gán quyền sudo cho người dùng, đăng xuất khỏi tài khoản root và đăng nhập với tài khoản mới.

#adduser zapnho
#usermod -aG sudo zapnho
#exit
$su - zapnho
zapnho@z-log:~$_

Đổi tên máy chủ, quản lý tên máy chủ trong file /etc/hosts.

#hostnamectl set-hostname z-log.net 
#nano /etc/hosts

Tạo DNS record cho Mail Server

Đăng nhập vào trang quản lý tên miền (ở đây là CloudFlare) và tạo các record.

  • MX record:    Mail Exchanger record.
  • A record (và AAAA record):   Address record.
  • PTR record:    Pointer record (Có thể phải cần yêu cầu nhà cung cấp dịch vụ internet ISP cung cấp reverse IP.).

Cài đặt Postfix SMTP trên Debian

Chạy lệnh sau để cài postfix.

sudo apt-get update
sudo apt-get install postfix -y

Cấu hình ban đầu với tùy chọn Internet Site -> System mail name (z-log.net không phải là mail.z-log.net, vì đây là phần xuất hiện phía sau user@z-log.net).

Chạy lệnh ss (Socket Statistics) để kiểm tra Postfix đang lắng nghe trên cổng 25.

sudo ss -lnpt | grep master

Kiểm tra các lệnh nhị phân Postfix.

dpkg -L postfix | grep /usr/sbin/
/usr/sbin/postalias
/usr/sbin/postcat
/usr/sbin/postconf
/usr/sbin/postdrop
/usr/sbin/postfix
/usr/sbin/postfix-add-filter
/usr/sbin/postfix-add-policy
/usr/sbin/postkick
/usr/sbin/postlock
/usr/sbin/postlog
/usr/sbin/postmap
/usr/sbin/postmulti
/usr/sbin/postqueue
/usr/sbin/postsuper
/usr/sbin/posttls-finger
/usr/sbin/qmqp-sink
/usr/sbin/qmqp-source
/usr/sbin/qshape
/usr/sbin/rmail
/usr/sbin/sendmail
/usr/sbin/smtp-sink
/usr/sbin/smtp-source

Mở cổng TCP 25 (inbound) trên Tường lửa

Chạy lệnh sau nếu chưa cài ufw.

sudo apt install ufw

Cho phép cổng 22 SSH.

sudo ufw allow 22/tcp

Kích hoạt ufw firewall.

sudo ufw enable

Mở cổng 25 TCP.

sudo ufw allow 25/tcp

Công cụ quét cổng đang mở bằng công cụ online https://www.ipvoid.com/port-scan/.

Kiểm tra cổng 25 (outbound) xem có bị khóa không bằng công cụ telnet. Chạy lệnh sau nếu chưa cài.

sudo apt install telnet

Kết nối thử với gmail qua cổng 25.

telnet gmail-smtp-in.l.google.com 25

Nếu kết nối thành công sẽ nhận lại thông báo, nhập quit để thoát.

Trying 74.125.68.26...
Connected to gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp

Gửi thử mail bằng dòng lệnh

Thử giửi mail đến tài khoản mail khác như gmail chẳng hạn.

echo "test email" | sendmail user@gmail.com

Kiểm tra đường dẫn hộp thư đến của người dùng bằng lệnh.

sudo postconf mail_spool_directory

Nếu không gửi được thư xem file log để kiểm tra lỗi.

sudo tail -n 20 /var/log/mail.log

Cài trình soạn thảo văn bản vim nếu chưa có.

sudo apt install vim
sudo vim /var/log/mail.log

Nhập :q -> enter để thoát khỏi vim.

Sử chương trình mail dòng lệnh để gửi và đọc thư

Cài chương trình mail dòng lệnh MUA (Mail User Agent) và gửi thử mail.

sudo apt-get install mailutils
mail -a FROM:zapnho@z-log.net username@gmail.com
CC:
Subject: Test mail
I'm sending this email using the mail program.

Ấn Ctrl+D để gửi.

Đọc mail.

mail
  • Đọc mail thứ 1, ấn 1. Enter để xem nếu có nhiều trang.
  • Trở lại danh sách, ấn h.
  • To show the last screenful of messages, type h$ or z.
  • Đọc mail tiếp theo, ấn n.
  • Xóa mail thứ 1, đánh d 1.
  • Xóa mail 1, 2 và 3, đánh d 1 2 3.
  • Xóa mail 1 tới 10, đánh d 1-10.
  • Trả lời thư 1, đánh reply 1.
  • Thoát mail, ấn q.

Thư đã được mở sẽ được chuyển từ tệp /var/mail/<username> sang tệp /home/<username>/mbox. Điều đó có nghĩa là các ứng dụng thư khách khác không thể đọc những thư đó. Để ngăn điều này xảy ra, hãy nhập x thay vì q để thoát khỏi thư.

Tăng kích thước file đính kèm.

Theo mặc định, tệp đính kèm không thể lớn hơn 10 MB

sudo postconf | grep message_size_limit
message_size_limit = 10240000

Để cho phép tệp đính kèm có kích thước 50 MB, hãy chạy lệnh sau.

sudo postconf -e message_size_limit=52428800

Lưu ý rằng message_size_limit không được lớn hơn hòm thư_size_limit, nếu không Postfix có thể không nhận được email.

sudo postconf | grep mailbox_size_limit
mailbox_size_limit = 0

Điều này có nghĩa là hộp thư không có giới hạn kích thước.

sudo systemctl restart postfix

Khởi động lại để áp dụng thay đổi.

Khi gửi email có tệp đính kèm lớn từ máy chủ thư của bạn, bạn cũng nên lưu ý đến giới hạn kích thước tệp đính kèm của máy chủ nhận, ví dụ: Bạn không thể gửi tệp đính kèm lớn hơn 25 MB đến địa chỉ Gmail.

Thiết lập Postfix Hostname

Theo mặc định, máy chủ Postfix SMTP sử dụng tên máy chủ của hệ điều hành. Tuy nhiên, tên máy chủ của hệ điều hành có thể thay đổi, do đó, cách tốt nhất là đặt tên máy chủ trực tiếp trong tệp cấu hình Postfix. Mở tệp cấu hình chính Postfix bằng trình soạn thảo văn bản dòng lệnh, chẳng hạn như Nano.

sudo nano /etc/postfix/main.cf

Tìm tham số myhostname và đặt mail.example.com làm giá trị. Bạn không nên sử dụng miền apex example.com làm tên myhostname. Về mặt kỹ thuật, bạn có thể sử dụng miền apex, nhưng nó sẽ gây ra vấn đề trong các phần sau của loạt bài hướng dẫn này.

myhostname = mail.z-log.net

Lưu và khởi động lại Postfix

sudo systemctl restart postfix

Tạo Email Alias

Có một số bí danh bắt buộc nhất định mà bạn nên định cấu hình khi vận hành máy chủ thư của mình trong môi trường sản xuất. Bạn có thể thêm bí danh email trong tệp /etc/aliases, đây là tệp bảng tra cứu Postfix đặc biệt sử dụng định dạng tương thích với Sendmail.

sudo nano /etc/aliases
# See man 5 aliases for format
postmaster: root

Phía bên trái là tên bí danh. Phía bên phải là đích đến cuối cùng của email. Vì vậy, email cho postmaster@example.com sẽ được gửi tới root@example.com. RFC 2142 yêu cầu địa chỉ email của người quản lý bưu điện.

Thông thường thì không nên sử dụng địa chỉ email root. Thay vào đó, người quản lý có thể sử dụng tên đăng nhập bình thường để truy cập email. Thêm dòng sau.

root: zapnho

Bằng cách này, các email cho postmaster@example.com và root@example.com sẽ được gửi đến zapnho@example.com. Bây giờ, bạn có thể lưu và đóng tệp. Sau đó, xây dựng lại cơ sở dữ liệu bí danh bằng lệnh newaliases

sudo newaliases

Chỉ sử dụng IPv4

Mặc định postfix sử dụng cả IPv6 và IPv4. Nếu không có IPv6 public thì nên tắt, bằng lệnh.

sudo postconf -e "inet_protocols = ipv4"
sudo systemctl restart postfix

Để kiểm tra sử dụng lệnh

ping 2607:f8b0:4005:808::2005

Lệnh này cố gắng ping địa chỉ IPv6 của Gmail. Nếu ping thành công thì máy chủ của bạn có thể sử dụng IPv6. Nếu ping không thành công thì máy chủ của bạn không thể sử dụng IPv6. Nhấn Ctrl+C để dừng ping.

Chạy lại giao diện cấu hình ban đầu

sudo dpkg-reconfigure postfix

Các cấu hình postfix nằm trong file /etc/postfix/main.cf

sudo nano /etc/postfix/main.cf

Mail P2: Cài Dovecot IMAP server và Kích hoạt TLS Encryption

  • Để có thể gửi email bằng ứng dụng email khách trên máy tính để bàn, hoặc điện thoại di động chúng tôi cần kích hoạt dịch vụ gửi trong Postfix. (submission service).
  • Để nhận email bằng ứng dụng email khách trên máy tính để bàn, chúng tôi có thể cài đặt máy chủ IMAP nguồn mở có tên Dovecot.
  • Và để mã hóa thông tin liên lạc của mình, chúng tôi có thể cài đặt chứng chỉ TLS miễn phí do Let’s Encrypt cấp.

Mở port trên tường lửa

Debian không bật tường lửa theo mặc định.

sudo ufw allow 80,443,587,465,143,993/tcp

Nếu bạn sử dụng POP3 để tìm nạp email (ở đây không dùng) thì hãy mở cổng 110 và 995.

sudo ufw allow 110,995/tcp

Bảo mật lưu lượng giữa máy chủ và máy khách email bằng chứng chỉ TLS

Cài certbot để lấy chứng chỉ TSL

sudo apt update 
sudo apt dist-upgrade 
sudo apt install certbot

Việc lấy và cài đặt chứng chỉ TLS với máy chủ web sẽ dễ dàng hơn so với sử dụng các phương pháp khác.

sudo apt install python3-certbot-apache

Tạo một máy chủ ảo Apache cho mail.example.com trước khi lấy chứng chỉ Let’s Encrypt TLS.

sudo nano /etc/apache2/sites-available/mail.z-log.net.conf

Dán dòng sau vào tệp.

<VirtualHost *:80> 
ServerName mail.z-log.net 
DocumentRoot /var/www/html/ 
</VirtualHost>

Lưu file và bật virtual host.

sudo a2ensite mail.z-log.net.conf

Tắt virtual host mặc định và khởi động lại apache.

sudo a2dissite 000-default.conf
sudo systemctl reload apache2

Chạy lệnh sau để nhận chứng chỉ. (Nếu gặp lỗi chú ý reverse DNS).

sudo certbot certonly -a apache --agree-tos --no-eff-email --staple-ocsp --email you@example.com -d mail.z-log.net
  • certonly: lấy chứng chỉ TLS nhưng không cài đặt nó trên máy chủ web.
  • -a apache: Sử dụng plugin Apache để xác thực.
  • --agree-tos: Đồng ý với các điều khoản dịch vụ..
  • --no-eff-email: Không nhận email từ tổ chức EFF..
  • --staple-ocsp: Cho phép ghim OCSP. Phản hồi OCSP hợp lệ được ghim vào chứng chỉ mà máy chủ cung cấp trong quá trình kết nối TLS.
  • --email: Nhập địa chỉ email của bạn, địa chỉ này được sử dụng cho các thông báo quan trọng và khôi phục tài khoản..
  • -d: tên miền, còn gọi là tên máy chủ máy chủ thư của bạn.

Bât Submission Service trên Postfix

Để gửi email từ ứng dụng email trên máy tính để bàn, chúng ta cần kích hoạt dịch vụ gửi của Postfix để ứng dụng email có thể gửi email đến máy chủ Postfix SMTP. Chỉnh sửa tệp master.cf.

sudo nano /etc/postfix/master.cf
submission     inet     n    -    y    -    -    smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_tls_wrappermode=no
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

Cấu hình trên cho phép daemon gửi của Postfix và yêu cầu mã hóa TLS. Vì vậy, sau này, ứng dụng email khách trên máy tính để bàn có thể kết nối với daemon gửi trong mã hóa TLS. Daemon gửi sẽ lắng nghe trên cổng TCP 587. STARTTLS được sử dụng để mã hóa thông tin liên lạc giữa ứng dụng email và submission daemon.

Ứng dụng thư khách Microsoft Outlook chỉ hỗ trợ gửi qua cổng 465. Nếu định sử dụng Microsoft Outlook, bạn cũng cần kích hoạt dịch vụ gửi trên cổng 465 bằng cách thêm các dòng sau vào tệp.

smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth

Tiếp theo, chúng ta cần chỉ định vị trí của chứng chỉ TLS và khóa riêng trong tệp cấu hình Postfix. Chỉnh sửa tệp main.cf.

sudo nano /etc/postfix/main.cf
#Enable TLS Encryption when Postfix receives incoming emails
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.z-log.net/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.z-log.net/privkey.pem
smtpd_tls_security_level=may 
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

#Enable TLS Encryption when Postfix sends outgoing emails
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

#Enforce TLSv1.3 or TLSv1.2
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1

Chứng chỉ Let’s Encrypt và khóa riêng của bạn được lưu trữ trong thư mục /etc/letsencrypt/live/mail.z-log.net/.

Lưu đóng file và khởi động lại postfix.

sudo systemctl restart postfix

Nếu chạy lệnh sau, bạn sẽ thấy Postfix hiện đang nghe trên cổng 587, 465 và 25.

sudo ss -lnpt | grep master

Cài đặt Dovecot IMAP Server

Chạy lệnh sau để cài Dovecot core package và IMAP daemon package trên Debian server.

sudo apt install dovecot-core dovecot-imapd

Nếu sử dụng POP3 thì cài thêm gói dovecot-pop3d.

sudo apt install dovecot-pop3d

Kiểm tra phiên bản dovecot.

sudo dovecot --version

Bật IMAP/POP3 Protocol

Sửa file config chính.

sudo nano /etc/dovecot/dovecot.conf

Thêm dòng sau để bật IMAP protocol. POP3 protocol thì thêm vào sau dòng.

protocols = imap pop3

Lưu và đóng file.

Cấu hình Mailbox Location

Theo mặc định, Postfix và Dovecot sử dụng định dạng mbox để lưu trữ email. Email của mỗi người dùng được lưu trữ trong một tệp /var/mail/username. Bạn có thể chạy lệnh sau để tìm thư mục bộ đệm thư.

sudo postconf mail_spool_directory
mail_spool_directory = /var/mail

Tuy nhiên, ngày nay hầu như bạn luôn muốn sử dụng định dạng Maildir để lưu trữ email. Tệp cấu hình cho vị trí hộp thư là /etc/dovecot/conf.d/10-mail.conf.

sudo nano /etc/dovecot/conf.d/10-mail.conf

Đánh dấu comment để bỏ lệnh chọn mbox, chọn Maildir.

#mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_location = maildir:~/Maildir

Lưu và đóng file, sau đó thêm dovecot vào nhóm mail để Dovecot đọc được INBOX.

sudo adduser dovecot mail

Sử dụng Dovecot để gửi email đến Message Store

Mặc dù chúng ta đã định cấu hình Dovecot để lưu trữ email ở định dạng Maildir, nhưng theo mặc định, Postfix sử dụng tác nhân phân phối cục bộ (LDA) tích hợp để di chuyển các email gửi đến đến kho lưu trữ thư (hộp thư đến, đã gửi, thùng rác, Thư rác, v.v.) và nó sẽ là được lưu ở định dạng mbox.

Chúng ta cần định cấu hình Postfix để chuyển email đến Dovecot, thông qua giao thức LMTP, đây là phiên bản đơn giản hóa của SMTP, do đó, email đến sẽ được Dovecot lưu ở định dạng Maildir. LMTP cho phép hệ thống thư đáng tin cậy và có khả năng mở rộng cao. Nó cũng cho phép chúng tôi sử dụng plugin sàng để lọc các tin nhắn gửi đến các thư mục khác nhau.

sudo apt install dovecot-lmtpd

Sửa file cấu hình chính Dovecot.

sudo nano /etc/dovecot/dovecot.conf

Add lmtp vào supported protocols.

protocols = imap pop3 lmtp

Lưu và đóng file. Sau đó sửa file Dovecot 10-master.conf.

sudo nano /etc/dovecot/conf.d/10-master.conf

Thay đổi đoạn định nghĩa dịch vụ lmtp.

service lmtp {
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   mode = 0600
   user = postfix
   group = postfix
  }
}

Lưu và đóng file, tiếp theo sửa file cấu hình chính của Postfix.

sudo nano /etc/postfix/main.cf

Thêm các dòng sau vào cuối tệp. Dòng đầu tiên yêu cầu Postfix gửi các email đến tới kho lưu trữ thư cục bộ thông qua máy chủ Dovecot LMTP. Dòng thứ hai vô hiệu hóa SMTPUTF8 trong Postfix, vì Dovecot-LMTP không hỗ trợ tiện ích mở rộng email này.

mailbox_transport = lmtp:unix:private/dovecot-lmtp
smtputf8_enable = no

Lưu và đóng file.

Cấu hình cơ chế xác thực người dùng

Sửa file cấu hình xác thực người dùng.

sudo nano /etc/dovecot/conf.d/10-auth.conf

Uncomment lệnh.

disable_plaintext_auth = yes
auth_username_format = %n

Theo mặc định, khi Dovecot cố gắng tìm hoặc gửi email cho người dùng, nó sẽ sử dụng địa chỉ email đầy đủ.Vì trong phần này chúng ta chỉ thiết lập người dùng hộp thư chuẩn (sử dụng người dùng hệ điều hành làm người dùng hộp thư) nên Dovecot không thể tìm thấy hộp thư user ở định dạng tên miền đầy đủ (username@example.com), vì vậy chúng ta cần đặt auth_username_format = %n để bỏ phần tên miền, khi đó Dovecot sẽ có thể tìm thấy người dùng hộp thư. Điều này cũng cho phép chúng ta sử dụng địa chỉ email đầy đủ ( username@example.com) để đăng nhập.

Dòng này chỉ kích hoạt cơ chế xác thực PLAIN. LOGIN là một cơ chế xác thực khác mà bạn có thể muốn thêm để hỗ trợ các ứng dụng email cũ hơn.

auth_mechanisms = plain login

Lưu và đóng file.

Cấu hình SSL/TLS Encryption

Sửa file cấu hình SSL/TLS.

sudo nano /etc/dovecot/conf.d/10-ssl.conf

Thay đổi ssl = yes thành ssl = required để thực thi mã hóa.

ssl = required

Tìm 2 dòng sau.

ssl_cert = </etc/dovecot/private/dovecot.pem
ssl_key = </etc/dovecot/private/dovecot.key

Theo mặc định, Dovecot sử dụng chứng chỉ TLS tự ký. Thay thế chúng bằng các giá trị sau để chỉ định vị trí của chứng chỉ Let’s Encrypt TLS và khóa riêng tư của bạn. Đừng bỏ ký tự <. Điều này là cần thiết.

ssl_cert = </etc/letsencrypt/live/mail.z-log.net/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.z-log.net/privkey.pem

Bạn nên ưu tiên thứ tự mật mã của máy chủ hơn của máy khách. Vì vậy, hãy bỏ ghi chú dòng này và thay đổi giá trị thành yes.

ssl_prefer_server_ciphers = yes

Thay đổi chứng chỉ TLSv1

ssl_min_protocol = TLSv1.2

Lưu và đóng file.

Định cấu hình xác thực SASL

sudo nano /etc/dovecot/conf.d/10-master.conf

Thay đổi phần xác thực dịch vụ thành phần sau để Postfix có thể tìm thấy máy chủ xác thực Dovecot.

service auth {
    unix_listener /var/spool/postfix/private/auth {
      mode = 0660
      user = postfix
      group = postfix
    }
}

Lưu đóng file và khởi động lại postfix và dovecot.

sudo systemctl restart postfix dovecot

Dovecot sẽ lắng nghe trên cổng 143 (IMAP) và 993 (IMAPS), như có thể thấy với:

sudo ss -lnpt | grep dovecot

Nếu xảy ra lỗi cấu hình, dovecot sẽ không khởi động lại được, kiểm tra Dovecot có chạy hay không bằng lệnh sau.

sudo systemctl status dovecot

Cấu hình Email Client

Cấu hình Outlook trên Máy tính

Mở Outlook và Chọn Accounts->Add account->

Chọn Addvanced setup->Internet email->

Nhập các thông tin về mail->Sign in.

Vào trang mail và gửi thử mail.

Cấu hình Mail trên điện thoại

Vào Cài đặt điện thoại -> Chọn Mail -> Tài khoản ->

Screenshot
Screenshot
Screenshot

-> Thêm tài khoản -> Khác -> Thêm tài khoản Mail ->

Screenshot
Screenshot
Screenshot

-> Điền thông tin tài khoản mail -> Nhấn tiếp -> Chọn IMAP -> Điền thông tin mail, máy chủ và user đăng nhập -> Nhấn tiếp -> Nếu kết nối Client với Server Mail thành công sẽ hiện ra màn hình Tài khoản ->

Screenshot
Screenshot
Screenshot

-> Thoát ra màn hình chính -> Chọn app Mail -> Kiểm tra gửi và nhận mail -> Ok.

Screenshot
Screenshot
Screenshot

Hoàn tất.

Nguồn tham khảo: linuxbabe.com

Bình luận

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *