dnl dnl проверка количества цифр в домене адреса отправителя, хосте отправителя и helo dnl dnl NO - не проводить проверку dnl WARN - вывода в лог файл предупреждения dnl REJECT - возврата клиенту кода 5xx dnl GREYLIST:XX - добавить XX баллов к счетчику опционального грейлистинга dnl define(`confCHECK_DIGITS', `NO')dnl dnl dnl максимальное кол-во цифр в младшей части $sender_host_name dnl define(`confMAX_DIGITS_SENDER_SUBHOSTNAME', `5')dnl dnl максимальное кол-во цифр в $sender_host_name dnl define(`confMAX_DIGITS_SENDER_HOSTNAME', `6')dnl dnl dnl максимальное кол-во цифр в младшей части $sender_address_domain dnl define(`confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN', `5')dnl dnl максимальное кол-во цифр в $sender_address_domain dnl define(`confMAX_DIGITS_SENDER_ADDRESS_DOMAIN', `6')dnl dnl dnl максимальное кол-во цифр в младшей части $sender_helo_name dnl define(`confMAX_DIGITS_SENDER_SUBHELO', `5')dnl dnl максимальное кол-во цифр в $sender_helo_name dnl define(`confMAX_DIGITS_SENDER_HELO', `6')dnl dnl dnl confMAX_DIGITS_SENDER_ADDRESS_DOMAIN = максимальное кол-во цифр в домене отправителя ($sender_address_domain) dnl confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN = максимальное кол-во цифр в младшей части домена отправителя ($sender_address_domain) dnl confMAX_DIGITS_SENDER_HOSTNAME = максимальное кол-во цифр в ptr записи рилея ($sender_host_name) dnl confMAX_DIGITS_SENDER_SUBHOSTNAME = максимальное кол-во цифр в младшей части ptr записи рилея ($sender_host_name) dnl confMAX_DIGITS_SENDER_HELO = максимальное кол-во цифр в helo ($sender_helo_name) dnl confMAX_DIGITS_SENDER_SUBHELO = максимальное кол-во цифр в младшей части helo ($sender_helo_name) dnl ifdef(`confCHECK_DIGITS', `ifelse(confCHECK_DIGITS, `WARN', `dnl ifdef(`confMAX_DIGITS_SENDER_SUBHOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в левой части sender hostname (до первой точки) warn condition = ${if match{${sg\ {${sg{$sender_host_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHOSTNAME+1),}\N}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits at the beginning of sender hostname ')') ifdef(`confMAX_DIGITS_SENDER_HOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_HOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в sender hostname warn condition = ${if match{${sg\ {$sender_host_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HOSTNAME+1),}\N}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits in sender hostname ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN), `1', `dnl', `dnl # Проверка количества цифр в левой части sender address domain (до первой точки) warn condition = ${if match{${sg\ {${sg{$sender_address_domain}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN+1),}\N}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender address domain log_message = There are too many digits at the beginning of sender address domain ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_DOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_DOMAIN), `1', `dnl', `dnl # Проверка количества цифр в sender address domain warn condition = ${if match{${sg\ {$sender_address_domain}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_DOMAIN+1),}\N}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender address domain log_message = There are too many digits in sender address domain ')') ifdef(`confMAX_DIGITS_SENDER_SUBHELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHELO), `1', `dnl', `dnl # Проверка количества цифр в левой части sender helo (до первой точки) warn condition = ${if match{${sg\ {${sg{$sender_helo_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHELO+1),}\N}{yes}{no}} condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} message = X-Warn-Digits: There are too many digits in sender helo log_message = There are too many digits at the beginning of sender helo ')') ifdef(`confMAX_DIGITS_SENDER_HELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_HELO), `1', `dnl', `dnl # Проверка количества цифр в sender helo warn condition = ${if match{${sg\ {$sender_helo_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HELO+1),}\N}{yes}{no}} condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} message = X-Warn-Digits: There are too many digits in sender helo log_message = There are too many digits in sender helo ')') ')') ifdef(`confCHECK_DIGITS', `ifelse(confCHECK_DIGITS, `REJECT', `dnl ifdef(`confMAX_DIGITS_SENDER_SUBHELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHELO), `1', `dnl', `dnl # Проверка количества цифр в левой части sender helo (до первой точки) warn set acl_m0 = no condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} set acl_m0 = ${if match{${sg\ {${sg{$sender_helo_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHELO+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits at the beginning of sender helo log_message = There are too many digits at the beginning of sender helo deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits at the beginning of sender helo ')') ifdef(`confMAX_DIGITS_SENDER_HELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_HELO), `1', `dnl', `dnl # Проверка количества цифр в sender helo warn set acl_m0 = no condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} set acl_m0 = ${if match{${sg\ {$sender_helo_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HELO+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender helo log_message = There are too many digits in sender helo deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits in sender helo ')') ifdef(`confMAX_DIGITS_SENDER_SUBHOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в левой части sender hostname (до первой точки) warn set acl_m0 = ${if match{${sg\ {${sg{$sender_host_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHOSTNAME+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits at the beginning of sender hostname deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits at the beginning of sender hostname ')') ifdef(`confMAX_DIGITS_SENDER_HOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_HOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в sender hostname warn set acl_m0 = ${if match{${sg\ {$sender_host_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HOSTNAME+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits in sender hostname deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits in sender hostname ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN), `1', `dnl', `dnl # Проверка количества цифр в левой части sender address domain (до первой точки) warn set acl_m0 = ${if match{${sg\ {${sg{$sender_address_domain}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits at the beginning of sender address domain log_message = There are too many digits at the beginning of sender address domain deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits at the beginning of sender address domain ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_DOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_DOMAIN), `1', `dnl', `dnl # Проверка количества цифр в sender address domain warn set acl_m0 = ${if match{${sg\ {$sender_address_domain}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_DOMAIN+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender address domain log_message = There are too many digits in sender address domain deny condition = ${if eq{$acl_m0}{yes}{yes}{no}} message = There are too many digits in sender address domain ')') ')') ifdef(`confCHECK_DIGITS', `ifelse_strstr(confCHECK_DIGITS, `GREYLIST', `dnl ifdef(`confMAX_DIGITS_SENDER_SUBHELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHELO), `1', `dnl', `dnl # Проверка количества цифр в левой части sender helo (до первой точки) warn set acl_m0 = no condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} set acl_m0 = ${if match{${sg\ {${sg{$sender_helo_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHELO+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits at the beginning of sender helo log_message = There are too many digits at the beginning of sender helo warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits at the beginning of sender helo;" ')') ifdef(`confMAX_DIGITS_SENDER_HELO', `ifelse(len(X`'confMAX_DIGITS_SENDER_HELO), `1', `dnl', `dnl # Проверка количества цифр в sender helo warn set acl_m0 = no condition = ${if match{$sender_helo_name}\ {\N^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]\N}{no}{yes}} set acl_m0 = ${if match{${sg\ {$sender_helo_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HELO+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender helo log_message = There are too many digits in sender helo warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits in sender helo;" ')') ifdef(`confMAX_DIGITS_SENDER_SUBHOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_SUBHOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в левой части sender hostname (до первой точки) warn set acl_m0 = ${if match{${sg\ {${sg{$sender_host_name}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_SUBHOSTNAME+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits at the beginning of sender hostname warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits at the beginning of sender hostname;" ')') ifdef(`confMAX_DIGITS_SENDER_HOSTNAME', `ifelse(len(X`'confMAX_DIGITS_SENDER_HOSTNAME), `1', `dnl', `dnl # Проверка количества цифр в sender hostname warn set acl_m0 = ${if match{${sg\ {$sender_host_name}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_HOSTNAME+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} condition = ${if eq{$sender_host_name}{}{no}{yes}} condition = ${lookup{$sender_host_name} wildlsearch{CONFDIR/access-relay-dialup}\ {${if or{\ {eq{$value}{ok}}\ {eq{$value}{accept}}\ }\ {yes}{no}}}\ {no}} set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender hostname log_message = There are too many digits in sender hostname warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits in sender hostname;" ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN), `1', `dnl', `dnl # Проверка количества цифр в левой части sender address domain (до первой точки) warn set acl_m0 = ${if match{${sg\ {${sg{$sender_address_domain}{\N^([^\.]+)(\..+)?\N}{\$1}}}\ {\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_SUBDOMAIN+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits at the beginning of sender address domain log_message = There are too many digits at the beginning of sender address domain warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits at the beginning of sender address domain;" ')') ifdef(`confMAX_DIGITS_SENDER_ADDRESS_DOMAIN', `ifelse(len(X`'confMAX_DIGITS_SENDER_ADDRESS_DOMAIN), `1', `dnl', `dnl # Проверка количества цифр в sender address domain warn set acl_m0 = ${if match{${sg\ {$sender_address_domain}{\N\D\N}{}}}\ {\N\d{eval(confMAX_DIGITS_SENDER_ADDRESS_DOMAIN+1),}\N}{yes}{no}} warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} hosts = +relay_from_hosts set acl_m0 = skip warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} authenticated = * set acl_m0 = skip warn condition = ${if eq{$acl_m0}{skip}{yes}{no}} message = X-Warn-Digits: There are too many digits in sender address domain log_message = There are too many digits in sender address domain warn condition = ${if eq{$acl_m0}{yes}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_DIGITS,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} There are too many digits in sender address domain;" ')') ')')