Setting up a mail server: Difference between revisions

From D3xt3r01.tk
Jump to navigationJump to search
Line 628: Line 628:
   rm -f /usr/lib/courier-imap/share/imapd.rand
   rm -f /usr/lib/courier-imap/share/imapd.rand
   rm -f /usr/lib/courier-imap/share/pop3d.rand
   rm -f /usr/lib/courier-imap/share/pop3d.rand
Deasemenea in /usr/lib/courier-imap/etc/imapd-ssl modificam cateva linii pentru a obliga SSL
  IMAPDSSLSTART=YES
  IMAPDSTARTTLS=YES
  IMAP_TLS_REQUIRED=1
si in /usr/lib/courier-imap/etc/pop3d-ssl setam
  POP3DSSLSTART=YES
  POP3_STARTTLS=YES
  POP3_TLS_REQUIRED=1


Configuram partea de autentificare
Configuram partea de autentificare

Revision as of 19:23, 14 July 2009

Nota de inceput: Tot ce veti citii in continuare reprezinta propria exprimare asupra cum privesc si cum inteleg eu lucrurile. Nimic de aici nu este copiat din alta parte ( inafara de poze poate din cauza lipsei imaginatiei mele si talentului meu la desene ).

De ce ?

Lumea are nevoie sa comunice repede si sigur. Eu voi incerca sa prezint cum lucreaza un server de mail, cum protejam un server de mail de virusi si spam si cum facem ca mail-urile trimise sa nu fie considerate spam. In mare: voi prezenta un server de mail postfix + courier + mysql + amavis + clamav + spamassassin + dkim pe un sistem linux fedora.

DNS

Vreau sa incep cu o mica prezentare a serviciului de DNS.

Ce se intampla atunci cand vrei sa intri pe un anumit site ?

Ce se intampla cand vrei sa trimiti un mail ?

De ce ne intereseaza ? Pentru a putea vedea intre ce anume se creeaza conexiuni si cu ce prioritati.

In lume sunt 13 servere de dns mari si tari ( a - m.root-servers.net ). Acestea stiu tot ! Cine se ocupa de ce !

Atunci cand calculatorul dumneavoastra vrea sa intre pe google.ro v-a cere ns-urilor alocate lui sa intrebe in mod aleator unul din acele 13 servere cine se ocupa de zona .ro. Ele ii vor raspunde cu 1 sau mai multe servere (ns - name servere ) de dns care se ocupa de acea zona, apoi, va intreba aleator unul din serverele din lista cu care ii s-a raspuns "Ce ip are google.ro?" la care ii se v-a spune ip-ul respectivului domeniu ( daca exista ).

Apoi calculatorul se v-a conecta la acel ip spunandu-i ca vrea google.ro de pe acel site ( in mod normal prin protocolul HTTP 1.1 (descris in RFC) care nu o sa-l descriu in aceasta lucrare ). De obicei se raspunde cu mai multe NS-uri si zone A pentru ca in caz ca unul sau mai multe e picat sa se poata incerca altul. Si cam atat.

In termeni mai expliciti el a aflat tipul A ( ip ) de informatie pentru acel domeniu insa tot acest procedeu este valabil pentru tipul MX ( mail server ). Un domeniu poate sa fie gazduit ( sa aibe pagina ) intr-un loc si serverul de mail sa fie in cu totul si cu totul alt loc. Toata chestia asta in mod normal se intampla in cateva milisecunde si se salveaza intr-un cache.

Un server cunoscut de DNS este BIND ( NAMED ) produs de ISC ( Internet Systems Consortium )

File:Dns003.gif Cam asa este folosit un server de DNS.

Un exemplu de zona pentru un domeniu ( in format pentru ISC's BIND ) este

$TTL 3D
@	IN	SOA	ns1.d3xt3r01.tk. dexter.d3xt3r01.tk. (
                        2009041801 ; Serial, todays date + todays serial
                        8H         ; Refresh
                        2H         ; Retry
                        4W         ; Expire
                        1D)        ; Minimum TTL
@		NS	ns1.d3xt3r01.tk.
@		MX	1	mail.d3xt3r01.tk.
@		TXT	"d3xt3r01 main"
localhost	A	127.0.0.1
@		A	89.46.240.254
www		A	89.46.240.254
mail		A	89.46.247.254

Aici se spune ca pentru a vizita smsro.com sau www.smsro.com ns-ul este ns1.d3xt3r01.tk , daca se doreste trimite un mail @smsro.com serverul de mail care se ocupa de mail-uri pentru acest domeniu este mail.d3xt3r01.tk si are prioritatea 1, o zona de descriere ( TXT ), www.smsro.com si smsro.com au ip-ul 89.46.240.254 si mail.smsro.com este la 89.46.247.254.

Deasemenea, nu o sa explic aici cum se configureaza in detaliu voi descrie insa in continuare configurarea unui server de mail.

Sisteme utilizate

Un server de mail de obicei este compus din mai multe parti:

server de imap/pop - care permite citirea mail-urilor (Courier, Cyrus, Dovecot, ...)

+

server de smtp - care permite trimiterea de mail-uri ( postfix, sendmail, qmail ... )

+

o interfata web de obicei - pentru accesul online printr-un browser (squirrelmail, roundcube, ...)

+

un antivirus - pentru verificarea de virusi a mail-urilor primite si trimise ( amavis, ... )

+

un scanner pentru spam-uri ( spamassassin, ... )

+

alte plugin-uri si addon-uri si patch-uri - pentru sortarea mail-urilor automata, diverse limitari si/sau imbunatatiri ( dkim, quota, mysql ... )

Despre SMTP & POP & IMAP

Protocolul SMTP ( Simple Mail Transfer Protocol ) este un protocol simplu ( text ) folosit pentru livrarea mail-urilor. El a fost prima data definit in RFC821 si ultima data editat in RFC 5321 in care este descrisa o extensie. El este foarte raspandit.

Clientul de mail foloseste SMTP pentru a trimite un mail pe cand un server de mail il foloseste si pentru a trimite si pentru a primii. Serverul determina unde anume este destinatia verificand intrarile de tip MX ( Mail eXchange ) in DNS-ul acelui domeniu. Portul standard folosit este 25.

Exemplu de comunicatie SMTP

 S: 220 smtp.example.com ESMTP Postfix
 C: HELO relay.example.org
 S: 250 Hello relay.example.org, I am glad to meet you
 C: MAIL FROM:<bob@example.org>
 S: 250 Ok
 C: RCPT TO:<alice@example.com>
 S: 250 Ok
 C: RCPT TO:<theboss@example.com>
 S: 250 Ok
 C: DATA
 S: 354 End data with <CR><LF>.<CR><LF>
 C: From: "Bob Example" <bob@example.org>
 C: To: Alice Example <alice@example.com>
 C: Cc: theboss@example.com
 C: Date: Tue, 15 Jan 2008 16:02:43 -0500
 C: Subject: Test message
 C:
 C: Hello Alice.
 C: This is a test message with 5 header fields and 4 lines in the message body.
 C: Your friend,
 C: Bob
 C: .
 S: 250 Ok: queued as 12345
 C: QUIT
 S: 221 Bye
 {The server closes the connection}


POP ( Post Office Protocol ) este sinonim cu POP3 ( ultima versiune ). Este folosit de clienti pentru a citii mail-urile de pe serverele de mail. POP si IMAP-ul sunt cele mai folosite protocoale si cunoscute aproape de orice aplicatie pentru a citii mailuri.

Exemplu de comunicatie POP

 S: <wait for connection on TCP port 110>
 C: <open connection>
 S:    +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>
 C:    APOP mrose c4c9334bac560ecc979e58001b3e22fb
 S:    +OK mrose's maildrop has 2 messages (320 octets)
 C:    STAT
 S:    +OK 2 320
 C:    LIST
 S:    +OK 2 messages (320 octets)
 S:    1 120
 S:    2 200
 S:    .
 C:    RETR 1
 S:    +OK 120 octets
 S:    <the POP3 server sends message 1>
 S:    .
 C:    DELE 1
 S:    +OK message 1 deleted
 C:    RETR 2
 S:    +OK 200 octets
 S:    <the POP3 server sends message 2>
 C:    QUIT
 S:    +OK dewey POP3 server signing off (maildrop empty)
 C:  <close connection>
 S:  <wait for next connection>

IMAP este definit in RFC1064 ultima varianta fiind IMAP4rev1 definita in RFC3501


Postfix + MySQL

Implicit, postfix ( la fel ca si celalalte servere ) foloseste pentru autentificare userii din sistem. Ceea ce poate reprezenta un risc. De aceea am ales ca autentificarea ( userii si parolele ) sa fie in MySQL. Parolele o sa fie stocate criptat in baza de date si doresc sa pot limita spatiul folosit de utilizatori. Un alt avantaj ar fi ca folosind aceasta configuratie sistemul poate deservii mii de useri si domenii. Deasemenea e mai usor de administrat pentru ca se lucreaza cu tabelele din baza de date si nu mai trebuie restartat postfix-ul la fiecare adaugare de utilizatori. Voi lucra cu SELinux-ul si firewall-ul dezactivat cel putin deocamdata pentru ca putea testa usor fiecare punct.

Deasemenea nu garantez nimic. Aceasta e doar una din multele metode prin care se poate face un server de mail. Presupun ca cine se apuca sa faca un server de mail are cunostiintele minime pentru a se putea adapta la eventualele modificari aparute in pachetele folosite.

1) Hostname-ul nostru folosit in aceasta documentatie este mail.d3xt3r01.tk . Si ip-ul intern folosit este 10.3.0.125 asa ca adaugam in /etc/hosts urmatoarea linie

   10.3.0.125 mail.d3xt3r01.tk

Daca se foloseste un ip public atunci acela se v-a folosi in locul celui folosit de mine. Adresa se specifica in /etc/hosts pentru ca serverul sa nu fie nevoit sa caute in serverul de dns pe sine si este mai usor de lucrat cu nume decat cu numere !

2) Instalam cateva utilitare si aducem sistemul cu update-urile la zi. Distributiile ( variantele de linux ) Fedora/CentOS au ca manager de pachete ( programe ) 'yum'. Alte distributii folosesc 'apt-get' ( cele bazate pe Debian/Ubuntu ) sau 'emerge' ( Gentoo ).

Pachetele pe care o sa le instalam o sa fie semnate ( pentru autentificare ) de diverse surse asa ca o sa instalam key-le pentru ele.

   rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Aducem sistemul la zi pentru a fi siguri ca avem cele mai noi pachete si nu o sa fim vulnerabili la diverse probleme aparute pe parcurs.

   yum update

Si instalam cateva pachete de care o sa avem nevoie mai tarziu ( pentru compilare de exemplu )

   yum groupinstall 'Development Tools'
   yum groupinstall 'Development Libraries'


3) Acum o sa instalam apache ( serverul de http ) , mysql ( serverul de baze de date ) , php , phpMyAdmin ( o interfata pentru a usura folosirea bazelor de date ) si altele...

yum install ntp httpd mysql-server php php-mysql php-mbstring rpm-build gcc \
mysql-devel openssl-devel cyrus-sasl-devel pkgconfig zlib-devel phpMyAdmin \
pcre-devel openldap-devel postgresql-devel expect libtool-ltdl-devel openldap-servers \
libtool gdbm-devel pam-devel

Din diverse motive nu sunt pachete gatafacute pentru courier-imap asa ca o sa le facem.

4.a) Pachetele nu trebuie create ca root ( vulnerabilitati ) asa ca o sa cream un user si o sa-i setam o parola

   useradd -m -s /bin/bash pachetedex
   passwd pachetedex

4.b) Ii dam voie lui 'pachetedex' sa execute comenzi ca 'root' ( administrator de sistem ) pentru a putea instala direct din userul acesta pachetele

   visudo

si adaugam drepturi pentru pachetedex sa execute orice comanda cu drepturi administrative

   pachetedex   ALL=(ALL)       ALL

4.c) Acum ne intram in userul 'pachetedex' si cream mediul de impachetare

su - pachetedex
mkdir $HOME/rpm
mkdir $HOME/rpm/SOURCES
mkdir $HOME/rpm/SPECS
mkdir $HOME/rpm/BUILD
mkdir $HOME/rpm/BUILDROOT
mkdir $HOME/rpm/SRPMS
mkdir $HOME/rpm/RPMS
mkdir $HOME/rpm/RPMS/i386
mkdir $HOME/rpm/RPMS/x86_64

echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros
mkdir $HOME/downloads
cd $HOME/downloads

Fiserele sursa le luam din [1] ( la momentul scrierii acestea erau ultimele versiuni )

   wget http://downloads.sourceforge.net/sourceforge/courier/courier-authlib-0.62.4.tar.bz2
   wget http://downloads.sourceforge.net/sourceforge/courier/courier-imap-4.5.1.tar.bz2
   wget http://downloads.sourceforge.net/sourceforge/courier/maildrop-2.2.0.tar.bz2

Cream primul pachet din sursa ( pachetele rezultate vor putea fi gasite in $HOME/rpm/RPMS/i386 sau $HOME/rpm/RPMS/x86_64 in caz ca folositi un sistem pe 64 de biti ). AUTHLIB contine metodele de autentificare printre care si mysql pentru courier.

   sudo rpmbuild -ta courier-authlib-0.62.4.tar.bz2
   cd $HOME/rpm/RPMS/i386

rezultatul fiind

[pachetedex@d3xt3r01 downloads]$ cd $HOME/rpm/RPMS/i386
[pachetedex@d3xt3r01 i386]$ ls -1 courier-authlib*
courier-authlib-0.62.4-1.fc10.i386.rpm
courier-authlib-debuginfo-0.62.4-1.fc10.i386.rpm
courier-authlib-devel-0.62.4-1.fc10.i386.rpm
courier-authlib-ldap-0.62.4-1.fc10.i386.rpm
courier-authlib-mysql-0.62.4-1.fc10.i386.rpm
courier-authlib-pgsql-0.62.4-1.fc10.i386.rpm
courier-authlib-pipe-0.62.4-1.fc10.i386.rpm
courier-authlib-userdb-0.62.4-1.fc10.i386.rpm

De aici o sa instalam doar 3 pachete.

   sudo rpm -iUvh courier-authlib-0.62.4-1.fc10.i386.rpm courier-authlib-devel-0.62.4-1.fc10.i386.rpm courier-authlib-mysql-0.62.4-1.fc10.i386.rpm

Ne intoarcem in directorul downloads si cream pachetele pentru courier-imap, serverul in sine ( fara sudo pentru ca se va plange ca e lansat ca root )

Courier foloseste FAM. Fam este un sistem de monitorizare a fisierelor si poate anunta serverul de imap rapid despre modificari facute ( mail-uri noi ). El a fost inlocuit de GAMIN ( platforma noua de dezvoltare si echipa noua ). Deoarece FAM este inlocuit de GAMIN o sa instalam noua sursa generata si o sa stergem partea in care vrea sa foloseasca FAM

Fisierele .spec spun utilitarului de impachetare cum sa foloseasca sursa, cum sa o compileze si cum sa creeze pachetul final.

   cd $HOME/downloads
   tar -xjf courier-imap-4.5.1.tar.bz2

si editam fisierul courier-imap.spec in care o sa facem partea urmatoare

 %if %suse_version
 BuildPreReq: rpm >= 3.0.5 /usr/bin/sed %([ %{suse_version} -gt 819 ] && echo /usr/include/fam.h)
 %else
 BuildPreReq: rpm >= 4.0.2 sed /usr/include/fam.h
 %endif

sa fie

 %if %suse_version
 BuildPreReq: rpm >= 3.0.5 /usr/bin/sed
 %else
 BuildPreReq: rpm >= 4.0.2 sed
 %endif

si recompilam ( ca un user normal pentru ca nu accepta compilarea ca root )

   cp $HOME/downloads/courier-imap-4.5.1.tar.bz2 $HOME/rpm/SOURCES/
   rpmbuild -ba courier-imap.spec

Pachetele rezultate ar trebuii sa fie

courier-imap-4.5.1-1.10.i386.rpm
courier-imap-debuginfo-4.5.1-1.10.i386.rpm

si il instalam

cd $HOME/rpm/RPMS/i386
sudo rpm -iUvh courier-imap-4.5.1-1.10.i386.rpm

Si ultimul pachet ... Maildrop, este un agent de livrare al mail-urilor cu capabilitati de filtrare. Si el foloseste fam, aplicam aceeasi solutie ca si la courier-imap.

   cd $HOME/downloads
   tar -xjf maildrop-2.2.0.tar.bz2

editam maildrop.spec astfel incat:

 BuildRequires: /usr/include/fam.h gdbm-devel pcre-devel

sa fie

 BuildRequires: gdbm-devel pcre-devel

si

   cp $HOME/downloads/maildrop-2.2.0.tar.bz2 $HOME/rpm/SOURCES/
   sudo rpmbuild -ba maildrop.spec

pachetele rezultate fiind

maildrop-2.2.0-1.10.i386.rpm
maildrop-debuginfo-2.2.0-1.10.i386.rpm
maildrop-devel-2.2.0-1.10.i386.rpm
maildrop-man-2.2.0-1.10.i386.rpm

si il instalam

sudo rpm -iUvh maildrop-2.2.0-1.10.i386.rpm

Pasul urmator este sa luam sursa pachetului postfix si sa aplicam patchul "Quota" pentru a putea limita un utilizator la o casuta postala de ce marime dorim noi.

5) Sursa pachetului postfix pentru distributia mea v-a fi luata de pe un mirror oarecare pentru fedora 10

   wget http://ftp.iasi.roedu.net/mirrors/fedora.redhat.com/linux/updates/10/SRPMS/postfix-2.5.6-1.fc10.src.rpm
   rpm -iUvh postfix-2.5.6-1.fc10.src.rpm

Ignorati orice warning cum ca userul sau grupul mockbuild nu exista.

Probabil cand veti incerca sa luati acest pachet, a aparut o versiune mai noua. Uitati-va in directorul SRPMS si luati'l pe acela.

De pe [2] vom lua patch-ul pentru postfix-ul nostru. Acest patch da abilitatea postfix-ului sa limiteze spatiu folosit de o casuta. In acest caz [3] ( exista si varianta pentru 64biti ), vom dezarhiva si modifica postfix.spec sa foloseasca patch-ul nostru.

   cd $HOME/rpm/SOURCES
   wget http://vda.sourceforge.net/VDA/postfix-2.5.6-vda-ng.patch.gz
   gunzip postfix-2.5.6-vda-ng.patch.gz
   cd $HOME/rpm/SPECS

Cream un pachet postfix care o sa includa patch-ul pentru quota si suportul pentru mysql. Folosind un editor de texte oarecare ( vi, mcedit, nano ... ) editam postfix.spec

   nano postfix.spec

stergem

   %{?!MYSQL: %define MYSQL 1}
   %{?!PGSQL: %define PGSQL 0}

si adaugam - ii spunem sa creeze suportul pentru mysql si sa dezactiveze suportul pentru pgsql

   %define MYSQL 1
   %define PGSQL 0

Deasemenea, in sectiunea #Patches adaugam o linie pentru ca managerul de pachete sa stie sa includa si patch-ul nostru cand v-a creea noul pachet

   Patch0:	postfix-2.5.6-vda-ng.patch   

si la # Apply obligatory patches

   %patch0	-p1 -b .vda-ng

si gata, acum suntem pregatiti sa recream pachetul cu modificarile noastre incorporate.

   rpmbuild -ba postfix.spec
   

Ar trebuii sa vedem urmatoarele pachete create in $HOME/rpm/RPMS/i386

postfix-2.5.6-1.fc10.i386.rpm postfix-debuginfo-2.5.6-1.fc10.i386.rpm postfix-perl-scripts-2.5.6-1.fc10.i386.rpm

Acum instalati pachetul

   sudo rpm -iUvh postfix-2.5.6-1.fc10.i386.rpm postfix-perl-scripts-2.5.6-1.fc10.i386.rpm

Cam asta a fost partea de instalare a serverului de mail ... urmeaza configurarea


6) Pornirea mysql si setarea parolelor. Setam serviciul mysqld sa porneasca la initializarea serverului si il pornim ( in caz ca nu e deja pornit ) Partea aceasta poate fi ignorata in caz ca aveti un server mysql / http si phpMyAdmin deja instalat si configurat.

   chkconfig --levels 235 mysqld on
   /etc/init.d/mysqld start

Setam parola utilizatorului root la mysql din linia de comanda scriem:

   mysqladmin -u root password par0lan0uap3ntrusql
   mysqladmin -h mail.d3xt3r01.tk -u root password par0lan0uap3ntrusql

Si pentru serverul de HTTP editam /etc/httpd/conf.d/phpMyAdmin.conf si comentam ( cu # ) sectiunea cu <Directory .... > .... </Directory> pentru a permite accesul la phpMyAdmin si inafara serverului local dupa care setam http'ul sa porneasca la inceput si il pornim.

   chkconfig --levels 235 httpd on
   /etc/init.d/httpd start

Acum phpMyAdmin ar trebuii sa fie disponibil la http://mail.d3xt3r01.tk/phpMyAdmin sau http://localhost/phpMyAdmin ( inlocuiti mail.d3xt3r01.tk cu zona dumneavoastra ).

7) Initializarea bazei de date pentru Courier/Postfix.

Cream o baza de date numita vmail

 mysqladmin -u root -p create vmail

si intram in linia de comanda a mysql

 mysql -u root -p

Aici cream userul mail_admin cu parola P4r0la si ii dam drepturi asupra bazei de date vmail . Acest utilizator v-a fi folosit de postfix/courier pentru conectarea la baza de date.

 GRANT SELECT, INSERT, UPDATE, DELETE ON vmail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'P4r0la';
 FLUSH PRIVILEGES;

Tot in linia de comanda incepem sa cream structura bazei de date.

 use mail;
 CREATE TABLE domains (
   domain varchar(50) NOT NULL,
   PRIMARY KEY (domain)
 ) TYPE=MyISAM;
 CREATE TABLE forwardings (
   source varchar(80) NOT NULL,
   destination TEXT NOT NULL,
   PRIMARY KEY (source)
 ) TYPE=MyISAM;
 CREATE TABLE users (
   email varchar(80) NOT NULL,
   password varchar(20) NOT NULL,
   quota INT(10) DEFAULT '10485760',
   PRIMARY KEY (email)
 ) TYPE=MyISAM;
 CREATE TABLE transport (
   domain varchar(128) NOT NULL default ,
   transport varchar(128) NOT NULL default ,
   UNIQUE KEY domain (domain)
  ) TYPE=MyISAM;
  quit;


Tabela 'domains' este pentru a specifica postfix-ului pentru ce domenii accepta mail-uri.

Tabela 'forwardings' este pentru a putea crea alias-uri sau pentru a trimite un mail mai departe catre o alta adresa

Tabela 'users' stocheaza toate informatiile pentru utilizatorii virtuali si parola in format criptat si marimea casutei ( 10485760 = 10MB ).

Tabela 'transport' este pentru utilizatorii avansati si da voie ca pentru o anumita casuta sau pentru un domeniu sa trimita mail-urile mai departe catre un alt server.

Configurarea POSTFIX && COURIER

Pana aici am instalat ce aveam nevoie pentru un server de mail. Serverul de POP/IMAP/SMTP. Acum trebuie configurate. In aceasta sectiune voi explica ce trebuie facut pentru spam-uri, pentru virusi si o sa testam functionalitatea.

Acum trebuie sa ii spunem postfix-ului unde gaseste informatiile pentru o casuta de mail. Voi folosi 127.0.0.1 inloc de "localhost" pentru conectarea la baza de date pentru ca postfix-ul este lansat intr-un jail chroot si nu are access la socket-ul de comunicatii interne.

fisierele sunt

 /etc/postfix/mysql-virtual_domains.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT domain AS virtual FROM domains WHERE domain='%s'
 hosts = 127.0.0.1
 /etc/postfix/mysql-virtual_forwardings.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT destination FROM forwardings WHERE source='%s'
 hosts = 127.0.0.1
 /etc/postfix/mysql-virtual_mailboxes.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
 hosts = 127.0.0.1
 /etc/postfix/mysql-virtual_email2email.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT email FROM users WHERE email='%s'
 hosts = 127.0.0.1
 /etc/postfix/mysql-virtual_transports.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT transport FROM transport WHERE domain='%s'
 hosts = 127.0.0.1
 /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
 user = mail_admin
 password = P4r0la
 dbname = vmail
 query = SELECT quota FROM users WHERE email='%s'
 hosts = 127.0.0.1

Si dam permisiunile corecte fisierelor de configurare pentru ca postfix sa le poata citii si utiliza.

 chmod o= /etc/postfix/mysql-virtual_*.cf
 chgrp postfix /etc/postfix/mysql-virtual_*.cf

Acum .. configurarea serverului .. majoritatea setarilor folosite pot fi gasite in /usr/share/doc/postfix-2.5.6/README_FILES/

 # Dorim ca sa obligam serverul respectiv sa salute conform standardelor. Unele utilitare de spam nu folosesc HELO/EHLO corect.
 smtpd_helo_required = yes
 disable_vrfy_command = yes
 # Caile catre fisierele folosite pentru livrarea mail-urilor
 sendmail_path = /usr/sbin/sendmail.postfix
 newaliases_path = /usr/bin/newaliases.postfix
 mailq_path = /usr/bin/mailq.postfix
 setgid_group = postdrop
 html_directory = no
 manpage_directory = /usr/share/man
 sample_directory = /usr/share/doc/postfix-2.5.6/samples
 readme_directory = /usr/share/doc/postfix-2.5.6/README_FILES
 # Foloseste doar ipv4 nu si ipv6
 inet_protocols = ipv4
 # hostul propriu. TREBUIE SETAT NEAPARAT CA ADEVARATUL HOST !
 myhostname = mail.d3xt3r01.tk
 # Retelele private care sunt acceptate si scutite de diverse verificari.
 mynetworks = 127.0.0.0/8, 10.3.0.0/24
 # Limite.
 mailbox_size_limit = 1048576000
 virtual_mailbox_limit = 1050576000
 message_size_limit = 1048576000
 virtual_alias_domains =
 # De unde sa ia lista de alias'uri...
 virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
 virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = /home/vmail
 virtual_uid_maps = static:5000
 virtual_gid_maps = static:5000
 # Accepta conexiuni autentificate si sigure.
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 # Diverse verificari la expeditor
 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 smtpd_data_restrictions = reject_unauth_pipelining, permit
 smtpd_use_tls = yes
 # Key pentru conexiunile securizate
 smtpd_tls_cert_file = /etc/postfix/smtpd.cert
 smtpd_tls_key_file = /etc/postfix/smtpd.key
 transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
 virtual_create_maildirsize = yes
 virtual_mailbox_extended = yes
 virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
 virtual_mailbox_limit_override = yes
 # Mesaj cand se depaseste limita
 virtual_maildir_limit_message = "The user you are trying to reach is over quota."
 # Respinge mail-urile care vin dupa ce se depaseste limita
 virtual_overquota_bounce = yes
 proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
 receive_override_options = no_address_mappings
 # Ip-ul local folosit pentru a trimite mail-uri.
 smtp_bind_address = 10.3.0.125

Dupa care cream certificatele folosite pentru conexiunile securizate.

Pentru postfix:

   cd /etc/postfix
   openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

Si o sa scriem ceva de genul:

 Country Name (2 letter code) [GB]: RO <-- Tara (e.g., "US").
 State or Province Name (full name) [Berkshire]: Dolj <-- Introduceti judetul
 Locality Name (eg, city) [Newbury]: Craiova <-- Orasul
 Organization Name (eg, company) [My Company Ltd]: D3xt3r01 <-- Organizatia
 Organizational Unit Name (eg, section) []: IT <-- Departamentul
 Common Name (eg, your name or your server's hostname) []: mail.d3xt3r01.tk <-- numele calificat al acestui host.
 Email Address []: dexter@d3xt3r01.tk <-- Adresa de mail.

Si setam permisiunile pentru cheie.

   chmod o= /etc/postfix/smtpd.key

Pentru Courier o sa stergem certificatul generat automat si o sa cream unul al nostru:

Incepem prin a edita /usr/lib/courier-imap/etc/imapd.cnf si /usr/lib/courier-imap/etc/pop3d.cnf dupa care setam detaliile viitorul certificat generat. Un exemplu ar fi:

  [ req_dn ]
 C=RO
 ST=DOLJ
 L=Craiova
 O=Courier Mail Server
 OU=Automatically-generated IMAP SSL key
 CN=mail.d3xt3r01.tk
 emailAddress=dexter@d3xt3r01.tk

Si continuam cu

 rm -f /usr/lib/courier-imap/share/imapd.pem
 rm -f /usr/lib/courier-imap/share/pop3d.pem
 rm -f /usr/lib/courier-imap/share/imapd.rand
 rm -f /usr/lib/courier-imap/share/pop3d.rand
 rm -f /usr/lib/courier-imap/share/imapd.key
 rm -f /usr/lib/courier-imap/share/pop3d.key
 rm -f /usr/lib/courier-imap/share/imapd.cert
 rm -f /usr/lib/courier-imap/share/pop3d.cert
 \cp /dev/null /usr/lib/courier-imap/share/imapd.pem # YES with \ before so it won't prompt you to overwrite
 \cp /dev/null /usr/lib/courier-imap/share/pop3d.pem # YES with \ before so it won't prompt you to overwrite
 chmod 600 /usr/lib/courier-imap/share/imapd.pem
 chmod 600 /usr/lib/courier-imap/share/pop3d.pem
 chown root /usr/lib/courier-imap/share/imapd.pem
 chown root /usr/lib/courier-imap/share/pop3d.pem
 dd if=/dev/urandom of=/usr/lib/courier-imap/share/imapd.rand count=1
 dd if=/dev/urandom of=/usr/lib/courier-imap/share/pop3d.rand count=1
 /usr/bin/openssl req -new -x509 -days 365 -nodes \
    -config /usr/lib/courier-imap/etc/imapd.cnf -out /usr/lib/courier-imap/share/imapd.pem \
    -keyout /usr/lib/courier-imap/share/imapd.pem
 /usr/bin/openssl req -new -x509 -days 365 -nodes \
    -config /usr/lib/courier-imap/etc/pop3d.cnf -out /usr/lib/courier-imap/share/pop3d.pem \
    -keyout /usr/lib/courier-imap/share/pop3d.pem
 /usr/bin/openssl gendh -rand /usr/lib/courier-imap/share/imapd.rand 512 >>/usr/lib/courier-imap/share/imapd.pem
 /usr/bin/openssl gendh -rand /usr/lib/courier-imap/share/pop3d.rand 512 >>/usr/lib/courier-imap/share/pop3d.pem
 /usr/bin/openssl x509 -subject -dates -fingerprint -noout -in /usr/lib/courier-imap/share/imapd.pem
 /usr/bin/openssl x509 -subject -dates -fingerprint -noout -in /usr/lib/courier-imap/share/pop3d.pem
 rm -f /usr/lib/courier-imap/share/imapd.rand
 rm -f /usr/lib/courier-imap/share/pop3d.rand

Deasemenea in /usr/lib/courier-imap/etc/imapd-ssl modificam cateva linii pentru a obliga SSL

 IMAPDSSLSTART=YES
 IMAPDSTARTTLS=YES
 IMAP_TLS_REQUIRED=1

si in /usr/lib/courier-imap/etc/pop3d-ssl setam

 POP3DSSLSTART=YES
 POP3_STARTTLS=YES
 POP3_TLS_REQUIRED=1

Configuram partea de autentificare

   /usr/lib/sasl2/smtpd.conf
 pwcheck_method: authdaemond
 log_level: 3
 mech_list: PLAIN LOGIN
 authdaemond_path:/var/spool/authdaemon/socket

Oprim sendmail si pornim postfix, saslauthd si courier-authlib

 chmod 755 /var/spool/authdaemon
 chkconfig --levels 235 courier-authlib on
 /etc/init.d/courier-authlib start
 chkconfig --levels 235 sendmail off
 chkconfig --levels 235 postfix on
 chkconfig --levels 235 saslauthd on
 /etc/init.d/sendmail stop
 /etc/init.d/postfix start
 /etc/init.d/saslauthd start

Acum vom spune courier-ului sa faca autentificarea folosind baza noastra de date.

  /etc/authlib/authdaemonrc

trebuie sa aibe specificat

 authmodulelist="authmysql"

inloc de ce are el ..

 /etc/authlib/authmysqlrc

trebuie sa arate asa ( modificati parola pentru acces la mysql si aici )

 MYSQL_SERVER localhost
 MYSQL_USERNAME mail_admin
 MYSQL_PASSWORD P4r0la
 MYSQL_PORT 3306
 MYSQL_DATABASE mail
 MYSQL_USER_TABLE users
 MYSQL_CRYPT_PWFIELD password
 MYSQL_UID_FIELD 5000
 MYSQL_GID_FIELD 5000
 MYSQL_LOGIN_FIELD email
 MYSQL_HOME_FIELD "/home/vmail"
 MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
 MYSQL_QUOTA_FIELD quota

si restartam courier-ul

  chkconfig --levels 235 courier-imap on
  /etc/init.d/courier-authlib restart
  /etc/init.d/courier-imap restart

si facem prima proba

  telnet localhost pop3 

si daca suntem norocosi .. rezultatul ar trebuii sa arate asa:

  [dexter@d3xt3r01 ~]$ telnet localhost pop3
  Trying 127.0.0.1...
  Connected to 127.0.0.1
  Escape character is '^]'.
  +OK Hello there.
  quit
  +OK Better luck next time.
  Connection closed by foreign host.
  [dexter@d3xt3r01 ~]$ 

TOATE BUNE SI FRUMOASE !!!

AntiVirus && Antispam

Vom folosi spamassassin ca protectie impotriva spam-urilor si amavis+clamav pentru antivirus.

  yum install amavisd-new spamassassin clamav clamav-data clamav-server clamav-update unzip bzip2 unrar

Editam /etc/amavisd/amavisd.conf avem cateva modificari de facut.

1) Specificam domeniul: $mydomain = 'mail.d3xt3r01.tk';

2) Ne jucam un pic cu setarile pentru spam ( modificati dupa preferinte )

 $sa_tag_level_deflt  = 2.0;
 $sa_tag2_level_deflt = 4.0;
 $sa_kill_level_deflt = $sa_tag2_level_deflt;
 $sa_dsn_cutoff_level = 10;

3) Facem cateva verificari in sql ( nu uitati sa modificati parola .. )

@lookup_sql_dsn =

  ( ['DBI:mysql:database=mail;host=127.0.0.1;port=3306', 'mail_admin', 'P4r0la'] );

$sql_select_policy = 'SELECT "Y" as local FROM domains WHERE CONCAT("@",domain) IN (%k)'; $sql_select_white_black_list = undef; $recipient_delimiter = '+'; $replace_existing_extension = 1; $localpart_is_case_sensitive = 0;

4) Setam $recipient_delimiter = undef; undeva mai jos ( nu unde il avem noi ).

5) Modificam raspunsurile la diverse probleme ( modificati dupa plac )

 $final_virus_destiny      = D_REJECT;
 $final_banned_destiny     = D_REJECT;
 $final_spam_destiny       = D_PASS;
 $final_bad_header_destiny = D_PASS;

Amavis este programul care uneste CLAMAV de POSTFIX. Postfix trimite mail-ul lui amavis care la randul lui il da lui SPAMASSASSIN si CLAMAV pentru a scana mail-ul. Va rog sa va uitati in /etc/amavisd/amavisd.conf pentru alte modificari, fisierul e destul de bine explicat.

Cand am instalat CLAMAV-ul, un cronjob s-a instalat care se ruleaza la fiecare 3 ore pentru a updata baza de date. Acesta insa nu lucreaza decat daca este activat in /etc/sysconfig/freshclam asa ca adaugati un comment ( # ) in fata FRESHCLAM_DELAY= si stergeti linia "Example" sau comentati'o.

Acum updatam baza de date a Clamav si pornim ClamAV si amavis.

 chkconfig --levels 235 amavisd on
 chkconfig --levels 235 clamd.amavisd on
 /usr/bin/freshclam
 /etc/init.d/amavisd start
 /etc/init.d/clamd.amavisd start

Trebuie sa ii spunem postfix-ului sa trimita mail-urile noi prin amavis.

 postconf -e 'content_filter = amavis:[127.0.0.1]:10024'

si adaugam la sfarsit in /etc/postfix/master.cf urmatoarele linii

 127.0.0.1:10025 inet n - - - - smtpd
       -o content_filter=
      	-o local_recipient_maps=
       -o relay_recipient_maps=
      	-o smtpd_restriction_classes=
       -o smtpd_client_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8,10.3.0.0/24
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o strict_rfc821_envelopes=yes
       -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
       -o smtpd_bind_address=127.0.0.1

si repornim postfix-ul

 /etc/init.d/postfix restart

Razor, Pyzor si DCC sunt o retea de filtre de spam.

   yum install perl-Razor-Agent pyzor

apoi le initializam

 chmod -R a+rX /usr/share/doc/pyzor-0.4.0 /usr/bin/pyzor /usr/bin/pyzord
 chmod -R a+rX /usr/lib/python2.5/site-packages/pyzor
 su -m amavis -c 'pyzor --homedir /var/spool/amavisd discover'
 su -m amavis -c 'razor-admin -home=/var/spool/amavisd -create'
 su -m amavis -c 'razor-admin -home=/var/spool/amavisd -register'

si instalam DCC ( comanda cd s-ar putea sa spuna ca nu exista directorul .. poate a aparut alta versiune de cand scriu eu )

 cd /tmp
 wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z
 tar xzvf dcc-dccproc.tar.Z
 cd dcc-dccproc-1.3.72
 ./configure --with-uid=amavis
 make
 make install
 chown -R amavis:amavis /var/dcc
 ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

in /etc/mail/spamassassin/local.cf o sa avem

 use_dcc 1
 dcc_path /usr/local/bin/dccproc
 use_pyzor 1
 pyzor_path /usr/bin/pyzor
 use_razor2 1
 razor_config /var/spool/amavisd/razor-agent.conf
 use_bayes 1
 use_bayes_rules 1
 bayes_auto_learn 1

si in /etc/mail/spamassassin/v310.pre

 loadplugin Mail::SpamAssassin::Plugin::DCC
 loadplugin Mail::SpamAssassin::Plugin::Pyzor
 loadplugin Mail::SpamAssassin::Plugin::Razor2
 loadplugin Mail::SpamAssassin::Plugin::SpamCop
 loadplugin Mail::SpamAssassin::Plugin::AWL
 loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
 loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
 loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
 loadplugin Mail::SpamAssassin::Plugin::ReplaceTags

Puteti verifica spamassassin-ul folosind

  spamassassin --lint

Nu ar trebuii sa dea nici o eroare. Si pornim amavis-ul

  /etc/init.d/amavisd restart

Si facem un script cu reguli utile de le-am gasit pe net si il facem executabil

   /usr/local/sbin/sa_rules_update.sh
 #!/bin/sh
 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/71_sare_redirect_pre3.0.0.cf -O 71_sare_redirect_pre3.0.0.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_bayes_poison_nxm.cf -O 70_sare_bayes_poison_nxm.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_html.cf -O 70_sare_html.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_html4.cf -O 70_sare_html4.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_html_x30.cf -O 70_sare_html_x30.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_header0.cf -O 70_sare_header0.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_header3.cf -O 70_sare_header3.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_header_x30.cf -O 70_sare_header_x30.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_specific.cf -O 70_sare_specific.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_adult.cf -O 70_sare_adult.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/72_sare_bml_post25x.cf -O 72_sare_bml_post25x.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/99_sare_fraud_post25x.cf -O 99_sare_fraud_post25x.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_spoof.cf -O 70_sare_spoof.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_random.cf -O 70_sare_random.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_oem.cf -O 70_sare_oem.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_genlsubj0.cf -O 70_sare_genlsubj0.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_genlsubj3.cf -O 70_sare_genlsubj3.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_genlsubj_x30.cf -O 70_sare_genlsubj_x30.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_unsub.cf -O 70_sare_unsub.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/70_sare_uri.cf -O 70_sare_uri.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.timj.co.uk/linux/bogus-virus-warnings.cf -O bogus-virus-warnings.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.yackley.org/sa-rules/evilnumbers.cf -O evilnumbers.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.stearns.org/sa-blacklist/random.current.cf -O random.current.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/88_FVGT_body.cf -O 88_FVGT_body.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/88_FVGT_rawbody.cf -O 88_FVGT_rawbody.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/88_FVGT_subject.cf -O 88_FVGT_subject.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/88_FVGT_headers.cf -O 88_FVGT_headers.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/88_FVGT_uri.cf -O 88_FVGT_uri.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/99_FVGT_DomainDigits.cf -O 99_FVGT_DomainDigits.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/99_FVGT_Tripwire.cf -O 99_FVGT_Tripwire.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.rulesemporium.com/rules/99_FVGT_meta.cf -O 99_FVGT_meta.cf &> /dev/null
 cd /etc/mail/spamassassin/ &> /dev/null && /usr/bin/wget http://www.nospamtoday.com/download/mime_validate.cf -O mime_validate.cf &> /dev/null
 /etc/init.d/amavisd restart &> /dev/null
 exit 0

si il facem executabil

 chmod 755 /usr/local/sbin/sa_rules_update.sh

si il lansam o data sa puna regulile noi

   /usr/local/sbin/sa_rules_update.sh

si il punem in crontab sa se lanseze in mod regulat

 crontab -e

si adaugam urmatoarea linie

 23 4 */2 * * /usr/local/sbin/sa_rules_update.sh &> /dev/null

Scriptul se va lansa la fiecare 2 zile la ora 4:23 Acum adaugam niste notificari cand cineva depaseste limita la casuta.

 cd /usr/local/sbin/
 wget http://puuhis.net/vhcs/quota.txt
 mv quota.txt quota_notify
 chmod 755 quota_notify

si editam /usr/local/sbin/quota_notify

 my $POSTFIX_CF = "/etc/postfix/main.cf";
 my $MAILPROG = "/usr/sbin/sendmail -t";
 my $WARNPERCENT = 80;
 my @POSTMASTERS = ('dexter@d3xt3r01.tk');
 my $CONAME = 'ISP.tld';
 my $COADDR = 'dexter@d3xt3r01.tk';
 my $SUADDR = 'dexter@d3xt3r01.tk';
 my $MAIL_REPORT = 1;
 my $MAIL_WARNING = 1

si il punem la crontab -e

 0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

Testam postfix-ul

 telnet localhost 25

si dupa ce vedem linia de initializare a postfix ..

 ehlo localhost

primele 2 linii ar trebuii sa fie

 250-STARTTLS
 250-AUTH LOGIN PLAIN 

rezultatul complet

 [dexter@localhost xchatlogs]$ telnet 127.0.0.1 25
 Trying 127.0.0.1...
 Connected to 127.0.0.1
 Escape character is '^]'.
 220 mail.d3xt3r01.tk ESMTP Postfix
 EHLO localhost
 250-mail.d3xt3r01.tk
 250-PIPELINING
 250-SIZE 1048576000
 250-ETRN
 250-STARTTLS
 250-AUTH LOGIN PLAIN
 250-AUTH=LOGIN PLAIN
 250-ENHANCEDSTATUSCODES
 250-8BITMIME
 250 DSN
 quit
 221 2.0.0 Bye
 Connection closed by foreign host.

Quit am scris eu ca sa revin la linia de comanda.

TEST FINAL

In linia de comanda dam

 mysql -u mail_admin -p -D vmail

si incepem .. ii spunem postfix-ului ca accepta mail-uri pentru d3xt3r01.tk si cream un mail ( dexter@d3xt3r01.tk ) cu parola parolamail si limita la 10M

   INSERT INTO `domains` (`domain`) VALUES ('d3xt3r01.tk');
   INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('dexter@d3xt3r01.tk', ENCRYPT('parolamail'), 10485760);

Putem crea proba@d3xt3r01.tk sa se duca tot catre dexter@d3xt3r01.tk

   INSERT INTO `forwardings` (`source`, `destination`) VALUES ('proba@d3xt3r01.tk', 'dexter@d3xt3r01.tk');

Optional putem spune ca mail-urile pentru domeniul d3xt3r01.tk se ocupa alt server ( smsro.com de exemplu ).

   INSERT INTO `transport` (`domain`, `transport`) VALUES ('d3xt3r01.tk', 'smtp:smsro.com');

Tabela forwardings poate fi asa

 source 	: destination : explicatie
 info@example.com : sales@example.com : Redirectioneaza maiul-urile de la info@example.com la sales@example.com
 @example.com :thomas@example.com : Creaza o casuta de tip Catch-All pentru  thomas@example.com. Toate mail-urile pentru example.com vor venii in thomas@example.com, inafara de userii existenti in tabela users.
 @example.com : @anotherdomain.tld : Redirectioneaza toate mail-urile catre example.com catre acelasi user la  anotherdomain.tld. Ex. mail-ul thomas@example.com v-a fi trimis catre thomas@anotherdomain.tld.
 info@example.com : sales@example.com, billing@anotherdomain.tld : Trimite mail-ul info@example.com catre doua sau mai multe mail-uri. Toate mail-urile din destinatie vor primii o copie.

Tabela transport poate avea intrari de tipul

 domain - transport - explicatie
 example.com - : - Livreaza mail-urile pentru example.com local.
 example.com - smtp:mail.anotherdomain.tld - Livreaza toate mail-urile pentru example.com prin smtp catre serverul mail.anotherdomain.com.
 example.com - smtp:mail.anotherdomain.tld:2025 - Livreaza toate mail-urile pentru example.com prin smtp catre serverul mail.anotherdomain.com. dar pe portul 2025, nu 25 care este implicit pentru  smtp.
 example.com - 
 smtp:[1.2.3.4]
 smtp:[1.2.3.4]:2025
 smtp:[mail.anotherdomain.tld] - Parantezele drepte impiedica Postfix sa faca verificari de intrari MX in DNS pentru adresele de ip din parantezele drepte.
 .example.com - smtp:mail.anotherdomain.tld - Mail-urile pentru orice subdomeniu din example.com v-or fi livrate catre mail.anotherdomain.tld
 * - smtp:mail.anotherdomain.tld - Toate mail-urile sunt livrate catre mail.anotherdomain.tld
 joe@example.com - smtp:mail.anotherdomain.tld - Mail-urile pentru joe@example.com sunt livrate catre mail.anotherdomain.tld. 

Pentru ca postfix foloseste cache la lista de transport, trebuie sa dam

  postfix reload 

in linia de comanda de fiecare data cand modificam tabela transport. Trebuie sa se tina cont de faptul ca tabela transport este parcursa de la inceput pana la sfarsit.

si dam quit; pentru a reveni la linia de comanda


LINKS

DNS

Internet Systems Consortium BIND Courier WIKI

IMAP/POP Server

Courier Homepage Cyrus WIKI Cyrus Homepage Dovecot WIKI Dovecot Homepage

SMTP Server

Sendmail WIKI Sendmail Homepage Postfix WIKI Postfix WIKI Qmail WIKI Qmail WIKI Qmail Homepage

Interfete Webmail

Roundcube RoundCube WIKI SquirrelMail SquirrelMail WIKI

Antivirus

Amavis ClamAV Homepage ClamAV WIKI

Antispam

Spamassassin Spamassassin WIKI Spamassassin WIKI

DKIM

DK WIKI DKIM WIKI DKIM Homepage

Altele.

Patch QUOTA PhpMyAmin Fedora