Ενότητα 4 · 4.3
DKIM στην πράξη: selectors, κλειδιά και υπηρεσίες
Ενότητα 4: Παραδοσιμότητα: SPF, DKIM και DMARC στην πράξη · Χρόνος ανάγνωσης: 12 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα θα μπορείτε να αναλύετε μια κεφαλίδα DKIM-Signature, να ρυθμίζετε DKIM με το δικό σας domain για κάθε υπηρεσία αποστολής, να ελέγχετε αν ένας selector λειτουργεί και να εξηγήσετε πώς αντικαθιστάτε κλειδιά με ασφάλεια.
Βασικές έννοιες: DKIM-Signature, d= (domain που υπογράφει), s= (selector), h= (υπογεγραμμένες κεφαλίδες), bh= και b=, κανονικοποίηση (c=), <selector>._domainkey.<domein>, TXT με p= ή CNAME προς την υπηρεσία, μήκος κλειδιού 2048 bit (RFC 8301), τμήματα των 255 χαρακτήρων, ed25519 (RFC 8463), αντικατάσταση κλειδιού, κενό p= (ανάκληση), DKIM και ανακατεύθυνση
Γιατί το DKIM είναι το σημαντικότερο από τα τρία
Το SPF λέει ποιοι servers επιτρέπεται να στέλνουν mail, αλλά σπάει κατά την ανακατεύθυνση και κοιτάζει το Return-Path, το οποίο σε πολλές υπηρεσίες δεν ανήκει σε εσάς. Το DKIM τοποθετεί μια υπογραφή μέσα στο ίδιο το mail. Αυτή η υπογραφή επιβιώνει την ανακατεύθυνση (εφόσον το mail δεν αλλάζει) και συνδέεται με ένα domain που επιλέγετε εσείς. Γι' αυτό το DKIM είναι στην πράξη συχνά το μόνο που κάνει το DMARC να περνάει για newsletters, τιμολόγια από πρόγραμμα λογιστικής και ανακατευθυνόμενο mail.
Τα βασικά (πώς βρίσκεται το κλειδί στο DNS, τι είναι ένας selector) βρίσκονται στο μάθημα 4.4 της σειράς DNS. Εδώ προχωράμε παραπέρα: τι ακριβώς περιέχει μια υπογραφή και πώς ρυθμίζετε το DKIM για κάθε υπηρεσία;
Ανάλυση μιας υπογραφής
Ανοίξτε τις κεφαλίδες ενός mail που έχετε λάβει (μάθημα 1.5). Στην κορυφή, αν το mail είναι υπογεγραμμένο, βλέπετε κάτι σαν:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=x;
t=1762588800; h=from:to:subject:date:message-id:mime-version:content-type;
bh=2jUSOH9NhtVGCQWNr9BrIAPreKQjO6Sn7XIkfJVOzv8=;
b=Gm7yW3q...lange reeks tekens...Qx9A==| Ετικέτα | Σημασία |
|---|---|
v=1 | Έκδοση DKIM |
a=rsa-sha256 | Αλγόριθμος: κλειδί RSA, SHA-256. Επίσης πιθανό: ed25519-sha256 |
c=relaxed/relaxed | Κανονικοποίηση: πόσο αυστηρά αντιμετωπίζονται μικρές αλλαγές (κενά, κεφαλαία στα ονόματα κεφαλίδων), για τις κεφαλίδες και το κείμενο. Το relaxed είναι συνηθισμένο και πιο ανεκτικό από το simple |
d=example.com | Το domain που υπογράφει. Αυτό το domain εγγυάται για το mail. Το DMARC το συγκρίνει με τη διεύθυνση Από |
s=x | Ο selector: ποιο κλειδί αυτού του domain χρησιμοποιήθηκε |
t= | Χρονική στιγμή υπογραφής (δευτερόλεπτα από το 1970) |
h= | Ποιες κεφαλίδες έχουν υπογραφεί. Το from πρέπει πάντα να περιλαμβάνεται |
bh= | Ένα αποτύπωμα (hash) του κειμένου του mail |
b= | Η ίδια η υπογραφή |
Ο παραλήπτης ανακτά το δημόσιο κλειδί από το <s>._domainkey.<d>, εδώ δηλαδή x._domainkey.example.com, και ελέγχει αν το b= ταιριάζει με τις κεφαλίδες από το h= και το αποτύπωμα bh=. Αν στη διαδρομή έχει αλλάξει έστω ένα γράμμα στο κείμενο ή σε μια υπογεγραμμένη κεφαλίδα, ο έλεγχος αποτυγχάνει.
Στο Authentication-Results βλέπετε το αποτέλεσμα, για παράδειγμα dkim=pass header.d=example.com header.s=x. Ένα mail μπορεί να έχει πολλές υπογραφές, για παράδειγμα μία από το δικό σας domain και μία από την ίδια την υπηρεσία. Για το DMARC μετράει μόνο μια υπογραφή της οποίας το d= αντιστοιχεί στο domain Από σας.
Κάθε υπηρεσία ο δικός της selector
Ένα domain μπορεί να έχει πολλά κλειδιά DKIM ταυτόχρονα, το καθένα κάτω από δικό του selector. Αυτός ακριβώς είναι ο σκοπός: κάθε υπηρεσία που στέλνει εκ μέρους σας υπογράφει με δικό της κλειδί.
| Αποστολέας | Selector (παράδειγμα) | Πώς βρίσκεται στο DNS |
|---|---|---|
| Mail server hosting | x ή default | TXT με το κλειδί, δημιουργημένο από το πάνελ |
| Microsoft 365 | selector1, selector2 | δύο εγγραφές CNAME προς τη Microsoft |
| Google Workspace | google (προεπιλογή) | TXT με κλειδί που δημιουργείτε στην κονσόλα διαχείρισης |
| Υπηρεσία newsletter | για παράδειγμα k2, k3, mte1 | συνήθως εγγραφές CNAME προς την υπηρεσία |
TXT ή CNAME;
- Σε μια εγγραφή TXT τοποθετείτε εσείς ο ίδιος το δημόσιο κλειδί στο DNS σας. Αν η υπηρεσία θέλει νέο κλειδί, πρέπει εσείς να προσαρμόσετε την εγγραφή.
- Σε μια εγγραφή CNAME κατευθύνετε τον selector προς ένα όνομα στην υπηρεσία, για παράδειγμα
k2._domainkey.example.com CNAME dkim2.mailer.example.Η υπηρεσία διαχειρίζεται τότε το κλειδί μόνη της και μπορεί να το αντικαταστήσει χωρίς να χρειάζεται να κάνετε εσείς κάτι. Γι' αυτό οι μεγάλες υπηρεσίες επιλέγουν CNAME, και συχνά χρησιμοποιούν δύο: έτσι μπορούν να εναλλάσσονται μεταξύ ενός ενεργού και ενός νέου κλειδιού.
Προσοχή: ένα CNAME δεν επιτρέπεται να συνυπάρχει με άλλη εγγραφή στο ίδιο όνομα. Αν υπάρχει ήδη TXT στο selector1._domainkey, αφαιρέστε το.
Το σημαντικότερο: ενεργοποίηση του DKIM στην υπηρεσία
Σε πολλές υπηρεσίες το DKIM με το δικό σας domain δεν είναι ενεργό από προεπιλογή. Υπογράφουν τότε με το δικό τους domain (d=mailer.example). Το mail είναι μεν υπογεγραμμένο, αλλά δεν είναι ευθυγραμμισμένο με τη διεύθυνση Από σας. Για το DMARC αυτό δεν μετράει. Στη διαχείριση της υπηρεσίας αυτό συχνά ονομάζεται "επαλήθευση domain", "domain verification", "αυθεντικοποίηση" ή "δικό σας domain αποστολέα". Μόνο αφού έχετε τοποθετήσει τις εγγραφές ΚΑΙ το έχετε ενεργοποιήσει στην υπηρεσία, αυτή υπογράφει με d=example.com.
Κλειδιά: μήκος, τμήματα και αλγόριθμος
- Μήκος. Το RFC 8301 λέει: τουλάχιστον 1024 bit, και οι αποστολείς οφείλουν να χρησιμοποιούν τουλάχιστον 2048 bit. Χρησιμοποιήστε 2048. Ένα κλειδί 512 bit θεωρείται άκυρο από τους παραλήπτες.
- Τμήματα των 255 χαρακτήρων. Μια εγγραφή TXT αποτελείται από αλφαριθμητικά μέγιστου μήκους 255 χαρακτήρων. Ένα κλειδί 2048 bit έχει περίπου 400 χαρακτήρες και δεν χωράει σε μία μόνο σειρά. Η εγγραφή αποτελείται τότε από δύο ή περισσότερες σειρές η μία μετά την άλλη (
"v=DKIM1; k=rsa; p=MIIBIj..." "...IDAQAB"), τις οποίες ο παραλήπτης ενώνει. Τα περισσότερα πάνελ το κάνουν αυτόματα. Αν κάτι πάει στραβά, λαμβάνετε ένα κομμένο κλειδί και κάθε υπογραφή αποτυγχάνει. Αντιγράφετε λοιπόν πάντα ένα κλειδί στο σύνολό του, χωρίς επιπλέον κενά ή εισαγωγικά στη μέση. - Το ed25519 (RFC 8463) είναι ένας πιο σύγχρονος αλγόριθμος με σύντομα κλειδιά. Δεν το ελέγχουν ακόμη όλοι οι παραλήπτες. Όσοι το χρησιμοποιούν υπογράφουν γι' αυτό με δύο υπογραφές: μία RSA και μία ed25519.
Αντικατάσταση ενός κλειδιού
Είναι καλό να αντικαθιστάτε ένα κλειδί κάπου κάπου, και σίγουρα αν υποψιάζεστε ότι το ιδιωτικό κλειδί έχει διαρρεύσει (για παράδειγμα μετά από hack του server ή αποχώρηση διαχειριστή). Κάντε το ως εξής:
- Δημιουργήστε ένα νέο κλειδί κάτω από έναν νέο selector, για παράδειγμα
s2026, και τοποθετήστε το δημόσιο κλειδί στο DNS. - Περιμένετε έως ότου η εγγραφή είναι ορατή παντού (το TTL, βλέπε μάθημα 6.1 της σειράς DNS).
- Αφήστε τον server να υπογράφει με τον νέο selector.
- Αφήστε το παλιό κλειδί να παραμείνει για μερικές ακόμη ημέρες: mail που ήδη βρισκόταν καθ' οδόν ή ελέγχεται ξανά, εξακολουθεί να το αναφέρει.
- Ανακαλέστε το παλιό κλειδί αδειάζοντας το
p=(v=DKIM1; p=), ή αφαιρέστε την εγγραφή.
Σε υπηρεσίες με εγγραφές CNAME, αυτό το κάνει η ίδια η υπηρεσία.
Τι κάνει το DKIM να αποτυγχάνει
- Το mail αλλάζει κατά τη διαδρομή: μια λίστα αλληλογραφίας που βάζει
[όνομα_λίστας]στο θέμα ή προσθέτει υποσέλιδο, ένας σαρωτής ιών που προσθέτει μια γραμμή κάτω από το mail, ένας server ανακατεύθυνσης που μετατρέπει τη μορφοποίηση. - Λάθος ή κομμένο κλειδί στο DNS.
- Ο selector δεν υπάρχει: ένα τυπογραφικό λάθος στο όνομα, ή
selector1._domainkey.example.com.example.com(το όνομα domain διπλό, επειδή το πάνελ το προσθέτει ήδη μόνο του στο τέλος). - Ανακληθέν κλειδί (κενό
p=) ενώ ο server συνεχίζει να υπογράφει με αυτόν τον selector.
Έλεγχος αν λειτουργεί
- Στείλτε ένα mail από την υπηρεσία προς μια διεύθυνση στο Gmail ή στο Outlook.com.
- Ανοίξτε τις κεφαλίδες και εντοπίστε το
DKIM-Signature: σημειώστε τοd=και τοs=. - Κοιτάξτε στο
Authentication-Resultsαν αναγράφεταιdkim=pass, και αν τοheader.d=είναι το δικό σας domain. - Αναζητήστε τον selector:
dig TXT s._domainkey.example.com(ή με ένα online εργαλείο). Πρέπει να υπάρχει έναp=με μακρύ κλειδί, ή ένα CNAME που οδηγεί σε τέτοια εγγραφή.
Στην πράξη: έτσι φαίνεται σε ένα πάνελ
Σε ένα πακέτο hosting του WebOké, το DKIM είναι ενεργό από προεπιλογή, με selector x: η εγγραφή ονομάζεται x._domainkey.<το_domain_σας>. Στο DirectAdmin το βλέπετε στο DNS Administration: αν το DNS σας βρίσκεται σε άλλον πάροχο, αντιγράφετε αυτή την εγγραφή εκεί. Στο Το WebOké μου, η κάρτα Set E-mail δείχνει ποια τιμή πρέπει να υπάρχει και αν αυτή βρίσκεται. Σε άλλους παρόχους ο selector ονομάζεται διαφορετικά (default, mail, dkim), αλλά τον βρίσκετε με τον ίδιο τρόπο: στο πάνελ ή στο s= ενός υπογεγραμμένου mail.
Σύνοψη
- Το DKIM είναι ο έλεγχος που επιβιώνει την ανακατεύθυνση και που συνδέετε ανά υπηρεσία με το δικό σας domain· για το DMARC μετράει μόνο μια υπογραφή με το δικό σας domain στο
d=. - Στο
DKIM-Signatureβρίσκετε τοd=(domain) και τοs=(selector)· το κλειδί βρίσκεται στο<s>._domainkey.<d>. - Κάθε υπηρεσία λαμβάνει δικό της selector· οι εγγραφές CNAME επιτρέπουν στην υπηρεσία να αντικαθιστά τα κλειδιά μόνη της. Φροντίστε να ενεργοποιήσετε όντως το DKIM με το δικό σας domain στην υπηρεσία.
- Χρησιμοποιήστε 2048 bit· προσέξτε τα κομμένα κλειδιά κατά την αντιγραφή.
- Αντικαταστήστε ένα κλειδί με νέο selector και ανακαλέστε το παλιό μόνο αφού ολοκληρωθεί η μετάβαση.
Κουίζ
Άσκηση
Άσκηση Z4.3: Έλεγχος ενός DKIM selector. Στείλτε ένα mail από το δικό σας domain (ή από μια υπηρεσία που στέλνει εκ μέρους σας) προς δική σας διεύθυνση σε άλλον πάροχο. Ανοίξτε τις κεφαλίδες και συμπληρώστε τις τιμές d= και s= από το DKIM-Signature, καθώς και τι αναγράφεται στο Authentication-Results στο dkim=. Το πρόγραμμα αναζητά τον selector ζωντανά, ακολουθεί ενδεχόμενο CNAME, ελέγχει το κλειδί (παρουσία, μη κενό, μήκος) και σας λέει αν το d= είναι ευθυγραμμισμένο με το domain που δηλώνετε ως αποστολέα.
Για περαιτέρω μελέτη
Τα βήματα σε αυτά τα άρθρα ισχύουν για τα πάνελ του WebOké· σε άλλους παρόχους η διαδικασία είναι παρόμοια.
- Δωρεάν μάθημα DNS 4.4: DKIM: η υπογραφή κάτω από το email σας
- Εγχειρίδιο DirectAdmin 5.8: Ενεργοποίηση και έλεγχος του DKIM
- Ρύθμιση DKIM όταν το DNS βρίσκεται σε εξωτερικό server
- Εγχειρίδιο WebOké 6.7: Η κάρτα Ρύθμιση email (MX, SPF, DKIM, DMARC)
- RFC 6376 (DKIM), RFC 8301 (μήκος κλειδιού και αλγόριθμοι), RFC 8463 (ed25519)
