Gửi thư & DNS

Cách cấu hình DKIM cho tên miền: hướng dẫn từng bước

Cấu hình DKIM cho tên miền doanh nghiệp: selector và khoá hoạt động ra sao, bản ghi TXT hay CNAME, độ dài khoá, xoay khoá, kiểm tra và sửa lỗi DKIM.

Trong bài này
  1. DKIM làm gì và vì sao quan trọng?
  2. Chữ ký DKIM hoạt động thế nào
  3. Hai cách khai báo khoá: TXT hoặc CNAME
  4. Các bước cấu hình DKIM
  5. Độ dài khoá và xoay khoá
  6. Xử lý lỗi DKIM
  7. DKIM với Zomail
  8. FAQ

Để cấu hình DKIM, bạn bật tính năng ký thư ở nhà cung cấp email; hệ thống sẽ tạo cặp khoá và cho bạn một selector. Sau đó khai báo khoá công khai trong DNS tại selector._domainkey.tenmien, dưới dạng bản ghi TXT chứa khoá hoặc bản ghi CNAME trỏ tới khoá do nhà cung cấp lưu. Cuối cùng, gửi thư thử và kiểm tra header có dkim=pass cho tên miền của bạn.

DKIM làm gì và vì sao quan trọng?

DKIM (DomainKeys Identified Mail, RFC 6376) cho phép máy chủ nhận xác minh hai điều: một tên miền cụ thể đã đứng ra chịu trách nhiệm cho bức thư, và các phần được ký không bị sửa trên đường đi. Nhà cung cấp ký từng thư gửi đi bằng khoá bí mật; bên nhận lấy khoá công khai tương ứng trong DNS của bạn để kiểm tra chữ ký.

DKIM ngày càng quan trọng vì ba lý do:

  • DMARC dựa vào nó. DMARC đạt khi SPF hoặc DKIM đạt và khớp với tên miền ở dòng From:. Vì SPF hỏng khi thư bị chuyển tiếp, chữ ký DKIM khớp tên miền thường là thứ duy nhất giúp thư chuyển tiếp vẫn đạt.
  • Nhà cung cấp hộp thư yêu cầu. Từ 2024, Gmail và Yahoo bắt buộc người gửi số lượng lớn có cả SPF và DKIM; với người gửi thông thường, DKIM giúp tăng uy tín.
  • Uy tín gắn với tên miền của bạn. Có DKIM khớp tên miền, bên nhận xây dựng uy tín gửi cho congty.vn thay vì cho tên miền dùng chung của nhà cung cấp.

Nếu mới làm quen, hãy đọc SPF, DKIM, DMARC là gì trước.

Chữ ký DKIM hoạt động thế nào

Khi ký thư, nhà cung cấp chèn một header như sau:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=congty.vn; s=zm1;
  t=1791446400; h=from:to:subject:date:message-id:mime-version;
  bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
  b=dGhpcyBpcyBub3QgYSByZWFsIHNpZ25hdHVyZQ...

Các thẻ quan trọng:

  • d=: tên miền ký. Để DMARC đạt, tên miền này phải trùng (hoặc ở chế độ relaxed, cùng tên miền tổ chức) với tên miền ở From:.
  • s=: selector, cho bên nhận biết cần lấy khoá nào, nhờ vậy một tên miền có thể có nhiều khoá cùng lúc.
  • h=: danh sách header được ký. From luôn có mặt.
  • bh=: mã băm phần nội dung; b=: chính chữ ký.
  • c=: cách chuẩn hoá. relaxed/relaxed chấp nhận các thay đổi vô hại về khoảng trắng, chữ hoa thường của header.

Bên nhận ghép selector và tên miền để tìm khoá: zm1._domainkey.congty.vn.

Hai cách khai báo khoá: TXT hoặc CNAME

Bản ghi TXT chứa khoá công khai

Cách truyền thống. Nhà cung cấp hiển thị bản ghi kiểu:

selector1._domainkey.congty.vn.  TXT  "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA..."

Khoá RSA 2048 bit dài khoảng 400 ký tự, vượt giới hạn 255 ký tự của một chuỗi TXT. Nhà cung cấp DNS tốt sẽ tự tách thành nhiều chuỗi; một số trang quản lý tên miền cũ bắt bạn tự tách, hoặc âm thầm cắt cụt giá trị. Mỗi lần xoay khoá về sau, bạn lại phải tự thêm bản ghi TXT mới.

CNAME uỷ quyền cho nhà cung cấp

Cách hiện đại. Bạn tạo CNAME tại tên selector, trỏ sang DNS của nhà cung cấp; nhà cung cấp tự công bố và xoay khoá ở đó:

zm1._domainkey.congty.vn.  CNAME  <giá trị hiển thị trên trang tên miền>
zm2._domainkey.congty.vn.  CNAME  <giá trị hiển thị trên trang tên miền>

Bạn chỉ làm một lần. Việc xoay khoá diễn ra phía nhà cung cấp, không cần sửa DNS nữa, và không còn lỗi do khoá dài. Zomail khai báo DKIM theo cách này: hai CNAME zm1 và zm2, tự động xoay khoá luân phiên giữa hai selector. Giá trị chính xác hiển thị trên trang tên miền của bạn.

TXT chứa khoáCNAME uỷ quyền
Số bản ghi cần tạoMột cho mỗi selectorHai, làm một lần
Lỗi tách khoá dàiCó thể gặpKhông
Xoay khoáSửa DNS mỗi lầnTự động
Ai công bố khoáBạnNhà cung cấp

Các bước cấu hình DKIM

  1. Bật DKIM ở nhà cung cấp email. Thường nằm trong phần cài đặt tên miền. Nhà cung cấp tạo cặp khoá và hiện các bản ghi DNS. Với Zomail, khoá được tạo tự động khi bạn mở trang tên miền.
  2. Chép chính xác bản ghi. Chú ý tên host: nhiều trang quản lý DNS tự thêm tên miền vào cuối, nên bạn chỉ nhập zm1._domainkey, không nhập zm1._domainkey.congty.vn, nếu không sẽ thành zm1._domainkey.congty.vn.congty.vn.
  3. Tạo bản ghi ở nhà cung cấp DNS. Với CNAME trên Cloudflare, chọn DNS only (đám mây xám). CNAME bật proxy sẽ không trả về khoá.
  4. Chờ DNS cập nhật rồi kiểm tra:
dig +short CNAME zm1._domainkey.congty.vn
dig +short TXT zm1._domainkey.congty.vn

Lệnh thứ hai đi theo CNAME và phải trả về khoá v=DKIM1.

  1. Gửi thư thử tới địa chỉ Gmail hoặc Outlook.com. Trong Gmail, mở Hiển thị thư gốc: bạn cần thấy DKIM: 'PASS' with domain congty.vn. Header Authentication-Results cho chi tiết:
Authentication-Results: mx.google.com;
  dkim=pass header.i=@congty.vn header.s=zm1 header.b=dGhpcyBp
  1. Làm tương tự với mọi nguồn gửi khác. Công cụ gửi bản tin, helpdesk, phần mềm hoá đơn đều nên ký bằng tên miền của bạn (d=congty.vn) với selector riêng của họ, như s1._domainkey hay mte1._domainkey. Nếu không, thư của họ có thể đạt DKIM cho tên miền của nhà cung cấp nhưng lại trượt căn chỉnh DMARC của bạn.

Độ dài khoá và xoay khoá

  • Độ dài khoá: RFC 8301 yêu cầu bên nhận hỗ trợ khoá RSA từ 1024 tới 4096 bit và khuyến nghị bên ký dùng ít nhất 2048 bit. Hãy dùng RSA 2048 bit; khoá 1024 bit được coi là yếu.
  • Ed25519: RFC 8463 bổ sung chữ ký Ed25519, ngắn và nhanh, nhưng chưa được mọi bên nhận hỗ trợ, nên thường dùng song song với RSA chứ không thay thế.
  • Xoay khoá: giúp hạn chế thiệt hại nếu khoá bí mật bị lộ. Với TXT, bạn công bố khoá mới dưới selector mới, chuyển sang ký bằng khoá mới, và giữ khoá cũ trong DNS thêm vài ngày để thư đang trên đường vẫn kiểm tra được. Với CNAME, nhà cung cấp làm việc này thay bạn: Zomail công bố khoá mới ở selector còn lại, chuyển sang ký khi DNS đã thấy khoá, rồi mới thu hồi khoá cũ.
  • Thu hồi khoá: bản ghi có p= rỗng báo cho bên nhận rằng khoá đã bị thu hồi.

Xử lý lỗi DKIM

  • **dkim=neutral (no key) hoặc permerror**: thiếu bản ghi, đặt sai tên, hoặc khoá bị cắt cụt. Kiểm tra tên host và toàn bộ giá trị bằng dig.
  • **dkim=fail (body hash did not verify)**: nội dung bị sửa sau khi ký, ví dụ mailing list chèn chân thư, cổng diệt virus thêm dòng miễn trừ, hoặc relay gửi đi viết lại nội dung. Hãy ký ở chặng cuối hoặc tắt việc sửa thư.
  • DKIM đạt nhưng DMARC trượt: chữ ký thuộc tên miền khác (d=vendor.example). Cấu hình để dịch vụ đó ký bằng tên miền của bạn.
  • Người nhận này đạt, người kia không: thường do DNS chưa cập nhật khắp nơi, hoặc bản ghi selector bị xoá trong khi thư ký bằng nó vẫn đang được chuyển.
  • **Tránh thẻ l=** (giới hạn độ dài nội dung được ký) nếu nhà cung cấp có tuỳ chọn này; nó cho phép kẻ gian chèn thêm nội dung vào thư đã ký.

DKIM là nền tảng để siết DMARC. Khi chữ ký đã đạt, hãy làm theo bài cấu hình DMARC để đi từ theo dõi lên p=reject, đồng thời giữ bản ghi SPF gọn gàng.

DKIM với Zomail

Zomail tự tạo khoá DKIM cho từng tên miền và công bố qua hai CNAME zm1/zm2, nên việc xoay khoá không cần bạn sửa DNS thêm. Trang tên miền kiểm tra trực tiếp cả hai bản ghi cùng với MX, SPF và DMARC; bạn có thể nhập bằng file DNS hoặc dùng Domain Connect nếu nhà cung cấp DNS hỗ trợ. Xem hướng dẫn đầy đủ ở trang bắt đầu sử dụng, các gói dịch vụ có tại bảng giá.

FAQ

DKIM selector là gì?

Selector là nhãn cho bên nhận biết cần dùng khoá công khai nào. Nó xuất hiện ở thẻ s= trong chữ ký và ở phần đầu tên DNS, ví dụ zm1 trong zm1._domainkey.congty.vn. Nhờ selector, một tên miền có thể có nhiều khoá cùng lúc, cho từng dịch vụ hoặc trong lúc xoay khoá.

Một tên miền có được có nhiều bản ghi DKIM không?

Được. Khác với SPF, bạn có thể có bao nhiêu khoá DKIM tuỳ ý, mỗi khoá dưới một selector riêng. Nhà cung cấp hộp thư, công cụ gửi bản tin và helpdesk đều có thể ký bằng tên miền của bạn với các selector khác nhau.

Nên dùng khoá DKIM 1024 hay 2048 bit?

Dùng RSA 2048 bit. RFC 8301 khuyến nghị bên ký dùng tối thiểu 2048 bit, khoá 1024 bit được coi là yếu. Nếu trang quản lý DNS khó nhập giá trị TXT dài, cách CNAME uỷ quyền giải quyết triệt để vấn đề này.

Làm sao biết DKIM đã hoạt động?

Gửi thư tới một địa chỉ Gmail, mở Hiển thị thư gốc và tìm dòng DKIM: 'PASS' with domain tenmiencuaban. Bạn cũng có thể tra khoá bằng dig TXT selector._domainkey.tenmiencuaban và kiểm tra kết quả có bản ghi v=DKIM1.

Vì sao thư chuyển tiếp bị trượt DKIM?

Thông thường DKIM vẫn đạt khi chuyển tiếp. Nó chỉ trượt khi bên chuyển tiếp sửa phần đã ký, điển hình là mailing list chèn chân thư hoặc sửa tiêu đề. Khi đó bên nhận có thể dựa vào header ARC do bên chuyển tiếp thêm vào, nếu họ tin cậy nguồn đó.

  • cấu hình DKIM
  • DKIM
  • DKIM selector
  • xác thực email
  • bản ghi DNS