Тази статия е продължение на Пощенски сървър с iRedMail и PHPMyAdmin До тук имаме: ● инсталиран сървър за електронна поща ● инсталиран и настроен PHPMyAdmin Задачата е: ● да включим удостоверяване за защита на сървъра ● да се защитим от подправяне на сървъра Да поясним какво значат понятията от заглавието. DKIM - служи за потвърждение на това, че изпращача е реален. За повече инфо ТУК SPF - служи за защита от подправяне на домейна. За повече инфо ТУК DMARK - служи за създаване на правила за обработка на получените писмата, не преминали удостоверяването. За повече инфо ТУК За тези които владеят руски: ТУК
Подправянето на изпращача на имейл е действието на преструване, че контролирате имейл адреса на някой друг. Това е често срещан проблем при фишинга . Често измамниците изпращат имейли с адрес на изпращача something@paypal.com и се надяват, че получателят ще им се довери. Всъщност SMTP не се интересува кой адрес на подател изпращате. Много доставчици на пощенски услуги налагат да изпращате имейли само с вашия собствен имейл адрес. Но някои не го правят. А на спамерите и измамниците очевидно не им пука. Спуфинг случай без DKIM: И така, преди приблизително десет години беше замислен нов метод, който добавяше криптографски подпис към заглавката на имейл, който получателят можеше да провери, за да провери автентичността на подателя и целостта на имейла. Подписът се създава с помощта на частен ключ, който има само изпращащият имейл сървър. След това може да бъде проверен от получателя чрез изтегляне на съответния публичен ключ от DNS зоната на изпращащия домейн и извършване на проверка на подписа. Това работи много подобно на PGP или S/MIME подписване – само на ниво домейн. Вашият пощенски сървър може автоматично да подписва всички изходящи имейли. Методът, който се използва днес, се нарича Domain Keys Identified Mail – или накратко: DKIM . Да вземем пример. Току-що изпратих имейл от GMail до личния си имейл акаунт на собствения си имейл сървър. Google използва DKIM подписване, така че имейлът получи тази допълнителна заглавка от пощенските сървъри на Google: След инсталирането на iRedMail, по подразбиране получавате готов DKIM ключ. Можете да го намерите във файла /root/iRedMail-1.7.2//iRedMail.tips или като изпълните командата в конзолата.
amavisd showkeys head: cannot open '/etc/mailname' for reading: No such file or directory head: cannot open '/etc/mailname' for reading: No such file or directory ; key#1 2048 bits, s=dkim, d=tachko.com, /var/lib/dkim/tachko.com.pem dkim._domainkey.tachko.com. 3600 TXT ( "v=DKIM1; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk" "8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X" "NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9" "XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOkaDL1fCwNfpvCp+xn" "jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS" "4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv" "xQIDAQAB")
Нещата които са важни са в червено. В отделен текстов файл копираме това което е в червено.
dkim._domainkey.tachko.com "v=DKIM1; p=" "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk" "8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X" "NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9" "XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOkaDL1fCwNfpvCp+xn" "jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS" "4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv" "xQIDAQAB")
Имаме кавички в началото на реда и в края. Те трябва да се махнат. Също така имаме шпации в началото на реда, те също трябва да се махнат. В края на стринга имаме затваряща скоба. Тя също трябва да се махне. Трябва да се получи:
dkim._domainkey.tachko.com v=DKIM1; p= MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk 8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9 XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOkaDL1fCwNfpvCp+xn jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS 4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv xQIDAQAB
Това не е крайния резултат. Внимателно четете надолу. Създаваме TXT запис в DNS-а. Обръщам внимание, така след p= ще се получи шпация. Това ще е грешка ако я оставите.
Name dkim._domainkey.tachko.com Text data v=DKIM1; p= MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk 8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9 XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOkaDL1fCwNfpvCp+xn jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS 4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv xQIDAQAB TTL (Time to live) 1 hour (3600)
Внимание !!! Ако така запишете файла то след p= MIB..... ще се получи шпация. Това е грешка, тя трябва да се обере. В крайна сметка трябва да се получи следното (Това е вярното съдържание):
Name dkim._domainkey.tachko.com Text data v=DKIM1; =DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk 8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9 XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOkaDL1fCwNfpvCp+xn jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS 4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv xQIDAQAB TTL (Time to live) 1 hour (3600)
Name tachko.com Text data v=spf1 ip4:185.163.245.186 mx ~all TTL (Time to live) 1 hour (3600)
Name _dmarc.tachko.com Text data v=DMARC1; p=none; pct=100; rua=mailto:postmaster@tachko.com; sp=none; aspf=r TTL (Time to live) 1 hour (3600)
Проверяваме DKIM записа.
dig -t txt dkim._domainkey.tachko.com ; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -t txt dkim._domainkey.tachko.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59218 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;dkim._domainkey.tachko.com. IN TXT ;; ANSWER SECTION: dkim._domainkey.tachko.com. 3592 IN TXT "v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk 8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9 XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOka" "DL1fCwNfpvCp+xn jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS 4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv xQIDAQAB" ;; Query time: 52 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) ;; WHEN: Tue May 20 20:44:19 UTC 2025 ;; MSG SIZE rcvd: 478 nslookup -type=txt dkim._domainkey.tachko.com Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: dkim._domainkey.tachko.com text = "v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzM5b8RQwAaF348lsC5vk 8eI07BUk4VqaTHgh3CTDhS5+p4GI4XFQiuzSO/dBbzdpfCmYQSpBPi2NqQ6i65+X NVbP3V1IoSzrfOzrlwOqD7KhsqGU8UZhemUeLshD8qph74N7Kjb+6dHC1iENd6W9 XtcvsIn3NbuxyDGCaUBTZ4sj6CUmpnewiLW87vUP3RaGZlOka" "DL1fCwNfpvCp+xn jnz6oUUv1J/BN+oy+qpNRh3ZXw3EYsnlQO59APsj/kwi71TjsfUBxHC6QwgoQHxS 4n1WdJ+uct8uV2DiUNEse9YuJTDZgKdf1zML2zGNNz3vfc+00j7Zjz1wsTE5Zlcv xQIDAQAB" Authoritative answers can be found from:
Да проверим и SPF записа.
dig -t txt tachko.com ; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -t txt tachko.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63453 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;tachko.com. IN TXT ;; ANSWER SECTION: tachko.com. 3600 IN TXT "v=spf1 ip4:185.163.245.186 mx ~all" ;; Query time: 68 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) ;; WHEN: Tue May 20 20:48:55 UTC 2025 ;; MSG SIZE rcvd: 86 nslookup -type=txt tachko.com Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: tachko.com text = "v=spf1 ip4:185.163.245.186 mx ~all" Authoritative answers can be found from:
Последно да проверим DMARC записа.
dig -t txt _dmarc.tachko.com ; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> -t txt _dmarc.tachko.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6461 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ;; QUESTION SECTION: ;_dmarc.tachko.com. IN TXT ;; ANSWER SECTION: _dmarc.tachko.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:postmaster@tachko.com; sp=none; aspf=r" ;; Query time: 37 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP) ;; WHEN: Tue May 20 20:52:30 UTC 2025 ;; MSG SIZE rcvd: 135 nslookup -type=txt _dmarc.tachko.com Server: 1.1.1.1 Address: 1.1.1.1#53 Non-authoritative answer: _dmarc.tachko.com text = "v=DMARC1; p=none; pct=100; rua=mailto:postmaster@tachko.com; sp=none; aspf=r" Authoritative answers can be found from: