Cách cài đặt Mailserver với Postfix và Dovecot, kết nối IMAP qua Thunderbird với hệ điều hành Ubuntu

Để thiết lập Ubuntu làm máy chủ gửi và nhận email với địa chỉ info@demo.com, bạn cần cài đặt và cấu hình một Mail Transfer Agent (MTA) như Postfix, đồng thời thiết lập các dịch vụ liên quan để hỗ trợ giao thức nhận email (POP3/IMAP) như Dovecot. Dưới đây là các bước chi tiết (Ta sẽ ví dụ tên miền cần trỏ và xây dựng Mailserver là demo.com):


1. Yêu cầu hệ thống

  • Một máy chủ chạy Ubuntu (bản mới nhất hoặc LTS khuyến nghị).
  • Một tên miền (ở đây là demo.com) đã được trỏ DNS đúng cách.
  • Quyền truy cập root hoặc sudo.

2. Cấu hình DNS

Đảm bảo bạn cấu hình các bản ghi DNS cho tên miền của mình:

  • MX Record: Trỏ về máy chủ mail.
    demo.com. IN MX 10 mail.demo.com.
  • A Record: Địa chỉ IP của máy chủ mail.
     
    mail.demo.com. IN A [IP_CỦA_BẠN]
  • SPF Record: Cho phép máy chủ gửi mail hợp lệ.
     
    demo.com. IN TXT "v=spf1 mx a -all"
  • DKIM và DMARC: Thêm cấu hình bảo mật email (xem bước 6).

3. Cài đặt Postfix

  1. Cài đặt Postfix:

     
    sudo apt update sudo apt install postfix
  2. Cấu hình Postfix: Trong quá trình cài đặt, bạn sẽ được yêu cầu chọn kiểu cấu hình:

    • Chọn "Internet Site".
    • Điền tên miền chính là demo.com.
  3. Kiểm tra và chỉnh sửa file cấu hình: Mở file /etc/postfix/main.cf:

     
    sudo nano /etc/postfix/main.cf

    Thêm/chỉnh sửa các dòng sau:

     
    myhostname = mail.demo.com
    mydomain = demo.com
    myorigin = $mydomain
    inet_interfaces = all
    inet_protocols = ipv4
    mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain relayhost = home_mailbox = Maildir/
    smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

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

     
    sudo systemctl restart postfix

4. Cài đặt Dovecot

  1. Cài đặt Dovecot:

     
    sudo apt install dovecot-core dovecot-imapd dovecot-pop3d
  2. Cấu hình Dovecot: Mở file /etc/dovecot/conf.d/10-mail.conf:

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

    Tìm và sửa dòng:

     
    mail_location = maildir:~/Maildir

    Đảm bảo user mail có quyền truy cập vào thư mục /home/username/Maildir.

    Khởi động lại Dovecot:

     
    sudo systemctl restart dovecot

5. Tạo tài khoản email

  1. Tạo một user trên hệ thống:

     
    sudo adduser info

    Đặt mật khẩu cho user này (đây sẽ là mật khẩu email).

  2. Tạo thư mục Maildir cho user:

     
    sudo maildirmake /home/info/Maildir sudo chown -R info:info /home/info/Maildir

6. Cấu hình bảo mật email (SPF, DKIM, DMARC)

  1. SPF: Đã cấu hình trong bước DNS.

  2. DKIM:

    • Cài đặt OpenDKIM:

       
      sudo apt install opendkim opendkim-tools
    • Cấu hình OpenDKIM:

       
      sudo nano /etc/opendkim.conf

      Thêm/chỉnh sửa:

      Domain demo.com KeyFile /etc/opendkim/keys/demo.com/default.private Selector default
       
      • Tạo key DKIM:

         
        sudo mkdir -p /etc/opendkim/keys/demo.com sudo opendkim-genkey -s default -d demo.com -D /etc/opendkim/keys/demo.com sudo chown -R opendkim:opendkim /etc/opendkim/keys
      • Thêm bản ghi TXT vào DNS:

         
        default._domainkey.demo.com. IN TXT "v=DKIM1; k=rsa; p=[PUBLIC_KEY]"

        Trong đó public_key có thể lấy trong file default.txt vừa mới tạo

  3. DMARC:

    • Thêm bản ghi DMARC vào DNS:
       
      _dmarc.demo.com. IN TXT "v=DMARC1; p=none; rua=mailto:postmaster@demo.com"

7. Cấu hình TLS cho SMTP

  1. Cài đặt chứng chỉ TLS (dùng Let's Encrypt):

     
    sudo apt install certbot sudo certbot certonly --standalone -d mail.demo.com
  2. Cấu hình Postfix để sử dụng TLS: Mở /etc/postfix/main.cf và thêm:

     
    smtpd_tls_cert_file=/etc/letsencrypt/live/mail.demo.com/fullchain.pem smtpd_tls_key_file=/etc/letsencrypt/live/mail.demo.com/privkey.pem smtpd_tls_security_level = may smtp_tls_security_level = may smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

    Khởi động lại Postfix:

     
    sudo systemctl restart postfix
     
    Đoạn này thì Nam thấy có 1 vấn đề khá lớn đó là nếu sử dụng Cloudflare làm nơi quản lý DNS, thì phải chú ý riêng mail.demo.com cần trỏ về chính xác địa chỉ (thay vì sử dụng Cloudflare), nên chỗ quản lý bản ghi, cần bỏ phần Proxy của Record đó mà để là DNS only

    Một số lưu ý trong cấu hình Config của Postfix

    Postfix sử dụng SASL để xử lý xác thực SMTP. Hãy kiểm tra tệp cấu hình main.cf:

    Kiểm tra các dòng liên quan đến SASL

    Đảm bảo rằng các dòng sau đây tồn tại trong /etc/postfix/main.cf:

     
    smtpd_sasl_auth_enable = yes 
    smtpd_sasl_type = dovecot 
    smtpd_sasl_path = private/auth 
    smtpd_sasl_security_options = noanonymous 
    smtpd_sasl_local_domain = $myhostname 
    broken_sasl_auth_clients = yes

    Nếu bạn sử dụng Dovecot làm backend SASL, hãy kiểm tra thêm cấu hình sau:

    • smtpd_sasl_path = private/auth: Đường dẫn này phải khớp với Dovecot.

    3. Kiểm tra cấu hình Dovecot

    Hãy xác nhận rằng Dovecot được cấu hình để hỗ trợ xác thực SASL.

    Kiểm tra tệp 10-master.conf

    Mở tệp:

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

    Đảm bảo rằng cấu hình cho socket Postfix-Dovecot đúng:

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

    Kiểm tra tệp 10-auth.conf

    Mở tệp:

     
    sudo nano /etc/dovecot/conf.d/10-auth.conf
    • Đảm bảo rằng dòng này được bật (không có dấu # phía trước):
     
    disable_plaintext_auth = no
    • Xác minh chế độ xác thực được cấu hình chính xác:
     
    auth_mechanisms = plain login

     

    Nếu Postfix và Dovecot không thể giao tiếp qua socket /var/spool/postfix/private/auth, sẽ xảy ra lỗi.

    • Kiểm tra quyền:
     
    ls -l /var/spool/postfix/private/auth
    • Quyền phải là:
     
    srw-rw-rw- 1 postfix postfix ...

    Nếu không đúng, chạy lệnh:

     
    sudo chmod 666 /var/spool/postfix/private/auth sudo chown postfix:postfix /var/spool/postfix/private/auth

    Nếu Dovecot không chấp nhận tên @ tên miền

    1. Cấu hình Dovecot để chấp nhận user@domain

    Kiểm tra tệp cấu hình /etc/dovecot/conf.d/10-auth.conf và chỉnh sửa như sau:

    • Mở tệp:
     
    sudo nano /etc/dovecot/conf.d/10-auth.conf
    • Tìm dòng:
     
    auth_username_format = %n
    • Thay đổi thành:
    auth_username_format = %u
     

    Ý nghĩa:

    • %n: Chỉ lấy phần trước @ của địa chỉ email (ví dụ: info từ info@demo.com).
    • %u: Lấy toàn bộ username (ví dụ: info@demo.com).

    Lưu ý: Nếu dòng này đang được comment (#), hãy bỏ dấu #.


    2. Kiểm tra hệ thống xác thực

    Kiểm tra cách bạn lưu trữ thông tin xác thực (user/password):

    • Nếu bạn sử dụng tệp mật khẩu (passwd-file), hãy đảm bảo bạn lưu toàn bộ định dạng email làm username.
    • Nếu sử dụng SQL, truy vấn SQL phải trả về user@domain trong cột username.

    3. Kiểm tra cấu hình Postfix

    Hãy kiểm tra xem Postfix có bị ảnh hưởng bởi vấn đề này không:

    • Trong tệp main.cf, đảm bảo các dòng liên quan đến SASL không loại bỏ tên miền.
    • Nếu cần, cấu hình Postfix cũng nên hỗ trợ username ở dạng đầy đủ (không bị cắt tên miền).

    4. Khởi động lại dịch vụ

    Sau khi chỉnh sửa cấu hình, khởi động lại các dịch vụ:

     
    sudo systemctl restart dovecot
     sudo systemctl restart postfix

    Cách gửi Email qua SMTP Google với việc Setup Email cùng mật khẩu ứng dụng

    1. Cấu hình relayhost trong Postfix để gửi qua SMTP Gmail

    • Mở file cấu hình Postfix (main.cf):
    sudo nano /etc/postfix/main.cf
    • Thêm hoặc chỉnh sửa các dòng sau:
       
      relayhost = [smtp.gmail.com]:587
      smtp_use_tls = yes
      smtp_tls_security_level = encrypt
      smtp_sasl_auth_enable = yes
      smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
      smtp_sasl_security_options = noanonymous
      smtp_sasl_tls_security_options = noanonymous
    • Lưu file và thoát.

    2. Tạo file sasl_passwd để lưu thông tin xác thực Gmail

    • Tạo file:
       
      sudo nano /etc/postfix/sasl_passwd
    • Thêm nội dung sau, thay thế bằng thông tin tài khoản Gmail của bạn:
       
      [smtp.gmail.com]:587 your-email@gmail.com:your-password
    • Lưu file và thoát.

    3. Bảo vệ file sasl_passwd và tạo database

    • Đặt quyền bảo mật:
       
      sudo chmod 600 /etc/postfix/sasl_passwd
    • Tạo file database từ sasl_passwd:
       
      sudo postmap /etc/postfix/sasl_passwd

    4. Khởi động lại Postfix

    • Sau khi cấu hình xong, khởi động lại dịch vụ Postfix:
       
      sudo systemctl restart postfix