Kir Kolyshkin (k001) wrote,
Kir Kolyshkin
k001

о sendmail, девочках и лицах нетрадиционной сексуальной ориентации

Не помню, откуда я это взял, наверное, где-то прочитал. Считается, если админ-юниксоид умеет настраивать sendmail, то он уже умеет всё. Я сам сендмейл немножко настраивал, поэтому охотно верю.

Я даже однажды помог одной девочке устроиться на работу к нам, так как она, в частности, сообщила, что умеет настраивать sendmail (не удосужившись проверить сие утверждение, из-за чего мне стыдно до сих пор; впрочем, я думал, что это сделают люди, которые берут её на работу, а они, видимо, не справились — уволили её только через несколько лет, или она сама ушла, не помню уже). Но речь не о девочке, речь о сендмейле.

Сендмейл — одна из самых древних UNIX-программ, написанная к тому же человеком с нетрадиционной сексуальной ориентацией (это не шутка). Впрочем, речь сейчас не о сексуальной ориентации.

Синтаксис у конфигурационных файлов sendmail ужасный. Правда, потом это дело несколько поправили, использовав препроцессор m4, и администратор, по задумке, теперь пишет, используя макросы, а уж потом m4 раскрывает это в обычный конфиг сендмейла.

Так вот, не всегда удаётся использовать эти макросы, иногда приходится пользоваться «родными» заклинаниями sendmail'a. Мне захотелось отсечь часть спама, в котором «на конверте» неправильно написан Message-Id. Под катом можно посмотреть, что я вписал в конфиг. Женщинам, детям, людям неуравновешенным, впечатлительным и склонным к панике лучше не смотреть.


dnl # Message-Id checks taken from
dnl # http://www.doorbot.com/guides/sendmail/antispam/

LOCAL_CONFIG
Kstorage macro

LOCAL_RULESETS

# Check for valid Message ID
# Check message id for valid hostname (after @)
HMessage-Id:    $>CheckMessageId

SCheckMessageId
# Record the presence of the header
R$*             $: $(storage {MessageIdCheck} $@ OK $) $1
# check for local Message-Id: header for non-local headers
# Put client hostname in an initial lookup focus
# anything      ->         < lookup focus >    anything
R$*                     $: < $&{client_name} > < $1 >
# test if client hostname in lookup focus ends with one of our
#       domains, $=m, if so the message is locally generated and all
#       Message-Id: header are OK
R< localhost > < $  >           $@ OK
# Check for myhostname.mydomain.com
#R<$ > <$ >     $: <$1 . $m> <$2>
#R< $j > <$ >   $@ OK
# reject all other locally generated Message-Id: headers because
#       client hostname is not local
R< $  > < $  @ $j >     $#error $: «553 Delivery blocked; HMessage-ID: indicates local generation but client is not local (may be forged)»
# strip trash lookup focus leaving the original header
R< $  > < $  >          < $2 >

# Check MessageID domain name… accept if it is a subdomain or same domain as from address
#R< $  >                < $1 > < $&f >
#R< $  > < $  @ $  >    < $1 > < $3 >

# now do the normal header check from the sendmail 8.9.1 cf/README file
# This will break mail from poorly configured, but non spamming, mail servers (it will also allow spam through)
#R< $  @ $  . $  >      $@ OK
# Allow format of <lotsoftext@name>
#R< $  @ $  >           $@ OK

# Check MessageID for blocked domain names
R< $  @ $  >            $: $(access $2 $: OK $)
ROK$*                   $@ OK
RREJECT$*               $#error $: «553 Delivery blocked; HMessage-ID: failed access database lookup»
RDISCARD$*              $#discard $: discard
RERROR:$*               $#error $: $1
#R$*                    $#error $@ 5.7.1 $: $1
# In case something gets through, check it to verify the format (again)
#R< $  @ $  . $  >      $@ OK
R< $  @ $  >            $@ OK
# Valid messageIDs should not get this far
R$*                     $#error $: «553 Delivery blocked; HMessage-ID: indicated invalid format»


Возвращаясь к девочке. Если кто знает девочку, которая такое может написать (ну или хотя бы прочитать — по сложности это почти одинаково) — сообщите мне.

А в целом, если разобраться, всё это не так уж и страшно. Но разбираться придётся долго. Поэтому многие люди используют другие почтовые сервера, к примеру, exim имеет очень даже понятный формат конфигов.
Tags: killallhumans, linux, wtf
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 66 comments