Назад | Перейти на главную страницу

Запретить пользователю отправлять электронную почту извне в SENDMAIL

У меня есть сервер CentOS с установленным Sendmail, и я использую Fetchmail для получения почты. Мой почтовый сервер работает отлично, но теперь мне нужно запретить пользователю отправлять электронные письма извне.

Как мне разрешить этому пользователю отправлять электронную почту в локальной сети (в пределах адреса электронной почты того же домена), но заблокировать им отправку электронной почты во внешний мир?

Потому что то, что вы хотите, является более общим, чем то, что ОСОБЕННОСТЬ (compat_check) есть, сначала убедитесь, что он не включен в вашем /etc/mail/sendmail.mc file. Затем вы можете написать свою собственную версию check_compat (обратите внимание на перестановку слов здесь). В книга sendmail (4e) есть решение вашего вопроса на страницах 259 и 260.

Вот второй: в конец файла sendmail.mc добавьте следующие строки

LOCAL_CONFIG
Kput macro
D{put1}empty1
D{put2}empty2

LOCAL_RULESETS
STranslate
R$* $$| $*    $: $1 $| $2

Scheck_compat
R$* $| $*               $: $1 $| $>canonify $2
R$* $| $*               $: $(put {put2} $@ $2 $) $1
R$*             $: $>canonify $1
R$*             $: $(put {put1} $@ $1 $)
R$*             $: $&{put1} $| $&{put2}
# Now we can filter on sender and recipient
Ruser < @ $=w . > $| $* < $=w . >        $#OK
Ruser < @ $=w . > $| $*                  $#discard $: $2

Вот что происходит: Kput macro Строка определяет карту, которая будет использоваться, когда мы сохраняем определенные значения в макросах. Макросы, которые мы собираемся использовать, определены в следующих строках, и они put1 и put2 с некоторыми общими значениями по умолчанию (empty1 и empty2), которые будут использоваться при отладке.

когда check_compat называется это был единственный аргумент в виде sender@address $| recipient@address. Нам необходимо канонизировать эти адреса, что в нашем случае означает приведение их к форме user < @ address . >. Вы почти всегда можете канонизировать адреса с помощью sendmail, прежде чем делать что-либо еще. Первые две строки check_compat заниматься канонизацией адреса получателя и помещением его в {put2} макрос.

Теперь наша рабочая область (то есть строка, с которой работает остальной набор правил) имеет только адрес отправителя, и мы канонизируем его. Это означает, что если check_compat останавливается на пятой строке, его вывод будет таким:

sender < @ address . > $| recipient < @ address . >

Поэтому теперь мы готовы проверить любую комбинацию, которую захотим. Локальные пользователи в вашей системе имеют вид user < @ $=w .>. В $=w макрос содержит значение вашего доменного имени, localhost, имени хоста, все, что должно считаться локальным, включая значения в /etc/mail/local-host-names. Таким образом, эта строка указывает sendmail, что если user (где "пользователь" следует заменить на имя пользователя, о котором идет речь) отправляет электронное письмо любому локальному пользователю (в этом смысл $* < @ $=w . >) принять это письмо и продолжить все остальные действия по фильтрации. Но если указанный пользователь пытается отправить почту в другое место, молча отклоните это.

После того, как вы закончите редактирование sendmail.mc тебе нужно бежать /etc/mail/make строить sendmail.cf и бег service sendmail restart для перезапуска sendmail с новыми изменениями. Имейте в виду, что левая часть правил отделяется от правой табуляцией, а не пробелами. Так не копировать-вставить код. Напечатайте от руки.

Выше есть еще одно правило, и это Translate. В тестовом режиме вы не можете использовать $| прямо. Поэтому, если вы хотите протестировать свои правила перед запуском в производство, вы должны использовать его:

root@machine # sendmail -bt
> Translate,check_compat sender@address $| recipient@address

и посмотрим, что произойдет.