lausent
08-11-2017, 08:52
Premetto che non sono informatico e quindi tenterò di spiegarmi come posso :D
Ho un server su un determinato sito di hosting (che chiamiamo Y), su cui c'è come sistema operativo ubuntu 16 e sul quale tramite Django ho costruito un sito dinamico. Ho scelto poi un'altro sito (che chiamiamo X) per acquistare un dominio e un account email. Nel codice back-end di Django capita che vengano inviate mail agli utenti iscritti (ovviamente c'è una parte di codice in cui ho configurato la porta, il nome utente, la password etc... dell'account email fornito da X). Fin da subito avevo notato che le mail finivano nella cartella di spam del destinatario e dopo ho realizzato il motivo... andavano configurati l'SPF e il DKIM. Per quanto riguarda l'SPF è stato facile perchè bastava aggiungere un record TXT con l'indirizzo IP del server mail di X (me lo forniva stesso X: v=spf1 +a +mx +ip4:IP_MAIL ~all). Per quanto riguarda il DKIM è stato più complesso perchè io volevo firmare da me l'email mentre con quanto sto per dire suppongo che le email non siano firmate da me ma da X:
Su X (non l'ho mai aggiunto io così come il record SPF) c'è un record TXT in cui c'è il selettore default._domainkey.miodominio. e la chiave pubblica "v=DKIM1; k=rsa; p=MII....". Sul DNS di Y ho inserito questo stesso record TXT e magia tutto funziona. Il problema che mi sono posto è appunto quello che io (o meglio il mio server su Y) non sto firmando la mail. A ragion di ciò ho visto un tutorial che con 3 semplicissimi passi spiega come creare sul proprio server una chiave pubblica ed una privata per il DKIM:
1) sudo apt-get install opendkim opendkim-tools
2) sudo opendkim-genkey -s mail -d your-domain.com
3) cat mail.txt
con il punto 3) visualizzo la chiave pubblica e il selettore che devo mettere nel DNS di Y... e qui arriva il problema o meglio non capisco più la logica :muro:
Il destinatario a cui arriva la mail fa una query al DNS (con il selettore "default" o "mail" e il nome di dominio) siccome vede che la mail è firmata. Ciò che ottiene è proprio la chiave pubblica e può verifica la firma. Nel primo caso avendo messo la chiave pubblica di X nel DNS di Y, il destinatario verificava correttamente in quanto i record DNS di X e Y combaciano se però io ho creato una mia chiave pubblica i DNS di X e Y non coincidono e la verifica non avrà successo. Come faccio a fare in modo che il mio server firmi la posta se in effetti colui che invia è X (colui che firma con la sua chiave privata)? Avevo pensato di cambiare il record TXT su X mettendo quello che ho creato su Y ma in effette se faccio così la mail comunque è firmata con la chiave privata di X...quindi nulla cambierà, giusto?
Forse devo creare sul mio server un piccolo server mail, tipo postfix? Se faccio così a quel punto non ho più bisogno di un ESP esterno... questa strada l'avevo bocciata in quanto volevo una mail con interfaccia grafica facile da gestire.
Ho un server su un determinato sito di hosting (che chiamiamo Y), su cui c'è come sistema operativo ubuntu 16 e sul quale tramite Django ho costruito un sito dinamico. Ho scelto poi un'altro sito (che chiamiamo X) per acquistare un dominio e un account email. Nel codice back-end di Django capita che vengano inviate mail agli utenti iscritti (ovviamente c'è una parte di codice in cui ho configurato la porta, il nome utente, la password etc... dell'account email fornito da X). Fin da subito avevo notato che le mail finivano nella cartella di spam del destinatario e dopo ho realizzato il motivo... andavano configurati l'SPF e il DKIM. Per quanto riguarda l'SPF è stato facile perchè bastava aggiungere un record TXT con l'indirizzo IP del server mail di X (me lo forniva stesso X: v=spf1 +a +mx +ip4:IP_MAIL ~all). Per quanto riguarda il DKIM è stato più complesso perchè io volevo firmare da me l'email mentre con quanto sto per dire suppongo che le email non siano firmate da me ma da X:
Su X (non l'ho mai aggiunto io così come il record SPF) c'è un record TXT in cui c'è il selettore default._domainkey.miodominio. e la chiave pubblica "v=DKIM1; k=rsa; p=MII....". Sul DNS di Y ho inserito questo stesso record TXT e magia tutto funziona. Il problema che mi sono posto è appunto quello che io (o meglio il mio server su Y) non sto firmando la mail. A ragion di ciò ho visto un tutorial che con 3 semplicissimi passi spiega come creare sul proprio server una chiave pubblica ed una privata per il DKIM:
1) sudo apt-get install opendkim opendkim-tools
2) sudo opendkim-genkey -s mail -d your-domain.com
3) cat mail.txt
con il punto 3) visualizzo la chiave pubblica e il selettore che devo mettere nel DNS di Y... e qui arriva il problema o meglio non capisco più la logica :muro:
Il destinatario a cui arriva la mail fa una query al DNS (con il selettore "default" o "mail" e il nome di dominio) siccome vede che la mail è firmata. Ciò che ottiene è proprio la chiave pubblica e può verifica la firma. Nel primo caso avendo messo la chiave pubblica di X nel DNS di Y, il destinatario verificava correttamente in quanto i record DNS di X e Y combaciano se però io ho creato una mia chiave pubblica i DNS di X e Y non coincidono e la verifica non avrà successo. Come faccio a fare in modo che il mio server firmi la posta se in effetti colui che invia è X (colui che firma con la sua chiave privata)? Avevo pensato di cambiare il record TXT su X mettendo quello che ho creato su Y ma in effette se faccio così la mail comunque è firmata con la chiave privata di X...quindi nulla cambierà, giusto?
Forse devo creare sul mio server un piccolo server mail, tipo postfix? Se faccio così a quel punto non ho più bisogno di un ESP esterno... questa strada l'avevo bocciata in quanto volevo una mail con interfaccia grafica facile da gestire.