Nästa Föregående Innehållsförteckning

6. GAMMALT AVSNITT: Sendmail+IDA

För stora sajter kan det vara värt att välja sendmail på grund av det är "otroligt lättanvänt" (väldigt relativ känsla när man känner till qmail) men du måste avgöra om du vill ha sendmail+IDA eller sendmail 8.x:

Kom ihåg: linuxnybörjare eller personer som vill ha säkerhet och/eller lätt konfiguration bör istället använda smail eller qmail, vilka är lättare att använda och säkrare.

6.1 Installation av källkod

Om din distribution inte innehåller ett installeringsfärdigt paket med sendmail (.rpm för RedHat, Caldera och Suse, .deb för Debian) så ladda hem källkoden och kör:

Editera denna fil och byt ut hostname, aliases och smarthost mot de som är korrekta för din sajt. Standardfilen är för en endast-uucp sajt som har domäniserade huvuden och som 'pratar' med en smart värd. Kör sedan make ditt_datornamn.cf och flytta resultatet till /etc/sendmail.cf

Du kommer att behöva ändra lite grann i filerna så att Makefile fungerar. Ändra bara i .m4 filen, kör make sendmail.cf och börja testa det.

Du bör också updatera din version till åtminstonde 5.67b eftersom det finns ett elakt säkerhetshål i 5.67a och tidigare. En annan bra sak är att, om du har mail.debug satt och du kör syslogd, så kommer dina inkommande och utgående e-postmeddelanden att loggas. Se filen /etc/syslog.conf för mer information.

Källkoden för sendmail+IDA finns på ftp://vixen.cso.uiuc.edu. Det krävs inga patchar om du kör en kärna som 1.00.

Om du kör en kärna >1.1.50, så kommer du att få skoj med att ta bort de flesta Linux-specifika patchar som nu finns i vanilla källkoden. (Jag *sade* ju att sendmail+IDA bara var för gamla kärnor :-)

Det är extremt självklart var detta behövs: kör bara make och när det blir fel, gå till den raden i källkoden och kommentera bort den Linux-specifika koden som finns där.

Om du skall köra sendmail+IDA så rekommenderar jag starkt att du tar versionen sendmail5.67b+IDA1.5 eftersom alla nödvändiga Linux-specifika patchar nu finns i vanilla källkoden och flera säkerhetsläckor som FANNS i de gamla versionerna har täppts till.

Nu är linux kärnan på 2.0 och du bör välja sendmail 8.x istället för sendmail+IDA.

6.2 Filen sendmail.m4

Sendmail+IDA kräver att du sätter upp en sendmail.m4 fil istället för att ändra direkt i filen sendmail.cf. Det fina med detta är att det är enkelt att sätta upp konfigurationer som är extremt svåra (om inte totalt omöjliga för de flesta) att sätta upp korrekt i smail eller traditionell sendmail.

En sendmail.m4 fil som motsvarar ovanstående exempel med smail ser ut som följer:

  dnl #------------------ SAMPLE SENDMAIL.M4 FILE ------------------
  dnl #
  dnl # (the string 'dnl' is the m4 equivalent of commenting out a line)
  dnl #
  dnl # you generally don't want to override LIBDIR from the compiled in paths
  dnl #define(LIBDIR,/usr/local/lib/mail)dnl    # where all support files go
  define(LOCAL_MAILER_DEF, mailers.linux)dnl    # mailer for local delivery
  define(POSTMASTERBOUNCE)dnl                   # postmaster gets bounces
  define(PSEUDODOMAINS, BITNET UUCP)dnl         # don't try DNS on these
  dnl #
  dnl #-------------------------------------------------------------
  dnl #
  dnl # names we're known by
  define(PSEUDONYMS, myhostname.subdomain.domain myhostname.UUCP)
  dnl #
  dnl # our primary name
  define(HOSTNAME, myhostname.subdomain.domain)
  dnl #
  dnl # our uucp name
  define(UUCPNAME, myhostname)dnl
  dnl #
  dnl #-------------------------------------------------------------
  dnl #
  define(UUCPNODES, |uuname|sort|uniq)dnl       # our uucp neighbors
  define(BANGIMPLIESUUCP)dnl                    # make certain that uucp
  define(BANGONLYUUCP)dnl                       #  mail is treated correctly
  define(RELAY_HOST, my_uucp_neighbor)dnl       # our smart relay host
  define(RELAY_MAILER, UUCP-A)dnl               # we reach moria via uucp
  dnl #
  dnl #--------------------------------------------------------------------
  dnl #
  dnl # the various dbm lookup tables
  dnl #
  define(ALIASES, LIBDIR/aliases)dnl            # system aliases
  define(DOMAINTABLE, LIBDIR/domaintable)dnl    # domainize hosts
  define(PATHTABLE, LIBDIR/pathtable)dnl        # paths database
  define(GENERICFROM, LIBDIR/generics)dnl       # generic from addresses
  define(MAILERTABLE, LIBDIR/mailertable)dnl    # mailers per host or domain
  define(UUCPXTABLE, LIBDIR/uucpxtable)dnl      # paths to hosts we feed
  define(UUCPRELAYS, LIBDIR/uucprelays)dnl      # short-circuit paths
  dnl #
  dnl #--------------------------------------------------------------------
  dnl #
  dnl # include the 'real' code that makes it all work
  dnl # (provided with the source code)
  dnl #
  include(Sendmail.mc)dnl                         # REQUIRED ENTRY !!!
  dnl #
  dnl #------------ END OF SAMPLE SENDMAIL.M4 FILE -------
 

6.3 Att definiera en lokal e-postutdelare

Till skillnad från de flesta Unixdistributioner, så har inte Linux en lokal e-postutdelare som standard. Men deliver eller procmail är vanligtvis installerat, så ingen komplexitet kommer att läggas till denna redan komlexa konfiguration. Jag rekommenderar att använda de vanligt förekommande deliver eller procmail programmen, som kan vara valbara paket i en Linuxdistribution.

För att göra detta så måste du definiera en LOCAL_MAILER_DEF i filen sendmail.m4 som pekar på en fil som ser ut som följer:

  # -- /usr/local/lib/mail/mailers.linux --
  #     (local mailers for use on Linux )
  Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u
  Mprog,  P=/bin/sh,       F=lsDFMeuP,   S=10, R=10, A=sh -c $u

Det finns även inbyggt standard för deliver i filen Sendmail.mc som inkluderas i filen sendmail.cf. För att använda det så skall du inte använda filen mailers.linux utan istället definiera följande i din sendmail.m4:

   dnl --- (in sendmail.m4) ---
   define(LOCAL_MAILER_DEF, DELIVER)dnl       # mailer for local delivery

Tyvärr så förutsätter Sendmail.mc att deliver är installerat i /bin, vilket inte är fallet med Slackware 1.1.1 (som installerar det i /usr/bin). I så fall måste du antingen göra en symbolisk länk eller kompilera om deliver från källkoden så att det hamnar i /bin. Notera att procmail generellt är bättre än deliver, till exempel för filtrering av e-post.

6.4 Sendmail+IDA dbm tabeller

Att sätta upp speciellt uppträdande för sajter eller domäner görs genom ett antal dbm tabeller istället för att ändra direkt i filen sendmail.cf.

Se Julinumret 1994 av Linux Journal (om du fortfarande kan hitta det :-), dokumentationen i källkoden eller i sendmail kapitlet i Networking Administration Guide för mer detaljer.

6.5 Så vilka poster krävs?

När man inte använder någon av de valbara dbm tabellerna så skickar sendmail e-post via RELAY_HOST och RELAY_MAILER som är definierade i filen sendmail.m4 som används för att generera sendmail.cf. Det är lätt att gå förbi det genom poster i domaintable eller uucpxtable.

En generell sajt som finns på Internet och förstår DNS, eller en som är endast-uucp och vidarebefodrar all e-post via UUCP genom en smart RELAY_HOST, behöver antagligen inte specificera några tabellposter alls.

I stort sett alla system bör sätta makrona DEFAULT_HOST och PSEUDONYMS, vilka definierar det kanoniska namnet på sajten och alias som den är känd som.

Om allt du har är en vidarebefodringsdator och vidarebefodringsutdelare så behöver du inte sätta dessa standardvärden eftersom det fungerar automagiskt. UUCP-datorer behöver antagligen också sätta UUCPNAME till dess officiella uucp-namn.

De behöver också sätta RELAY_MAILER och RELAY_HOST vilket sätter på 'smarthost' routing genom en vidarebefodrande e-post utdelare.

Transportprotokollet som skall användas definieras i RELAY_MAILER och skall vanligtvis vara UUCP-A för UUCP-sajter. Om din sajt är endast-smtp och förstår DNS så skall du ändra RELAY_MAILER.

Om du har en SLIP-sajt så kan du göra på det enkla sättet och bara vidarebefodra all utgående e-post till din leverantör som sedan kan hantera den. För att göra så så skall du definiera ISOLATED_DOMAINS och VALIDATION_DOMAINS till din domän. Du skall även definiera RELAY_HOST till att vara din leverantör och RELAY_MAILER till att vara TCP. Självklart skall du fråga om lov innan du ställer in ett annat system till att vara din RELAY_HOST.

6.6 Sendmail 8.x

Sendmail 8.7.x från Berkeley var den senaste stora revisionen efter sendmail5. Den hade underbart inbyggt stöd för linux: bara make linux och allt var klart.

Du klarar dig antagligen bäst genom att ta en av de olika binärdistributionerna från något av Linuxarkiven istället för att kämpa med saker som Berkeley dbm själv.

Det finns en bra distribution av sendmail 8.6.12 från Jason Haar (j.haar at lazerjem.demon.co.uk) på sunsite.unc.edu i /pub/Linux/system/Mail/delivery/sendmail-8.6.12-bin.tgz som innehåller dokumentationen från källkoden och en väldigt trevlig snabbeskrivning av hur man kör sendmail v8 för vanliga konfigurationer.

Med sendmail v8 vill man konfigurera så lite som möjligt för att få jobbet gjort. Följande är ett exempel som iallafall skall få dig på rätt väg.

6.7 Exempel på 8.7.x mc-fil

Liksom sendmail+IDA så använder sendmail v8 m4 till att processa en konfigurationsfil till en sendmail.cf som används av sendmail. Följande är den mc-fil som jag använder för närvarande på min sajt (ppp till Internet för utgående e-post, uucp för inkommande e-post).

        dnl divert(-1)
        #---------------------------------------------------------------------
        #
        # this is the .mc file for a linux host that's set up as follows:
        #
        #       - connected to Internet for outbound mail (ppp here)
        #       - connected via UUCP for incoming mail
        #       - domainized headers
        #       - no local mailer (use 'deliver' instead)
        #       - no DNS running so don't canonicalize outgoing via DNS
        #       - all non-local outbound mail goes to the RELAY_HOST over smtp
        #           (we run ppp and let our service provider do the work)
        #
        #                                       vds 3/31/95
        #
        #---------------------------------------------------------------------
        include(`../m4/cf.m4')
        VERSIONID(`linux nodns relays to slip service provider smarthost')dnl
        Cwmyhostname.myprimary.domain myhostname.UUCP localhost
        OSTYPE(linux)
        FEATURE(nodns)dnl
        FEATURE(always_add_domain)dnl
        FEATURE(redirect)
        FEATURE(nocanonify)
        dnl MAILER(local)dnl
        MAILER(smtp)dnl
        MAILER(uucp)dnl
        define(`RELAY_HOST', smtp:my.relay.host.domain)
        define(`SMART_HOST', smtp:my.relay.host.domain)
        define(`UUCP_RELAY', smtp:my.relay.host.domain)
        define(`LOCAL_MAILER_PATH', `/bin/deliver')
        define(`LOCAL_MAILER_ARGS', `deliver $u')

6.8 Sendmail v8 skillnader

Det finns några skillnader. Hittills har jag hittat följande:

Istället för runq så skall man köra sendmail -q för att köra e-postkön!

6.9 Lokala e-postutdelare

Till skillnad från de flesta operativsystem så hade Linux inte 'inbyggd' e-post. Du var tvungen att ha ett program som kunde dela ut den lokala e-posten, till exempel lmail, procmail eller deliver.

Men, alla nyare distributioner inkluderar en lokal utdelare nu.

Dokumentation för hur man använder de olika finns i binärversionen av sendmail5.67b+IDA1.5 (på sunsite) som nämns ovan.


Nästa Föregående Innehållsförteckning