Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Видео Unix Интернет Почта Фильтрование соединений по имени хоста в sendmail RSS

Фильтрование соединений по имени хоста в sendmail

Текущий рейтинг: 5 (проголосовало 2)
 Посетителей: 1798 | Просмотров: 2205 (сегодня 0)  Шрифт: - +
 > LOCAL_CONFIG
 > Kdsl1                   regex -a@MATCH ([0-9].*){5,}

длинный регексп я пропустил, для примера остальных хватит

 > Kdsl3                   regex -a@MATCH [0-9a-f]{8,}
 >
 > Kdsl4                   regex -a@MATCH (^|\.)[0-9]

все регекспы с однотипными сообщениями можно объединить, указывая после 
@MATCH номер регекспа для вывода в сообщении об ошибке:

Kdsl1                   regex -a@MATCH.1 ([0-9].*){5,}
Kdsl3                   regex -a@MATCH.3 [0-9a-f]{8,}
Kdsl4                   regex -a@MATCH.4 (^|\.)[0-9]
Kdslpat sequence dsl1 dsl3 dsl4

 > LOCAL_RULESETS
 >
 > SLocal_check_relay
 >
 > R$*                     $: < $&{client_resolve} >

вот этого не нужно делать. я не имею ввиду поверку результатов 
резолвинга, я имею ввиду затирание передаваемых правилу данных.
возможно, позже будет добавлен feature/hack, в котором тоже будет 
правило Local_check_relay. и данные ему будут переданы совершенно левые

 > R<TEMP>                 $#error $@ 4.7.1 $: "450 Relaying temporarily 
denied.
 > R<TEMP>                 IP name lookup failed for " $&{client_addr}
 >
 > R<FAIL>                 $#error $@ 5.7.1 $: "550 Relaying denied. IP name
 > R<FAIL>                 lookup failed for " $&{client_addr}
 >
 > R<FORGED>               $#error $@ 5.7.1 $: "550 Relaying denied. IP name
 > R<FORGED>               forged (PTR and A records mismatch) for "
 > R<FORGED>               $&{client_addr}

лучше примерно так:
R $* $| $*		$: $1 $| $2 $| < $&{client_resolve} >
R $* $| $* $| <TEMP>	$#error $@ 4.7.1 $: "bla-bla" $&{client_addr}
R $* $| $* $| <FAIL>	$#error $@ 4.7.1 $: "bla-bla" $&{client_addr}
R $* $| $* $| <FORGED>	$#error $@ 4.7.1 $: "bla-bla" $&{client_addr}
R $* $| $* $| $*	$: $1 $| $2

 > R$*                     $: $(nondsl1 $&{client_name} $)
 >
 > R@MATCH                 $@ OK
 >
 > R$*                     $: $(nondsl2 $&{client_name} $)
 >
 > R@MATCH                 $@ OK

1. лучше не оканчивать проверку рилея при совпадении имени хоста с 
регекспом. ибо может быть потом нужно будет выполнить другого рода 
проверку в Local_check_relay


2. если не ломать передаваемые в правило данные, то ${client_name} уже 
есть в левой части


3. если необходимо не проводить проверку регекспами на основании 
проверки другими регекспами, то эти другие можно объединить в sequence. 
тогда при добавлении нового регекспа в исключения нужно будет делать 
изменения в одном месте конфига (при описании этого регекспа и включении 
его в sequence)


с учетом всего этого:

LOCAL_CONFIG

Knondsl1  regex -a@SKIP
(^|[0-9.-])(mail|mailrelay|mta|mx|relay|smtp)[0-9.-]
Knondsl2  regex -a@SKIP \.(hotmail\.com|rax\.ru|planeta)$
Knondsl sequence nondsl1 nondsl2

LOCAL_RULESETS

R $* $| $*       $: $1 $| $2 $| $(nondsl $1 $: CHECK $)

после этого в строки с исключаемыми именами хостов добавится третьим 
полем слово @SKIP. в остальных строках будет слово CHECK

 > R$*                     $: $(dsl1 $&{client_name} $)
 >
 > R@MATCH                 $#error $@ 5.7.1 $: "554 DSL or DialUp sender "
 > $&{client_name} " [" $&{client_addr} "] (1), please use Provider SMTP"
 >
 > R$*                     $: $(dsl2 $&{client_name} $)
 >
 > R@MATCH                 $#error $@ 5.7.1 $: "554 DSL or DialUp sender "
 > $&{client_name} " [" $&{client_addr} "] (2), please use Provider SMTP"

длинная череда таких вот проверок с единообразным сообщением клиенту 
заменяется одной проверкой:

# предварительно помеченные для проверки словом CHECK строки
# проверяем регекспом (серией регекспов)
R $* $| $* $| CHECK       	$: $1 $| $2 $| CHECK $| $(dslpat $1 $)
# возвращаем ошибку в случае совпадения с одним из регекспов
# номер в скобках будет браться из настроек регекспа
# (число после @MATCH.)
R $* $| $* $| CHECK $| @MATCH.$-
        $#error $@ 5.7.1 $: "554 bla-bla " ($3)
# убираем результат проверки, оставляя метку CHECK
# для проверки следующей серией регекспов
R $* $| $* $| CHECK $| $* 	$: $1 $| $2 $| CHECK

# после всех поверок восстанавливаем данные, переданные в правило
R $* $| $* $| $*		$: $1 $| $2

писал все это без тестов, прямо сюда. так что не исключены описки

Иcточник: http://www.opennet.ru  •  Опубликована: 05.03.2005
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:  


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.