Cách tạo bản ghi SPF đúng chuẩn cho tên miền công ty
Hướng dẫn tạo bản ghi SPF từng bước: cú pháp đúng, ~all hay -all, giới hạn 10 lượt tra DNS, gộp include và cách kiểm tra bản ghi sau khi tạo.
Trong bài này
Bản ghi SPF là một bản ghi TXT duy nhất trong DNS của tên miền, liệt kê những máy chủ được phép gửi email thay bạn. Để tạo, bạn liệt kê mọi dịch vụ đang gửi thư bằng tên miền, viết một bản ghi bắt đầu bằng v=spf1, thêm include: hoặc ip4: cho từng nguồn gửi, kết thúc bằng ~all hoặc -all, rồi khai báo ở nhà cung cấp DNS và kiểm tra.
Bản ghi SPF dùng để làm gì?
SPF (Sender Policy Framework) được định nghĩa trong RFC 7208. Khi nhận thư, máy chủ lấy tên miền của người gửi trong phong bì (địa chỉ MAIL FROM trong phiên SMTP, sau hiện ở dòng Return-Path), tra bản ghi SPF của tên miền đó và kiểm tra IP đang kết nối có được phép hay không.
Lưu ý: SPF xét người gửi trong phong bì, không phải dòng From: mà người nhận nhìn thấy. Vì thế riêng SPF không chặn được giả mạo tên hiển thị, và phải đi cùng DKIM, DMARC. Nếu muốn nắm bức tranh tổng thể trước, hãy đọc SPF, DKIM, DMARC là gì.
Cấu trúc một bản ghi SPF
congty.vn. 3600 IN TXT "v=spf1 include:_spf.zomail.io ip4:203.0.113.25 ~all"Đọc từ trái sang phải:
v=spf1: thẻ phiên bản, luôn đứng đầu và viết đúng như vậy.- Cơ chế (mechanism), mỗi cơ chế khớp một nhóm máy gửi:
include:tenmien: chấp nhận thêm những gì bản ghi SPF của tên miền đó cho phép (cách thường dùng để khai báo nhà cung cấp).ip4:203.0.113.25hoặcip4:203.0.113.0/24: một IPv4 hoặc một dải.ip6:2001:db8::/32: một IPv6 hoặc một dải.avàmx: IP của bản ghi A/AAAA hoặc các máy MX của tên miền.existsvàptr: hiếm khi cần; RFC khuyên không dùngptr.- **Cơ chế
all**: khớp mọi thứ chưa được khớp trước đó, nên luôn đặt cuối.
Mỗi cơ chế có thể kèm ký hiệu (qualifier):
| Ký hiệu | Ví dụ | Kết quả | Ý nghĩa |
|---|---|---|---|
+ (mặc định) | +all | pass | Được phép. Đừng bao giờ dùng với all. |
- | -all | fail | Không được phép, bên nhận có thể từ chối. |
~ | ~all | softfail | Có lẽ không được phép, nhận nhưng đánh dấu. |
? | ?all | neutral | Không khẳng định gì. |
Các bước tạo bản ghi SPF
1. Liệt kê mọi nguồn gửi thư bằng tên miền
Đây là bước hay bị bỏ qua nhất. Ngoài nhà cung cấp hộp thư, hãy nghĩ tới:
- website (form liên hệ, thông báo đơn hàng),
- công cụ gửi bản tin, email marketing,
- helpdesk, CRM,
- phần mềm hoá đơn điện tử, kế toán, tính lương,
- máy scan, máy in gửi tài liệu qua email,
- máy chủ cũ vẫn còn chuyển thư.
Mỗi nhà cung cấp đều có tài liệu ghi giá trị cần thêm, thường là một include:. Nếu công cụ dùng tên miền riêng của họ (ví dụ bounce.vendor.example) làm người gửi phong bì thì không cần thêm vào SPF của bạn, nhưng vẫn nên bật ký DKIM bằng tên miền của bạn để DMARC đạt.
2. Kiểm tra bản ghi hiện có
Tra các bản ghi TXT ở gốc tên miền:
dig +short TXT congty.vn
nslookup -type=TXT congty.vnNếu đã có bản ghi v=spf1, hãy sửa bản ghi đó thay vì tạo thêm. Hai bản ghi SPF trên cùng một tên gây lỗi permerror, và phần lớn bên nhận sẽ bỏ qua SPF của bạn.
3. Viết bản ghi
Ví dụ một công ty dùng Zomail cho hộp thư, thêm một công cụ gửi bản tin và một máy scan đặt tại văn phòng:
v=spf1 include:_spf.zomail.io include:_spf.bantin.example ip4:198.51.100.10 ~allNếu dùng Zomail, giá trị SPF chính xác hiển thị trên trang tên miền trong trang quản trị; trang cũng cảnh báo khi phát hiện nhiều bản ghi SPF, hoặc bản ghi hiện có còn thiếu include của Zomail.
4. Khai báo ở nhà cung cấp DNS
Tạo (hoặc sửa) một bản ghi TXT:
- Tên / Host:
@hoặc để trống (một số nơi yêu cầu ghi đầy đủcongty.vn) - Giá trị: nội dung bản ghi, không cần dấu ngoặc kép trừ khi nhà cung cấp yêu cầu
- TTL: 3600 là ổn; khi đang thử nghiệm có thể để 300
Đừng tạo bản ghi loại "SPF" (type 99). Loại này đã bị RFC 7208 loại bỏ; hãy dùng TXT.
5. Kiểm tra
Sau vài phút, kiểm tra bằng dig +short TXT congty.vn, rồi gửi một thư tới địa chỉ Gmail và mở Hiển thị thư gốc (Show original). Bạn cần thấy SPF: 'PASS' with IP …. Header Authentication-Results cho chi tiết:
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of lan@congty.vn designates 203.0.113.25 as permitted sender)Giới hạn 10 lượt tra DNS
RFC 7208 giới hạn số cơ chế phải tra DNS ở mức 10 lượt cho mỗi lần kiểm tra SPF. Các cơ chế bị tính gồm include, a, mx, ptr, exists và redirect=, tính cả các lượt tra bên trong những bản ghi bạn include. ip4, ip6 và all không tính. Ngoài ra còn giới hạn hai lượt tra "rỗng" (không trả về bản ghi nào); vượt giới hạn nào cũng ra permerror.
Rất dễ vượt mà không biết: include của một nhà cung cấp lớn có thể tự dùng ba, bốn lượt, nên năm dịch vụ là đủ vượt 10. Cách giữ dưới giới hạn:
- Xoá dịch vụ không còn dùng. Include cũ là nguyên nhân phổ biến nhất.
- Ưu tiên dịch vụ cho dùng tên miền phong bì riêng. Nhiều công cụ marketing cho đặt return-path là tên miền con (ví dụ
bounce.congty.vn) có SPF riêng, không chiếm lượt tra của tên miền gốc. - Dùng tên miền con cho thư hàng loạt. Gửi bản tin từ
news.congty.vnthì tên miền con này có bản ghi SPF và ngân sách lượt tra riêng. - **Thay
a,mxbằngip4:** khi IP ổn định. - Cẩn thận với dịch vụ "làm phẳng SPF" (thay include bằng danh sách IP): nếu nhà cung cấp đổi IP mà danh sách không được cập nhật, thư hợp lệ sẽ trượt.
Nên dùng ~all hay -all?
Cả hai đều hợp lệ. -all (hard fail) khẳng định ngoài danh sách thì không ai được gửi; ~all (soft fail) nói rằng nguồn ngoài danh sách là đáng ngờ. Khi đã có DMARC, quyết định cuối cùng dựa trên chính sách DMARC, và với DMARC thì cả fail lẫn softfail đều chỉ được tính là "SPF không đạt". Cách làm an toàn thường thấy:
- Bắt đầu với
~alltrong lúc rà đủ các nguồn gửi. - Theo dõi báo cáo DMARC tới khi mọi nguồn hợp lệ đều đạt.
- Nâng DMARC dần lên
p=quarantinerồip=reject(đây mới là nơi việc chặn thực sự diễn ra), và có thể chuyển SPF sang-all.
Tránh ?all (không có tác dụng) và tuyệt đối không dùng +all, tức cho phép mọi máy chủ trên Internet. Lộ trình chi tiết có trong bài cấu hình DMARC.
Lỗi SPF thường gặp và cách sửa
- "Có nhiều bản ghi SPF": gộp thành một bản ghi
v=spf1chứa đủ các include. - **
permerror: too many DNS lookups**: đếm lượt tra và rút gọn như trên. - Bản ghi dài bị cắt sai: một chuỗi TXT tối đa 255 ký tự. Bản ghi dài phải tách thành nhiều chuỗi trong ngoặc kép nằm trong cùng một bản ghi (
"v=spf1 include:a … " "include:b … ~all"). Bên nhận nối các chuỗi mà không chèn khoảng trắng, nên hãy để dấu cách bên trong một chuỗi. - Gõ sai: thiếu dấu hai chấm (
include _spf.zomail.io), dùng dấu phẩy giữa các cơ chế, hoặc gõ sai tên miền nhà cung cấp đều làm bản ghi lỗi hoặc vô tác dụng. Các cơ chế chỉ cách nhau bằng một dấu cách. - Đặt SPF sai tên: bản ghi phải nằm trên tên miền dùng làm người gửi phong bì, thường là gốc
congty.vn, không phảiwwwhaymail. - Thư chuyển tiếp trượt SPF: là hành vi bình thường. Hãy đảm bảo đã có DKIM để DMARC vẫn đạt; xem cách cấu hình DKIM.
Nếu SPF đã đạt mà thư vẫn vào hộp thư rác, nguyên nhân thường nằm ở chỗ khác; bài vì sao email gửi đi bị vào spam liệt kê các điểm cần kiểm tra.
Tạo SPF với Zomail
Trong Zomail, trang tên miền hiển thị giá trị SPF cần khai báo cùng với MX, DKIM và DMARC, tự kiểm tra và đánh dấu Đúng, Chưa có hoặc Sai / thiếu, kèm gợi ý khi có bản ghi trùng hoặc thiếu include. Bạn có thể tải file DNS để nhập vào Cloudflare và các nhà cung cấp tương tự, hoặc dùng cấu hình tự động Domain Connect nếu nhà cung cấp DNS hỗ trợ. Từng bản ghi được hướng dẫn trong trang bắt đầu sử dụng, còn các gói dịch vụ có tại bảng giá.
FAQ
Một tên miền có được có hai bản ghi SPF không?
Không. RFC 7208 chỉ cho phép đúng một bản ghi v=spf1 trên mỗi tên. Có hai bản ghi thì bên nhận trả về permerror và SPF của bạn coi như vô hiệu. Hãy gộp mọi include và IP vào một bản ghi.
Giới hạn 10 lượt tra DNS của SPF là gì?
Trong một lần kiểm tra SPF, các cơ chế include, a, mx, ptr, exists và redirect chỉ được gây ra tối đa 10 lượt tra DNS, tính cả các bản ghi được include lồng bên trong. Vượt quá thì SPF trả về permerror. ip4, ip6 và all không bị tính.
Bản ghi SPF nên dùng ~all hay -all?
Bắt đầu bằng ~all trong lúc xác nhận đủ các nguồn gửi, sau đó cân nhắc -all khi báo cáo DMARC cho thấy mọi nguồn hợp lệ đều đạt. Khi đã có DMARC, chính sách DMARC quan trọng hơn việc chọn giữa hai ký hiệu này.
SPF có cần khai báo máy chủ nhận thư không?
Không. SPF chỉ liên quan tới thư gửi đi. Việc nhận thư do bản ghi MX quyết định. Chỉ thêm mx vào SPF nếu chính các máy đó cũng gửi thư cho tên miền của bạn.
Bao lâu thì bản ghi SPF có hiệu lực?
Ngay khi máy chủ DNS thấy bản ghi mới, thường chỉ vài phút, nhưng giá trị cũ đã lưu đệm có thể tồn tại tới hết TTL của bản ghi trước. Hạ TTL xuống 300 giây từ hôm trước khi sửa sẽ giúp thay đổi có hiệu lực nhanh hơn.