Есть ли способ переместить Rewrite Roules из файла sendmail.cf? С одной стороны, документация sendmail рекомендует вносить изменения только в файл sendmail.mc, но все правила перезаписи находятся в файле .cf. Я предполагаю, что все изменения правил перезаписи в файле .cf будут потеряны при следующем создании файла .cf из .mc.
В основном sendmail.cf и правила перезаписи считаются настолько причудливыми и запутанными, что очень немногие с ними возятся; Весь механизм sendmail.mc/M4 обеспечивает более "удобный" интерфейс для настройки sendmail. Большинству людей следует придерживаться исключительно механизма sendmail.mc/M4 и никогда не изменять напрямую sendmail.cf, включая создание измененных правил перезаписи, вообще.
Если механизм sendmail.mc/M4 не совсем подходит для вас, и вы хотите «настроить» несколько правил в sendmail.cf, вы можете сделать это с помощью возможностей LOCAL_NET_CONFIG и LOCAL_RULESETS в sendmail.mc/M4 механизм. Если вы хотите вносить основные модификации непосредственно в sendmail.cf, возможно, даже полностью отказаться от механизма sendmail.mc/M4, вы выходите за рамки того, что нужно сделать 99,44% администраторов, и вам может потребоваться некоторое пользовательское редактирование файлов Makefile и / или сценарии оболочки для реализации желаемой схемы. (Помните, что в некоторых системах service sendmail start
вызовет Makefile, который выполняет механизм sendmail.mc/M4, поэтому перезапись sendmail.cf будет происходить чаще, чем вы можете ожидать.)
(Честно говоря, я тоже иногда нахожу этот двухуровневый косвенный интерфейс внешнего интерфейса немного неудобным и разочаровывающим: иногда я знаю, чего хочу, и знаю, как заставить sendmail.cf это делать ... но я не могу придумать «правильный» способ сказать это с помощью механизма sendmail.mc/M4. И советы для разных версий BIND иногда скорее вводят в заблуждение, чем полезны. Что часто срабатывает, так это использование нескольких слов из желаемого sendmail .cf в команде grep, чтобы активировать "правильную" функцию sendmail.mc/M4: grep "desired_sendmail.cf_words" /usr/share/sendmail.cf/*/*
.)
В README sendmail (возможно, / usr / share / sendmail-cf / README) вы можете заставить механизм M4 sendmail.mc-> sendmail.cf вставлять произвольные дополнительные правила перезаписи буквально, указав LOCAL_NET_CONFIG и / или LOCAL_RULESET (и LOCAL_RULE_3, LOCAL_RULE_3, LOCAL_RULE). , LOCAL_RULE_1 и LOCAL_RULE_2) в sendmail.mc. Например, чтобы вставить правило перезаписи доставки:
LOCAL_NET_CONFIG
# Add/insert my own additional rewrite-rule(s)
R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3
или добавить новый набор правил перезаписи:
LOCAL_RULESETS
# Add one or more new rewrite-rulesets (subroutines) [new name]
SLocal_trust_auth
R$* $: $&{auth_authen}
Rsmmsp $# OK
или добавить больше правил перезаписи в конец существующего набора правил перезаписи:
LOCAL_RULESETS
# Append to one or more existing rewrite-rulesets (subroutines) [existing name]
SParse1
R$* $: $&{auth_authen}
Rsmmsp $# OK
тем не мение, этот механизм предназначен для "настройки" существующей структуры правил перезаписи, но не для внесения совершенно произвольных изменений в правила перезаписи. Правила, использующие LOCAL_NET_CONFIG, всегда будут вставляться в одно и то же место: на полпути через набор правил 0. И они не могут сильно отличаться от того, что было раньше, так что доставка больше не будет приблизительно соответствовать предположениям, сделанным существующей функцией «синтаксического анализа». Новые наборы правил (подпрограммы) из LOCAL_RULESETS будут либо вызываться только вашими вставленными правилами, либо вызываться непосредственно самой программой sendmail в зависимости от конкретных (и, возможно, неясных) имен подпрограмм и спецификаций sendmail.mc FEATURE. И расширения к существующим наборам правил (подпрограмм) из LOCAL_RULESET могут добавлять новые функции, но, вероятно, не могут изменять существующие функции, поскольку совпадение и «возврат» существующим более ранним правилом прекратит выполнение этого набора правил до того, как будут достигнуты ваши дополнительные правила. Тем не менее, этого может быть достаточно для того, что вы хотите.
Если вы это сделаете, используйте sendmail -bt -Ctrial_sendmail.cf_file -d21.15
механизм тестирования, чтобы убедиться, что он ведет себя так, как вы предполагаете. Помните, что ваш «стиль» должен заключаться в том, чтобы составлять ваши новые правила таким образом, чтобы они легко вписывались в существующую структуру набора правил (а не вносить произвольные изменения с небольшим учетом существующей структуры); это скорее похоже на добавление новой функции в существующий код, который был кем-то структурирован. Распределенные правила перезаписи очень хороши для обработки не только основного поведения, но и крайних случаев (MX для отдельных хостов? Маскарадные исключения? Соединение UUCP? Псевдонимы? И т. Д.?); надеюсь, ваши добавленные правила будут такими же исчерпывающими.
sendmail при запуске читает sendmail.cf. Таким образом, sendmail.cf должен существовать и содержать полный набор правил и переменных, которые необходимо настроить в соответствии с вашими требованиями для рабочей установки. Наиболее распространенный способ создания sendmail.cf - поддержание более простого файла sendmail.mc с последующим использованием м4 "скомпилировать" sendmail.mc в sendmail.cf. Итак, да, можно разбить файл sendmail.mc на части, а затем, осторожно выполнив m4, создать (единственный) sendmail.cf
Я очень рекомендую летучая мышь если вы хотите повозиться с sendmail.mc и .cf. Для подхода, который обходит m4 и sendmail.mc, вы можете посмотреть Теория и практика Sendmail но для большинства людей это может оказаться излишним.