Bản ghi SPF và DKIM là gì?
SPF và DKIM là hai loại bản ghi TXT trong DNS cho phép bạn phát hiện hành vi giả mạo email và giúp các email hợp pháp được gửi vào hộp thư đến của người nhận thay vì thư mục thư rác. thư mục thư rác của người nhận nếu họ không thêm bạn vào sổ địa chỉ.
Bản ghi SPF (Khung chính sách người gửi) chỉ định máy chủ hoặc địa chỉ IP nào được phép gửi email thay mặt cho miền. Bạn chỉ nên cho phép máy chủ email của riêng bạn hoặc máy chủ của ISP gửi email cho miền của bạn.
DKIM (Thư được xác định bằng khóa miền) sử dụng khóa riêng để thêm chữ ký vào email được gửi từ miền của bạn. Máy chủ SMTP nhận sẽ xác minh chữ ký bằng cách sử dụng khóa chung tương ứng, được xuất bản trong vùng DNS của miền của bạn.
Tạo SPF Record trên DNS
Trên giao diện quản lý DNS, tạo mới record TXT như sau.
Record Type Name Value
TXT @ v=spf1 mx ~all
- TXT cho biết đay là bản ghi TXT record.
- Nhập
@
vào trường tên để thể hiện miền apex (z-log.net). - v=spf1 cho biết đây là bản ghi SPF và phiên bản bản ghi SPF là SPF1.
- mx có nghĩa là tất cả các máy chủ được liệt kê trong bản ghi MX đều được phép gửi email cho miền của bạn và tất cả các máy chủ khác đều không được phép.
- ~all chỉ ra rằng email từ miền của bạn chỉ được đến từ các máy chủ được chỉ định trong bản ghi SPF. Email từ các máy chủ khác sẽ bị gắn cờ là không đáng tin cậy. Các lựa chọn thay thế có thể là +all, -all, ?all, nhưng chúng hiếm khi được sử dụng.
-all
có nghĩa là các email được gửi từ các máy chủ không được phép sẽ bị từ chối, không bao giờ rơi vào hộp thư đến hoặc thư mục thư rác của người nhận. Tôi đã thấy nó được facebook.com sử dụng, nhưng nhìn chung chúng tôi không cần một chính sách nghiêm ngặt như vậy.
Một số người có thể nghĩ rằng -all sẽ tốt hơn vì nó sẽ từ chối email từ các máy chủ không đáng tin cậy. Chà, sử dụng -all trong chính sách SPF của bạn có thể khiến email của chính bạn bị từ chối khi người nhận có hai máy chủ SMTP và khi máy chủ SMTP chính ngừng hoạt động ngoại tuyến, email của bạn sẽ được lưu trữ tạm thời trên máy chủ SMTP dự phòng. Khi máy chủ SMTP chính trực tuyến trở lại, email sẽ được chuyển tiếp từ máy chủ SMTP dự phòng đến máy chủ SMTP chính. Vì bạn không liệt kê máy chủ SMTP dự phòng của người nhận trong bản ghi SPF của bạn, email sẽ bị máy chủ SMTP chính của người nhận từ chối. Vì vậy, bạn nên sử dụng ~all trong chính sách SPF của mình..
Bạn cũng có thể liệt kê một địa chỉ IP cụ thể trong bản ghi SPF của mình.
TXT @ v=spf1 mx ip4:12.34.56.78 ~all
Lưu ý rằng một số trình quản lý DNS yêu cầu bạn bọc bản ghi SPF bằng dấu ngoặc kép như bên dưới.
Để kiểm tra xem bản ghi SPF của bạn có được phổ biến ra Internet công cộng hay không, bạn có thể sử dụng tiện ích dig trên Linux box như bên dưới (Trên Debian, bạn cần cài đặt gói bind9-dnsutils để sử dụng lệnh dig: sudo apt install bind9 -dnsutils).
dig z-log.net txt
Cũng có thể sử dụng công cụ khảo sát dmarcian.com để kiểm tra cú pháp bản ghi SPF của mình.
Cấu hình SPF Policy Agent trên Debian Server
Cần yêu cầu máy chủ Postfix SMTP của mình kiểm tra bản ghi SPF cho các email đến. Điều này không giúp gửi email đi nhưng sẽ giúp phát hiện các email đến giả mạo.
sudo apt install postfix-policyd-spf-python
Sau đó chỉnh sửa tệp cấu hình quy trình chính Postfix.
sudo nano /etc/postfix/master.cf
Thêm các dòng sau vào cuối tệp để thông báo cho Postfix khởi động trình nền chính sách SPF khi nó tự khởi động.
policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf
Lưu và đóng tập tin.Tiếp theo, chỉnh sửa tập tin 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 chỉ định cài đặt thời gian chờ của tác nhân chính sách Postfix. Các dòng sau sẽ áp đặt hạn chế đối với các email đến bằng cách từ chối email trái phép và kiểm tra bản ghi SPF.
policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf
Lưu và đóng tệp, sau đó khởi động lại Postfix.
sudo systemctl restart postfix
Lần tới, khi bạn nhận được email từ miền có bản ghi SPF, bạn có thể xem kết quả kiểm tra SPF trong tiêu đề raw email. Tiêu đề sau cho biết người gửi đã gửi email từ máy chủ được ủy quyền.
Received-SPF: Pass (sender SPF authorized).
Thiết lập DKIM trên máy chủ Debian
Cài đặt OpenDKIM để triển khai mã nguồn mở của hệ thống xác thực người gửi DKIM.
sudo apt install opendkim opendkim-tools
Sau đó thêm người dùng postfix vào nhóm opendkim.
sudo gpasswd -a postfix opendkim
Sửa tệp cấu hình chính OpenDKIM.
sudo nano /etc/opendkim.conf
Bỏ ghi chú các dòng sau.
Canonicalization relaxed/simple
Mode sv
SubDomains no
Tìm dòng sau.
#Nameservers 127.0.0.1
Đổi thành.
Nameservers 8.8.8.8,1.1.1.1
Điều này yêu cầu OpenDKIM sử dụng 8.8.8.8 và 1.1.1.1 để truy vấn các bản ghi DNS. Bạn nên sử dụng nhiều máy chủ định danh. Nếu một máy chủ bị lỗi thì máy chủ còn lại vẫn có thể trả lời các truy vấn DNS. Hãy phân tách từng địa chỉ IP bằng dấu phẩy.
Tiếp theo, thêm các dòng sau vào cuối tập tin này.
# Map domains in From addresses to keys used to sign messages
KeyTable refile:/etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
# Hosts to ignore when verifying signatures
ExternalIgnoreList /etc/opendkim/trusted.hosts
# A set of internal hosts whose mail should be signed
InternalHosts /etc/opendkim/trusted.hosts
Lưu và đóng file.
Tạo Signing Table, Key Table, and Trusted Hosts File
Tạo cấu trúc thư mục cho OpenDKIM.
sudo mkdir -p /etc/opendkim/keys
Thay đổi chủ sở hữu từ root thành opendkim và đảm bảo chỉ người dùng opendkim mới có thể đọc và ghi vào thư mục khóa.
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod go-rw /etc/opendkim/keys
Tạo signing table.
sudo nano /etc/opendkim/signing.table
Thêm dòng sau vào tệp. Dòng này cho OpenDKIM biết rằng nếu người gửi trên máy chủ của bạn đang sử dụng địa chỉ @z-log.net thì dòng này phải được ký bằng khóa riêng được xác định theo default._domainkey.z-log.net. dòng này cho biết rằng tên miền phụ của bạn cũng sẽ được ký bằng khóa riêng.
*@z-log.net default._domainkey.z-log.net
*@*.z-log.net default._domainkey.z-log.net
Lưu và đóng file. Sau đó tạo key table.
sudo nano /etc/opendkim/key.table
Thêm dòng sau, để cho biết vị trí private key.
default._domainkey.z-log.net z-log.net:default:/etc/opendkim/keys/z-log.net/default.private
Lưu và đóng file. Tiếp theo, tạo file trusted hosts.
sudo nano /etc/opendkim/trusted.hosts
Thêm các dòng sau vào tệp mới tạo. Điều này cho OpenDKIM biết rằng nếu một email đến từ localhost hoặc từ cùng một tên miền thì OpenDKIM sẽ ký vào email nhưng sẽ không thực hiện xác minh DKIM trên email.
127.0.0.1
localhost
.z-log.net
Lưu và đóng file.
Lưu ý: Bạn không nên thêm dấu hoa thị vào tên miền như sau: *.example.com mà chỉ nên có dấu chấm trước tên miền.
Tạo Private/Public Keypair
Tạo hai khóa:
- private key khóa riêng để ký các email gửi đi.
- public key để nhận máy chủ SMTP nhằm xác minh chữ ký DKIM. Khóa này sẽ được xuất bản trong vùng DNS của bạn để máy chủ SMTP nhận có thể tìm thấy nó.
Tạo một thư mục riêng cho tên miền.
sudo mkdir /etc/opendkim/keys/z-log.net
Tạo keys sử dụng opendkim-genkey
tool.
sudo opendkim-genkey -b 2048 -d z-log.net -D /etc/opendkim/keys/z-log.net -s default -v
Lệnh trên sẽ tạo các khóa 2048 bit. -d (domain)
chỉ định tên miền. -D (directory)
chỉ định thư mục nơi các khóa sẽ được lưu trữ và chúng tôi sử dụng mặc định làm bộ chọn (-s)
, còn được gọi là name. Sau khi lệnh được thực thi, khóa riêng sẽ được ghi vào tệp default.private
và khóa chung sẽ được ghi vào tệp default.txt
.
Đặt opendkim
làm chủ sở hữu của khóa riêng.
sudo chown opendkim:opendkim /etc/opendkim/keys/z-log.net/default.private
Và thay đổi quyền để chỉ người dùng opendkim mới có quyền truy cập đọc và ghi vào tệp.
sudo chmod 600 /etc/opendkim/keys/z-log.net/default.private
Publish Your Public Key trên DNS Records
Hiển thị khóa công khai.
sudo cat /etc/opendkim/keys/z-log.net/default.txt
The string sau tham số p
parameter là public key.
Trong trình quản lý DNS của bạn, tạo bản ghi TXT, nhập default._domainkey vào trường tên. Sau đó quay lại cửa sổ terminal, sao chép mọi thứ trong dấu ngoặc đơn và dán vào trường giá trị của bản ghi DNS. Bạn cần xóa tất cả double dấu ngoặc kép và khoảng trắng trong trường giá trị. Nếu bạn không xóa chúng thì bài kiểm tra khóa ở bước tiếp theo có thể sẽ thất bại.
Kiểm tra DKIM Key
Nhập lệnh sau trên máy chủ Debian để kiểm tra khóa của bạn.
sudo opendkim-testkey -d z-log.net -s default -vvv
opendkim-testkey: using default configfile /etc/opendkim.conf
opendkim-testkey: checking key 'default._domainkey.z-log.net'
opendkim-testkey: key secure
opendkim-testkey: key OK
Bạn có thể truy cập https://www.dmarcanalyzer.com/dkim/dkim-check/, nhập default
làm bộ chọn và nhập tên miền của bạn để kiểm tra việc truyền bá bản ghi DKIM.
Nếu bạn thấy Khóa không an toàn trong đầu ra lệnh, đừng hoảng sợ. Điều này là do DNSSEC chưa được bật trên tên miền của bạn. DNSSEC là một tiêu chuẩn bảo mật cho truy vấn DNS an toàn. Hầu hết các tên miền chưa bật DNSSEC. Hoàn toàn có không cần lo lắng về việc Key không an toàn. Bạn có thể tiếp tục làm theo hướng dẫn này.
Nếu thấy lỗi query timed out nghĩa là server của bạn có vấn đề về độ phân giải DNS. Bạn có thể chạy lại lệnh trên xem có hoạt động không. Nếu vẫn không được thì bạn có thể comment dòng sau trong /etc/opendkim.conf
và khởi động lại opendkim.service
.
TrustAnchorFile /usr/share/dns/root.key
Kết nối Postfix tới OpenDKIM
Postfix có thể giao tiếp với OpenDKIM thông qua một tệp socket Unix. Tệp socket mặc định được OpenDKIM sử dụng là /run/opendkim/opendkim.sock
, như được hiển thị trong tệp /etc/opendkim.conf
file. Nhưng postfix SMTP daemon shipped with Debian runs in a chroot jail, có nghĩa là daemon SMTP phân giải tất cả các tên tệp liên quan đến thư mục hàng đợi Postfix (/var/spool/postfix
). Vì vậy, chúng ta cần thay đổi tệp socket OpenDKIM Unix.
Tạo thư mục để chứa tệp OpenDKIM socket file và chỉ cho phép người dùng opendkim và nhóm postfix truy cập vào nó.
sudo mkdir /var/spool/postfix/opendkim
sudo chown opendkim:postfix /var/spool/postfix/opendkim
Sau đó chỉnh sửa tệp cấu hình chính OpenDKIM.
sudo nano /etc/opendkim.conf
Tìm dòng sau.
Socket local:/run/opendkim/opendkim.sock
Thay thế nó bằng dòng sau.
Socket local:/var/spool/postfix/opendkim/opendkim.sock
Tìm dòng sau
SOCKET=local:$RUNDIR/opendkim.sock
Đổi thành
SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"
Lưu và đóng file.
Tiếp theo, chúng ta cần chỉnh sửa tệp cấu hình chính Postfix.
sudo nano /etc/postfix/main.cf
Thêm các dòng sau vào cuối tệp này để Postfix có thể gọi OpenDKIM thông qua giao thức milter.
# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters
Lưu và đóng tệp, sau đó khởi động lại dịch vụ opendkim và postfix.
sudo systemctl restart opendkim postfix
Kiểm tra SPF và DKIM
Giờ đây, bạn có thể gửi email kiểm tra từ máy chủ thư đến tài khoản Gmail của mình để xem liệu kiểm tra SPF và DKIM có vượt qua hay không. Ở bên phải của thư email đã mở trong Gmail, nếu bạn nhấp vào nút hiển thị bản gốc từ menu thả xuống , bạn có thể xem kết quả xác thực.
Nếu thư của bạn chưa được ký và kiểm tra DKIM không thành công, bạn có thể kiểm tra nhật ký postfix (/var/log/mail.log) để xem cấu hình của bạn có vấn đề gì. Nếu bạn thấy thông báo sau trong nhật ký thư,
warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory
bạn có thể muốn kiểm tra xem dịch vụ opendkim systemd có thực sự đang chạy hay không.
sudo systemctl status opendkim
Nếu opendkim đang chạy và bạn vẫn thấy lỗi trên, bạn có thể cần chỉnh sửa tệp /etc/postfix/main.cf, thay đổi
smtpd_milters = local:opendkim/opendkim.sock
Thành
smtpd_milters = local:/opendkim/opendkim.sock
Sau đó restart Postfix.
Máy chủ email của bạn cũng sẽ thực hiện kiểm tra SPF và DKIM trên miền của người gửi. Bạn có thể xem kết quả trong tiêu đề email. Sau đây là kiểm tra SPF và DKIM trên người gửi bằng Gmail.
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2607:f8b0:4864:20::c2d; helo=mail-yw1-xc2d.google.com; envelope-from=someone@gmail.com; receiver=<UNKNOWN>
Authentication-Results: email.linuxbabe.com;
dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XWMRd2co";
dkim-atps=neutral
Lỗi cấu hình trong ứng dụng email
Việc ký DKIM có thể không thành công nếu bạn không sử dụng đúng cài đặt SMTP/IMAP trong ứng dụng email của mình.
Cài đặt đúng:
Giao thức SMTP: nhập mail.your-domain.com làm tên máy chủ, chọn cổng 587 và STARTTLS. Chọn mật khẩu thông thường làm phương thức xác thực.
Giao thức IMAP: nhập mail.your-domain.com làm tên máy chủ, chọn cổng 143 và STARTTLS. Chọn mật khẩu thông thường làm phương thức xác thực.
hoặc
Giao thức SMTP: nhập mail.your-domain.com làm tên máy chủ, chọn cổng 465 và SSL/TLS. Chọn mật khẩu thông thường làm phương thức xác thực.
Giao thức IMAP: nhập mail.your-domain.com làm tên máy chủ, chọn cổng 993 và SSL/TLS. Chọn mật khẩu thông thường làm phương thức xác thực.
Cài đặt sai:
Sử dụng cổng 25 làm cổng SMTP trong ứng dụng thư khách email để gửi đi.
Không có phương pháp mã hóa nào được chọn.
Cổng 25 nên được sử dụng để liên lạc giữa máy chủ SMTP với máy chủ SMTP. Vui lòng không sử dụng cổng này trong ứng dụng email của bạn để gửi email đi.
Bạn nên chọn phương thức mã hóa (STARTTLS hoặc SSL/TLS) trong ứng dụng email của mình.
Kiểm tra Email Score and Placement
Bạn cũng có thể truy cập https://www.mail-tester.com. Bạn sẽ thấy một địa chỉ email duy nhất. Gửi email từ miền của bạn đến địa chỉ này rồi kiểm tra điểm của bạn. Như bạn có thể thấy, tôi đã đạt điểm tuyệt đối.
Mail-tester.com chỉ có thể hiển thị cho bạn điểm số của người gửi. Có một dịch vụ khác tên là GlockApps cho phép bạn kiểm tra xem email của bạn có được đặt trong hộp thư đến hoặc thư mục thư rác của người nhận hay bị từ chối hoàn toàn hay không. Dịch vụ này hỗ trợ nhiều nhà cung cấp email phổ biến như Gmail, Outlook , Hotmail, YahooMail, thư iCloud, v.v.
Hộp thư Microsoft
Nếu email của bạn bị Microsoft Outlook hoặc Hotmail từ chối, bạn cần gửi biểu mẫu thông tin người gửi https://support.microsoft.com/en-us/getsupport?oaspworkflow=start_1.0.0.0&wfname=capsub&productkey=edfsmsbl3&locale=en-us&ccsid=635714983457075069, sau đó, email của bạn sẽ được Outlook/hotmail chấp nhận nhưng vẫn có thể bị gắn nhãn là thư rác.
Nguồn tham khảo: linuxbabe.com
Bình luận