vsechny e-maily

Lubos Kaspar lk na cnb.cz
Středa Září 17 13:51:03 CEST 2003


> Date: Wed, 17 Sep 2003 11:12:50 +0200 (=?iso-8859-2?Q?St=F8edn=ED_Evropa_=28letn=ED__=E8as=29?=)
> From: Petr Simek <psimek na jcu.cz>
> To: sendmail na linux.cz
> Subject: Re: vsechny e-maily
> 
> On Wed, 17 Sep 2003, mardon wrote:
> 
> > 1.e-mail vsem uzivatelum najednou
> > 2. aby tento e-mail byl pristupny pouze z vnitrni site
> > 3. aby pri pridani uzivatele do linuxu se tento automaticky zaradil
> 
> Nepouzil bych na to procmail ale asi spis shell skript spousteny pres
> .forward , ktery by zkontroloval odkud to je. Pozor nekdy byva u spamu
> a viru domena ve From sfalsovana podle cilovou, takze je nutne projit
> vsechny radky Received: from a z hranatych zavorek spis kontrolovat IP,
> nemela by tam byt jina nez z vasi lokalni site.

Myslim, ze ucelnejsi je delat ochranu hned na vstupnim MTA (internetovy
MX-server). V takovych pripadech je treba kontrolovat relay - v sendmailu je
na to vhodne misto v rulesetu check_rcpt - spolu s vyuzitim $&{client_addr},
kde lze asi IP-adresy z intranetu (RFC 1918) snadno odlisit od internetovych.
Pro jednoduchost je vhodne e-adresy, ktere nemaji byt dostupne z Internetu,
nejak formalizovat - napr. pri oznaceni uvodnim "+" by to mohlo vypadat treba
takto:

: Scheck_rcpt
: R<>			$@ ok	bounce
: R$*			$: $1 $| $(dequote "" $&{client_addr} $)	get client addr
: R$* $|		$@ ok	localclient
: R$* $| 0		$@ ok	localclient
: R$* $| 127.0.0.1	$@ ok	localhost
: R$* $| 10.$-.$-.$-	$@ ok	intranet 1
: R$* $| 172.16.$-.$-	$@ ok	intranet 2
: #... event. more intranets
: R$* $| $*		$: $>Parse0 $>canonify $1	parse address (older sendmails: canonify=3)
: R+ $* < $=w . >	$#error $@ 5.1.0 $: "Addresses with initial plus not available"

> Pokud by byl mail seznan
> lokalnim tak vytahnout vsechny platne uzivatele (ucty ktere patri osobe)
> a na tento seznam tu zpravu preposlat. To preposlani napr. pres mail
> s tim ze tam bude videt ta puvodni hlavicka, pripadne pri parsovani te
> zpravy si schovat aspon Subject a pak ho vyplnit aby odpovidal.
> Vyhodou je ze by se nemusel udrzovat ten aktualni seznam uctu pro alias.

Na to vse je ovsem treba formalni prijimaci ucet, coz asi nemusi byt vzdy
vhodne. Aby se i bez toho pri pridani uctu tento pridal do aliasu,
asi by bylo slo udelat wrapper na program useradd, ktery by nejdriv
zavolal /usr/sbin/useradd a pri uspesnem provedeni by udelal update aliasu
(vcetne "sendmail -bi"); podobne pro userdel.

Jednodussi je ovsem nejake generovadlo aliasu dat do skriptu
a ten zaradit do crontab (spoustet treba kazdy prac. den rano) a v pripade
mimoradne nutnosti spustit rucne - napr. maji-li personalni ucty UID>10000
a (pro jednoduchost prikladu) je takovy aspon jeden a neni jich prilis mnoho
a zadne jine aliasy nejsou:

: #!/bin/ksh
: PATH=/usr/sbin:/usr/bin; umask 2
: awk -F: 'BEGIN {printf "+all"; d=":"}
: 	$3>10000 {printf "%s %s",d,$1; d=","}
: 	END {print ""}' /etc/passwd >/etc/mail/aliases &&
: sendmail -bi
--
Lubos Kaspar


Další informace o konferenci Sendmail