Bản ghi SPF là gì và cách thêm đúng
SPF là danh sách các máy chủ được phép gửi thư mang tên miền của bạn. Bài này giải thích cú pháp, ba lỗi hay gặp (hai bản ghi, quá 10 lần tra cứu, +all) và cách thêm trên Cloudflare, Google Workspace, Microsoft 365, Zoho, cPanel, DirectAdmin.
SPF làm gì
SPF (Sender Policy Framework) là một bản ghi DNS loại TXT, liệt kê những máy chủ được phép gửi thư mang tên miền của bạn. Khi một thư đến, máy chủ nhận tra bản ghi SPF của tên miền người gửi và so địa chỉ IP vừa gửi thư với danh sách đó.
Có một chi tiết hay bị hiểu nhầm: SPF kiểm tra địa chỉ trong phong bì thư (MAIL FROM, còn gọi là Return-Path), không phải địa chỉ From: mà người đọc nhìn thấy. Vì vậy riêng SPF chưa đủ để chặn giả mạo; nó là một trong hai chân (cùng DKIM) để DMARC dựa vào. Dù vậy, thiếu SPF thì thư giả danh giám đốc hay kế toán gửi tới đối tác rất dễ lọt vào hộp thư chính.
Cú pháp trong năm phút
Một bản ghi SPF là một dòng văn bản, các thành phần cách nhau bằng dấu cách:
v=spf1 include:_spf.google.com ip4:203.0.113.10 ~all
v=spf1bắt buộc đứng đầu.include:tên-miềnnghĩa là "cho phép luôn những máy chủ mà tên miền đó liệt kê". Dùng cho Google Workspace, Microsoft 365, các dịch vụ gửi thư hàng loạt.ip4:vàip6:cho phép một địa chỉ hoặc một dải IP cụ thể, ví dụip4:203.0.113.0/24.avàmxcho phép địa chỉ của chính tên miền hoặc của các máy chủ nhận thư của nó.- Phần kết thúc quyết định số phận của thư từ máy chủ lạ:
-all(từ chối),~all(nghi ngờ, softfail),?all(trung lập) và+all(cho phép tất cả).
Ba lỗi hay gặp
Có hai bản ghi SPF. Mỗi tên miền chỉ được có một bản ghi bắt đầu bằng v=spf1. Nếu có hai, người nhận trả lỗi permerror và bỏ qua SPF. Khi thêm một dịch vụ mới, hãy sửa bản ghi hiện có, đừng tạo thêm bản ghi thứ hai.
Vượt quá 10 lần tra cứu DNS. Mỗi include:, a, mx, ptr, exists: và redirect= tính một lần tra cứu, và các include lồng bên trong cũng được cộng. Quá 10 là permerror. Dải IP (ip4:, ip6:) và all không tốn lượt nào. Nếu cần nhiều dịch vụ, hãy bỏ include của dịch vụ không còn dùng, hoặc chuyển dịch vụ gửi hàng loạt sang tên miền con riêng.
Ngoài ra, quá 2 lần tra cứu "rỗng" (tên miền trong include, a, mx không tồn tại hoặc không có bản ghi) cũng gây permerror; một include: trỏ tới tên miền đã bỏ là lỗi hay gặp, và mỗi mx còn có giới hạn riêng 10 tên máy chủ.
Kết thúc bằng +all hoặc ?all. +all cho phép mọi máy chủ trên Internet, tức là tệ hơn không có SPF vì trông như đã cấu hình. Hãy dùng ~all lúc đầu và chỉ chuyển sang -all khi chắc chắn đã liệt kê đủ nguồn gửi thư. Cũng nên tránh ptr: chuẩn đã khuyên không dùng, vì chậm và tốn lượt tra cứu.
Ngoài ra nhớ rằng SPF không kế thừa cho tên miền con: mail.example.vn cần bản ghi SPF của riêng nó nếu gửi thư.
Các bước thêm bản ghi
- Liệt kê mọi nơi đang gửi thư nhân danh tên miền: dịch vụ email chính, phần mềm kế toán, hệ thống gửi thông báo của website, công cụ gửi thư hàng loạt.
- Tìm giá trị
include:mà từng nơi yêu cầu (thường ghi trong trang hướng dẫn xác thực tên miền của họ). - Gộp thành một bản ghi duy nhất, kết thúc bằng
~all. - Vào nơi quản lý DNS, thêm bản ghi TXT, tên (Host) là
@, giá trị là dòng vừa soạn, TTL để mặc định. Đừng tự thêm dấu ngoặc kép; giao diện DNS sẽ tự xử lý. - Chờ hết TTL cũ (thường từ 5 phút đến 1 giờ) rồi kiểm tra (xem phần cuối).
Theo nền tảng
Cloudflare. Vào tên miền, chọn DNS, Records, Add record. Loại TXT, Name là @, Content là bản ghi SPF. Bản ghi TXT không có đám mây cam/xám nên không cần chọn gì thêm. Nếu đã có một bản ghi SPF, bấm Edit thay vì Add.
Google Workspace. Google hướng dẫn v=spf1 include:_spf.google.com ~all. Nếu còn dịch vụ khác gửi thư, thêm include: của chúng vào cùng dòng, trước phần ~all.
Microsoft 365. Microsoft khuyến nghị v=spf1 include:spf.protection.outlook.com -all (bản dành cho tổ chức chính phủ Mỹ GCC High dùng spf.protection.office365.us). Bạn có thể dùng ~all trong thời gian rà soát các nguồn gửi, nhưng nên bật DKIM ngay vì DMARC khó có tác dụng khi thư trượt SPF mà không có chữ ký DKIM. Cổng quản trị sẽ báo SPF chưa đúng nếu bạn đặt sai tên miền hoặc có hai bản ghi.
Zoho Mail. Dùng include:zohomail.com cho trung tâm dữ liệu .com; khu vực khác dùng zohomail.eu, zohomail.in... (xem đúng giá trị trong Zoho Mail Admin Console, mục Domains, SPF). Ví dụ: v=spf1 include:zohomail.com ~all, tốn 2 lượt tra cứu. Đừng chép include zoho.com cũ từ các hướng dẫn lâu năm: nó tốn khoảng 5 lượt.
cPanel. Vào Email Deliverability, chọn tên miền, bấm Manage, rồi Repair hoặc Install the suggested record cho SPF. Hoặc dùng Zone Editor để thêm TXT thủ công, như ở các bước trên.
DirectAdmin. Khi DNS đặt tại chính máy chủ, DirectAdmin tự tạo bản ghi dạng v=spf1 a mx ip4:<IP máy chủ> ~all. Bạn sửa nó ở Account Manager, DNS Management (thêm include: của dịch vụ khác vào cùng dòng, không tạo bản ghi thứ hai). Nếu DNS đặt ở nơi khác, sửa tại nhà cung cấp DNS đó.
Cách tự kiểm tra
Trên macOS hoặc Linux:
dig +short TXT example.vn
Kết quả phải có đúng một dòng bắt đầu bằng "v=spf1. Trên Windows dùng:
nslookup -type=TXT example.vn
Sau đó dán bản ghi vào công cụ đọc SPF để xem cú pháp và số lần tra cứu, hoặc dùng công cụ tạo SPF và DMARC để soạn bản ghi mới. Cả hai chạy trong trình duyệt, không gửi dữ liệu đi đâu.
Kiểm tra thực tế cuối cùng: gửi một thư từ địa chỉ của tên miền tới một hộp Gmail cá nhân, chọn "Hiện thư gốc" (Show original) và tìm dòng SPF: PASS.