Postfix: Setup DNS dkim
DomainKeys Identified Mail (DKIM) adalah metode untuk otentikasi e-mail, yang memungkinkan seseorang yang menerima email untuk memverifikasi bahwa pesan tersebut sebenarnya berasal dari domain yang diklaim berasal. Kebutuhan akan jenis otentikasi ini muncul karena spam sering kali memalsukan header.
DKIM menggunakan public-key cryptography untuk memungkinkan pengirim menandatangani email yang sah secara elektronik dengan cara yang dapat diverifikasi oleh penerima.
DKIM juga menjaga agar tidak merusak surat, menawarkan integritas end-to-end dari penandatanganan sampai verifikasi Mail transfer agent (MTA).
dkim-milter adalah aplikasi berbasis-milter (dkim-filter) yang terhubung ke Postfix untuk menyediakan layanan DomainKeys Identified Mail untuk server email Anda. dkim-milter tidak lagi dikembangkan, dan pembuat awalnya telah forked source-nya dan sekarang sedang mengembangkan opendkim. Untuk rilis Lucid dan yang lebih baru, opendkim lebih disukai daripada dkim-filter. Petunjuk pada halaman ini harus sama (hanya dengan nama paket yang disesuaikan sesuai kebutuhan).
Instalasi
Asumsi Postfix sudah di install. Instalasi opendkim menggunakan perintah,
sudo apt -y install opendkim opendkim-tools sudo gpasswd -a postfix opendkim
sudo mkdir -p /etc/opendkim/keys/lms.onnocenter.or.id/ sudo chown -R opendkim: /etc/opendkim sudo chmod go-rw /etc/opendkim/keys
Key generation dan setup DNS
Generate key menggunakan perintah
mkdir -p /etc/opendkim/keys/lms.onnocenter.or.id/ cd /etc/opendkim/keys/lms.onnocenter.or.id/ opendkim-genkey -b 2048 -d lms.onnocenter.or.id -D /etc/opendkim/keys/lms.onnocenter.or.id -s lms -v chown -R opendkim: /etc/opendkim/keys/lms.onnocenter.or.id/ chmod -R 700 /etc/opendkim/keys/lms.onnocenter.or.id/
Akan menghasilkan dua (2) file:
- lms.private - berisi private key.
- lms.txt - berisi entry DNS
Argumen
-s memberikan informasi selector yang digunakan -d domain yang digunakan -t menyatakan DKIM dalam test mode.
Tambahkan di DNS sesuai dengan krs.txt, kira2 sebagai berikut
lms._domainkey.lms.onnocenter.or.id IN TXT "v=DKIM1; g=*; k=rsa; p=PpYHdE2tevfEpvL1Tk2dDYv0pF28/f5MxU83x/0bsn4R4p7waPaz1IbOGs/6bm5QIDAQAB"
Cek DNS menggunakan
sudo named-checkconf
Konfigurasi
Ada dua (2) file yang penting, yaitu,
/etc/opendkim.conf /etc/default/opendkim
Edit /etc/opendkim.conf misalnya,
# Log to syslog Syslog yes # Required to use local socket with MTAs that access the socket as a non- # privileged user (e.g. Postfix) UMask 002 # Sign for example.com with key in /etc/dkimkeys/dkim.key using # selector '2007' (e.g. 2007._domainkey.example.com) Domain lms.onnocenter.or.id KeyFile /etc/opendkim/dkim.key Selector lms Socket inet:8891@localhost # Common settings. See dkim-filter.conf(5) for more information. AutoRestart yes Background yes Canonicalization relaxed/relaxed DNSTimeout 5 Mode sv SignatureAlgorithm rsa-sha256 SubDomains no #UseASPDiscard no #Version rfc4871 X-Header no OversignHeaders From TrustAnchorFile /usr/share/dns/root.key Nameservers 127.0.0.1,8.8.8.8,8.8.4.4,103.112.162.222 # 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
File /etc/opendkim.conf adalah yang paling penting. Ini memberi informasi yang diperlukan tentang selector (digunakan untuk DNS request dan verifikasi email) dan signing key yang digunakan (key yang digunakan untuk menandatangani email keluar).
Edit /etc/default/opendkim yang digunakan untuk menyambungkan milter ke MTA:
# Command-line options specified here will override the contents of # /etc/opendkim.conf. See opendkim(8) for a complete list of options. #DAEMON_OPTS="" # # Uncomment to specify an alternate socket # Note that setting this will override any Socket value in opendkim.conf # default: # SOCKET="local:/var/run/opendkim/opendkim.sock" # listen on all interfaces on port 54321: #SOCKET="inet:54321" # listen on loopback on port 12345: SOCKET="inet:8891@localhost" # Ubuntu default - listen on loopback on port 8891 # listen on 192.0.2.1 on port 12345: #SOCKET="inet:12345@192.0.2.1"
Edit /etc/postfix/main.cf, tambahkan setup berikut ini,
# DKIM milter_default_action = accept milter_protocol = 2 smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891
Tables
Edit
sudo vi /etc/opendkim/dkim.key
*@lms.onnocenter.or.id:lms.onnocenter.or.id:/etc/opendkmi/keys/lms.onnocenter.or.id/lms.private
Edit
sudo vi /etc/opendkim/signing.table
*@lms.onnocenter.or.id lms._domainkey.lms.onnocenter.or.id
Edit
sudo vi /etc/opendkim/key.table
lms._domainkey.lms.onnocenter.or.id lms.onnocenter.or.id:lms:/etc/opendkim/keys/lms.onocenter.or.id/lms.private
Edit
sudo vi /etc/opendkim/trusted.hosts
127.0.0.1 localhost onnocenter.or.id *.onnocenter.or.id
Startup
Start opendkim
sudo service opendkim start
Jika tidak jalan cek
grep -i dkim /var/log/mail.log
Atau jalankan langsung menggunakan perintah
/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -p 8891
Restart postfix MTA,
sudo service postfix restart
Test
Test
opendkim-testkey -d lms.onnocenter.or.id -k /etc/opendkim/keys/lms.onnocenter.or.id/lms.private -s lms -vvv
Untuk testing, coba menggunakan tools:
http://www.sendmail.org/dkim/tools
Atau email ke
check-auth@verifier.port25.com autorespond+dkim@dk.elandsys.com
Common errors and fixes
Missing signature
If something is not functioning properly (emails are not being signed) look for errors in the log:
grep -i dkim /var/log/mail.log
The following error indicates the filter ran properly however could not match the outgoing email domain with a filter (and thus no signature was generated):
Nov 21 06:59:56 appname dkim-filter[2911]: 81AA7E688: no signature data
Consider changing the domain to a wildcard in /etc/opendkim.conf:
# Sign for example.com with key in /etc/mail/dkim.key using # selector '2007' (e.g. 2007._domainkey.example.com) Domain * KeyFile /etc/mail/dkim.key Selector mail
Using a domain of * will require putting the dkim key into EACH domain's DNS zone file for those domains that send email using this server. The dkim signing will work for your server, but without updating each DNS zone file, the public key will not be found by the recipient mail server.
Multiple signatures
If amavis-new is installed and dkim signs emails multiple times with same domain and selector, is the configuration error likely to be how you feed messages back to postfix from amavis.
Head to /etc/postfix/master.cf look for the section starting with:
127.0.0.1:10025 inet n - - - - smtpd
Find the option -o receive_override_options= and add ,no_milters to the end of that line. A corrected config could look something like this:
127.0.0.1:10025 inet n - - - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters