comparison xml/dnsbl.in @ 407:29d54e7028f6 stable-6-0-54

document dmarc vs dnsbl dkim/spf; switch to . rather than " " for dkim impossible signer
author Carl Byington <carl@five-ten-sg.com>
date Thu, 30 Mar 2017 10:26:30 -0700
parents d08da4b058e8
children e018ed19a1cc
comparison
equal deleted inserted replaced
406:ca4ef407588e 407:29d54e7028f6
23 </para> 23 </para>
24 </partintro> 24 </partintro>
25 25
26 <refentry id="@PACKAGE@.1"> 26 <refentry id="@PACKAGE@.1">
27 <refentryinfo> 27 <refentryinfo>
28 <date>2017-03-07</date> 28 <date>2017-03-30</date>
29 <author> 29 <author>
30 <firstname>Carl</firstname> 30 <firstname>Carl</firstname>
31 <surname>Byington</surname> 31 <surname>Byington</surname>
32 <affiliation><orgname>510 Software Group</orgname></affiliation> 32 <affiliation><orgname>510 Software Group</orgname></affiliation>
33 <personblurb><para></para></personblurb>
33 </author> 34 </author>
34 </refentryinfo> 35 </refentryinfo>
35 36
36 <refmeta> 37 <refmeta>
37 <refentrytitle>@PACKAGE@</refentrytitle> 38 <refentrytitle>@PACKAGE@</refentrytitle>
295 milter (dccm), then connections from clients that use SMTP AUTH are 296 milter (dccm), then connections from clients that use SMTP AUTH are
296 still subject to greylisting. If you use the dcc via dccifd and this 297 still subject to greylisting. If you use the dcc via dccifd and this
297 milter, then connections from clients that use SMTP AUTH are never 298 milter, then connections from clients that use SMTP AUTH are never
298 subject to greylisting. As part of this per-user greylisting, you need 299 subject to greylisting. As part of this per-user greylisting, you need
299 to move the dnsblnogrey file from the config directory to something 300 to move the dnsblnogrey file from the config directory to something
300 like /var/dcc/userdirs/local/dnsblnogrey/whiteclnt so the dccifd will 301 like /var/dcc/userdirs/dnsblnogrey/whiteclnt so the dccifd will
301 properly ignore greylisting for those recipients that don't want it. 302 properly ignore greylisting for those recipients that don't want it.
302 </para> 303 </para>
303 </refsect1> 304 </refsect1>
304 305
305 <refsect1 id='definitions.1'> 306 <refsect1 id='definitions.1'>
387 <listitem><para> 388 <listitem><para>
388 If the answer is black, mail to this recipient is rejected with "no such 389 If the answer is black, mail to this recipient is rejected with "no such
389 user", and the dns lists are not checked. 390 user", and the dns lists are not checked.
390 </para></listitem> 391 </para></listitem>
391 <listitem><para> 392 <listitem><para>
392 If the answer is white, mail to this recipient is accepted and the dns 393 If the answer is white, and the envelope from domain name is
393 lists are not checked. However, if the envelope from domain name is 394 listed in the current (or parents) filtering contexts dkim_from with
394 listed in the current filtering context (or parents) dkim_from with 395 "required_signed", we downgrade this white answer to unknown.
395 "required_signed", 396 If the answer is still white, mail to this recipient is accepted and the dns
396 we downgrade this to white answer to unknown. 397 lists are not checked.
397 </para></listitem> 398 </para></listitem>
398 <listitem><para> 399 <listitem><para>
399 If the answer is unknown, we don't reject yet, but the dns lists will be 400 If the answer is unknown, we don't reject yet, but the dns lists will be
400 checked, and the content may be scanned. 401 checked, and the content may be scanned.
401 </para></listitem> 402 </para></listitem>
531 We also scan for excessive bad html tags, and if a &lt;configurable&gt; 532 We also scan for excessive bad html tags, and if a &lt;configurable&gt;
532 limit is exceeded, the mail is rejected. 533 limit is exceeded, the mail is rejected.
533 </para> 534 </para>
534 </refsect1> 535 </refsect1>
535 536
537 <refsect1 id='dmarc.1'>
538 <title>DMARC vs dkim_from require_signed</title>
539 <para>
540 Note that DNSBL does not implement rfc7489 DMARC. We do not look for
541 _dmarc.$DOMAIN txt records.
542 </para>
543 <para>
544 The restrictions imposed by require_signed are similar but not
545 identical to a DMARC reject policy with strict identifier alignment.
546 When doing SPF fallback, DMARC checks SPF based on the rfc5321
547 envelope from domain. DNSBL checks SPF based on the rfc5322 header
548 from domain. DMARC does not allow mail from good.example.com to be
549 signed by trusted.example.net - which is a common case. Both Microsoft
550 Office365 and Google run mail for customer domains, but use DKIM
551 signing domains in onmicrosoft.com and gappssmtp.com, which are
552 unrelated to the customer domain. DMARC in the default relaxed
553 alignment mode allows evil.example.com to sign mail from
554 good.example.com. DNSBL specifies the exact list of acceptable signing
555 domains, rather than inferring it from child/parent relationships, or
556 using public
557 suffix lists to find the organizational domain. We can block mail
558 from marketing.example.com while accepting mail from
559 billing.example.com, even if both are DKIM signed by example.com.
560 </para>
561 <para>
562 Suppose we have:
563 <literallayout class="monospaced"><![CDATA[
564 rfc5321 envelope from = one@evil.example.com
565 rfc5322 header from = two@good.example.com
566 authentication results = dkim pass header.d=other.example.com
567 _dmarc.good.example.com txt = "v=DMARC1; p=reject; adkim:s aspf:s"
568 dkim_from {good.example.com require_signed other.example.com;}
569 ]]></literallayout>
570 DMARC would fail the strict identifier alignment. DNSBL allows
571 us to require DKIM signatures that are unrelated
572 to the rfc5322 header from, so we accept this message.
573 </para>
574 <para>
575 Suppose we have:
576 <literallayout class="monospaced"><![CDATA[
577 rfc5321 envelope from = one@evil.example.com
578 rfc5322 header from = two@good.example.com
579 authentication results = dkim pass header.d=other.example.net
580 _dmarc.good.example.com txt = "v=DMARC1; p=reject; adkim:r aspf:r"
581 dkim_from {good.example.com require_signed other.example.net;}
582 ]]></literallayout>
583 DMARC would pass the relaxed spf identifier alignments,
584 and would check the evil.example.com spf record. If that
585 allowed the source ip, DMARC would accept the message.
586 DMARC would not check DKIM since example.com and example.net
587 do not pass even the relaxed identifer alignment requirement.
588 DNSBL allows us to require DKIM signatures that are not
589 related to the rfc5322 header from domain, so we accept
590 the message based on the DKIM signature and don't need to
591 fall back to SPF.
592 </para>
593 <para>
594 Suppose we have:
595 <literallayout class="monospaced"><![CDATA[
596 rfc5321 envelope from = one@evil.example.com
597 rfc5322 header from = two@good.example.com
598 authentication results = dkim fail header.d=other.example.net
599 _dmarc.good.example.com txt = "v=DMARC1; p=reject; adkim:r aspf:r"
600 evil.example.com txt = "v=spf1 ... including the source ip
601 good.example.com txt = "v=spf1 ... not including the source ip
602 dkim_from {good.example.com require_signed other.example.net;}
603 ]]></literallayout>
604 DNSBL allows us to require DKIM signatures that are not
605 related to the rfc5322 header from domain. In this case
606 the signature fails, so we fall back to an SPF check.
607 We check SPF based on the rfc5322 header from, and
608 good.example.com does not allow the source ip, so we reject
609 this message.
610 DMARC would accept that message based on the SPF check
611 for evil.example.com
612 </para>
613 </refsect1>
614
536 <refsect1 id='access.1'> 615 <refsect1 id='access.1'>
537 <title>Sendmail access vs. DNSBL</title> 616 <title>Sendmail access vs. DNSBL</title>
538 <para> 617 <para>
539 With the standard sendmail.mc dnsbl FEATURE, the dnsbl checks may be 618 With the standard sendmail.mc dnsbl FEATURE, the dnsbl checks may be
540 suppressed by entries in the /etc/mail/access database. For example, 619 suppressed by entries in the /etc/mail/access database. For example,
688 </refentry> 767 </refentry>
689 768
690 769
691 <refentry id="@PACKAGE@.conf.5"> 770 <refentry id="@PACKAGE@.conf.5">
692 <refentryinfo> 771 <refentryinfo>
693 <date>2017-03-07</date> 772 <date>2017-03-30</date>
694 <author> 773 <author>
695 <firstname>Carl</firstname> 774 <firstname>Carl</firstname>
696 <surname>Byington</surname> 775 <surname>Byington</surname>
697 <affiliation><orgname>510 Software Group</orgname></affiliation> 776 <affiliation><orgname>510 Software Group</orgname></affiliation>
777 <personblurb><para></para></personblurb>
698 </author> 778 </author>
699 </refentryinfo> 779 </refentryinfo>
700 780
701 <refmeta> 781 <refmeta>
702 <refentrytitle>@PACKAGE@.conf</refentrytitle> 782 <refentrytitle>@PACKAGE@.conf</refentrytitle>