Setting up a mail server: Difference between revisions
mNo edit summary |
|||
(7 intermediate revisions by the same user not shown) | |||
Line 208: | Line 208: | ||
mkdir $HOME/rpm/RPMS | mkdir $HOME/rpm/RPMS | ||
mkdir $HOME/rpm/RPMS/i386 | mkdir $HOME/rpm/RPMS/i386 | ||
mkdir $HOME/rpm/RPMS/i586 | |||
mkdir $HOME/rpm/RPMS/x86_64 | mkdir $HOME/rpm/RPMS/x86_64 | ||
Line 446: | Line 447: | ||
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. | 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== | ==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. | 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. | ||
Line 564: | Line 565: | ||
Dupa care cream certificatele folosite pentru conexiunile securizate. | Dupa care cream certificatele folosite pentru conexiunile securizate. | ||
Pentru postfix: | |||
cd /etc/postfix | cd /etc/postfix | ||
Line 581: | Line 584: | ||
chmod o= /etc/postfix/smtpd.key | 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 | Configuram partea de autentificare | ||
Line 674: | Line 734: | ||
3) Facem cateva verificari in sql ( nu uitati sa modificati parola .. ) | 3) Facem cateva verificari in sql ( nu uitati sa modificati parola .. ) | ||
@lookup_sql_dsn = | @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_policy = 'SELECT "Y" as local FROM domains WHERE CONCAT("@",domain) IN (%k)'; | ||
$sql_select_white_black_list = undef; | $sql_select_white_black_list = undef; | ||
$recipient_delimiter = '+'; | $recipient_delimiter = '+'; | ||
$replace_existing_extension = 1; | $replace_existing_extension = 1; | ||
$localpart_is_case_sensitive = 0; | $localpart_is_case_sensitive = 0; | ||
4) Setam $recipient_delimiter = undef; undeva mai jos ( nu unde il avem noi ). | 4) Setam $recipient_delimiter = undef; undeva mai jos ( nu unde il avem noi ). |
Latest revision as of 11:24, 26 January 2012
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/i586
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.