postfix dkim spf on ubuntu server

vladimir simeonov
04/07/2011

Предполагам някой знаят какво представлява SPF, макар и да се води вече за отживелица.

С две думи за тези които не знаят: служи за аутентикиране на пощенски сървъри през DNS. т.е. задавате в DNS записите на домейна си, от кои адреси може да се изпращат писма. Повечето сървъри правят подобна проверка и на практика при зададен такъв адрес от ваша страна, друг сървър не може да изпраща писма от името на домейна ви.

инсрукцията е за BIND DNS сървър.

добавяте запис във файла със зоната:

example.com. IN TXT “v=spf1 mx a -all”

  • mx = разрешавам mx записа (ip-то му) да изпраща писма от името на домейна
  • а = разрешавам A записа за домейна да изпраща писма (web server-a)
  • -all = всички останали нямат право да изпращат писма от името на домейна

възможен е и друг вариант:

example.com IN TXT “v=spf1 ip4:192.168.0.0/24 -all”

  • ip4: = оказвате обхват от адреси, които могат да изпращат писма от името на домейна

DKIM (DomainKeys Identified Mail) е метод посредством цифровият подпис на пощенския сървър да подпишете писмото, за да потвърдите, че произхода му е от вашият сървър.

как се използва заедно с postfix:

  • http://anothersysadmin.wordpress.com/2008/01/16/domainkeysdkim-with-postfix/

накратко:

трябва ни прокси което да подписва подадените писма от postfix и да му ги връща за доставка. ще се подписват само изходящи писма.

Убунту (във версия 10.04 със сигурност го има като пакет):

apt-get install dkimproxy

алтернативно го теглите и инсталирате от

http://dkimproxy.sourceforge.net

добавяте следният код в /etc/postfix/master.cf

(точно под първият ред)

submission inet n – n – – smtpd

-o smtpd_etrn_restrictions=reject

-o content_filter=dksign:[127.0.0.1]:10027

-o receive_override_options=no_address_mappings

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject

накрая на файла добавяте:

dksign unix – – n – 10 smtp

-o smtp_send_xforward_command=yes

-o smtp_discard_ehlo_keywords=8bitmime,starttls

127.0.0.1:10028 inet n – n – 10 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

предлолага се, че имате сертификат за SSL в конф. папка на postfix:

/etc/postfix/ssl/smtpd.key

ако нямате: прочетете статията за postfix, как да го генерирате.

в /etc/dkimproxy/dkimproxy_out.conf

[code]# specify what address/port DKIMproxy should listen on

listen 127.0.0.1:10027

# specify what address/port DKIMproxy forwards mail to

relay 127.0.0.1:10028

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)

domain lordofdeath.net

# specify what signatures to add

signature dkim(a=rsa-sha256,c=relaxed)

signature domainkeys(a=rsa-sha1,c=nofws)

# specify location of the private key

keyfile /etc/postfix/smtpd.key

# specify the selector (i.e. the name of the key record put in DNS)

selector postfix

reject-error 480[/code]

vi /etc/default/dkimproxy

RUN_DKIMPROXY_IN=0

/etc/init.d/dkimproxy restart

/etc/init.d/postfix restart

в папката на postfix със сертификата (/etc/postfix/ssl) пускате командата:

openssl rsa -in smtpd.key -out rsa.public -pubout -outform PEM

копирате съдържанието на rsa.public

cat rsa.public

vi /var/cache/bind/lorofdeath.net <- заменяте с името на вашата зона

postfix._domainkey.lordofdeath.net. IN TXT “v=DKIM1; k=rsa; p=СЪДЪРЖАНИЕ НА rsa.public

rndc reload или /etc/init.d/bind9 restart

на всички клиенти, които искате да се подписват писмата им, ги пренасочвате към порт 587 (SSL). трябва при изпращане на писмо към google, да има в хедъра му Authentication-Results: ***** dkim=pass ****

за автоматично подписване на всички входящи писма от клиенти:

/etc/postfix.master.cf

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_client_restrictions=

-o smtpd_helo_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o mynetworks=127.0.0.0/8

-o strict_rfc821_envelopes=yes

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_bind_address=127.0.0.1

-o content_filter=dksign:[127.0.0.1]:10027

dksign unix – – n – 10 smtp

-o smtp_send_xforward_command=yes

-o smtp_discard_ehlo_keywords=8bitmime,starttls

127.0.0.1:10028 inet n – n – 10 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

dkimproxy_out.conf

# specify what address/port DKIMproxy should listen on

listen    127.0.0.1:10027

# specify what address/port DKIMproxy forwards mail to

relay     127.0.0.1:10028

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)

domain    lordofdeath.net,hostatme.com,luladjiev.com,dezonbg.com,ybase.eu

# specify what signatures to add

signature dkim(a=rsa-sha256,c=relaxed)

signature domainkeys(a=rsa-sha1,c=nofws)

# specify location of the private key

keyfile /etc/postfix/smtpd.key

# specify the selector (i.e. the name of the key record put in DNS)

selector  postfix

reject-error 580