ISPmail (14): DKIM

Trong thực tế, SMTP không quan tâm địa chỉ người gửi. Nhiều nhà cung cấp dịch vụ thư cho rằng bạn chỉ gửi email bằng địa chỉ email của riêng bạn. Nhưng không phải vậy, kẻ gửi thư rác và kẻ lừa đảo rõ ràng có thể lợi dụng điều này.

Vì vậy, một phương pháp mới đã được hình thành, thêm chữ ký mã hóa vào header của email mà mailserver người nhận có thể kiểm tra để xác minh tính xác thực của người gửi và tính toàn vẹn của email. Chữ ký được tạo bằng khóa riêng chỉ có mailserver gửi thư mới có. Sau đó, mailserver người nhận có thể xác minh bằng cách tải xuống khóa chung tương ứng từ vùng DNS của miền gửi và chạy kiểm tra chữ ký. Phương pháp được sử dụng hiện nay được gọi là Domain Keys Identified Mail – hoặc viết tắt: DKIM.

Tạo cặp khóa

apt install dnsutils
mkdir /var/lib/rspamd/dkim
chown _rspamd:_rspamd /var/lib/rspamd/dkim
## Lấy domain chính của $(hostname -f) ##
domain=$(hostname -f)
dom=${domain#*.}
## Tạo cặp khóa 2048 bits ##
tmp=$(rspamadm dkim_keygen -d $dom -s dkim -b 2048)
## Ghi public key vào readme.txt ##
cat >> ~/readme.txt <<< $(sed ':loop; N; /END PRIVATE KEY/ ! b loop; d' <<< $tmp)
## Lưu private key ##
cat > /var/lib/rspamd/dkim/$dom.dkim.key <<< $(sed -n '/BEGIN PRIVATE KEY/{:loop; N; /END PRIVATE KEY/ ! b loop; p; q}' <<< $tmp)

Mặc định độ dài khóa là 1024 bits, nhưng nhiều server như Google dùng độ dài khóa 2048 bits. Phần từ BEGIN đến END là khóa riêng. Phần sau p= là khóa công khai, cần phải ghép 3 chuổi con trong (…) thành giá trị của record TXT.

Thêm vào DNS

Cho phép rspamd dùng DKIM

cat > /etc/rspamd/local.d/dkim_signing.conf <<EOT
path = "/var/lib/rspamd/dkim/\$domain.\$selector.key";
selector_map = "/etc/rspamd/dkim_selectors.map";
EOT
echo "$dom dkim" > /etc/rspamd/dkim_selectors.map
service rspamd reload
chown _rspamd /var/lib/rspamd/dkim/*
chmod u=r,go= /var/lib/rspamd/dkim/*

Gởi thử mail

Mail đến tay người nhận với header có dạng sau:

DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.org;
	s=2019122401; t=1519400838;
	h=from:subject:date:message-id:to:mime-version:content-type:content-transfer-encoding;
	bh=kpYel1IlDvqXEUc0SyIpXbMte3XpQOCXHl+zTyHQvGc=;
	b=NEUyWUoeKE…

SPF và DMARC

Thêm một chữ ký DKIM là bước đầu tốt đẹp. Nhưng chúng ta có thể báo với bên server nhận là không nên chấp nhận email từ chúng tôi mà không có chữ ký hợp lệ. Có 2 khái niệm liên quan: SPF cũ hơn và DMARC mới hơn. Cả hai đều là các chuỗi theo dạng định trước và được thêm vào bản ghi TXT của vùng DNS. Server bên nhận có thể kiểm tra các bản ghi này có thể hỏi ý kiến chủ domain bên gửi phải làm gì nếu email không đạt chuẩn.

DMARC là tiêu chuẩn mới hơn SPF. Vậy tại sao lại sử dụng SPF? Bởi vì một số nhà cung cấp email đánh giá cao nếu chúng ta sử dụng thêm SPF. Về mặt kỹ thuật, nó đủ để xác định một mục DMARC. Quan trọng nhất là yêu cầu các email từ tên miền của bạn có chữ ký DKIM hợp lệ. Các DMARC và SPF có thể trông đại khái như:

"v=DMARC1; p=reject; adkim=s"
"v=spf1 ip4:157.97.194.11 mx ~all"

Script

#!/bin/bash
# Tên script: 11.dkim.sh
# Cài đặt DKIM cho mailserver
# © 2020 LNT <lnt@ly-le.info>
# version 20200801
#
echo 'Cài đặt DKIM cho mailserver...'
HOSTNAME=$(hostname)
DOMAIN=${HOSTNAME#*.}
apt install -y --fix-missing dnsutils
[[ ! -e  /var/lib/rspamd/dkim ]] && mkdir /var/lib/rspamd/dkim
chown _rspamd:_rspamd /var/lib/rspamd/dkim
## Tạo cặp khóa 2048 bits ##
tmp=$(rspamadm dkim_keygen -d ${DOMAIN} -s dkim -b 2048)
## Ghi public key ##
cat > ~/${DOMAIN}.pubkey <<< $(echo $tmp | sed -z 's/.*\(dkim\._domainkey.*\)/\1/' | sed -z 's/"[ \n\t]*"//g' | sed 's/.\{79\}/&\n/g')
## Lưu private key ##
cat > /var/lib/rspamd/dkim/${DOMAIN}.dkim.key <<< $(sed -z 's/\(.*END PRIVATE KEY\-*\n\).*/\1/' <<< $tmp)
ln -s /var/lib/rspamd/dkim/${DOMAIN}.dkim.key /mnt/backup/mailserver
cat > /etc/rspamd/local.d/dkim_signing.conf <<EOF
path = "/var/lib/rspamd/dkim/\$domain.\$selector.key";
selector_map = "/etc/rspamd/dkim_selectors.map";
EOF
echo "$DOMAIN dkim" > /etc/rspamd/dkim_selectors.map
chown _rspamd /var/lib/rspamd/dkim/*
chmod u=r,go= /var/lib/rspamd/dkim/*
echo "Restart Rspamd"
service rspamd reload

Comments Off on ISPmail (14): DKIM

Filed under Software

Comments are closed.