Mercurial > notdcc
diff dccifd.0 @ 0:c7f6b056b673
First import of vendor version
author | Peter Gervai <grin@grin.hu> |
---|---|
date | Tue, 10 Mar 2009 13:49:58 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dccifd.0 Tue Mar 10 13:49:58 2009 +0100 @@ -0,0 +1,677 @@ +dccifd(8) Distributed Checksum Clearinghouse dccifd(8) + +NNAAMMEE + ddcccciiffdd -- Distributed Checksum Clearinghouse Interface Daemon + +SSYYNNOOPPSSIISS + ddcccciiffdd [--VVddbbxxAANNQQ] [--GG _o_n | _o_f_f | _n_o_I_P | _I_P_m_a_s_k_/_x_x] [--hh _h_o_m_e_d_i_r] [--II _u_s_e_r] + [--pp _/_s_o_c_k | _h_o_s_t_,_p_o_r_t_,_r_h_o_s_t_/_b_i_t_s] [--oo _/_s_o_c_k | _h_o_s_t_,_p_o_r_t] + [--DD _l_o_c_a_l_-_d_o_m_a_i_n] [--mm _m_a_p] [--ww _w_h_i_t_e_c_l_n_t] [--UU _u_s_e_r_d_i_r_s] + [--aa _I_G_N_O_R_E | _R_E_J_E_C_T | _D_I_S_C_A_R_D] [--tt _t_y_p_e_,[_l_o_g_-_t_h_o_l_d_,]_r_e_j_-_t_h_o_l_d] + [--gg [_n_o_t_-]_t_y_p_e] [--SS _h_e_a_d_e_r] [--ll _l_o_g_d_i_r] [--RR _r_u_n_d_i_r] + [--rr _r_e_j_e_c_t_i_o_n_-_m_s_g] [--TT _t_m_p_d_i_r] [--jj _m_a_x_j_o_b_s] + [--BB _d_n_s_b_l_-_o_p_t_i_o_n] [--LL _l_t_y_p_e_,_f_a_c_i_l_i_t_y_._l_e_v_e_l] + +DDEESSCCRRIIPPTTIIOONN + ddcccciiffdd is a daemon intended to connect spam filters such as SpamAssasin + and mail transfer agents (MTAs) other than sendmail to DCC servers. The + MTA or filter ddcccciiffdd which in turn reports related checksums to the near- + est DCC server and adds an _X_-_D_C_C SMTP header line to the message. The + MTA is told to reject the message if it is unsolicited bulk. + + DDcccciiffdd is similar to the DCC sendmail milter interface, dccm(8) and the + DCC Procmail interface, dccproc(8). DDcccciiffdd is more efficient than + dccproc(8) but not restricted to use with sendmail like dccm(8). All + three send reports of checksums related to mail received by DCC clients + and queries about the total number of reports of particular checksums. + + MTA programs use a simple ASCII protocol a subset of SMTP to send a mail + message including its SMTP envelope to the daemon. DDcccciiffdd responds with + an indication of whether the message is unsolicited bulk and an optional + copy of the message with an _X_-_D_C_C header added. The ASCII protocol is + described below and in the _i_n_c_l_u_d_e_/_d_c_c_i_f_._h file in the DCC source. There + is a sample C interface routine in the _d_c_c_l_i_b_/_d_c_c_i_f_._c file in the DCC + source and the _d_c_c_l_i_b_._a library generated from the source. A _P_e_r_l ver- + sion of the interface routine is in _d_c_c_i_f_d_/_d_c_c_i_f_._p_l. Test or demonstra- + tion programs in the style of dccproc(8) that use those interface rou- + tines are in _d_c_c_i_f_d_/_d_c_c_i_f_-_t_e_s_t. + + A subset of ESMTP can be used instead of the ASCII protocol to connect + ddcccciiffdd to postfix as a "Before-Queue Content Filter." See the --oo flag. + + Since the checksums of messages that are whitelisted locally by the --ww + _w_h_i_t_e_c_l_n_t file are not reported to the DCC server, ddcccciiffdd knows nothing + about the total recipient counts for their checksums and so cannot add + _X_-_D_C_C header lines to such messages. + + Enable the daemon and put its parameters in the _d_c_c___c_o_n_f file and start + the daemon with the _s_t_a_r_t_-_d_c_c_i_f_d script. + + The list of servers that ddcccciiffdd contacts is in the memory mapped file _m_a_p + shared by local DCC clients. The file is maintained with cdcc(8). + + OOPPTTIIOONNSS + The following options are available: + + --VV displays the version of ddcccciiffdd. + + --dd enables debugging output from the DCC client software. Additional + --dd options increase the number of messages. A single --dd + aborted SMTP transactions including those from some "dictionary + attacks." + + --bb causes the daemon to not detach itself from the controlling tty and + put itself into the background. + + --xx causes the daemon to try "extra hard" to contact a DCC server. + Since it is usually more important to deliver mail than to report + its checksums, ddcccciiffdd normally does not delay too long while trying + to contact a DCC server. It will not try again for several seconds + after a failure. With --xx, it will always try to contact the DCC + server and it will tell the MTA to answer the DATA command with a + 4yz temporary failure. + + --AA adds to existing X-DCC headers in the message instead of replacing + existing headers of the brand of the current server. + + --NN neither adds, deletes, nor replaces existing X-DCC headers in the + message. Each message is logged, rejected, and otherwise handled + the same. + + --QQ only queries the DCC server about the checksums of messages instead + of reporting and querying. This is useful when ddcccciiffdd is used to + filter mail that has already been reported to a DCC server by + another DCC client. No single mail message should be reported to a + DCC server more than once per recipient, because each report will + increase the apparent "bulkness" of the message. + + It is better to use _M_X_D_C_C lines in the global _w_h_i_t_e_c_l_n_t file for + your MX mail servers that use DCC than --QQ. + + --GG _o_n | _o_f_f | _n_o_I_P | _I_P_m_a_s_k_/_x_x + controls _g_r_e_y_l_i_s_t_i_n_g. At least one working greylist server must be + listed in the _m_a_p file in the DCC home directory. If more than one + is named, they must "flood" or change checksums and they must use + the same --GG parameters. See dccd(8). Usually all dccm or dccifd + DCC client processes use the same --GG parameters. + + _I_P_m_a_s_k_/_x_x and _n_o_I_P remove part or all of the IP address from the + greylist triple. The CIDR block size, _x_x, must be between 1 and + 128. 96 is added to block sizes smaller than 33 to make them appro- + priate for the IPv6 addresses used by the DCC. _I_P_m_a_s_k_/_9_6 differs + from _n_o_I_P for IPv4 addresses, because the former retains the IPv4 to + IPv6 mapping prefix. + + --hh _h_o_m_e_d_i_r + overrides the default DCC home directory, _/_v_a_r_/_d_c_c. + + --II _u_s_e_r + specifies the UID and GID of the process. + + --pp _/_s_o_c_k_/_n_a_m_e | _h_o_s_t_,_p_o_r_t_,_r_h_o_s_t_/_b_i_t_s + overrides the default address at which programs contact ddcccciiffdd. The + default is a UNIX domain socket named dccifd in the DCC home direc- + tory. + + The second form specifies a local host name or IP address, a local + TCP port number, and the host names or IP addresses of computers + that can use ddcccciiffdd. 127.0.0.1 or _l_o_c_a_l_h_o_s_t are common choices for + _h_o_s_t. The string _@ specifies IN_ADDRANY or all local IP addresses. + 127.0.0.0/8 is a common choice for _r_h_o_s_t_/_b_i_t_s. + + --oo _/_s_o_c_k | _h_o_s_t_,_p_o_r_t + enables SMTP proxy mode instead of the ASCII protocol and specifies + the output connection when ddcccciiffdd acts as an SMTP proxy. It is the + address of the SMTP server for which ddcccciiffdd acts as SMTP client. + When _/_s_o_c_k is _/_d_e_v_/_n_u_l_l, ddcccciiffdd acts as if there were downstream + SMTP server that always answers "250 ok". The string _@ specifies + the same IP address as the incoming TCP connection. + + The input to ddcccciiffdd in SMTP proxy mode is specified with ----pp. For + example, --pp _1_2_7_._0_._0_._1_,_1_0_0_2_5_,_1_2_7_._0_._0_._1_/_3_2 --oo _1_2_7_._0_._0_._1_,_1_0_0_2_6 could be + used to connect ddcccciiffdd with Postfix as described in the documenta- + tion in version 2.2.1 Postfix documentation. + + See below concerning the subset of ESMTP used in this mode. + + --mm _m_a_p + specifies a name or path of the memory mapped parameter file instead + of the default _m_a_p file in the DCC home directory. It should be + created with the cdcc(8) command. + + --ww _w_h_i_t_e_c_l_n_t + specifies an optional file containing filtering parameters as well + as SMTP client IP addresses, SMTP envelope values, and header values + of mail that is spam or is not spam and does not need a _X_-_D_C_C + header, and whose checksums should not be reported to the DCC + server. + + If the pathname _w_h_i_t_e_c_l_n_t is not absolute, it is relative to the DCC + home directory. + + The format of the ddcccciiffdd whiteclnt file is the same as the _w_h_i_t_e_l_i_s_t + files used by dbclean(8) and the _w_h_i_t_e_c_l_n_t file used by dccproc(8). + See dcc(8) for a description of DCC white and blacklists. Because + the contents of the _w_h_i_t_e_c_l_n_t file are used frequently, a companion + file is automatically created and maintained. It has the same path- + name but with an added suffix of _._d_c_c_w and contains a memory mapped + hash table of the main file. + + A whitelist entry ("OK") or two or more semi-whitelistings ("OK2") + for one of the message's checksums prevents all of the message's + checksums from being reported to the DCC server and the addition of + a _X_-_D_C_C header line by ddcccciiffdd A whitelist entry for a checksum also + prevents rejecting or discarding the message based on DCC recipient + counts as specified by --aa and --tt. Otherwise, one or more checksums + with blacklisting entries ("MANY") cause all of the message's check- + sums to be reported to the server with an addressee count of "MANY". + + If the message has a single recipient, an _e_n_v___T_o _w_h_i_t_e_c_l_n_t entry of + "OK" for the checksum of its recipient address acts like any other + _w_h_i_t_e_c_l_n_t entry of "OK." When the SMTP message has more than one + recipient, the effects can be complicated. When a message has sev- + eral recipients with some but not all listed in the _w_h_i_t_e_c_l_n_t file, + ddcccciiffdd tries comply with the wishes of the users who want filtering + as well as those who don't by silently not delivering the message to + those who want filtering (i.e. are not whitelisted) and delivering + the message to don't want filtering. + + --UU _u_s_e_r_d_i_r_s + enables per-user _w_h_i_t_e_c_l_n_t files and log directories. Each target + of a message can have a directory of log files named + _u_s_e_r_d_i_r_s_/_a_d_d_r_/_l_o_g where _a_d_d_r is the local user or mailbox name com- + puted by the MTA. The name of each user's log directory must be + _l_o_g. If it is not absolute, _u_s_e_r_d_i_r_s is relative to the DCC home + directory. The directory containing the log files must be named _l_o_g + and it must be writable by the ddcccciiffdd process. Each log directory + must exist or logging for the corresponding is silently disabled. + The files created in the log directory are owned by the UID of the + ddcccciiffdd process, but they have _g_r_o_u_p and _o_t_h_e_r read and write permis- + sions copied from the corresponding _l_o_g directory. To ensure the + privacy of mail, it may be good to make the directories readable + only by _o_w_n_e_r and _g_r_o_u_p, and to use a cron script that changes the + owner of each file to match the grandparent _a_d_d_r directory. + + There can also be a per -user whitelist file named + _u_s_e_r_d_i_r_s_/_a_d_d_r_/_w_h_i_t_e_c_l_n_t for each address _a_d_d_r_. Any checksum that is + not white- or blacklisted by an individual addressee's _w_h_i_t_e_c_l_n_t + file is checked in the main --ww --wwhhiitteeccllnntt file. A missing per- + addressee _w_h_i_t_e_c_l_n_t file is the same as an empty file. Relative + paths for files included in per-addressee files are resolved in the + DCC home directory. The _w_h_i_t_e_c_l_n_t files and the _a_d_d_r directories + containing them must be writable by the ddcccciiffdd process. + + _O_p_t_i_o_n lines in per-user whiteclnt files can be used to modify many + aspects of ddcccciiffdd filtering, as described in the main dcc man page. + For example, an _o_p_t_i_o_n _d_c_c_-_o_f_f line turns off DCC filtering for + individual mailboxes. + + --aa _I_G_N_O_R_E | _R_E_J_E_C_T | _D_I_S_C_A_R_D + specifies the action taken when ddcccciiffdd is in proxy mode with --oo and + DCC server counts or --tt thresholds say that a message is unsolicited + and bulk. _I_G_N_O_R_E causes the message to be unaffected except for + adding the _X_-_D_C_C header line to the message. This turns off DCC + filtering. + + Spam can also be _R_E_J_E_C_Ted or (when in proxy mode with --oo) accepted + and silently _D_I_S_C_A_R_Ded without being delivered to local mailboxes. + The default is _R_E_J_E_C_T. + + Mail forwarded via IP addresses marked _M_X or _M_X_D_C_C in the main + _w_h_i_t_e_c_l_n_t file is treated as if --aa _D_I_S_C_A_R_D were specified. This + prevents "bouncing" spam. + + The effects of the --ww _w_h_i_t_e_c_l_n_t are not affected by --aa. + + --tt _t_y_p_e_,[_l_o_g_-_t_h_o_l_d_,]_r_e_j_-_t_h_o_l_d + sets logging and "spam" thresholds for checksum _t_y_p_e. The checksum + types are _I_P, _e_n_v___F_r_o_m, _F_r_o_m, _M_e_s_s_a_g_e_-_I_D, _s_u_b_s_t_i_t_u_t_e, _R_e_c_e_i_v_e_d, + _B_o_d_y, _F_u_z_1, _F_u_z_2, _r_e_p_-_t_o_t_a_l, and _r_e_p. The first six, _I_P through + _s_u_b_s_t_i_t_u_t_e, have no effect except when a local DCC server configured + with --KK is used. The _s_u_b_s_t_i_t_u_t_e thresholds apply to the first sub- + stitute heading encountered in the mail message. The string _A_L_L + sets thresholds for all types, but is unlikely to be useful except + for setting logging thresholds. The string _C_M_N specifies the com- + monly used checksums _B_o_d_y, _F_u_z_1, and _F_u_z_2. _R_e_j_-_t_h_o_l_d and _l_o_g_-_t_h_o_l_d + must be numbers, the string _N_E_V_E_R, or the string _M_A_N_Y indicating + millions of targets. Counts from the DCC server as large as the + threshold for any single type are taken as sufficient evidence that + the message should be logged or rejected. + + _L_o_g_-_t_h_o_l_d is the threshold at which messages are logged. It can be + handy to log messages at a lower threshold to find solicited bulk + mail sources such as mailing lists. If no logging threshold is set, + only rejected mail and messages with complicated combinations of + white and blacklisting are logged. Messages that reach at least one + of their rejection thresholds are logged regardless of logging + thresholds. + + _R_e_j_-_t_h_o_l_d is the threshold at which messages are considered "bulk," + and so should be rejected or discarded if not whitelisted. + + DCC Reputation thresholds in the commercial version of the DCC are + controlled by thresholds on checksum types _r_e_p and _r_e_p_-_t_o_t_a_l. Mes- + sages from an IP address that the DCC database says has sent more + than --tt _r_e_p_-_t_o_t_a_l_,_l_o_g_-_t_h_o_l_d messages are logged. A DCC Reputation + is computed for messages received from IP addresses that have sent + more than --tt _r_e_p_-_t_o_t_a_l_,_l_o_g_-_t_h_o_l_d messages. The DCC Reputation of an + IP address is the percentage of its messages that have been detected + as bulk or having at least 10 recipients. The defaults are equiva- + lent to --tt _r_e_p_,_n_e_v_e_r and --tt _r_e_p_-_t_o_t_a_l_,_n_e_v_e_r_,_2_0. + + Bad DCC Reputations do not reject mail unless enabled by an _o_p_t_i_o_n + _D_C_C_-_r_e_p_-_o_n line in a _w_h_i_t_e_c_l_n_t file. + + The checksums of locally whitelisted messages are not checked with + the DCC server and so only the number of targets of the current copy + of a whitelisted message are compared against the thresholds. + + The default is _A_L_L_,_N_E_V_E_R, so that nothing is discarded, rejected, or + logged. A common choice is _C_M_N_,_2_5_,_5_0 to reject or discard mail with + common bodies except as overridden by the whitelist of the DCC + server, the sendmail _$_{_d_c_c___i_s_s_p_a_m_} and _$_{_d_c_c___n_o_t_s_p_a_m_} macros, and + --gg, and --ww. + + --gg [_n_o_t_-]_t_y_p_e + indicates that whitelisted, _O_K or _O_K_2, counts from the DCC server + for a type of checksum are to be believed. They should be ignored + if prefixed with _n_o_t_-. _T_y_p_e is one of the same set of strings as + for --tt. Only _I_P, _e_n_v___F_r_o_m, and _F_r_o_m are likely choices. By default + all three are honored, and hence the need for _n_o_t_-. + + --SS _h_d_r + adds to the list of substitute or locally chosen headers that are + checked with the --ww _w_h_i_t_e_c_l_n_t file and sent to the DCC server. The + checksum of the last header of type _h_d_r found in the message is + checked. _H_d_r can be _H_E_L_O to specify the SMTP envelope HELO value. + _H_d_r can also be _m_a_i_l___h_o_s_t to specify the host name from the + Mail_from value in the SMTP envelope. As many as six different sub- + stitute headers can be specified, but only the checksum of the first + of the six will be sent to the DCC server. + + --ll _l_o_g_d_i_r + specifies a directory in which files containing copies of messages + processed by ddcccciiffdd are kept. They can be copied to per-user direc- + tories specified with --UU. Information about other recipients of a + message is deleted from the per-user copies. + + See the FILES section below concerning the contents of the files. + See also the _o_p_t_i_o_n _l_o_g_-_s_u_b_d_i_r_e_c_t_o_r_y_-_{_d_a_y_,_h_o_u_r_,_m_i_n_u_t_e_} lines in + _w_h_i_t_e_c_l_n_t files described in dcc(8). + + The directory is relative to the DCC home directory if it is not + absolute + + --RR _r_u_n_d_i_r + specifies the "run" directory where the file containing the daemon's + process ID is stored. The default value is _/_v_a_r_/_r_u_n_/_d_c_c. + + --TT _t_m_p_d_i_r + changes the default directory for temporary files from the default. + The default is the directory specified with --ll or the system default + if --ll is not used. The system default is often _/_t_m_p. + + --DD _l_o_c_a_l_-_d_o_m_a_i_n + specifies a host or domain name by which the system is known. There + can be several --DD settings. + + To find the per-user log directory and whitelist for each mail + recipient, ddcccciiffdd must know each recipient's user name. The ASCII + protocol used between and the MTA includes an optional user name + with each SMTP recipient address. When the user name is absent when + the ASCII protocol is used or when the subset of ESMTP enabled with + --oo is used, and when the SMTP recipient address includes an _a_t _s_i_g_n + (@) each mail address is checked against the list of _l_o_c_a_l_-_d_o_m_a_i_ns. + The part of the recipient address remaining after longest matching + _l_o_c_a_l_-_d_o_m_a_i_n (if any) is taken as the user name. The match is + anchored at the right or the end of the recipient address. It must + start at a period (.) or _a_t _s_i_g_n (@) in the domain name part of the + address. + + If _l_o_c_a_l_-_d_o_m_a_i_n starts with an asterisk (*) indicating a wildcard, + preceding sub-domain names are discarded to compute the user name. + Otherwise, the computed user name will include any unmatched sub- + domain names. + + The default value of _l_o_c_a_l_-_d_o_m_a_i_n when there are no --DD settings is + the host name of the system. + + --rr _r_e_j_e_c_t_i_o_n_-_m_s_g + specifies the rejection message in --oo proxy mode for unsolicited + bulk mail or for mail temporarily blocked by _g_r_e_y_l_i_s_t_i_n_g when --GG is + specified. The first --rr _r_e_j_e_c_t_i_o_n_-_m_s_g replaces the default bulk + mail rejection message, "5.7.1 550 mail %ID from %CIP rejected by + DCC". The second replaces "4.2.1 452 mail %ID from %CIP temporary + greylist embargoed". The third --rr _r_e_j_e_c_t_i_o_n_-_m_s_g replaces the + default SMTP rejection message "5.7.1 550 %ID bad reputation; see + http://commercial-dcc.rhyolite.com/cgi-bin/reps.cgi?tgt=%CIP" for + mail with bad DCC Reputations. If _r_e_j_e_c_t_i_o_n_-_m_s_g is the zero-length + string, the --rr setting is counted but the corresponding message is + not changed. + + _R_e_j_e_c_t_i_o_n_-_m_s_g can contain specific information about the mail mes- + sage. The following strings starting with % are replaced with the + corresponding values: + %ID message ID such as the unique part of log file name or + sendmail queue ID + %CIP SMTP client IP address + %BTYPE type of DNS blacklist hit, such as "SMTP client", + "mail_host", or "URL NS" + %BTGT IP address or name declared bad by DNS blacklist + %BPROBE domain name found in DNS blacklist such as + 4.3.2.10.example.com + %BRESULT value of the %BPROBE domain name found in DNS black- + list + + A common alternate for the bulk mail rejection message is "4.7.1 451 + Access denied by DCC" to tell the sending mail system to continue + trying. Use a 4yz response with caution, because it is likely to + delay for days a delivery failure message for false positives. If + the rejection message does not start with an RFC 1893 status code + and RFC 2821 reply code, 5.7.1 and 550 or 4.2.1 and 452 are used. + + See also --BB _s_e_t_:_r_e_j_-_m_s_g_=_r_e_j_e_c_t_i_o_n_-_m_s_g to set the status message for + mail rejected by DNS blacklists. + + --jj _m_a_x_j_o_b_s + limits the number of simultaneous requests that will be processed. + The default value is the maximum number that seems to be possible + given system limits on open files, select() bit masks, and so forth. + Start ddcccciiffdd with --dd and see the starting message in the system log + to see the limit. + + --BB _d_n_s_b_l_-_o_p_t_i_o_n + enables DNS blacklist checks of the SMTP client IP address, SMTP + envelope Mail_From sender domain name, and of host names in URLs in + the message body. Body URL blacklisting has too many false posi- + tives to use on abuse mailboxes. It is less effective than + greylisting with dccm(8) or dccifd(8) but can be useful in situa- + tions where greylisting cannot be used. + + _D_n_s_b_l_-_o_p_t_i_o_n is either one of the --BB _s_e_t_:_o_p_t_i_o_n forms or + --BB _d_o_m_a_i_n[_,_I_P_a_d_d_r[_/_x_x[_,_b_l_t_y_p_e]]] + _D_o_m_a_i_n is a DNS blacklist domain such as example.com that will be + searched. _I_P_a_d_d_r[_/_x_x_x] is the string "any" an IP address in the DNS + blacklist that indicates that the mail message should be rejected, + or a CIDR block covering results from the DNS blacklist. + "127.0.0.2" is assumed if _I_P_a_d_d_r is absent. IPv6 addresses can be + specified with the usual colon (:) notation. Names can be used + instead of numeric addresses. The type of DNS blacklist is speci- + fied by _b_l_t_y_p_e as _n_a_m_e, _I_P_v_4, or _I_P_v_6. Given an envelope sender + domain name or a domain name in a URL of spam.domain.org and a + blacklist of type _n_a_m_e, spam.domain.org.example.com will be tried. + Blacklist types of _I_P_v_4 and _I_P_v_6 require that the domain name in a + URL sender address be resolved into an IPv4 or IPv6 address. The + address is then written as a reversed string of decimal octets to + check the DNS blacklist, as in 2.0.0.127.example.com, + + More than one blacklist can be specified and blacklists can be + grouped. All searching within a group is stopped at the first posi- + tive result. + + Positive results are ignored after being logged unless an + _o_p_t_i_o_n _D_N_S_B_L_-_o_n line appears in the global or per-user _w_h_i_t_e_c_l_n_t + file. + + --BB _s_e_t_:_n_o_-_c_l_i_e_n_t + says that SMTP client IP addresses and reverse DNS domain names + should not be checked in the following blacklists. + --BB _s_e_t_:_c_l_i_e_n_t restores the default for the following black- + lists. + + --BB _s_e_t_:_n_o_-_m_a_i_l___h_o_s_t + says that SMTP envelope Mail_From sender domain names should + not be checked in the following blacklists. --BB _s_e_t_:_m_a_i_l___h_o_s_t + restores the default. + + --BB _s_e_t_:_n_o_-_U_R_L + says that URLs in the message body should not be checked in the + in the following blacklists. --BB _s_e_t_:_U_R_L restores the default. + + --BB _s_e_t_:_n_o_-_M_X + says MX servers of sender Mail_From domain names and host names + in URLs should not be checked in the following blacklists. + --BB _s_e_t_:_M_X restores the default. + + --BB _s_e_t_:_n_o_-_N_S + says DNS servers of sender Mail_From domain names and host + names in URLs should not be checked in the following black- + lists. --BB _s_e_t_:_N_S restores the default. + + --BB _s_e_t_:_d_e_f_a_u_l_t_s + is equivalent to all of --BB _s_e_t_:_n_o_-_t_e_m_p_-_f_a_i_l --BB _s_e_t_:_c_l_i_e_n_t + --BB _s_e_t_:_m_a_i_l___h_o_s_t --BB _s_e_t_:_U_R_L --BB _s_e_t_:_M_X and --BB _s_e_t_:_N_S + + --BB _s_e_t_:_g_r_o_u_p_=_X + adds later DNS blacklists specified with + --BB _d_o_m_a_i_n[_,_I_P_a_d_d_r[_/_x_x[_,_b_l_t_y_p_e]]] + to group 1, 2, or 3. + + --BB _s_e_t_:_d_e_b_u_g_=_X + sets the DNS blacklist logging level + + --BB _s_e_t_:_m_s_g_-_s_e_c_s_=_S + limits ddcccciiffdd to _S seconds total for checking all DNS black- + lists. The default is 25. + + --BB _s_e_t_:_U_R_L_-_s_e_c_s_=_S + limits ddcccciiffdd to at most _S seconds resolving and checking any + single URL. The default is 11. Some spam contains dozens of + URLs and that some "spamvertised" URLs contain host names that + need minutes to resolve. Busy mail systems cannot afford to + spend minutes checking each incoming mail message. + + --BB _s_e_t_:_r_e_j_-_m_s_g_=_r_e_j_e_c_t_i_o_n_-_m_s_g + sets the SMTP rejection message for the following blacklists. + _R_e_j_e_c_t_i_o_n_-_m_s_g must be in the same format as for --rr. If + _r_e_j_e_c_t_i_o_n_-_m_s_g is null, the default is restored. The default + DNS blacklist rejection message is the first message set with + --rr. + + --BB _s_e_t_:_t_e_m_p_-_f_a_i_l + causes ddcccciiffdd to the MTA to answer the SMTP DATA command with + 452 4.2.1 mail %ID from %CIP temporary delayed for DNSBL + if any DNS answer required for a DNSBL in the current group + times out, including resolving names in URLs. + + --BB _s_e_t_:_n_o_-_t_e_m_p_-_f_a_i_l + restores the default of assuming a negative answer for DNS + responses that take too long. + + --BB _s_e_t_:_m_a_x_j_o_b_s_=_X + sets maximum number of helper processes to _X. In order to use + typical single-threaded DNS resolver libraries, ddcccciiffdd uses + fleets of helper processes. It is rarely a good idea to change + the default, which is the same as the maximum number of simul- + taneous jobs set with --jj. + + --BB _s_e_t_:_p_r_o_g_p_a_t_h_=_/_v_a_r_/_d_c_c_/_l_i_b_e_x_e_c_/_d_n_s_-_h_e_l_p_e_r + changes the path to the helper program. + + --LL _l_t_y_p_e_,_f_a_c_i_l_i_t_y_._l_e_v_e_l + specifies how messages should be logged. _L_t_y_p_e must be _e_r_r_o_r, _i_n_f_o, + or _o_f_f to indicate which of the two types of messages are being con- + trolled or to turn off all syslog(3) messages from ddcccciiffdd. _L_e_v_e_l + must be a syslog(3) level among _E_M_E_R_G, _A_L_E_R_T, _C_R_I_T, _E_R_R, _W_A_R_N_I_N_G, + _N_O_T_I_C_E, _I_N_F_O, and _D_E_B_U_G. _F_a_c_i_l_i_t_y must be among _A_U_T_H, _A_U_T_H_P_R_I_V, + _C_R_O_N, _D_A_E_M_O_N, _F_T_P, _K_E_R_N, _L_P_R, _M_A_I_L, _N_E_W_S, _U_S_E_R, _U_U_C_P, and _L_O_C_A_L_0 + through _L_O_C_A_L_7. The default is equivalent to + --LL _i_n_f_o_,_M_A_I_L_._N_O_T_I_C_E --LL _e_r_r_o_r_,_M_A_I_L_._E_R_R + + ddcccciiffdd normally sends counts of mail rejected and so forth to the system + log at midnight. The SIGUSR1 signal sends an immediate report to the + system log. The reports will be repeated every 24 hours at the same + minute as the signal instead of at midnight. + + PPrroottooccooll + DDcccciiffdd uses a simple ASCII protocol to receive mail messages to be + checked and to return results. For each message, the MTA must open a + connection to the interface daemon, send options, envelope recipients, + and the message, receive the results, and close the connection. + + Instead of the ASCII protocol, a subset of ESMTP is enabled by --oo. Only + the familiar HELO, EHLO, Mail, Rcpt, DATA, RSET, and QUIT commands and + the Postfix extensions XFORWARD and XCLIENT are honored. Since SMTP has + no provisions for user names, the protocol enabled by --oo depends on a + list of local domain names specified with --DD to find per-user log direc- + tories and whitelist files. If neither XFORWARD nor XCLIENT are used, + ddcccciiffdd uses the IP address of the MTA and the value of the HELO command. + + In the ASCII protocol, each of the following lines are sent in order to + ddcccciiffdd. Each ends with a newline ('\n') character. + options zero or more blank-separated strings among: + _s_p_a_m the message is already known to be spam + _b_o_d_y return all of the headers with the added + _X_-_D_C_C header line and the body + _h_e_a_d_e_r return the _X_-_D_C_C header + _q_u_e_r_y ask the DCC server about the message without + reporting it, as if ddcccciiffdd were running with + --QQ. + _g_r_e_y_-_q_u_e_r_y only query the greylist server for this mes- + sage. --GG _o_n must be in use. + _n_o_-_r_e_j_e_c_t suppress the overall, one character line 'R' + result. This can be useful when using ddcccciiffdd + only for greylisting. + _l_o_g ensure that this message is logged as if + ddcccciiffdd were running with --tt --aallll,,00,, + client IP address of the SMTP client in a "dotted" or "coloned" + ASCII string and reverse-DNS host name. If the host name + is present, it must follow a carriage return character + ('\r') after the IP address. The client IP address must be + present and non-null if the host name is present. The + string "0.0.0.0\n" is understood the same as the null + string, meaning that both the IP address and host name are + absent. If the client IP address is absent, then the IP + address and host name are taken from the first non-local + Received header if it has the standard "name (name [IP + address])..." format. Non-standard Received headers com- + monly added by qmail as well as Received headers specifying + IP addresses marked _M_X or _M_X_D_C_C in the global --ww _w_h_i_t_e_c_l_n_t + file are skipped. + HELO SMTP HELO value or nothing, followed by a newline ('\n') + character. If the HELO value is null and the IP address of + the SMTP client are not supplied, they will be taken from + the same Received: header that supplies the IP address. + sender or SMTP _M_a_i_l _F_r_o_m command value for the env_from checksum. + If the sender is null, the contents of the first Return- + Path: or UNIX style From_ header is used. + recipients or SMTP _R_c_p_t _T_o recipient mailboxes followed by correspond- + ing local user names, one (mailbox,user) pair to a line. + Each optional local user name is separated from the corre- + sponding mailbox recipient address by a carriage return + ('\r'). A local user name can be null if it is not known, + but each recipient mailbox must be non-null. If there are + no lines of (mailbox,user) pairs and if the _s_p_a_m option is + not included, then the _q_u_e_r_y is assumed. Mailboxes without + user names will lack per-user log files and will not invoke + a per-user whitelist. + + The last recipient-user name pair is followed by an empty line and the + headers and body of the message. The end of the body of the mail message + is signaled by the MTA half-closing the connection. See shutdown(2). + + DDcccciiffdd responds with three things. First is a one character line of the + overall result advising the MTA: + A accept the message for all recipients and answer the SMTP DATA + command with a 2yz result. + G answer with a 4yz result to embargo the message for greylisting. + R reject the message and answer the DATA command with a 5yz result. + S accept the message for some recipients and so answer the DATA com- + mand with a 2yz result. + T temporary failure by the DCC system and so answer with a 4yz + result. + + Second is a line of characters indicating the disposition of the message + for each corresponding recipient: + A deliver the message + G discard the message during a greylist embargo + R discard the message as spam + The SMTP protocol allows only a single result for the DATA command for + all recipients that were not rejected before body of the message was + offered with the DATA command. To accept the message for some recipients + and reject it for others, the MTA must tell the SMTP client it is accept- + ing the message for all recipients and then discard it for those that + would reject it. + + Finally, if the _b_o_d_y or _h_e_a_d_e_r strings are in the first line of _o_p_t_i_o_n_s + sent by the MTA to the daemon, then the _X_-_D_C_C header line or the entire + body with the _X_-_D_C_C header line follows. + +FFIILLEESS + /var/dcc is the DCC home directory in which other files are found. + /var/dcc/libexec/start-dccifd + and + /var/dcc/libexec/rcDCC + are scripts used to start the daemon. + dcc/dcc_conf + contains parameters used by the scripts to start DCC daemons + and cron jobs. + logdir is an optional directory specified with --ll and containing + marked mail. Each file in the directory contains one mes- + sage, at least one of whose checksums reached its --tt thresh- + olds or that is interesting for some other reason. Each file + starts with lines containing the date when the message was + received, the IP address of the SMTP client, and SMTP enve- + lope values. Those lines are followed by the body of the + SMTP message including its header as it was received. Only + approximately the first 32 KBytes of the body are recorded + unless modified by _._/_c_o_n_f_i_g_u_r_e _-_-_w_i_t_h_-_m_a_x_-_l_o_g_-_s_i_z_e_=_x_x The + checksums for the message follow the body. They are followed + by lines indicate that one of the checksums is white- or + blacklisted by the --ww _w_h_i_t_e_c_l_n_t file. Each log file ends + with the _X_-_D_C_C header line added to the message and the dis- + position of the message. + map is the memory mapped file of information concerning DCC + servers in the DCC home directory. + whiteclnt contains the client whitelist in the format described in + dcc(8). + whiteclnt.dccw + is a memory mapped hash table of the _w_h_i_t_e_c_l_n_t file. + dccifd.pid in the --RR _r_u_n_d_i_r directory contains daemon's process ID. + +EEXXAAMMPPLLEESS + Dccifd can be used as Postfix Before-Queue Content filter. In some tests + these values for --pp and --oo in _d_c_c___c_o_n_f. + + DCCIFD_ENABLE=on + DCCIFD_ARGS="-p 127.0.0.1,10025,127.0.0.1/32 -o 127.0.0.1,10026 + + worked with these lines in /etc/postfix/master.cf + + smtp inet n - n - - smtpd + -o smtpd_proxy_filter=127.0.0.1:10025 + 127.0.0.1:10026 inet n - n - - smtpd + -o smtpd_authorized_xforward_hosts=127.0.0.0/8 + -o smtpd_client_restrictions= + -o smtpd_helo_restrictions= + -o smtpd_sender_restrictions= + -o smtpd_recipient_restrictions=permit_mynetworks,reject + -o smtpd_data_restrictions= + -o mynetworks=127.0.0.0/8 + -o receive_override_options=no_unknown_recipient_checks + +SSEEEE AALLSSOO + cdcc(8), dbclean(8), dcc(8), dccd(8), dblist(8), dccm(8), dccproc(8), + dccsight(8), + +HHIISSTTOORRYY + Implementation of ddcccciiffdd Distributed Checksum Clearinghouses are based on + an idea of Paul Vixie with code designed and written at Rhyolite Software + starting in 2000. was started at Rhyolite Software in 2002. This docu- + ment describes version 1.3.103. + +BBUUGGSS + ddcccciiffdd uses --tt where dccproc(8) uses --cc. + + By default ddcccciiffdd look for its UNIX domain socket in the DCC home direc- + tory, but dccm(8) looks in its --RR _r_u_n_d_i_r. + + Systems without setrlimit(2) and getrlimit(2) RLIMIT_NOFILE can have + problems with the default limit on the number of simultaneous jobs, the + value of --jj. Every job requires four open files. These problems are + usually seen with errors messages that say something like + dccifd[24448]: DCC: accept(): Result too large + A fix is to use a smaller value for --jj or to allow ddcccciiffdd to open more + files. + + February 26, 2009