28.5. A hibák elhárítása

28.5.1. Miért kell teljes hálózati neveket megadni a gépemen?
28.5.2. A sendmail szerint “a levél a saját farkába harap”
28.5.3. Hogyan tudok levelező szervert futtatni egy betárcsázós PPP kapcsolat esetében?
28.5.4. Miért kapok folyton “Relaying Denied” hibát, amikor más gépekről küldök levelet?

28.5.1. Miért kell teljes hálózati neveket megadni a gépemen?

Előfordulhat, hogy a hivatkozni kívánt gép valójában egy másik tartományban szerepel. Például, ha az ize.mize.edu gépen vagyunk és a vagyis nevű gépet akarjunk innen elérni a mize.edu tartományban, akkor a teljes hálózati nevével, vagyis a vagyis.mize.edu néven kell rá hivatkoznunk, nem pedig egyszerűen csak vagyis néven.

Régebben egyébként ezt a BSD-típusú BIND névfeloldók megengedték. A FreeBSD jelenlegi változatai azonban már olyan BIND verziót tartalmaznak, amelyek alapértelmezés szerint már nem engedik a tartományunkon kívüli relatív nevek használatát. Tehát a vagyis vagy a vagyis.ize.mize.edu gép lesz, vagy a legfelső, gyökér tartományban keresi a rendszer.

Ez eltér a korábbi viselkedéstől, ahol a keresés folytatódott a vagyis.mize.edu és vagyis.edu tartományokban is. Az RFC 1535 elolvasásából ki fog derülni, hogy miért nem vált be ez a gyakorlat és hogy miért tekinthető még akár biztonsági résnek is.

Ezt a problémát egyébként megoldhatjuk annyival, hogy az /etc/resolv.conf állományba a

search ize.mize.edu mize.edu

sor helyett a

domain ize.mize.edu

sort írjuk be. Arra viszont ügyeljünk, hogy a keresési rend ne lépje át a “helyi és nyilvános adminisztráció között meghúzódó határt”, ahogy azt az RFC 1535 nevezi.

28.5.2. A sendmail szerint “a levél a saját farkába harap”

Ezt a sendmail gyakran ismértelt kérdései között a következőképpen válaszolták meg:

A következő hibaüzenetet kapom:

553 MX list for taromány.net points back to felé.tartomány.net
554 felhasználó@tartomány.net... Local configuration error

Hogyan oldható meg ez a probléma?

Azt kértük, hogy a tartományba (például tartomány.net) küldött levél
az MX rekord felhasználásával egy adott gépre legyen átirányítva
(ebben az esetben ez a felé.tartomány.net), de a továbbítást végző gép
nem ismeri fel magát a tartomány.net címen. Vegyük fel a tartomány.net
tartományt az /etc/mail/local-host-names állományba [melyet a 8.10 előtti
verziókban /etc/sendmail.cw állománynak hívnak] (ha a
FEATURE(use_cw_file) beállítást használjuk) vagy tegyük hozzá a
“Cw tartomány.net” sort az /etc/mail/sendmail.cf
állományhoz.

A sendmail GYIK a http://www.sendmail.org/faq/ címen található meg (angolul) és mindenképpen javasolt elolvasni, ha “fel szeretnénk piszkálni” a levelező rendszerünk beállításait.

28.5.3. Hogyan tudok levelező szervert futtatni egy betárcsázós PPP kapcsolat esetében?

Egy helyi hálózaton levő FreeBSD-s gépet akarunk tehát az internethez kapcsolni. Ez a FreeBSD-s gép lesz a helyi hálózat leveleket továbbító átjárója. A PPP kapcsolat nem dedikált.

Legalább két módon meg tudjuk oldani. Az egyik módszer szerint az UUCP használatára lesz szükségünk.

A másik módszer szerint szereznünk kell egy éjjel-nappal üzemelő internetes szervert, amely majd szolgáltatja a másodlagos MX rekordot a tartományunkhoz. Például, ha a cégünk tartománya a cég.hu és az internet-szolgáltatónk a szolgáltató.net névre beállította a tartományunkhoz a másodlagos MX rekordokat:

cég.hu.          MX        10      cég.hu.
                 MX        20      szolgáltató.net.

Végső címzettként csak egy gépet kell megadni (az /etc/mail/sendmail.cf állományba a cég.hu címhez tegyük hozzá a Cw cég.hu sort).

Amikor a leveleket küldeni akaró sendmail megpróbál kézbesíteni, először hozzánk (cég.hu) próbál csatlakozni a modemes összeköttetésen keresztül. Ez valószínűleg időtúllépéssel befejeződik, mivel nem vagyunk fenn minden pillanatban a neten. A sendmail ekkor automatikusan a másodlagos MX rekord által megadott címre küldi a levelet, tehát a szolgáltatónkhoz (szolgáltató.net). Ez a másodlagos MX cím próbálja majd időlegesen elérni a gépünket és kézbesíteni a leveleket az elsődleges MX rekord által megadott gépre (cég.hu).

A bejelentkezéskor ezért egy hasonló szkriptet kell lefuttatnunk:

#!/bin/sh
# Tegyük a /usr/local/bin/pppmyisp állományba:
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppmyisp

Ha készítünk egy külön bejelentkező szkriptet a felhasználók számára, akkor a sendmail -qRcég.hu parancsot is használhatjuk a fenti szkript helyett. Ezzel a cég.hu sorában található összes levél azonnal feldolgozásra kerül.

A helyzetet így lehetne még jobban pontosítani:

Az alábbi üzenet a FreeBSD Internet service provider's levelezési lista archívumából származik.

> we provide the secondary MX for a customer. The customer connects to
> our services several times a day automatically to get the mails to
> his primary MX (We do not call his site when a mail for his domains
> arrived). Our sendmail sends the mailqueue every 30 minutes. At the
> moment he has to stay 30 minutes online to be sure that all mail is
> gone to the primary MX.
>
> Is there a command that would initiate sendmail to send all the mails
> now? The user has not root-privileges on our machine of course.

In the “privacy flags” section of sendmail.cf, there is a
definition Opgoaway,restrictqrun

Remove restrictqrun to allow non-root users to start the queue processing.
You might also like to rearrange the MXs. We are the 1st MX for our
customers like this, and we have defined:

# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue

That way a remote site will deliver straight to you, without trying
the customer connection.  You then send to your customer.  Only works for
“hosts”, so you need to get your customer to name their mail
machine “customer.com” as well as
“hostname.customer.com” in the DNS.  Just put an A record in
the DNS for “customer.com”.

Az idézet fordítása:

> Másodlagos MX rekordot biztosítunk az ügyfeleinknek.  Az ügyfelek ezután automatikusan
> csatlakoznak naponta akár többször is a szolgáltatásunkhoz és leszedik az elsődleges MX
> rekordhoz tartozó leveleket.  (Nem szólunk neki, amikor a tartományához levél
> érkezik.) A sendmail programunk minden 30 percben elküldi a sorban felhalmozódott
> leveleket.  Tehát jelen pillanatban legalább 30 percig fenn kell lennie az ügyfélnek, hogy
> rendben megkapja az elsődlegesre MX rekordra.
>
> Létezik valamilyen parancs a sendmail programhoz, amellyel azonnal lekérhetjük az összes
> levelünket?  A felhasználómnak természetesen nincsenek rendszergazdai jogosultságai az adott
> gépen.

A sendmail.cf “privacy flags” beállításai között van egy definíció, az
Opgoaway,restrictqrun.

Vegyük ki innen a restrictqrun beállítást, amivel a nem root felhasználók is megindíthatják a
sor feldolgozását.  Valószínűleg az MX-ek átrendezésére is szükség lesz.  Mi vagyunk az első MX
az ilyen típusú ügyfelek számára, és ezt adtuk meg:

# Ha mi vagyunk a legjobb MX a levél számára, akkor ne generáljunk
# helyi beállítási hibát, hanem próbálkozzunk közvetlenül.
OwTrue

Ezzel már a távoli gép közvetlenül nekünk küld anélkül, hogy próbálkozna az ügyfél kapcsolatával.
Ezt majd továbbküldjünk az ügyfélnek.  Ez csak hálózati nevek esetében működik, tehát az ügyfelünknek
el kell neveznie a leveleket fogadó gépét “customer.com”-nak, valamint a fel kell venni a
“hostname.customer.com” címet is a DNS-be.  Ehhez egyszerűen csak elegendő egy A rekordot
betenni a “customer.com”-hoz.

28.5.4. Miért kapok folyton “Relaying Denied” hibát, amikor más gépekről küldök levelet?

A FreeBSD alapértelmezett telepítése során a sendmail úgy állítódik be, hogy csak arról a gépről küldhetünk vele levelet, ahol fut. Például, ha POP szerver is elérhető, akkor a felhasználók meg tudják nézni a leveleiket az iskolából, munkából vagy bármilyen más távoli helyről, de leveleket onnan továbbra sem tudnak küldeni. Általában pár pillanattal a próbálkozás után a MAILER-DAEMON küldeni fog egy “5.7 Relaying Denied” (“5.7 A továbbítás nem engedélyezett”) üzenetet.

Több lehetőségünk is van ennek megkerülésére. Az a legegyszerűbb módszer, ha az internet-szolgáltatónk címét felvesszük az /etc/mail/relay-domains állományba. Például így:

# echo "az.internet.szolgáltató.net" > /etc/mail/relay-domains

Az állomány létrehozása vagy módosítása után újra kell indítanunk a sendmail programot. Ez remekül működik abban az esetben, ha rendszergazdák vagyunk és nem akarunk a helyi gépről levelet küldeni, vagy egy másik gépen vagy akár másik internet-szolgáltatóval akarunk valamilyen kattingatós levelező programot használni. Olyankor is nagyon hasznos lehet, amikor csak egy vagy két e-mail hozzáférést állítottunk be. Ha egyszerre több címet is fel szeretnénk venni, akkor nyissuk meg ezt az állományt a kedvenc szövegszerkesztőnkkel és írjuk be a tartományokat, soronként egyet:

saját.internet.szolgáltató.net
másik.internet.szolgáltató.com
felhasználók-internet.szolgáltató.ja
www.minta.org

Innentől kezdve a listában szereplő bármelyik gépről tudunk levelet küldeni (feltéve, hogy az adott felhasználó hozzáfér a gépünkhöz). Ezzel gyönyörűen megoldhatjuk, hogy a felhasználóink képesek legyenek távolról is levelet küldeni a rendszerünkön keresztül anélkül, hogy mások pedig szemetet küldenének át rajtunk.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.