Labor2 E-post

From ICO wiki

Legend

Ver. 0.00, 03.11.2009
Ver. 0.01, 14.12.2009
Ver. 0.02, 17.12.2009
Ver. 0.03, 18.12.2009

Tegijad

Sander Surva
Ken Karma
Lauri Võsandi

Sissejuhatus

Meil on kaks domeeni, kus on mailiserverid ja osapooled saavad omavahel e-posti teel suhelda. ssurva.ee ja kkarma.ee. kkarma.ee peale on seadistatud nii spämmifilter kui ja viirusetõrje sissetulevate mailide jaoks. Mõlemad domeenid samas logivad logiteateid eraldi faili.

Nõuded

  1. domeenid kkarma ja ssurva
  2. d1 viirusetõrjega
  3. d1 spammifilter
  4. logima syslog-i + eraldi faili


 +----+           +----+
 | D1 |   ------> | D2 |
 +----+           +----+

Eeldused

Operatsioonisüsteemiks peab olema Ubuntu Server, mis jookseb kernelil 2.6.28-11

Enne vaja seadistada DNS

kasutame BIND-i, põhjalikuma leheküle leiab: [1]

 apt-get install bind9

kohalikud domeenid kkarma ja ssurva paigutame faili /etc/bind/named.conf.local

zone "6.168.192.in-addr.arpa" IN {
        type master;
        file "/etc/bind/db.6.168.192.in-addr.arpa";
};
zone "ssurva.ee" IN {
        type master;
        file "/etc/bind/db.ssurva.ee";
};
zone "kkarma.ee" IN {
        type master;
        file "/etc/bind/db.kkarma.ee";
};

nano /etc/bind/db.ssurva.ee
nano /etc/bind/db.kkarma.ee
nano /etc/bind/db.6.168.192.in-addr.arpa

Nende failide sisu muuta järgmiselt

;
; BIND data file for ssurva.ee
;
$ORIGIN ssurva.ee.
$TTL    604800
@       IN      SOA     ns.ssurva.ee. root.ssurva.ee. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
ssurva.ee. IN      NS      ns.ssurva.ee.
ssurva.ee. IN      MX      10 mail.ssurva.ee.
ns.ssurva.ee.      IN      A       192.168.6.88
mail.ssurva.ee.    IN      A       192.168.6.88
www.ssurva.ee.     IN      CNAME       ssurva.ee.
ssurva.ee. IN      A   192.168.6.88

;
; BIND data file for kkarma.ee
;
$ORIGIN kkarma.ee.
$TTL    604800
@       IN      SOA     ns.kkarma.ee. root.too.ee. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
kkarma.ee. IN      NS      ns.kkarma.ee.
kkarma.ee. IN      MX      10 mail.kkarma.ee.
ns.kkarma.ee.      IN      A       192.168.6.87
mail.kkarma.ee.    IN      A       192.168.6.87
www.kkarma.ee.     IN      CNAME       kkarma.ee.
kkarma.ee. IN      A   192.168.6.87
;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              3         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
6.168.192.in-addr.arpa.       IN     NS     ns.ssurva.ee.
88.6.168.192.in-addr.arpa.    IN     PTR    ns.ssurva.ee.
88.6.168.192.in-addr.arpa.    IN     PTR    mail.ssurva.ee.
87.6.168.192.in-addr.arpa.    IN     PTR    mail.kkarma.ee.

E-posti tarkvara paigaldus

Kõik installeerimised on tehtud root kasutaja alt, kui toiminguid tehakse mõne muu kasutaja alt siis tuleb iga käsu ette lisada sudo !

MTA ehk Mail Transfer Agent on Postfix:

 apt-get install postfix

Rämpspostifilter SpamAssassin:

 apt-get install spamassassin

Antiviirus ClamSMTP:

 apt-get install clamsmtp

MDA ehk Mail Delivery Agent on Courier:

 apt-get install courier-imap

SASL autentimiseks:

 apt-get install libsasl2-2 sasl2-bin

Kirjade vastuvõtmine

Postfix kuulab pordil 25 ning saadab kirjad edasi 10030 pordile, kus ClamSMTP teeb viirusetõrjet. Peale seda ClamSMTP saadab need edasi 10025 pordile, kus Postfix nad uuesti vastu võtab ja teeb rämpsposti filtreerimist. Kirjad mis on läbinud sellise ahela paigutatakse ~/Maildir alla.

Postfix

Postfix võtab vastu posti ka väljastpoolt ning salvestab vaikmisi /var/mail alla, selleks et kasutada uuemat Maildir formaati, mille korral paigutatakse kirjad ~/Maildir alla, ava /etc/postfix/main.cf ja lisa sinna:

home_mailbox = Maildir/
#Selleks, et võimaldada ITK tudengitele meile saata muuda relayhost selliseks- siis saad sisev6rgus olles sinna kirju saata: 
relayhost = earl.itcollege.ee

Tee kindlaks et mydestination viitaks kohalikule masinale (et pingida saaks):

mydestination = kkarma.ee,


Peale seda ava Postfixi peamine seadistusfail /etc/postfix/master.cf ja tee kindlaks et seal on sellised read:

smtp      inet  n       -       -       -       -       smtpd 
  1. Kuula pordil 25
  -o content_filter=clamav:127.0.0.1:10030                    
  1. Saada edasi kohaliku masia pordile 10030
10025     inet  n       -       -       -       -       smtpd 
  1. Kuula pordil 10025
  -o content_filter=spamassassin                              
  1. Saada läbi SpamAssassini UNIX socketi (vt allpool)
smtps     inet  n       -       -       -       -       smtpd 
  1. Kuula TLS'iga krüpteeritud ühendusi pordil 465
  -o smtpd_sasl_auth_enable=yes                              
# Luba autentimine läbi SASL+PAM

Sama faili lõppu tuleks veel lisada filtri definitsioon:

spamassassin unix -     n       n       -       -       pipe
        user=nobody argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

clamav      unix  -       -       n       -       16      smtp
        -o smtp_send_xforward_command=yes

Peale seadistuste muutmist tuleks Postfix'i deemon uuesti laadida:

/etc/init.d/postfix reload

SASL seadistamine

Tuleb lisada kasutaja postfix gruppi sasl:

sudo adduser postfix sasl

Ava /etc/postfix/sasl/smtpd.conf:

pwcheck_method: saslauthd
saslauthd_path: /etc/mux
mech_list: login plain

Ava SASL seadistuste fail: /etc/default/saslauthd:

START=yes
MECHANISMS="pam"
OPTIONS="-c -m /var/spool/postfix/etc"

Peale seda tuleks SASL teenus taaskäivitada:

sudo /etc/init.d/saslauthd restart

ClamSMTP seadistamine

Ava /etc/clamsmtpd.conf ja muuda selle sisu selliseks

# Port kuhu edasi suunata meilid
OutAddress: 10025

# Kuula SMTP ühendusi kohaliku masina pordil 10030
Listen: 127.0.0.1:10030

# ClamAV deemon laetakse üks kord mällu ning ta kuulab clamd.ctl UNIX socketil
# ClamSMTPD on lihtsalt üks ClamAV deemoni "klientidest" mis ühendub sinna socketisse
# Iga meili jaoks ClavAV andmebaasi laadimine oleks lihtsalt väga aeglane
ClamAddress: /var/run/clamav/clamd.ctl

# Kasutaja kellena ClamSMTPD jookseb
User: clamsmtp

TempDirectory: /var/spool/clamsmtp
PidFile: /var/run/clamsmtp/clamsmtpd.pid

#MaxConnections: 64
#TimeOut: 180
#Header: X-AV-Checked: ClamAV using ClamSMTP
#Bounce: off
#Quarantine: off
#TransparentProxy: off

Peale seadistuste muutmist tuleks ClamSMTP deemon uuesti laadida:

/etc/init.d/clamsmtp reload

SpamAssassin

Kõigepeal veendu, et /etc/default/spamassassin failis oleks, siis saab Postfix käivitada spamc rakenduse!

ENABLED=1

Tasub veel teada et pordil 783 kuulab SpamAssassin'i deemon, mille kaudu saab suvalist teksti filtreerida. Postfix kutsub välja käsurearakendust spamc, mis ühendub nimetatud pordile ning filtreerib kirju. Deemoni kinnipanemiseks või käivitamiseks võib kasutada käsku:

/etc/init.d/spamassassin start|stop

Testimine

Saatmine SMTP'ga

Selleks, et oleks lihtne testida teeme sellise faili, mille sisuks on:

import smtplib
fromaddr = "[saatja@aadress]"
toaddrs  = "[siht@aadress]"
msg = "[Sõnumisisu]?\n"
server = smtplib.SMTP('localhost')
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

Seejärel käivitame selle Python rakenduse:

python <eelpool loodud faili nimi>

Lugemine IMAP'iga

Järgnev Python programm püüab kohalikku masinasse sisse logida IMAP kaudu ning püüab tõmmata viimast e-kirja. Samas kontrollib, kas e-kirjale tehti viirusetõrjet ning rämpspostikontrolli:

# -*- coding: utf-8 -*-
import getpass, imaplib, sys
def main():
  M = imaplib.IMAP4("localhost", 143)
  print "Username: ",
  username = sys.stdin.readline().strip()
  password =  getpass.getpass()
  M.login(username, password)
  status, value = M.select()
  if status != "OK":
    print "Failed to log in"
    return
  mails = value[0]
  status, data = M.fetch( mails,'(RFC822)')
  if status != "OK":
    print "Failed to fetch mail!"
    return
  content = data[0][1]
  print content
  print "\nConclusion:"
  if "X-Virus-Scanned: ClamAV using ClamSMTP" in content:
    print "* Virus scan performed"
  else:
    print "* NO Virus scan performed!!!"
  if "X-Spam-Checker-Version: SpamAssassin" in content:
    print "* Spam check performed"
  else:
    print "* NO Spam check performed!!!"
  M.close()
  M.logout()
main()

Seejärel käivitame selle Python rakenduse:

python <eelpool loodud faili nimi>

Kontrolli kas kõik sõlmed läbitakse, seda saab kirja päisest-HEADERS'ist

Näide:

Return-Path: <testing@kkarma.localdomain>
X-Original-To: root@localhost
Delivered-To: root@localhost
Received: by kkarma.localdomain (Postfix, from userid 65534)
       id DD69C17E20; Thu, 17 Dec 2009 19:31:18 +0200 (EET)
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on kkarma.ee
X-Spam-Level: **
X-Spam-Status: No, score=2.7 required=5.0 tests=ALL_TRUSTED,MISSING_SUBJECT,
       TVD_SPACE_RATIO autolearn=no version=3.2.5
Received: from kkarma.localdomain (localhost [127.0.0.1])
       by kkarma.localdomain (Postfix) with ESMTP id 0F5BC17E1B
       for <root@localhost>; Thu, 17 Dec 2009 19:31:18 +0200 (EET)
Received: from kkarma.ee (localhost [127.0.0.1])
       by kkarma.localdomain (Postfix) with ESMTP id CCCFC17DFD
       for <root@localhost>; Thu, 17 Dec 2009 19:31:17 +0200 (EET)
Message-Id: <20091217173117.CCCFC17DFD@kkarma.localdomain>
Date: Thu, 17 Dec 2009 19:31:17 +0200 (EET)
From: testing@kkarma.localdomain
To: undisclosed-recipients:;
X-Virus-Scanned: ClamAV using ClamSMTP

Tumendatud trükis olev kiri käib Spammiroboti ja viirusetõrje töötamise kohta!

Varundamine

Varundada tuleb kõik seadistusfailid, mida muudeti:

/etc/postfix/main.cf
/etc/postfix/master.cf
/etc/default/spamassassin 
/etc/clamsmtpd.conf

Postfix, SpamAssassini ja ClamSMTP seadistuste varundamine, et oleks hea näha millal varundamine tehti lisame sellele varundamise kuupäeva, selline kuupäevaformaat(AastaKuuPäev)võimaldab kiirelt viimase faili leida:

tar cvf varundamine.`date '+%Y%m%d'`.tar /etc/postfix/* /etc/default/spamassassin /etc/clamsmtpd.conf

Taastamine

Järgneva käsuga saab kõik seaded taastada varemsalvestatud tarballist

cd / && tar xvf varundamine.tar

Kasutatud kirjandus

http://v6sa.itcollege.ee/wiki/?page=email