OpenDKIM + рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ = рдмрд╕



2011 рдХреЗ рдЕрдВрдд рдореЗрдВ, dkim-milter рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, OpenDKIM dkim-milter рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдИрдореЗрд▓ рдореЗрдВ DKIM рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЬреЛрдбрд╝рдирд╛ рдЙрддрдирд╛ рд╣реА рдЖрд╕рд╛рди рд╣реИред

tl; dr: рдЖрдЬрдХрд▓, DKIM рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдмрд┐рдирд╛
рдПрдХ рдбреАрдХреЗрдЖрдИрдПрдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ рдЬреЛ рдкреНрд░реЗрд╖рдХ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕рд░реНрд╡рд░ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдХрд╛ рдкреНрд░реЗрд╖рдХ рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рдореЗрдВ рд╕реЗ рдлрд╝реАрд▓реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХрд╛ рд╕рд░реНрд╡рд░ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рд░реНрд╡рд░ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкрддреНрд░ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ: рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рд╕реНрдкреИрдо рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рднреЗрдЬреЗрдВ, рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗрдВ рдпрд╛ рд░рд┐рд╕реЗрдкреНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирд╛ рдХрд░ рджреЗрдВред DKIM рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдФрд░ рд╕реНрд╡рдпрдВ рд╕рднреА рдкреНрд░рдореБрдЦ рдИрдореЗрд▓ рд╕реЗрд╡рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ Yandex рдФрд░ Mail.ru рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдЦреБрд▓реЗ рддреМрд░ рдкрд░ DKIM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред



Postfix рдФрд░ OpenDKIM рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рд╕реНрд╡рдпрдВ рдФрд░ OpenDKIM рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

aptitude install opendkim opendkim-tools 

рдЕрдм рд╣рдореЗрдВ рдЙрди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдкрддреНрд░реЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА


рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдФрд░ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдорд┐рд▓реЗрдЧреА, рдбреЛрдореЗрди рдХреЗ рдмрд┐рдирд╛ рд╕рд░реНрд╡рд░ рдХреЗ рдирд╛рдо рдХреЗ рдмрд░рд╛рдмрд░, рддрд╛рдХрд┐ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рди рдХрд░реЗрдВ:

 mkdir /etc/opendkim/ opendkim-genkey -D /etc/opendkim/ -d $(hostname -d) -s $(hostname) 

рдпрджрд┐ рдпрд╣ mail.example.com рд╕рд░реНрд╡рд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдХреНрд░рдорд╢рдГ рдЧреБрдкреНрдд рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде /etc/opendkim/mail.private рдФрд░ /etc/opendkim/mail.txt ред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдХреЛ рдЖрдкрдХреЗ рдбреЛрдореЗрди рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд TXT рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрд┐рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ OpenDKIM рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд░реАрдб рдПрдХреНрд╕реЗрд╕ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрд╕реА рд╕рдореВрд╣ рдореЗрдВ рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡рд╣ рдЕрдкрдиреЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ OpenDKIM рдбреЗрдорди рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЕрдХреНрд╖рд░реЛрдВ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рд╕рдХреЗ:

 chgrp opendkim /etc/opendkim/* chmod g+r /etc/opendkim/* gpasswd -a postfix opendkim 


рдЪрд╛рдмрд┐рдпреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд╣рд╛рдВ рдХрд░реЗрдВ?


/etc/opendkim.conf рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ, рдЕрдкрдиреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЬреЛрдбрд╝реЗрдВ:

 tee -a /etc/opendkim.conf <<EOF Canonicalization relaxed/relaxed SyslogSuccess yes KeyTable file:/etc/opendkim/keytable SigningTable file:/etc/opendkim/signingtable X-Header yes #      : LogWhy yes #       : #ExternalIgnoreList file:/etc/opendkim/trusted #   ,    : #InternalHosts file:/etc/opendkim/internal EOF 

рд╕рднреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрдЦреЗрдВред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛?


рд╣рдо " ::/// " рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ /etc/opendkim/keytable рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рдКрдкрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА рдмрдирд╛рдИ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ FQDN рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдВрдЬреА рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 echo $(hostname -f | sed s/\\./._domainkey./) $(hostname -d):$(hostname):$(ls /etc/opendkim/*.private) | tee -a /etc/opendkim/keytable 

mail.example.com , рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╣ рд░реЗрдЦрд╛ рд╣реЛрдЧреА:

 mail._domainkey.example.com example.com:mail:/etc/opendkim/mail.private 

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рдХреБрдВрдЬрд┐рдпрд╛рдБ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдХреБрдВрдЬреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ - рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХред

рдХрд┐рд╕рдХреЗ рдореЗрд▓ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛ рд╣реИ?


рдЕрдм рд╣рдо OpenDKIM рдХреЛ рд╕рдордЭрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдбреЛрдореЗрди рдореЗрд▓ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде /etc/opendkim/signingtable рдХреЛ " - " рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдХрд░рдирд╛ рд╣реИ:

 echo $(hostname -d) $(hostname -f | sed s/\\./._domainkey./) | tee -a /etc/opendkim/signingtable 

рд╣реЛрд╕реНрдЯ mail.example.com , рдлрд╝рд╛рдЗрд▓ example.com mail._domainkey.example.com рд╣реЛрдЧреАред рдпрджрд┐ рдЖрдк рд╕рднреА рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдореЗрд▓ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдбреЛрдореЗрди рдХреЗ рдмрдЬрд╛рдп * рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

ExternalIgnoreList рдФрд░ InternalHosts рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдиреНрдп рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдмрд╕ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рдореЗрдЬрдмрд╛рдиреЛрдВ рдФрд░ / рдпрд╛ рдЖрдИрдкреА рдкрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрддреА рд╣реИ, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдкрддреНрд░реЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рд░реНрд╡рд░ рдореЗрд▓ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдЕрдВрдд рдореЗрдВ, рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рд╕реЗ рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ:

 postconf -e milter_default_action=accept postconf -e milter_protocol=2 postconf -e smtpd_milters=unix:/var/run/opendkim/opendkim.sock postconf -e non_smtpd_milters=unix:/var/run/opendkim/opendkim.sock 


рдЕрдЧрд░ рдЪрд┐рд░реЛрдЯ рдореЗрдВ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ ...


рдпрджрд┐ рдЖрдк рдЪреЗрд░реЛрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдкрдХреЛ OpenDKIM рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдПрдХ рд╕реЙрдХреЗрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдЕрдзрд┐рдХрд╛рд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

 echo 'SOCKET="local:/var/spool/postfix/var/run/opendkim/opendkim.sock"' | tee -a /etc/default/opendkim mkdir -p /var/spool/postfix/var/run/opendkim chown opendkim:opendkim /var/spool/postfix/var/run/opendkim 


рд╣реЛ рдЧрдпрд╛!


рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ Postfix рдФрд░ OpenDKIM рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛рдВрдбреЗрдХреНрд╕ рдХреЛ рдХрд╣реАрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЖрдирдВрдж рд▓реЗрддреЗ рд╣реИрдВ:



TXT рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдХрд┐ рдпрд╣ рдЬрдЧрд╣ рдореЗрдВ рд╣реИ:

 dig txt mail._domainkey.example.com 


рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдк check-auth@verifier.port25.com рдПрдХ рдИрдореЗрд▓ рднреЗрдЬреЗрдВред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдмрд┐рдирд╛ рдЗрдирдХрд╛рд░ рдкрддреНрд░


рдпрджрд┐ рд╕рддреНрдпрд╛рдкрди рд╕рдлрд▓ рд░рд╣рд╛, рддреЛ рдЖрдкрдХреЗ рдбреЛрдореЗрди рдХреЗ рд╕рд╛рде рдкрддреНрд░реЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╕рд╛рд░реНрдердХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдмрд┐рдирд╛, рдПрдбреАрдПрд╕рдкреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдирд╛:

 _adsp._domainkey IN TXT "dkim=all" 


рдЕрдВрдд


рдЕрдВрдд рддрдХ рдкрдврд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? OpenDKIM рдХреЛ рдПрдХ рдбреЛрдореЗрди рдФрд░ рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реЛрд╕реНрдЯрдирд╛рдо рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдмрд╣реБрдд рдХрдо рдирд┐рд░реНрджреЗрд╢ ред

Source: https://habr.com/ru/post/In151904/


All Articles