Skoči na vsebino

Forum ne deluje več - obiščite nas na racunalniske-novice.com




Slika

Postavimo Svoj Poštni Strežnik


  • Zaklenjena tema Tema je zaklenjena
Ni odgovorov

#1 xfirestorm

xfirestorm

    /dev/null

  • Moderators
  • 3 783 objav
  • Spol:Moški
  • Kraj:Murska Sobota
  • Interesi:Airsoft

Objavljeno 19 november 2009 - 14:16

Objavljena slika
Ta članek je nastal na osnovi Slackware GNU/Linux distribuciji, ampak 95% tega vodiča bo delovalo na večini distribucij. Vse kar je morebiti "Slackware only" bom probal tudi opisati kako bi bilo to možno narediti tudi v ostalih distribucijah.
Kaj pa ta vodič opisuje? Vodič opisuje kako prevesti in namestiti sendmail in tudi nekaj zaščitnih da naš strežnik ne postane odprt rele(relay) za vse spamerje ki bi morebiti želeli pošiljati spam pošto preko našega strežnika. To pa storimo lahko z Client-Side SMTP AUTH ali Server-Side SMTP AUTH.





Predstavitev


Če še mogoče ne veste kaj SMTP AUTH sploh je, to je način da lahko ljudem izven vašega lokalnega omrežja ponujate pošiljanje pošte preko vašega strežnika, z zaščitenim potrjevanjem uporabnikov. To je ravno nasprotje odprtemu "releju"(open relay) ki dovoljuje komurkoli pošiljati pošto preko našega strežnika komu želijo. Sedaj si lahko predstavljate zakaj so odprti "releji" spamerjeve sanje...

In kot pri večini internetnih storitvah moramo razdeliti na dva dela, uporabniški in strežniški del, Client-Side SMTP AUTH in Server-Side SMTP AUTH. Uporabniški del je lahko zelo koristen ko mail strežnik od ISP(Internet Service Provider, oz. Internetni Ponudnik) zahteva potrjevanje da lahko pošljemo pošto preko njega ob uporabi SMART_HOST; če ste na DSL verjetno veste o čem govorim. To pa enostavno prosi po vprašanju, "zakaj pa pošiljati mail skozi ponudnikov strežnik ko pa postavljam svojega???". To je zelo dobro vprašanje, odgovor je pa čisto preprost. Skoraj vsa pošta, 80%, bo zavrnjena ali poslana kam drugam ko bo "zadela" drug SMTP strežnik kamor je namenjena, ker našega strežnika enostavno drugi večji SMTP strežniki ne poznajo in ga smatrajo kot spam izvor. Na srečo obstaja rešitev in ta je da povemo sendmail naj pošilja našo pošto preko drugega mail(SMTP) strežnika z uporabo SMART_HOST.

Server-side SMTP AUTH je točno to kar počnejo mail strežniki od ponudnikov v uporabniškem primeru. Dopušča nam da lahko samo povemo strežniku komu pusti pošiljati pošto preko našega strežnika, ponavadi so to uporabniki ki so v /etc/passwd datoteki. Torej vsi uporabniki ki so dodani v naš strežnik. Na žalost je pa veliko poštnih programov, Outlook in Outlook Express sta še posebaj razvpita, ki pošiljajo SMTP AUTH geslo kar v tekst formatu. In tukaj pride na vrsto ukaz STARTTLS. STARTTLS zakodira geslo in ga pošlje zakodiranega z uporabo SSL, tako da če kdo "sniffa" pakete ne more tako enostavno priti do našega gesla.


Prevajanje in Namestitev

Cyrus SASL v2

Opozorilo!

Po 25.juliju 2005 je Patrick Volkerding vključil v svojo distribucijo Cyrus SASLv2 in pravtako tudi Sendmail v8.13.4 ki je že preveden z uporabo SASL. Vsi ostali ki si ne lastite Slackware distribucije pa lahko preverite če je že Cyrus SASLv2 nameščen in če je Sendmail že preveden z uporabo SASL. To pa storite takole:
/usr/sbin/sendmail -d0.1 -bv root
In če vidimo v Compiled With: STARTTLS in SASLv2
lahko nadaljujemo kar pri Client-Side SMTP AUTH.

Tako, sedaj pa kar na delo!
Seveda ob vsem tem morate biti prijavljen kot root, kakorkoli, su-, sudo -i ali PAM.
Najprej potrebujemo Cyrus SASLv2, najnovejša različiva ki je trenutno v času pisanja tega članka je 2.1.22.
Dobimo ga tukaj: Cyrus SASLv2


Ko imamo Cyrus SASLv2 na disku ga moramo še razpakirati, večino razširujem vse programe v /usr/src, vi lahko to storite v katerem direktoriju hočete:
cd /usr/src
tar xfvz /path/to/cyrus-sasl-2.1.19.tar.gz


Pred prevodom programa moramo najprej zagnati configure skript in ji podati nekaj argumentov. Zato kar prekopirajmo naslednjih nekaj vrstic in jih uzvršimo:
./configure \
--prefix=/usr \
--enable-anon \
--enable-plain \
--enable-login \
--disable-krb4 \
--with-mysql \
--with-saslauthd=/var/state/saslauthd \
--with-openssl \
--with-plugindir=/usr/lib/sasl2 \
--enable-cram \
--enable-digest \
--enable-otp



Ko je to končano še poženimo make da se program začne izgrajevati. Ko je vse končano brez napak lahko nadaljujemo, tukaj pa pridemo do dveh načinov, drugi način bo deloval verjetno samo na Slackware distribuciji. Prvi način je da zaženemo make install, to bo postavilo vse svoje datoteke na pravo mesto. Ali pa lahko zaženemo checkinstall -S, ki pa ustvari slackware paket z končnico .tgz in ga avtomatsko inštalira namesto vas. To je zelo koristno pri odstranjevanju cyrus sasl, saj nam ni treba iskati vseh njegovih datotek. Checkinstall pa dobite tukaj.

Tako sedaj nam so nam pa ostale še samo kratke nastavitve SASL-a.
To pa storimo lahko takole, najprej ustvarimo datoteko /usr/lib/sasl2/Sendmail.conf

Bodite pozorni na 'S' ker to ni napaka ampak dejansko mora biti ime fajla takšno!
In seveda to datoteko tudi odpremo z urejevalnikom besedil po vaši želji.
V datoteko pa dodamo ti dve vrstici:
pwcheck_method: saslauthd
mech_list: LOGIN PLAIN


Tako in Cyrus SASLv2 je nameščen. Stestirati še ga ne moremo ker še nimamo nameščenega sendmail-a.

Sendmail


V času nastajanja tega vodiča je bila zadnja verzija sendmaila 8.14.0

Namestitev Sendmail-a v Slackware traja par minutk, moramo samo malenkost spremeniti skripte za namestitev in jih zagnati. Ampak ker vsi uporabniki Linuxa nimajo Slackware distribucije bom poskušal čimbolj približat vsem distribucijam.

Najprej kaj moramo narediti je naložiti Sendmail na naš disk. Ker jaz počnem vse inštalacije in namestitve v /usr/src najprej ustvarimo tukaj en direktorij:
mkdir /usr/src/sendmail/
Sendmail pa si lahko naložimo kar tukaj.

Ko imamo to na disku se pa kar pomaknimo v direktorij /usr/src/sendmail in razpakirajmo tale .tar.gz:
tar xvf /pot/do/sendmail-tar/datoteke/sendmail.8.14.0.tar.gz[/color]
Sedaj je naš sendmail razpakiran in se kar pomaknimo v njegov direktorij imenovan sendmail-8.14.0

Sedaj pa moramo še poiskati datoteko site.config.m4 in v njej zapisati da bomo uporabljali sendmail z SASL. Ta datoteka se nahaja v sendmail-8.14.0/devtools/Site/, no pa jo kar odprimo in poiščemo naslednje:
APPENDDEF(`confENVDEF',`-DNEWDB -DSTARTTLS -DSASL=2 -DTCPWRAPPERS -DNIS -DMAP_REGEX')
APPENDDEF(`confLIBS', `-lnsl -lssl -lcrypto -lsasl2 -lwrap -lm -ldb -lresolv')
APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER')
APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_MILTER_ROOT_UNSAFE ')



Vse kar je rdeče barve moramo dodati, vse ostalo pa bi moralo že obstajati v naši datoteki.
Tako sedaj pa je sendmail pripravljen na izgraditev. pomaknemo se nazaj v direktorij sendmail-8.14.0 in poženemo Build skript. Če še mogoče skript ni nastavljen kot "executable" to storimo z chmod u+x Build, no pa kar poženimo ./Build

Če imamo sendmail nameščen že na disku ampak v starejši obliki se najprej prepričajmo da le ta ne teče. V Slackware in še mogoče kateri drugi distribuciji to lahko naredimo tako: /etc/rc.d/rc.sendmail stop, Slackware uporablja BSD zagonske skripte, druge distribucije pa malenkost drugačne ki jih nažalost ne poznam. Lahko pa preverimo če sendmail teče na drug način, z: ps U root, kar nam izipiše vse procese ki jih root poganja, in če kje najdemo sendmail: accepting connections ga kar ubijmo z kill -9 številka ki je zraven sendmail v seznamu.
In pred zagonom ./Build še seveda naš stari sendmail pobrišemo, slackware to lahko naredimo z pkgtool, druge distribucije pa uporabljajo svoje package managerje ki jih pa nažalost ne poznam.


Ko zaženemo ./Build in je vse končano brez napak lahko nadaljujemo z urejanjem našega sendmail-a. Najprej bomo verjetno naredili spremembe v access, local-host-names in verjetno tudi aliases. Ta vodič ne obsega urejanje teh datotek, bom pa dodal, če bo dovolj povpraševanja po le-tem.

Ko vse te datoteke spremenimo po naših željah pa moramo te datoteke kriptirati, to pa storimo z naslednjimi ukazi:
makemap hash /etc/mail/access < /etc/mail/access
makemap hash /etc/mail/domaintable < /etc/mail/domaintable
makemap hash /etc/mail/mailertable < /etc/mail/mailertable
makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
newaliases


Pozor, newaliases sem obarval oranžno zato ker za razliko od vseh ostalih datotek aliases uporablja ta ukaz za kriptiranje.


Sedaj pa je najbolje da preverimo če naš sendmail deluje:
/usr/sbin/sendmail -d0.1 -bv root
Izpis bi moral biti približno tak:
Version 8.13.8
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF
SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG



Naj vas ne moti Version 8.13.8, ker ob postavitvi svojega sistema je bila to zadnja različica sendmaila, vam bo tukaj pisalo 8.14.0, kar je važno oz. kar mora pisat je obarvano v rdeče


Client-Side SMTP AUTH + SMART_HOST


Kot sem omenil že prej Client-Side SMTP AUTH nam omogoča potrjevanje pri ponudnikovem SMTP strežniku in pošiljanje pošte preko njega z uporabo SMART_HOST. Tudi če ponudnikov SMTP strežnik ne zahteva potrjevanja lahko vseeno uporabljamo SMART_HOST za pošiljanje pošte preko njega.

Sedaj ko imamo delujoč sendmail ki podpira SMTP AUTH odprimo datoteko /usr/share/sendmail/cf/cf/sendmail-slackware.mc z vašim najljubšim urejevalnikom besedil.
Nekatere distribucije imajo omenjeno datoteko v /etc/mail in jo poimenujejo samo sendmail.mc.

Naredimo nekaj sprememb!
Spodaj imamo kopijo celotne datoteke in označbe so takšne:
Z zeleno barvo je kar je potrebno spremeniti,

z rdečo kar je treba dodati
in z modro kar je odvisno od vašega sistema oziroma ponudnika.

dnl# This is the default sendmail .mc file for Slackware. To generate
dnl# the sendmail.cf file from this (perhaps after making some changes),

dnl# use the m4 files in /usr/share/sendmail/cf like this:
dnl#
dnl# cp sendmail-slackware.mc /usr/share/sendmail/cf/config.mc
dnl# cd /usr/share/sendmail/cf
dnl# sh Build config.cf
dnl#
dnl# You may then install the resulting .cf file:
dnl# cp config.cf /etc/mail/sendmail.cf
dnl#

include(`../m4/cf.m4')
VERSIONID(`default setup for Slackware Linux')dnl
OSTYPE(`linux')dnl
dnl# These settings help protect against people verifying email addresses
dnl# at your site in order to send you email that you probably don't want:
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
dnl# Uncomment the line below to send outgoing mail through an external server:
define(`SMART_HOST',`mail.siol.net')dnl

dnl# No timeout for ident:
define(`confTO_IDENT', `0')dnl
dnl# Enable the line below to use smrsh to restrict what sendmail can run:
dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
dnl# See the README in /usr/share/sendmail/cf for a ton of information on
dnl# how these options work:
FEATURE(`authinfo',`hash -o /etc/mail/authinfo.db')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`use_ct_file')dnl

FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(`access_db', `hash -T<tmpf> /etc/mail/access')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`local_procmail',`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`always_add_domain')dnl
FEATURE(`redirect')dnl
dnl# Turn this feature on if you don't always have DNS, or enjoy junk mail:

dnl FEATURE(`accept_unresolvable_domains')dnl
EXPOSED_USER(`root')dnl
dnl# Also accept mail for localhost.localdomain:
LOCAL_DOMAIN(`localhost.localdomain')dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl



Sedaj ko je naša datoteka z nastavitvami urejena jo moremo še kriptirati oz. konvertirati, ampak preden storimo to je pametno umakniti našo kovertirano datoteko z nastavitvami na varno mesto ali pa jo samo preimenovati, to storimo lahko tako:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig
Sedaj pa še konvertiramo:
m4 /usr/share/sendmail/cf/cf/sendmail-slackware.mc > /etc/mail/sendmail.cf
Nekatere distribucije, ki vlkjučujejo sendmail*.mc datoteko v /etc/mail imajo tudi tam že Makefile in lahko sendmail.mc preurejamo preprosto z ukazom make ko se nahajamo v direktoriju etc/mail.

Tako, sedaj imamo našo datoteko z nastavitvami na pravem mestu. Urediti pa še moramo authinfo datoteko. Ampak ta datoteka še ne obstaja, zato jo moramo ustvariti tako:
touch /etc/mail/authinfo

Zdaj jo pa odpremo in vpišemo naslednje stvari, vse kar je označeno z modro je odvisno od vašega ponudnika:
AuthInfo:mail.siol.net "U:uporabnisko-ime" "P:geslo" "M:PLAIN"
AuthInfo: "U:uporabnisko-ime" "P:geslo" "M:PLAIN"



Pod M: je vpisan mehanizem ki ga uporablja ponudnik za vpis oz. potrjevanje. SiOL uporablja PLAIN, drugi pa lahko uporabljajo še DIGEST-MD5, CRAM-MD5 ali LOGIN

Ko ste datoteko shranili moramo še spremeniti dovoljenja za datoteko tako:
chmod 660 /etc/mail/authinfo

Sedaj pa še moramo to datoteko kriptirati:
makemap hash /etc/mail/authinfo < /etc/mail/authinfo


Sedaj pa je čas da poženemo sendmail, v Slackware to storimo tako:
/etc/rc.d/rc.sendmail start
V drugih distribucijah pa z svojimi zagonskimi skriptami ali pa tako:
/usr/sbin/sendmail -L sm-mta -bd -q25m
/usr/sbin/sendmail -L sm-msp-queue -Ac -q25m


Z malo sreče je naš SMTP strežnik nameščen in urejen tako da lahko pošiljamo in sprejemamo pošto, ampak za enkrat še samo iz našega lokalnega računalnika.


Server-Side SMTP AUTH


Kot omenjeno že prej, Server-Side SMTP AUTH nam omogoča da uporabniki izven našega omrežja lahko pošiljajo pošto preko našega strežnika brez možnosti da postane le-ta odprt rele(open relay).

Sedaj ko imamo delujoč sendmail ki zdaj lahko že pošilja pošto spet odpremo datoteko /usr/share/sendmail/cf/cf/sendmail-slackware.mc in jo še malce uredimo.

Spet imam tukaj celo datoteko in je spet označeno z rdečo kar je treba dodati.



dnl# This is the default sendmail .mc file for Slackware. To generate
dnl# the sendmail.cf file from this (perhaps after making some changes),
dnl# use the m4 files in /usr/share/sendmail/cf like this:
dnl#
dnl# cp sendmail-slackware.mc /usr/share/sendmail/cf/config.mc
dnl# cd /usr/share/sendmail/cf

dnl# sh Build config.cf
dnl#
dnl# You may then install the resulting .cf file:
dnl# cp config.cf /etc/mail/sendmail.cf
dnl#
include(`/m4/cf.m4')
VERSIONID(`default setup for Slackware Linux')dnl
OSTYPE(`linux')dnl
dnl# These settings help protect against people verifying email addresses

dnl# at your site in order to send you email that you probably don't want:
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
dnl# Uncomment the line below to send outgoing mail through an external server:
dnl define(`SMART_HOST',`mailserver.example.com')
dnl# No timeout for ident:
define(`confTO_IDENT', `0')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confCACERT_PATH', `/etc/mail/certs')dnl

define(`confCACERT', `/etc/mail/certs/cacert.pem')dnl
define(`confSERVER_CERT', `/etc/mail/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/mail/certs/sendmail.pem')dnl
define(`confCLIENT_CERT', `/etc/mail/certs/sendmail.pem')dnl
define(`confCLIENT_KEY', `/etc/mail/certs/sendmail.pem')dnl
define(`confAUTH_OPTIONS', `A p y')dnl

dnl# Enable the line below to use smrsh to restrict what sendmail can run:
dnl FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
dnl# See the README in /usr/share/sendmail/cf for a ton of information on

dnl# how these options work:
FEATURE(`use_cw_file')dnl
FEATURE(`use_ct_file')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(`access_db', `hash -T<tmpf> /etc/mail/access')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`local_procmail',`',`procmail -t -Y -a $h -d $u')dnl

FEATURE(`always_add_domain')dnl
FEATURE(`redirect')dnl
dnl# Turn this feature on if you don't always have DNS, or enjoy junk mail:
dnl FEATURE(`accept_unresolvable_domains')dnl
EXPOSED_USER(`root')dnl
dnl# Also accept mail for localhost.localdomain:
LOCAL_DOMAIN(`localhost.localdomain')dnl
MAILER(local)dnl
MAILER(smtp)dnl

MAILER(procmail)dnl


Najprej bi rad upozoril na to vrstico define(`confAUTH_OPTIONS', `A p y')dnl

Argument 'p' pove sendmail-u da se mail klient(Outlook, Firebird...) ne sme prej identificirati kot je zagnal ukaz STARTTLS. To enostavno izloči pošiljanje gesla v tekstovnem formatu, torej berljivem vsem [i]"snifferjem"
. Mogoče nočete tega, zato lahko kar pobrišete argument 'p'.

Sedaj pa ko je naša nastavitvena datoteka nastavljena jo je treba še konvertirati. Ampak najprej poskrbimo da je naša trenutna že konvertirana datoteka na varnem. Premaknemo jo na varno mesto ali pa jo enostavno preimenujemo:
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.orig

Vredu, zdaj smo pirpavljeni da našo datoteko konvertiramo:
m4 /usr/share/sendmail/cf/cf/sendmail-slackware.mc > /etc/mail/sendmail.cf

Skoraj smo že končali, potrebno še je samo ustvariti certifikat in ga podpisati. To bomo pa storili v naslednjih kratkih korakih. Najprej ustvarimo Certificate Authority(CA).

mkdir /etc/mail/certs
cd /etc/mail/certs
openssl req -new -x509 -keyout cakey.pem -out cacert.pem -days 1865



Tukaj boste vpisali nekaj podatkov. Važno je da ko vas vpraša Common Name vnesete pravo ime strežnika oz. host. Naprimer: moj.mailserver.si

Sedaj imamo naš CA, zdaj pa še ustvarimo certifikat in ga podpišemo.
openssl req -nodes -new -x509 -keyout sendmail.pem -out sendmail.pem -days 1460

Naš CA je dober za 5 let(1865 dni) in certifikat za 4 leta(1460 dni), zmeraj je boljše da prej poteče certifikat kot CA ki ga je podpisal.

Sedaj moramo še malce spremeniti pravice za dostop do certifikatov:

chmod 600 sendmail.pem

Če bi radi videli vsebino certifikata jo lahko pogledate na naslednji način:
openssl x509 -noout -text -in sendmail.pem

Sedaj še pa zaženi saslauth daemon tako:
saslauthd -a shadow

Opozorilo, -a shadow pove SASLv2 da naj prebira uporabnike in njihova gesla iz /etc/shadow, obstajajo še druge možnosti preverjanja uporabnikov ki niso vključena v ta vodič. Ampak to preverjanje pusti vsakemu uporabniku ki je v /etc/shadow da pošilja pošto preko našega strežnika.


Pametno je tudi saslauthd -a shadow vključiti v zagonsko skripto, v Slackware je ta skripta /etc/rc.d/rc.local v drugih distribucijah pa nažalost ne vem.

Sedaj pa končno lahko preverimo če naša pošta deluje brezhibno, v Slackware storimo to takole:
/etc/rc.d/rc.sendmail start
V drugih distribucijah pa z svojimi zagonskimi skriptami, ali pa tako:
/usr/sbin/sendmail -L sm-mta -bd -q25m
/usr/sbin/sendmail -L sm-msp-queue -Ac -q25m


Če maila še vedno ne morete pošiljati iz računalnikov ki so izven vašega omrežja, je potrebno še malenkost urediti [b]/etc/mail/access
in sicer tako da v datoteko na dnu pripišemo:
To:domena.com RELAY
Datoteko shranimo in datoteko kriptiramo:
makemap hash /etc/mail/access < /etc/mail/access

Če mail še vedno ne gre skozi, je pametno storiti naslednje.
V zagonsko skripto od kod zaganjamo sendmail pripišemo en argument:
[b]-X /tmp/sendtmp

Tega pripišemo sem:
/usr/sbin/sendmail -L sm-mta -bd -q25m -X /tmp/sendtmp
ali ga enako dodamo pri ročnem zagonu sendmaila.


Sedaj pa lahko pogledamo to datoteko takole:
tail -f /tmp/sendtmp

Ponovno pošljimo mail in gledajmo kje pride do napake.

Upam da je ta vodič komu v pomoč in ne samo meni :)

vir: Sendmail.org
LinuxQuestions.org




0 član(ov) bere to temo

0 članov, 0 gostov, 0 anonimnih uporabnikov