2009. augusztus 23., vasárnap

# Exim4+ClamAV+Dovecot+Horde3 [Debian Lenny]


Az írás inkább tanulási célra, mint hogy éles serverre való.. :)

Telepítés


Kiindulópont egy pl.: netinstall-os Debian Lenny. Legyen fix IP címünk, mert különben leveleink más servereken valószínűleg SPAM-ként lesznek megjelölve [sources.list-ed is legyen rendben]. Telepítéskor én egy "gipszj" nevű felhasználót hoztam létre:D , +VirtualBox-ban dolgoztam+Vim-el szerkesztettem a config fájlokat, az ":syntax enable" hasznos dolog, szöveg kiemelés színesen.
apt-get install vim
Vim fent van, esetleg ez még hasznos lehet.
Az időzóna legyen jól beállítva!! És legyen fent egy időszinkronizáló:
apt-get install openntpd
Először kézzel helyesbítsük azért az időt:
ntpd -s
Állítsuk át a telepítéskori üzeneteket bőbeszédűvé:
dpkg-reconfigure debconf
Itt válasszuk a "párbeszédes, alacsony", azaz "dialog, low" beállításokat.
Az SMTP, és az IMAP szolgáltatásokhoz külön programok/csomagok vannak:
SMTP:
apt-get install exim4-daemon-heavy
Az "exim4-daemon-light" alapból fent van, de nekünk az említett heavy szükséges, mivel azzal már meg lehet valósítani egy mailservert, annak adatbázissal való kommunikációját, ldap, vírusszűrés, spamszűrés, van beépített perl interpreter-e, kávét is főz [C. Krisztián mondta :D], stb.
Állítsunk be egy pár dolgot rajta:
dpkg-reconfigure exim4-config
-al láthatjuk a beállításokat [menürendszerben]:
  • General type of mail configuration:
    • internet site; mail is sent and received directly using SMTP
      • Normál internetes mailserver. "Direktbe" küldünk, és fogadunk leveleket.
    • mail sent by smarthost; received via SMTP or fetchmail
      • Pl.: irodai/céges mailservernél, a kimenő levelekre a szolgáltatód ügyel ["smarthost"], ő majd kézbesíti, ahova kell. Beérkező levelek pl.: fetchmail-el, POP3-al jönnek be.
    • mail sent by smarthost; no local mail
      • Nem egy igazi mailserver, hanem pl.: a gép egy fileserver, amin "nincs levelezés", de a hibaüzeneteket azért meg szeretnénk kapni.
    • local delivery only; not on a network
      • Megint nem igazi mailserver, nem küldünk kifele semmilyen levelet, nem fogadunk befele semmilyen levelet, csak helyben kézbesítünk. Pl.: a rendszergazdának szánt rendszerüzenetek, de ezen kívül nincs levelezés.
    • no configuration at this time
      • Beállítás kihagyása
Tehát
  1. Válasszuk a legfelsőt [internet site; mail is sent and received directly using SMTP].
  2. The 'mail name': itt állíthatjuk be, hogy mi a gépünk levelezésben használt neve [tehát a levélben a "@" utáni rész]. Valamint a géped az internetről érkező, az erre a címre jövő leveleket elfogadja. A default neved jó.
  3. Itt jön az, hogy milyen IP címen fogadja a kapcsolatokat az SMTP server. Ha ez nem egy rendes internetes mailserver, és csak az a célod, hogy helyileg küldjél, vagy kézbesíts leveleket, akkor a "127.0.0.1" elég, szóval csak a localhoston, sehol máshol.
    Ha azt akarod, hogy ez egy rendes internetes mailserver legyen, akkor ezt kitörlöd.
    Vagy ha azt akarod, hogy olyan servered van, hogy a leveleket POP3-al a szolgáltatódtól töltöd le rá, és a helyi usereid ezen keresztül küldenek kifele levelet a világba, és mondjuk ez a gép egyszerre látja az intranetet, és az internetet, akkor itt csak az intranetes IP címet adod meg, hogy az SMTP szolgáltatás csak az intranetes gép számára legyen elérhető.
  4. Milyen "@" után levő nevekről érkező leveleket fogadjon el a server. És helyileg kézbesíti őket. Arra vigyázz, hogy amit megadsz, levelezési név [az elején, hogy mi az alapértelmezett neve], és amiket itt felsorolt neveket, azokat helyi levelezési neveknek/címeknek fogja tekinteni. Az erre a címekre menő leveleket helyben akarja kézbesíteni. Tehát ha ide beírod a pl.: "t-online.hu"-t, akkor attól a pillanattól t-online-os ügyfélnek levelet nem fogsz tudni küldeni [pl.: visszapattan ismeretlen userrel]. Ha több domaint akarsz kiszolgálni ezzel a serverrel [localhost alapból benne van a listában], akkor itt tudod felsorolni őket [a domainek felsorolása kettősponttal történik].
  5. [Domains to relay mail for] Itt felsorolhatod, hogy melyek azok a domain nevek, amiknek továbbítani szeretnéd a leveleit [tehát te relay server vagy, fogadod, és továbbítod a levelet egy másik mail servernek, pl.: tartalék server funkció - nem smarthost!].
    Ez arról szól, hogy egy adott domain-nek úgy van beállítva az interneten a DNS-ben az MX-e, hogy van két server: az elsődleges, amin a levelek vannak, a másodlagos server a relay server, ha te vagy egy ilyen másodlagos server, akkor azokat a domaineket sorolod fel, aminek te a másodlagos serverre vagy, és akkor ha az elsődleges serverre nem tudnak majd levelet kézbesíteni, kapod te, mint másodlagos server [ha írtad, hogy azt a domaint elfogadod]. De ha DNS-ből látod, hogy van elsődleges server, akkor nem fogod helyileg kézbesíteni, hanem próbálod továbbadni az elsődleges servernek. Ha helyreállt, akkor tovább is adod neki [tehát ezzel egy tartalék servert tudsz csinálni a hálózatodon]. Hagyd üresen, ha nem vagy relay server [portszámot "::portszám"-al tudsz megadni]. Szóval röviden erről a részről: itt sorolhatjuk fel, hogy mik azok a domain-ek, amikre bárki küldhet rajtunk keresztül levelet. Alapból hagyd üresen.
  6. [Machines to relay mail for]: Mik azok az IP címek/tartományok, ahonnan jövő kapcsolattal az illető bárhova küldhet rajtunk keresztül levelet [Ide NE adjuk meg a pl.: "0.0.0.0"-át, vagy a "0.0.0.0/0", mert akkor a világban bárki küldhet rajtunk keresztül levelet. Ezt tilos beállítani az említett módon, mert a neten folyamatosan léteznek, scannelnek olyan botok, amik keresnek olyan címet, amin keresztül tudnak bárhova levelet küldeni - spammerek. Open Relay]. Hagyd üresen.
  7. [Keep number of DNS-queries minimal?] Ha csak nincs egy rendkívülien lassú kapcsolatod [ISDN, stb], "No".
    • "mbox format in /var/mail/": minden felhasználónévnek egy külön fájl, abban az egy darab fájlban minden levél, lassú, nehezen kezelhető.
    • "Maildir format in home directory": A felhasználó saját könyvtárába kerülnek a levelek, egy "Maildir" nevű mappába, azon belül is egy "cur", "new", és egy "tmp" alkönyvtárba, minden egyes levél külön fájlba. Ez jobb, mert a felhasználó saját dolgai a saját mappájában van, a levelek hozzáférése is gyorsabb, mert nem egy több gigás fájlban kell megkeresnünk a levelet, ami mellesleg egy sima textfile lenne, amit indexelni nem igazán lehetne. Tehát a választás inkább a Maildir legyen.

  8. [Split configuration into small files?]: Alapértelmezetten "No", de válaszd a "Yes"-t. Rakja a configokat külön kis fájlokba, egy nagy helyett - pl.: az átláthatóság miatt ["/etc/exim4/conf.d/"-be rakja őket]. Igazából a "/var/lib/exim4/config.autogenerated" fájlban lesznek a valódi beállítások, amik az Exim újraindításakor kerülnek generálásra ["/etc/init.d/exim4 restart"].
  9. Esetleg még megkérdi, hogy kinek menjenek a rendszerüzenetek, válaszd azt, akit szeretnél erre a célra [nem root, hanem hozz létre egy felhasználót].
IMAP:
apt-get install dovecot-imapd
Egyéb:
Vírus ellenőrzés:
apt-get install clamav clamav-daemon clamav-freshclam
A ClamAV fusson pl.: Daemon-ként, és válassz egy közeli mirror-t az adatbázisának frissítéséhez.
WebGUI a levelezéshez:
apt-get install horde3 imp4 turba2
Kérdezni fog egy pár dolgot, pl.: megjelenítésről, válaszd a default-okat, vagy pedig célod szerint.

További konfig


Hozzunk létre a megfelelő helyen egy "00_local" nevű saját config fájlt. Ezt az Exim észreveszi, és pl.: az esetlegesen saját filébe leírt/definiált változókat később nem fogja már feltétlenül legenerálni a gyári default-ra, hanem megmaradnak az általunk megadottak:
vim /etc/exim4/conf.d/main/00_local
A file [00_local]:
# Mondjuk meg az Exim-nek, hogy ki a virusscanner [tobb viruskeresot is be lehet allítani, de akkor az acl-nel kell allitgatni, de eleg a ClamAV]:
av_scanner = clamd:/var/run/clamav/clamd.ctl

# legyen egy file, amibe szeretnenk irni egy par szabalyt
CHECK_DATA_LOCAL_ACL_FILE = /etc/exim4/local_data_acl

Itt kereshetünk local változókat [de nincs mindegyik gyárilag definiálva]: "/etc/exim4/exim4.conf.template", pl.: a "00_local"-ba definiálhatunk dolgokat, ha kell.
Exim4-hez az ACL file tartalma, amire előbb hivatkoztunk [kinézete: 1 - megmondom, hogy mit akarok, 2 - milyen feltételekkel]:
vim /etc/exim4/local_data_acl
Így néz ki a file [local_data_acl]:
accept hosts = 127.0.0.1 # ha localhost-rol jon a level, akkor nem kell virusellenorzes

deny # deny, azaz SMTP REJECT-et kap az illeto, at sem veszem a levelet, RFC szerint [de "drop"-olni is lehet, a kuldo nem fogja tudni, hogy en azt a levelet eldobtam]
 message = Tiltott kiterjesztes: $found_extension
 demime = com:ovl:sys:dll:vbs:exe:msi:bat:cmd

#deny # ha el szeretnenk dobni a virusos leveleket [hashmark-ba raktam, mert most csak proba]
# message = Virusos tartalom ($malware_name), hasznalj inkabb Linuxot.
# malware = *

warn # csak egy figyelmeztetest rakjon a virusos levelek vegere
 message = Virusos tartalom ($malware_name), hasznalj inkabb Linuxot.
 malware = *

warn # a levelek vegere szurhatunk sajat uzenetet, felteve ha a level atment minden szuron
 message = X-Reklam-Helye: virusellenoriztuk a levelet.
A nemrégi telepítéskori 9)-es pontban említetten a :
/etc/init.d/exim4 restart
paranccsal tudod a saját configjaidat bevinni az Exim-be, mármint ekkor ő legenerálja neked a "/var/lib/exim4/config.autogenerated" fájlt, amiben valóban tárolja a beállításokat, csak mi szétszedtük őket, a könnyebb kezelhetőség miatt.
Ez után adjuk hozzá a "clamav" felhasználót a "Debian-exim"-csoporthoz, mert különben a clamav nem fogja tudni elérni a megfelelő könyvtárakat:
adduser clamav Debian-exim
Nézzük meg, hogy biztos hozzá-e lett adva az adott user a csoporthoz:
groups clamav
Ha azt írja, hogy: "clamav Debian-exim", akkor ok.
Még hátra van az authentikáció beállítása. [Megjegyzés: authentikáció: pl.: felhasználónév/jelszó párossal azonosítani valamit/valakit. Authorizáció: Meggyőződni a fél, vagy felek személyazonosságáról, pl.: tanúsítványok használatával.]

Smarthost használata esetén [csak akkor] a "/etc/exim4/passwd.client"-fájlba kell beleírni a mailserver nevét, kettőspont felhasználónév, kettőspont jelszó. Azon túl az Exim a kimenő leveleknél authentikálni fogja magát, azon a serveren, ahová küld [csak vigyázz, hogy a tényleges neve legyen a server neve].

A bejövő SMTP authentikációhoz a "/etc/exim4/conf.d/auth/" mappában találhatsz "mintákat". Módosítsd benne egy pár dolgot [hashmark jelet vedd ki egy pár sor elől], tehát:
vim /etc/exim4/conf.d/auth/30_exim4-config_examples
és a "plain_server:"-résztől kezdődően vedd ki a sorok elől a hasmark jelet, egészen a ".endif" részig. Ugyan így a ".endif" részig vedd ki a commenteket a "login_server:"-rész elől is. Még vedd ki a megjegyzésből a "cram_md5_server"-el kezdődő sorokat is, egészen a "server_set_id = $auth1"-ig.

A felhasználóknak a "/etc/exim4/passwd" filében kell lenniük [usernev:md5-elkodolt-jelszo:simajelszo]. [de "htpasswd"-el is kompatibilis] tehát:
vim /etc/exim4/passwd
A file [passwd]:
gipszj:md5-elkodolt-jelszo:simajelszo
usernev1:md5-elkodolt-jelszo:simajelszo
usernev2:md5-elkodolt-jelszo2:simajelszo2
Ha nincs cleartext jelszó [sima jelszó], akkor nem fognak működni a challenge-response alapú authentikációk, mint pl.: a cram-md5, ami egy fokkal biztonságosabb, ha nem TLS-t [titkosított kapcsolatot] használunk. Ha beleírjuk a cleartext jelszót, akkor menni fognak ezek, de viszont érthető okokból nem a legjobb.

Ellenőrizzük, hogy működik-e

Küldjünk egy levelet a "gipszj" felhasználónak.
Tudjuk, hogy mit adtunk meg domain névnek anno. [A "valami.hu" helyére a pl.: hostname menjen], off]:
echo "ez a mailszoveg" | mail -s "valami-targy" gipszj@valami.hu
Nézzük meg, hogy meg-e érkezett az e-mail a user "Maildir" mappájába:
cd /home/gipszj/Maildir/new
Ok, megérkezett, csak próbáljunk ki egy másik "módszert" :) :
A "$ "-el jelzem, hogy azt gépelni kell, "."-al jelezzük, hogy vége az e-mailnek.]
$ telnet IPCIM 25
Trying IPCIM...
Connected to IPCIM
Escape character is '^]'.
220 valami.hu ESMTP Exim 4.69 Fri, 7 Aug 2009 15:00:00 +0200
$ mail from: gipszj@valami.hu
250 OK
$ rcpt to: gipszj@localhost
$ data
$ From: Gipszj <gipszj@valami.hu>
$ To: Gipszj <gipszj@valami.hu>
$ Subject: barmi
$ safasdfsafas
$ asdfasdf
$ .
$ quit
A "/home/usernev/Maildir" mappában kellene lennie a levélnek, a "new"-ban.

Webmail beállítása

Lehessenek logok:
touch /var/log/horde/horde3.log
chown root:www-data /var/log/horde/horde3.log
chmod 770 /var/log/horde/horde3.log
Most vagy állítsuk be az apache config-jában, hogy hol van a horde mappája, vagy pedig készítsünk egy symlink-et.
ln -s /usr/share/horde3 /var/www/
Telepítsük fel a mysql-server-5.0-át:
apt-get install mysql-server-5.0
Adjunk egy jó jelszót a telepítéskor, majd válasszuk a "No-t" [Support MySQL connections from hosts running Debian "sarge" or older?].
Ez után a mysql-es example-t másoljunk a pl.: "/tmp"-be:
cp /usr/share/doc/horde3/examples/scripts/sql/create.mysql.sql.gz /tmp/
Majd tömörítsük ki a ".gz" filét:
cd /tmp/
gunzip create.mysql.sql.gz
Majd szerkesszük meg Vim-el:
vim /tmp/create.mysql.sql

REPLACE INTO user (host, user, password)
    VALUES (
        'localhost',
        'horde',
-- IMPORTANT: Change this password.
        PASSWORD('horde')
);
A "horde" password-öt módosítsuk másra, pl.: valami értelmes jelszóra. Ez után:
mysql -u root -p < /tmp/create.mysql.sql
A "/etc/horde/horde3/"-ban szerkesszük meg a "registry.php" filét, miszerint nekünk kell "active"-á tenni az egyed "modulokat":
vim /etc/horde/horde3/registry.php
És az "imp" résznél, a "statust" állítsuk "active"-ra, az "inactive"-ról. Ugyan így a "turba" résznél is legyen a "status" "active".
Még az IMP, és a Turba SQL-es részét adjuk hozzá:
mysql -u root -p horde < /usr/share/doc/imp4/examples/scripts/sql/imp.sql
mysql -u root -p horde < /usr/share/doc/turba2/examples/scripts/sql/turba.sql

A "/etc/horde/imp4"-en belül a "servers.php"-t módosítsd a "$servers['imap']" résznél:
vim /etc/horde/imp4/servers.php
  • A " 'server' => 'imap.example.com' " helyett legyen: " 'server => 'localhost' "
  • A " 'protocol' => 'imap/notls' " helyett legyen: " 'protocol' => 'imap/ssl/novalidate-cert' "
  • A " 'port' => 143 " helyett legyen: " 'port' => 993 "
  • A " 'maildomain' => 'example.com' " helyett legyen pl.: : " 'maildomain' => 'localhost.lan' "
  • A " 'smtphost' => 'smtp.example.com' " helyett legyen " 'smtphost' => 'localhost' "
Most módosítsd a jogosultságokat egy pár filénél, hogy a webes felületen beállíthassunk egy-két dolgot:
chmod 777 /etc/horde/horde3/conf.php
touch /etc/horde/horde3/conf.bak.php
chmod 777 /etc/horde/horde3/conf.bak.php
ifconfig-al tudjuk meg a gépünk IP címét, és írjuk be egy másik gépen egy böngészőbe azt, pl.: "XXX.XXX.XXX.XXX/horde3/". Egy üzenet fogad bennünket: "Horde3 configuration disabled by default because the administration/install wizard gives the whole world too much access to the system. Read /usr/share/doc/horde3/README.Debian.gz on how to allow access." - Ezt javítsuk ki:
vim /etc/horde/horde3/conf.php
Szóval megnyitottuk szerkesztésre a "conf.php" filét, itt vegyük ki a második, és a harmadik sort [ügyelve, hogy a "<?php" maradjon meg az elején! :D]. Az általunk kitörölt üzenettel találkoztunk előzőleg a böngészőben [+ a harmadik sorban van egy "exit (0)", amit szintén törlünk]. De nem muszáj kitörölni ezeket a sorokat, "//"-eket is rakhatunk eléjük, ezzel commentbe helyezve őket.
Most következik egy pár webes felületen történő beállítás [ekkor még hibaüzeneteket láthatunk bőven "webgui"-n, és a jogosultságokat kell majd állítani előtte a serveren]:

IMP-nél:
chmod 777 /etc/horde/imp4/conf.php
touch /etc/horde/imp4/conf.bak.php
chmod 777 /etc/horde/imp4/conf.bak.php
A "http://serverIPcíme/horde3/"-re lépve menjünk az Administration-Setup részben a "Mail (imp)"-re kattintva menjünk a "Generate"-re, ok, legenerálta a config filéjét, most módosítsuk vissza a jogosultságokat:
chmod 644 /etc/horde/imp4/conf.php
chmod 600 /etc/horde/imp4/conf.bak.php
Most a Turba2:
chmod 777 /etc/horde/turba2/conf.php
touch /etc/horde/turba2/conf.bak.php
chmod 777 /etc/horde/turba2/conf.bak.php
Ok, super, miután kész, még a turba2-őt is generáljuk le, lépjünk az "Administration/Setup"-on belül az "Address Book (turba)"-ra, majd "Generate Address Book Configuration".
Állítsuk megint vissza a jogokat:
chmod 644 /etc/horde/turba2/conf.php
chmod 700 /etc/horde/turba2/conf.bak.php
A "Horde (horde)"-re kattintva előjön "rengeteg" fül:
  • Database fül:
    • A "$conf[sql][phptype]"-nál válaszd a "MySQL"-t.
    • $conf[sql][username]: horde
    • $conf[sql][password]: sql-jelszod
    • $conf[sql][socket]: /var/run/mysqld/mysqld.sock
    • $conf[sql][database]: horde
    • $conf[sql][charset]: utf-8
  • Authentication fül:
    • $conf[auth][admins]: gipszj
    • $conf[auth][driver]: "Let a Horde application handle authentication"
    • $conf[auth][params][app]: imp
  • Logging fül:
    • $conf[log][enabled]: "Yes"
  • Preference System fül:
    • $conf[prefs][driver]: "SQL Database"
  • Alarm System fül:
    • $conf[alarms][driver]: "SQL Database"
  • DataTree System fül:
    • $conf[datatree][driver]: "SQL Database"
Most katt a "Generate Horde Configuration"-ra.

Állítsuk vissza a jogokat:
chmod 644 /etc/horde/horde3/conf.php
chmod 600 /etc/horde/horde3/conf.bak.php

Reboot, majd majd bejelentkezés, az én esetemben "gipszj" felhasználóval [mármint webes felületen egy logout után].

ui.: _Czakó Krisztián és Haluska György szavai alapján_ [egy Rossz minőségű diktafon felvételből+".bash_history"-ból+kevés idő megbeszélésre :D], szóval ha bármi hiba: FIXME. Bármilyen helyesbítést/kiegészítést szívesen várok.
ui2.: Configuring Horde Debian Wiki
ui3.: Utólag találtam 1-2 howto-t: Exim4 + Courier + SSL on Debian etch mini-HOWTO
ui4.: Exim4 + ClamAV + SpamAssassin + Greylistd on Debian etch mini-HOWTO
ui5.: Exim4 + Mailman + Apache2 on Debian etch mini-HOWTO
ui6.: még egy link, link2, link3, link4, link5, link6.

Nincsenek megjegyzések:

Megjegyzés küldése