Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
INSTALACINYCONFIGURACINDEUN
SERVIDORDECORREOCOMPLETOENLINUX
JUEVES,01DEENERODE2015Categoras:LinuxInternet
Esteartculoseleeenaprox.70minutos.
UnodelosserviciosmsimportantesdeInternetessin
duda el correo electrnico, y al igual que con muchos
otros servicios, no hay nada que gestione mejor el
correoqueGNU/Linux.
Viendo que este artculo puede resultar bastante extenso, voy a dividirlo un poco y a crear un
pequeondice:
1.Unpocodehistoriaantesdeempezar
2.ConfiguracindelDNSdeldominiopararecibiremails
3.Creacindelabasededatosdeusuarios
4.InstalacindePostfixcomoservidorSMTP
5.ConfiguracindeSASLparaautenticacindePostfix
6.InstalacindeCouriercomoservidorPOP/IMAP
7.Instalacindeantivirusyantispam
8.Estadsticasymonitorizacin
9.Referencias
Vamosconelprimerodelospuntos...
UNPOCODEHISTORIAANTESDEEMPEZAR
Sideverdadtienesmuchsimaprisaenmontartuservidordecorreo,puedessaltartestapartee
irdirectamentealcaptulo2,peroesimportantesaberquvasainstalar,porqulovasahacery
cmofuncionarealmenteelmundodelcorreoelectrnico.
Hay2procesoscompletamentediferenciadoseneltemadelcorreoelectrnico:
Elenvodelmensaje:realizadomedianteelprotocoloSMTPporprogramas
llamadosMTA.
Lalecturadelmensaje:realizadamediantelosprotocolosPOPoIMAP.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 1/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Estos procesos no tiene nada que ver uno con otro, y como el uso del correo electrnico es
totalmentetransparenteparaelusuario,lamayoradeellosnilosentiendenilosdiferencia(yno
merefierosoloatusabuelosoalosmos,sinoinclusoagentedelgremiode la informtica), ni
faltaqueleshace... pero tranquilo, que si ests leyendo ste artculo significaquegraciasalos
Dioses,tunoformaspartedeesamayoradeusuarioszombis,lamersycatetosvarios.
Todo el sistema de correo electrnico se puede entender fcilmente siguiendo la analoga que
tieneconelsistemadecorreopostaldetodalavida,enelquehayoficinasdecorreos,carteros,
buzones,etc.
Cuando t quieres escribir una carta postal a alguien (olvdate del email o el mvil, haz un
esfuerzoeimagnatelo,hombre!),unavezredactadalametesenunsobreindicandoelremitente
y el destinatario, y la metes en el buzn. Un cartero recoge esa carta, y la lleva a la oficina de
correosdetubarrio,dondesilacartaesvlida(llevaladireccindeldestinatario,elsobreest
cerrado,etc)esclasificadasegnseasudestino,momentoenelcualuntransportista(ocartero)
larecogedeesaoficinaylaentregaenlaoficinadecorreosdelbarriodedichodestinatario.En
esaoficina,otroscarterosrecogenlascartasrecinllegadasylasllevanalbuzndeldestinatario,
el cul a partir de ese momento ya puede abrir su buzn cuando lo desee y coger las cartas (y
leerlasenesemomentoocuandolprefiera).
steesexactamenteelmismoprocesoquesigueelcorreoelectrnico.
Cuando tu quieres escribir un email a alguien, una vez escrito en tu cliente de correo favorito
(Thunderbird/Icedove,Evolution,~~Outlook~~,~~GMail~~, etc), estos lo envan a tu servidor de
correosaliente(laoficinadecorreosdetubarrio).All,sielemailesvalido(hayunremitenteyun
destinatario cuyo dominio existe, su servidor de correo responde, etc) se mira en el DNS del
dominioalquevadirigidoelcorreoculeselservidorSMTPdedichodominio,yselereenvael
mensajeadichoservidor(la oficina de correos del barrio del destinatario). All, si el destinatario
existe,sedejaelemailensubuzn(mailbox)alaesperadequesteseconecteasteservidor
(mediante un cliente de correo) y se descargue los mensajes que en l pudiera haber (y ya los
leercuandolquiera).
Veslaanaloga,verdad?Esprcticamentelomismo(voyatratardeilustrarelejemploconuna
grficautilizandoelgenialGraphviz,delcualyahablensteotroartculo):
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 2/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Porlotantoelprimerpasonecesarioenstacadenaeselenvodecorreo,esdecir,elMTA.
HaymuchosprogramasenGNU/LinuxqueactandeMTA.Elmsfamosodetodosseguramente
sea Sendmail, que fue uno de los primeros MTA que existieron, y fue utilizado durante mucho
tiempo en prcticamente todos los servidores SMTP de Internet. No obstante siempre se le ha
consideradodifcil de configurar, lo que unido a los numerosos problemas de seguridad que ha
tenidoensuhistoria,hoyendapodramosdecirquehasidoreemplazadoporotrosMTAscomo
porejemploQmail,EximoPostfix.
steltimoessindudamipreferido,yeselquevoyaexplicarenesteartculo.
UnaveztengamoselSMTPfuncionando,necesitaremosotrossistemasqueaccedanalosemails
queelMTAnoshayadejado.Paraestotambintenemosdiferentesybuenasopciones,comopor
ejemploDovecotoCourier.
He probado ambos, y aunque Dovecot funciona muy bien, siempre me ha gustado mucho ms
Courier...porlotanto,eselquevoyaexplicarenesteartculo.
Montar cualquiera de estos servicios basndose en los usuarios locales del servidor no tiene
ningnmisterio,apartedeseralgomuypocorecomendableya que supondra que tendramos
que crear un usuario en el servidor por cada usuario de correo que furamos a utilizar (solo el
imaginarloyamedaurticaria!).Porlotanto,losusuariosdenuestroservidordecorreovanaser
usuarios virtuales cuyos datos van a estar almacenados en una base de datos (que podra
serMySQL,PostgreSQLoinclusoOpenLDAP).
Ytalycomoindicaelttulodelartculo,vamosaexplicarcomomontarelservidorCOMPLETO,y
no sera verdaderamente un servidor de correo completo si no tuviera tambin deteccin
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 3/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
deSPAM,antivirus,filtrosdecorreo,SSLentodosestosservicioseinclusoestadsticasygrficas
paralamonitorizacindetodoelsistema.
Ahoraquehemosvistounpocolosfundamentosbsicosdelsistemadecorreoelectrnico,vamos
aentrarenmateria...
CONFIGURACINDELDNSDELDOMINIOPARA
RECIBIREMAILS
Hay una parte fundamental para entender cmo funciona el correo electrnico en Internet, y
aunque es sumamente obvia y bsica para los que conocemos el tema, voy a explicarla
simplemente para asegurarme de que entiendes lo que estamos haciendo, no sea que despus
detodoelrolloqueestoycontandoenesteartculo,todavanotengasclarosalgunosconceptos
bsicossobreelfuncionamientodelosservidoresdecorreo(ysilosconoces,puesteaguantasy
lo lees de nuevo, que seguro que te va a costar a ti mucho menos leerlo que a mi escribirlo
xDDDD).
Supongamosqueyatenemosnuestroflamanteservidordecorreolistoyfuncionando,preparado
pararecibirelcorreodelasdireccionesdeemailde(porejemplo)pornohardware.com(merefiero
adireccionesdeltipousuario@pornohardware.comysimilares).
Puedequeelservidorestfuncionando,pero...cmosabelagentequesteservidorqueacabo
de configurar es a donde tienen que enviar los emails que vayan a la
direccinusuario@pornohardware.com,porejemplo?
Larespuestaest,comocasitodolorelativoalosnombresdelosdominios,enelDNS.
DoyporsentadoqueconoceselserviciodeDNSdeundominio,yquesabesperfectamenteque
steDNSseencargadedecirleatunavegador(porejemplo)queladireccinIPdelservidorde
pornoharware.comesla188.165.118.8,verdad?
ElDNSseconfiguraabasederegistros,yloshaydevariostipos.Unodelosmsutilizadoses
elregistrodetipoA,queseencargaprecisamentedeestoltimoqueacabodedecir:traducirel
nombredeundominioaunadireccinIP.
Sinembargo,hayotrostiposderegistrosenunDNSquesonigualdeimportantesqueelA,como
porejemploelqueataealcorreodedichodominio,llamadoregistrodetipoMX.
Poreso,cuandoenviamosunemailaunadireccin,nuestroservidorhaceunaconsultaalDNS
deldominiodeldestinatarioparasaberculeslaIPdelservidordecorreodedichodestinatario...
yunavezobtenida,seintentaconectaraesadireccinparapasarleelemail.
stetipoderegistrosDNStienenademsunaparticularidadquenotienenlosdems,yesquees
posibleasignarmsde1servidordecorreoacadadominio,definiendodiferentesprioridadesa
cadaunodeellos...esdecir,quepodemosconfigurar2servidoresdecorreodiferentesparaque
se hagan cargo del correo de un dominio determinado, y decirle al DNS que el servidor de
correo habitual ser el 1... pero que en aquellos casos en los que el servidor 1 est cado por
cualquiermotivo,puedeenviarelemailtambinalservidor2.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 4/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Noentraraexplicarsusintaxis,nicamentetenisqueverqueconelsiguientecomandoleestoy
pidiendoalservidorDNS208.67.222.222(unodelosservidoresDNSpblicosdeOpenDNS)que
medigaculeslaIPdelservidordepornohardware.com:
bhean@vader:~$nslookuppornohardware.com208.67.222.222
Server:208.67.222.222
Address:208.67.222.222#53
Nonauthoritativeanswer:
Name:pornohardware.com
Address:188.165.118.8
Comoveis,primeronosdiceaquservidorDNSleestamoshaciendolaconsulta(enstecaso:
208.67.222.222 ) y a travs de qu puerto ( 208.67.222.222#53 ), y luego nos da lo que le hemos
pedido: Address:188.165.118.8 .
SienlugardepedirlelaIPdeladireccinweb,lepedimoslasIPsdesuservidor/servidoresde
correo,elcomandosera:
bhean@vader:~$nslookuptype=mxpornohardware.com208.67.222.222
Server:208.67.222.222
Address:208.67.222.222#53
Nonauthoritativeanswer:
pornohardware.commailexchanger=5mail.pornohardware.com.
Si hacemos la misma prueba pero con un dominio que tenga configurados varios servidores de
correo,porejemplo debian.org ,veremosesto:
bhean@vader:~$nslookuptype=mxdebian.org208.67.222.222
Server:208.67.222.222
Address:208.67.222.222#53
Nonauthoritativeanswer:
debian.orgmailexchanger=5mailly.debian.org.
debian.orgmailexchanger=10muffat.debian.org.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 5/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
mailly.debian.org:conprioridad5
muffat.debian.org:conprioridad10
Comounotieneunaestablecidaunaprioridadde5yelotrode10,elquetengaelvalormsbajo
eselqueseconsideraservidorprincipal,yencasodeestarcado,seutilizaraelotro.
Esdecir,aMENORvalor,MSprioridadtendreseservidorconrespectoalosdems.
Ahora que ya tenemos claro cmo anunciar a todo Internet que nuestro servidor va a ser el
encargadodemanejarelcorreodedeterminadodominio,vamosalturrn...
CREACINDELABASEDEDATOSDE
USUARIOS
Como ya he dicho antes, que los usuarios del sistema de correo sean los usuarios locales que
haya en el servidor (que es el funcionamiento por defecto) es algo completamente
desaconsejable,ydaigualquepensisqueparaunpardeusuariosquevaisausarnomerece
la penaunabasede datos,oque solo es una prueba y si va bien ya lo montareis con base de
datosmsadelanteocualquierotraexcusaqueseosocurra.
Miexperienciacomosysadminmehademostradounayotravezquestascosas,alcabodeno
muchotiempo,nuncasoncomoerancuandosepensaronymontaroninicialmente.Esdecir,que
siahorapiensasquesolovasausar2usuarios,cuandotequierasdarcuentatendrsunadocena
deellos...ysialgomolestasobremaneraaunsysadminbofhestrabajar2vecesparalomismo,
asquevamosahacerlascosasbiendesdeelprincipio,quenocuestanada!xDD
LoprimeroeselegirsivasautilizarbasededatosoLDAPparaalmacenarlosusuarios,yaque
sonmtodosMUYdiferentes.
Para ste artculo usar base de datos, concretamente PostgreSQL (aunque si hubiera alguna
diferencias en alguna parte con respecto a MySQL, intentar explicarla). Llegados a ste punto
doyporhechoqueyatenisvuestroservidordebasededatosinstaladoyfuncionando,porloque
sinoesas,instalayconfiguraelservidordebasededatosantesdecontinuar.
Siquiereshacerqueprcticamentetodalainformacindelsistemasealmaceneygestioneenla
basededatos,puedeshacerlo.Yonormalmentesolousolabasededatosparalainformacinde
losusuariosyparaladesusaliasdecorreo.
Paraalmacenarstainformacintenemosquecrearunatablaparacadacosa,yquecontengala
informacinnecesariatantoparaPostfixcomoparaCourier.Unejemplocompletamentevlidoy
que llevo utilizando muchsimos aos en diferentes servidores de correo que administro es el
siguiente:
TABLAPARAUSUARIOS
Nombre Tipo
Valorpordefecto Nulos?
columna columna
user_id integer nextval('user_id_seq') NO
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 6/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Nombre Tipo
Valorpordefecto Nulos?
columna columna
character
name NULL SI
varying(64)
character
surname NULL SI
varying(128)
character
login NULL NO
varying(32)
character
password_crypt NULL NO
varying(64)
character
email_local NULL NO
varying(255)
timestamp
insert_date withouttime now() NO
zone
character
description NULL SI
varying(255)
imap_access character(1) 0 NO
smtp_access character(1) 0 NO
character
path_maildir '/' NO
varying(255)
user_active character(1) 0 NO
TABLAPARAALIASDECORREO
Nombre Valorpor
Tipocolumna Nulos?
columna defecto
character
email_local NULL NO
varying(255)
character
email_alias NULL NO
varying(255)
Ahoraveremoslasquerysnecesariasparacrearesastablas...primertmateunossegundospara
examinarloscamposdedichastablasyhacerteunaideaaproximadadelosdatosquevamosa
guardar en ellas: todos los campos son ms o menos auto explicativos, pero por si acaso
comentarparaqusevanausar:
TABLAPARAUSUARIOS
user_id:staserlaclaveprimariadelatabla,poresosuvalorpordefectoen
PostgreSQLeslasecuencia user_id_seq ,yenMySQLserun
campoAUTOINCREMENT.
name:Enstecamposealmacenarelnombredelusuario(merefieroasunombrede
pila,queesnecesarioparaalgunascosas,noelnick).
surname:Enstecamposealmacenarnlosapellidosdelusuario.
login:Nickdelusuario
password_crypt:Lacontraseadelusuario(utilizandoelalgoritmodeencriptacin
crypt basadoenDES).
email_local:Ladireccindeemailquevamosacrearparaelusuario.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 7/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
insert_date:Fechadecreacindelusuario
description:Comosunombreindica,esladescripcinquequeramoshacerdelacuenta
desteusuario.
imap_access:Usaremosestecampoparapermitironopermitirqueelusuariose
conectealservidorIMAPparaleercorreo.
smtp_access:Usaremosestecampoparapermitironopermitirqueelusuariose
conectealservidorSMTPparaenviarcorreo.
path_maildir:Aquindicaremoslarutafsicaeneldiscodurodelservidordelmailboxdel
usuario.
user_active:Conestecampohabilitaremosonolacuentadelusuario.
TABLAPARAALIASDECORREO
email_local:Ladireccindecorreodelusuarioalquevamosacrearunalias.
email_alias:Elaliasdecorreoquevamosacrear.
Unavezexplicadosloscamposdeambastablas,elcdigoSQLnecesarioparacrearlasserael
siguiente:
ParalatabladeusuariosenPostgreSQL:
CREATEDATABASEemail;
\\cemail
CREATETABLEusers(
"user_id"integerDEFAULTnextval(('user_id_seq'::text)::regclass)NOTNULL,
"name"charactervarying(64)DEFAULTNULL::charactervarying,
"surname"charactervarying(128)DEFAULTNULL::charactervarying,
"login"charactervarying(32)NOTNULL,
"password_crypt"charactervarying(64)NOTNULL,
"email_local"charactervarying(255)NOTNULL,
"insert_date"timestampwithouttimezoneDEFAULTnow()NOTNULL,
"description"charactervarying(255)DEFAULTNULL::charactervarying,
"imap_access"character(1)DEFAULT0NOTNULL,
"smtp_access"character(1)DEFAULT0NOTNULL,
"path_maildir"charactervarying(255)DEFAULT'/'::charactervaryingNOTNULL,
"user_active"character(1)DEFAULT0NOTNULL
);
ALTERTABLEONLYusers
ADDCONSTRAINTusers_pkeyPRIMARYKEY("user_id");
ALTERTABLEONLYusers
ADDCONSTRAINT"users_email_local_key"UNIQUE("email_local");
ALTERTABLEONLYusers
ADDCONSTRAINT"users_login_key"UNIQUE("login");
CREATESEQUENCEuser_id_seq
STARTWITH1
INCREMENTBY1
NOMINVALUE
NOMAXVALUE
CACHE1;
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 8/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
ParalatabladeusuariosenMySQL:
CREATEDATABASEemail;
useemail;
CREATETABLEusers(
user_idint(7)NOTNULLAUTO_INCREMENT,
namevarchar(64)DEFAULTNULL,
surnamevarchar(128)DEFAULTNULL,
loginvarchar(32)NOTNULLDEFAULT'',
password_cryptvarchar(64)NOTNULL,
email_localvarchar(255)NOTNULLDEFAULT'',
insert_datedatetimeNOTNULL,
descriptiontext,
imap_accesschar(1)NOTNULLDEFAULT'0',
smtp_accesschar(1)NOTNULLDEFAULT'0',
path_maildirvarchar(255)NOTNULLDEFAULT'/',
user_activechar(1)NOTNULLDEFAULT'1',
PRIMARYKEY(user_id),
UNIQUEKEYemail_local(email_local),
KEYimap_access(imap_access),
KEYsmtp_access(smtp_access)
)ENGINE=MyISAMAUTO_INCREMENT=1;
ParalatabladealiasdeusuariosenPostgreSQL:
CREATETABLEusers_aliases(
"email_local"charactervarying(255)NOTNULL,
"email_alias"charactervarying(255)NOTNULL
);
ALTERTABLEONLYusers_aliases
ADDCONSTRAINTusers_emails_ukeyUNIQUE("email_local","email_alias");
ParalatabladealiasdeusuariosenMySQL:
CREATETABLEusers_aliases(
email_localvarchar(255)NOTNULLDEFAULT'',
email_aliasvarchar(255)NOTNULLDEFAULT'',
UNIQUEKEYemail_local(email_local,email_alias)
)ENGINE=MyISAMAUTO_INCREMENT=1;
Apartedelastablas(ylasecuencia,enelcasodePostgreSQL)necesitaremoscreartambinlos
usuariosquevanautilizartantoPostfixcomoCourierparaaccederalabasededatos.Siempre
esrecomendablecrearunusuarioparacadaunoenlugardecrearunoencomn.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 9/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Una web bastante til y sencilla para generar contraseas complejas de forma aleatoria es
http://www.clavesegura.org/
Crearemosentonces3usuarios,unoparacadaunodelosserviciosquevamosaconfigurarms
adelante(Postfix,CourierySASL),porlotantoejecutamosstasquerysennuestrabasededatos
paracreardichosusuariosyparadarlespermisossobrelastablasqueacabamosdecrear.
Nohayqueconfundirestosusuarios(quesonlosqueusarPostfix,porejemplo,paraobtener
los datos del destinatario de un email) con los usuarios de nuestro correo (es decir, las
personasquevanadisponerdedireccionesdeemailgestionadaspornuestroservidor).
Paracrearlosusuariosqueusarnestosservicios(Postfix,CourierySASL)paraconectarseala
basededatosenPostgreSQL:
CREATEROLEapp_postfix;
ALTERROLEapp_postfixWITHNOSUPERUSERINHERITNOCREATEROLENOCREATEDBLOGINNOREPLICATIONPASSWORD
CREATEROLEapp_courier;
ALTERROLEapp_courierWITHNOSUPERUSERINHERITNOCREATEROLENOCREATEDBLOGINNOREPLICATIONPASSWORD
CREATEROLEapp_sasl;
ALTERROLEapp_saslWITHNOSUPERUSERINHERITNOCREATEROLENOCREATEDBLOGINNOREPLICATIONPASSWORD
GRANTSELECTONTABLEusersTOapp_postfix;
GRANTSELECTONTABLEusersTOapp_courier;
GRANTSELECTONTABLEusersTOapp_sasl;
GRANTSELECTONTABLEusers_aliasesTOapp_postfix;
GRANTSELECTONTABLEusers_aliasesTOapp_courier;
GRANTSELECTONTABLEusers_aliasesTOapp_sasl;
Yparacrearlosusuariosqueusarnestosservicios(Postfix,CourierySASL)paraconectarsea
labasededatosenMySQL:
CREATEUSER'app_postfix'@'localhost'IDENTIFIEDBYPASSWORD'QZrRPfzuq';
CREATEUSER'app_courier'@'localhost'IDENTIFIEDBYPASSWORD'OQ5JQ3+pNR';
CREATEUSER'app_sasl'@'localhost'IDENTIFIEDBYPASSWORD'hb9mwJGcc';
GRANTSELECTONemail.usersTO'app_postfix'@'localhost';
GRANTSELECTONemail.usersTO'app_courier'@'localhost';
GRANTSELECTONemail.usersTO'app_sasl'@'localhost';
GRANTSELECTONemail.users_aliasesTO'app_postfix'@'localhost';
GRANTSELECTONemail.users_aliasesTO'app_courier'@'localhost';
GRANTSELECTONemail.users_aliasesTO'app_sasl'@'localhost';
FLUSHPRIVILEGES;
EnelcasodePostgreSQL,esnecesarioespecificarensuarchivodeconfiguracindeaccesos
pg_hba.conf habilitemoselaccesodelos3usuariosqueacabamosdecrear.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 10/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Editamoselarchivoyespecificamosqueestos3ltimosusuariospuedenconectarsealabasede
datos email para leer. Repito: nicamente en el caso de PostgreSQL. Si estamos
configurandoelservidornicamenteparaMySQL,entoncesNOhayquehaceresto:
#
#DatabaseadministrativeloginbyUnixdomainsocket
localallpostgrespeer
#TYPEDATABASEUSERADDRESSMETHOD
hostemailapp_postfix127.0.0.1/32md5
hostemailapp_courier127.0.0.1/32md5
hostemailapp_sasl127.0.0.1/32md5
#"local"isforUnixdomainsocketconnectionsonly
localallallpeer
#IPv4localconnections:
hostallall127.0.0.1/32md5
#IPv6localconnections:
hostallall::1/128md5
#Allowreplicationconnectionsfromlocalhost,byauserwiththe
#replicationprivilege.
#localreplicationpostgrespeer
#hostreplicationpostgres127.0.0.1/32md5
#hostreplicationpostgres::1/128md5
Porltimo,comprobamosquepodemosconectarnosalastablasdenuestrabasededatos,que
enelcasodePostgreSQLsehaceas:
$psqlh127.0.0.1Uapp_postfixWcommand='SELECTCOUNT(*)FROMusers;'email
count
0
(1row)
YenelcasodeMySQLsehaceas:
$echo"SELECTCOUNT(*)FROMusers;"|mysqlh127.0.0.1uapp_postfixpemail
COUNT(*)
0
Alejecutarestosltimoscomandosseospedirlacontraseadelusuarioquevayisaprobar(en
ste caso el usuario es app_postfix ). Una vez introducida debera ejecutarse
laquerycorrectamente...siporelcontrarioobtenisalgunmensajedeerror,seguramentesedeba
aproblemasconlospermisosdelosusuarios.chaleunojoaloquehasidohaciendo,averigua
enqupuntolahascagadoyarrglalo...xDDD
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 11/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Sitodohaidobien,staparteyalahemosacabado...ahorasolonosquedarainsertarunusuario
paraprobar,ytambinalgunalias.Esimportanterecordarqueconvieneinsertarunregistroen
la tabla de aliases que contenga la propia direccin local del usuario que estamos
creando(esdecir,unaliasdesimismo,apartedelosdemsaliasquevayamosaconfigurarpara
ese usuario) ya que en algunas circunstancias Postfix nicamente consulta la existencia de un
usuariomirandoenlatabladealiases,porloquesinotenemosunregistroahqueespecifiquela
direccin normal del usuario, Postfix no lo encontrar y pensar que dicho usuario no existe,
aunquesqueexistaenlatablasusers.
Lapassworddelusuariotienequeirencriptadapormotivosobviosdeseguridad,paraquenadie
(inclusoquienpudierateneraccesoaconsultarlatablaenlaquesealmacena)pudieraverla.
ElalgoritmodeencriptacinquevamosausareselmismoqueutilizaGNU/Linuxparaalmacenar
las contraseas de los usuarios del sistema, y que si no me equivoco, es el utilizado en la
funcinCRYPTmedianteelalgoritmoDES.
Denuevo,siusamosDebian/Ubuntu,bastacon:
$sudoaptgetinstallcourierauthlib
YsiusamosCentOS/RedHat,metemoqueestospaquetesnoformanpartedesusrepositorios
oficiales,porloquetendraisquecompilarelcdigovosotrosmismos.Siesvuestrocaso,podis
bajarlodesdeaqu:http://www.couriermta.org/download.htmls
En cualquier caso, una vez que tengis el paquete courierauthlib instalado, y por tanto el
comando authpasswd disponible, solo tenis que ejecutarlo especificando el algoritmo CRYPT y
despusdeintroducirlapasswordquequeris.Esoosdevolverelhashcorrespondienteadicha
password,queporejemplo,enelusuariodepruebaquevamosacrearstapasswordvaaser
galactica :
$authpasswdcrypt
Password:
Reenterpassword:
{CRYPT}V1TBTcBUTkibk
Porlotanto,lapasswordencriptadadegalacticaesV1TBTcBUTkibk.
Constasquerysdeberamossercapacesdeinsertarunusuariodepruebacon1aliasyconla
passwordencriptadaennuestrarecincreadabasededatos:
Insertamoselusuario
INSERTINTO
users
(
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 12/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
name,
surname,
login,
password_crypt,
email_local,
description,
imap_access,
smtp_access,
path_maildir,
user_active
)
VALUES
(
'William',
'Adama',
'bill',
'V1TBTcBUTkibk',
'adama@pornohardware.com',
'EmaildelComandanteAdama',
1,
1,
'/srv/maildirs/pornohardware.com/adama/',
1
);
Insertamoselaliasdesimismo
INSERTINTO
users_aliases
(
email_local,
email_alias
)
VALUES
(
'adama@pornohardware.com',
'adama@pornohardware.com'
);
Insertamosunaliasparaelusuario
INSERTINTO
users_aliases
(
email_local,
email_alias
)
VALUES
(
'adama@pornohardware.com',
'william.adama@pornohardware.com'
);
Una vez ejecutados estos INSERT ya tendremos configurado nuestro usuario con sus alias, as
queahoravamosavercmolosutilizamos...
INSTALACINDEPOSTFIXCOMOSERVIDOR
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 13/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
INSTALACINDEPOSTFIXCOMOSERVIDOR
SMTP
Ahoraqueyatenemoslabasededatoscreadaynuestroprimerusuariodepruebaguardadoen
ella,vamosaprepararunservidorSMTPparaquecuandolellegueunemailparanuestrousuario,
sepaqueefectivamenteesparalyloguardeensumailboxparaquestepuedaleerlocuando
quiera.
Noesperfecto,peroenmiopinineselmejorSMTPquehayhoyen
da,aunquecomoencasitodohayvariosbandosenfrentados(enste
casoelotrobandosonlosdefensoresdeExim,otrogranSMTP).
Configurarelservidorparaquenuestrosusuariospuedanenviaremailsaotraspersonas.
Configurarelservidorparaquecuandolellegueunemailaunodenuestrosusuarios,
steloguardeparaqueelusuariopuedaleerlo.
QuieroquequedeclaraladivisinporqueaunqueseaPostfixquienseencarguedeambas,son2
procesosdiferentes.
Vamosconlaprimera...
UnservidorSMTPesunservicioquecorrenormalmenteenelpuerto25(y/oenelpuerto465si
nosconectamosatravsdeSSL).
Esto significa que cuando queramos enviar un email, debemos conectarnos a ste servidor y
mediante los comandos propios de su protocolo debemos indicar quienes somos, a quin
queremosenviarelemail,conqutextoqueremosenviarlo,etc.ysilohemoshechobien,nuestro
servidor enviar dicho email al SMTP del destinatario (como ya dije en el esquema de
funcionamientodelcorreoquepusearriba).
Sinembargo,elSMTPnopuedeestarabiertoacualquiera(situacinconocidacomoopenrelay),
yaqueentonceslosspammersloutilizarnparaenviaremailspublicitariosodecualquierotrotipo
a todo el mundo, lo que aparte de generar numerosos problemas, podra hacer que la IP de
nuestro servidor de correo fuera incluida en alguna base de datos pblica despammers, lo que
provocaraquelamayorpartedelosservidoresdecorreodelmundorehusaranrecibirnuestros
emails(aunquestosfueranemailslegtimosenviadosnormalmentepornosotros).
El SPAM es una lacra, y no solo es molesto, sino que puede llegar a causar problemas de
verdad...asque,porfavor,ponespecialatencinaprotegertuservidorparaquestapandade
desgraciadosnopuedaservirsedel.
As que debemos configurar Postfix para que nicamente acepte emails de los usuarios que se
autentiquen.Comoestosusuarioslostenemosenunabasededatos,vamosaconfigurarPostfix
paraqueseconecteaellaylosbusque.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 14/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Lo primero es instalar los paquetes de Postfix segn la base de datos que estemos usando (ya
seaMySQLoPostgreSQL).Ycomosiempre,estainstalacinestrivialsiusamosunadistribucin
deGNU/LinuxdecentecomoporejemploDebian.Enstecaso(oeneldelasquesebasanen
ella,comoporejemploUbuntu),bastaracon:
$sudoaptgetinstallpostfixpostfixmysqlpostfixpgsql
Si por algun motivo (por ejemplo, que seamos masoquistas) utilizamos CentOS, Redhat o
similares,podemosinstalarlotambindeformamuyfcilcon:
$sudoyuminstallpostfix
Ahoraqueyalotenemosinstaladovamosaconfigurarlo.Los2archivosdeconfiguracinprincipal
dePostfixson master.cf y main.cf (amboseneldirectorio /etc/postfix ).
Unejemplodestearchivopodraserelsiguiente:
/etc/postfix/master.cfdownload
#Postfixmasterprocessconfigurationfile.Fordetailsontheformat
#ofthefile,seethemaster(5)manualpage(command:"man5master").
#
#==========================================================================
#servicetypeprivateunprivchrootwakeupmaxproccommand+args
#(yes)(yes)(yes)(never)(100)
#==========================================================================
smtpinetnnsmtpd
#submissioninetnsmtpd
#osmtpd_tls_security_level=encrypt
#osmtpd_sasl_auth_enable=yes
#osmtpd_client_restrictions=permit_sasl_authenticated,reject
#omilter_macro_daemon_name=ORIGINATING
smtpsinetnnsmtpd
osmtpd_tls_wrappermode=yes
osmtpd_sasl_auth_enable=yes
osmtpd_client_restrictions=permit_sasl_authenticated,reject
omilter_macro_daemon_name=ORIGINATING
#628inetnqmqpd
pickupfifon601pickup
cleanupunixn0cleanup
qmgrfifonn3001qmgr
#qmgrfifon3001oqmgr
tlsmgrunix1000?1tlsmgr
rewriteunixtrivialrewrite
bounceunix0bounce
deferunix0bounce
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 15/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
traceunix0bounce
verifyunix1verify
flushunixn1000?0flush
proxymapunixnproxymap
#proxywriteunixn1proxymap
smtpunixsmtp
#WhenrelayingmailasbackupMX,disablefallback_relaytoavoidMXloops
relayunixsmtp
osmtp_fallback_relay=
#osmtp_helo_timeout=5osmtp_connect_timeout=5
showqunixnshowq
errorunixerror
retryunixerror
discardunixdiscard
localunixnnlocal
virtualunixnnvirtual
lmtpunixlmtp
anvilunix1anvil
scacheunix1scache
#
#====================================================================
#InterfacestononPostfixsoftware.Besuretoexaminethemanual
#pagesofthenonPostfixsoftwaretofindoutwhatoptionsitwants.
#
#ManyofthefollowingservicesusethePostfixpipe(8)delivery
#agent.Seethepipe(8)manpageforinformationabout${recipient}
#andothermessageenvelopeoptions.
#====================================================================
#
#maildrop.SeethePostfixMAILDROP_READMEfilefordetails.
#Alsospecifyinmain.cf:maildrop_destination_recipient_limit=1
#
maildropunixnnpipe
flags=DRhuuser=vmailargv=/usr/bin/maildropd${recipient}
#
#SeethePostfixUUCP_READMEfileforconfigurationdetails.
#
uucpunixnnpipe
flags=Fqhuuser=uucpargv=uuxrnza$sender$nexthop!rmail($recipient)
#
#Otherexternaldeliverymethods.
#
ifmailunixnnpipe
flags=Fuser=ftnargv=/usr/lib/ifmail/ifmailr$nexthop($recipient)
bsmtpunixnnpipe
flags=Fq.user=bsmtpargv=/usr/lib/bsmtp/bsmtpt$nexthopf$sender$recipient
mailmanunixnnpipe
flags=FRuser=listargv=/usr/lib/mailman/bin/postfixtomailman.py
${nexthop}${user}
scalemailbackendunix n n 2 pipe
flags=Ruser=scalemailargv=/usr/lib/scalemail/bin/scalemailstore${nexthop}${user}${extension
smtpamavisunixn2smtp
osmtp_data_done_timeout=1200
odisable_dns_lookups=yes
#Amavisfilter
127.0.0.1:10025inetnsmtpd
ocontent_filter=
olocal_recipient_maps=
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 16/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
orelay_recipient_maps=
osmtpd_restriction_classes=
osmtpd_client_restrictions=
osmtpd_helo_restrictions=
osmtpd_sender_restrictions=
osmtpd_recipient_restrictions=permit_mynetworks,reject
omynetworks=127.0.0.0/8
ostrict_rfc821_envelopes=yes
osmtpd_sasl_auth_enable=yes
La estructura del archivo es sencilla: se empieza con el nombre del servicio que estamos
configurando,seguidode o n dependiendodesiqueremosactivarodesactivarlasdiferentes
funcionalidades (cada columna del archivo corresponde a una funcionalidad), y en la lnea
siguienteseespecificanlasdiferentesopcionesquepudieratenerelservicio.
Laprimeralneaquedebemosmodificaresla8,quecorrespondealservicio smtp .
En ella debemos desactivar el chroot, aunque si bien no lo recomiendo, es posible instalarlo
utilizandolajauladelchroot(dehecho,elresultadoseramuchomsseguro),perolacomplejidad
delsistemaaumentatantsimoquepersonalmentenocreoqueseanecesario.
TenencuentaqueahoraestamosnicamenteconfigurandoPostfix,perocuandoterminesdeleer
ste artculo tendremos un sistema de correo en el que adems de l habr muchos otros
servicios que deben interactuar, y tener a Postfix encerrado en un chroot dificultara las cosas
muchsimo.Haymuchasotrasformasdeprotegerelsistema...peroobviamenteestoessolouna
recomendacin ma. Si eres el sysadmin de la NSA y ests montando el Postfix personal de
Obama en el mismo servidor en el que l guarda sus fotos ms comprometidas, quizs s que
serabuenaideaquedejaraselchrootactivado...xDDD
Lo mismo haremos con la linea 14, que corresponde al servicio smtps (es decir, el servicio a
travs del protocolo seguro SSL): descomentamos las lineas (si es que estaban comentadas) y
desactivamos el chroot. Ms adelante ya hablaremos de cmo utilizar el SSL en todos los
serviciosdenuestroservidordecorreo.
Si te fijas en las lneas que van de la 74 a la 76 y las que van de la 79 a la 94 del archivo
master.cf que he puesto de ejemplo, vers que se trata de la configuracin de 2 filtros: uno
llamado mailman yotrollamado smtpamavis .Perodemomentonotepreocupesporesto,nolo
configuresan...yahablaremosdeestosservicioscuandotengamoselrestoterminado...
Una vez terminado master.cf (al menos de momento), si abrimos el otro archivo de
configuracin /etc/postfix/main.cf nos encontraremos todas las directivas que
vienenpreconfiguradaspordefecto.Podisecharleunojoparafamiliarizarosconelarchivoycon
susdirectivas,lamayoradeellastienenunnombrebastantedescriptivo.
Unejemplodestearchivo(remarcandolasdirectivasmsrelevantes)seraalgoas:
/etc/postfix/main.cfdownload
#Debianspecific:Specifyingafilenamewillcausethefirst
#lineofthatfiletobeusedasthename.TheDebiandefault
#is/etc/mailname.
myorigin="pornohardware.com"
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 17/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
smtpd_banner=$myhostnameESMTP$mail_name(Debian/GNU)
biff=no
#appending.domainistheMUA'sjob.
append_dot_mydomain=no
#Uncommentthenextlinetogenerate"delayedmail"warnings
delay_warning_time=4h
#TLSparameters
smtpd_tls_cert_file=/srv/sites/conf/ssl/mail.pornohardware.com.crt
smtpd_tls_key_file=/srv/sites/conf/ssl/mail.pornohardware.com.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database=btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database=btree:${data_directory}/smtp_scache
#See/usr/share/doc/postfix/TLS_README.gzinthepostfixdocpackagefor
#informationonenablingSSLinthesmtpclient.
myhostname=pornohardware.com
mydomain=pornohardware.com
alias_maps=hash:/etc/aliases
alias_database=hash:/etc/aliases
mydestination=pornohardware.com
relay_domains=$mydestination,
pornosoftware.com
mynetworks=127.0.0.0/8,188.165.118.8
mailbox_command=procmaila"$EXTENSION"
mailbox_size_limit=0
recipient_delimiter=+
inet_interfaces=all
transport_maps=hash:/etc/postfix/transport
message_size_limit=25600000
#MySQL
virtual_mailbox_base=/
virtual_uid_maps=static:102
virtual_gid_maps=static:8
virtual_mailbox_maps=mysql:/etc/postfix/mysql/mysql_virt.cf
virtual_maps=mysql:/etc/postfix/mysql/alias.cf
local_transport=virtual
#Amavis
content_filter=smtpamavis:[127.0.0.1]:10024
#Nobackscatter
soft_bounce=no
unknown_local_recipient_reject_code=550
#SASL2Auth
smtpd_sasl_auth_enable=yes
smtpd_sasl_security_options=noanonymous
smtpd_sasl_local_domain=$myhostname
broken_sasl_auth_clients=yes
smtpd_recipient_restrictions=permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 18/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
#check_policy_serviceunix:private/policy,
check_policy_serviceinet:127.0.0.1:10023,
regexp:/etc/postfix/blacklist,
permit
maps_rbl_domains=rbl.maps.vix.com,
relays.mailabuse.org,
relays.ordb.org,
dev.null.dk,
spews.relays.osirusoft.com,
spamhaus.relays.osirusoft.com,
relays.visi.com
DIRECTIVA:MYORIGIN,MYHOSTNAMEYMYDOMAIN
Laprimeradelasdirectivasquetenemosqueconfigurares myorigin (lnea 4 del archivo). Con
stavariabledefinimoselnombredeldominiopordefectodesdeelquevamosaenviarlosemails.
Convienesaberquestadirectivaacepta2tiposdevalores:obienelnombredeldominio,obien
larutadeunarchivoquecontengadichonombre.Esdecir,podemosponer:
myorigin=pornohardware.com
myorigin=/etc/mailname
Amboscasosseraiguales,asquehacerlocomomsoguste.Personalmenteprefieroelprimer
caso por facilidad y simplicidad, as la configuracin est en un nico archivo en lugar de en
varios,perohastaquemealcecomovuestroLderenunNuevoOrdenMundial,estoesunmundo
libre,porloquepodishacerlocomoqueris(aunqueinsisto:solodemomentoxDD).
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 19/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Unarecomendadsimaprcticaenlaadministracindeservidoresdecorreosueleserladedefinir
unaliascomomnimoalusuarioroot,deformaquelosemailsqueselepodranllegaraenviar
seanredirigidosaotrousuario.Estosehaceparaevitarquealguienpudieracolapsarelservidor
llenandoelbuzndecorreodelusuariorootconmilesdeenormesemails(yaquenormalmenteel
usuariorootnosueletenerestablecidaunaquotadedisco,niunlmitedeemails,niningunaotra
restriccin).
/etc/aliasesdownload
#/etc/aliases
mailerdaemon:postmaster
postmaster:root
nobody:root
hostmaster:root
usenet:root
webmaster:root
www:root
abuse:root
noc:root
security:root
root:fulanito
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 20/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
fulanito:fulanito@dominio.com
Segn ste archivo, todo el correo enviado al usuario local mailerdaemon se redirigira al
usuariopostmaster...ysteasuvezseredirigiraalusuarioroot.
Tambinseredirigiraalusuariorootelcorreoenviadoanobody,hostmaster,usenet,webmaster,
etc..
Finalmente,todoelcorreoenviadohaciarootserredirigidoalusuariofulanito(paraevitarllenael
buznderoot),elcualasuvezserreenviadoalacuentaexternafulanito@dominio.com.
DIRECTIVA:MYDESTINATION
Aqu(lnea29)especificamoslosdominiosdecorreodelosquenuestroservidorsevaaencargar.
Es decir, cuando recibamos un email que vaya a algun usuario de alguno de estos dominios,
asumiremosqueesnuestroeintentaremosentregrseloalusuarioencuestin(buscndoloenla
basededatosquehabamoscreadoantes,oenelarchivo /etc/aliases ).Ysirecibimosunemail
dirigido a un dominio que no es uno de los nuestros (es decir, un dominio que NO est
especificadoenstadirectiva)buscaremoselservidordecorreoqueseencargadelosemailsde
dichodominio,yselopasaremosparaquesealquientratedeentregrseloaldestinatario.
DIRECTIVA:RELAY_DOMAINS
Constadirectiva(lnea30)podemosdecirleanuestroservidorSMTPunaseriededominiosde
los cuales SI debe aceptar los emails, aunque dichos dominios NO sean de los que nos
encargamosensteservidor.Esdecir,con relay_domains podemosdecirleanuestroPostfixque
acepteemailsdedeterminadosdominiosaunqueestosnoestnespecificadosen mydestination .
Estoestilcomobackupdecorreo,yaquesidisponemosde2servidoresdecorreodiferentes,
podemoshacerquecadaunotengaconfiguradoalotroenstadirectiva,deformaquesialgun
daunodelos2estfueradeservicio,elotroirarecogiendoelcorreodelservidorcado,yselos
entregaraposteriormentecuandostevolvieraaestardisponible.Paraestohayqueespecificar
tambinstesegundoservidordecorreoenelregistroMXdelDNSdeldominio,ascomoutilizar
la directiva transport_maps para indicar el servidor al que entregar todo el correo ajeno que
estamosaceptandoalusarstadirectiva(yaloveremosmsadelante).
DIRECTIVA:TRANSPORT_MAPS
Como dije antes, para poder utilizar nuestro servidor tambin como backup del correo de otro
dominio es necesario el uso de sta directiva, pero tambin se usa para enviar el correo que
queramos a un filtro determinado (configurando dicho filtro previamente en master.cf ) o para
indicarladireccindelservidorSMTPdeundominioconcretodeformamanual.
El valor que debemos indicar en sta directiva es la ruta donde se encuentra el archivo que
contienelainformacindetransportedelcorreo.Esdecir,algocomo:
transport_maps=hash:/etc/postfix/transport
sudopostmap/etc/postfix/transport
Configurar transport para que el correo que llegue para el dominio fulanito.com a
nuestro servidor se reenve a otro servidor SMTP distinto. Esto se usa normalmente
para backup de correo, configurando el DNS del dominio de fulanito.com para que
nuestro servidor sea uno de sus servidores de correo (aadindolo como registro MX)
pero indicando un nmero de prioridad mayor (para que solo enven mensaje de ese
dominioanuestroservidorcuandoelprincipalestcado:
Parahaceresto,loprimeroseraaadirnuestroservidoralregistroDNSde fulanito.com
:
MX5mail.fulanito.com
MX10nuestroservidor.com
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 22/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
LoprimeroseradecirleanuestroPostfixqueaunquenosencarguemosdelcorreodelos
dominios especificados en la directiva mydestination del /etc/postfix/main.cf (que en
stecasosonlosdeldominio pornoharware.com ),tambindebeaceptarloscorreospara
los dominios especificados en la directiva relay_domains (que sern los que vayan
dirigidosaldominio fulanito.com ):
mydestination=pornohardware.com
relay_domains=fulanito.com
fulanito.comsmtp:mail.fulanito.com:25
Con sta configuracin, nuestro servidor de correo ser el encargado de gestionar los
emails del dominio pornoharware.com , pero tambin aceptar los que vayan al dominio
fulanito.com mientras el servidor principal de ste est cado. Y a diferencia de los
emails que le lleguen a nuestro servidor y que vayan a pornohardware.com (que sern
guardadosenelmailboxdeldestinatarioencuestin),losquevayana fulanito.com los
iremosencolando,ytanprontovuelvaafuncionarelservidorprincipaldeesedominio,le
reenviaremostodoslosquehayamosencoladohastaesemomento,deformaquenose
habrperdidoningnemailduranteeltiempoquesuservidorestuvocado.
filtro_scriptunixnnpipe
flags=Buser=nobodyargv=/usr/bin/perl/opt/scripts/parse_emails.pl
admin@fulanito.comfiltro_script:
menganito.comfiltro_script:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 23/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Con sta configuracin (y una vez generado el archivo transport.db con el comando
postmap como expliqu antes) nuestro servidor reenviara al script que habamos
configurado en master.cf con el nombre de filtro_script aquellos emails cuyo
destinatario sea la direccin admin@fulanito.com y cualquier direccin del dominio
menganito.com .
DIRECTIVA:MESSAGE_SIZE_LIMIT
Esta directiva es muy fcil: como su propio nombre indica, especifica el tamao mximo que
podrntenerlosemailsquemanejarnuestroservidorPostfix.
El valor debe ir en bytes, por lo que si queremos establecer un tamao mximo de archivo de
25Mb(que para mi es el lmite mximo que debera permitirse, ya que para archivos ms
grandesnodeberamosutilizarelemail),debemosmultiplicar 25*1024000 ,esdecir:
message_size_limit=25600000
DIRECTIVAS:VIRTUAL_*
Aquvienelobueno...
Estas directivas son las que van a permitir a Postfix conectarse a nuestra base de datos para
comprobarlaexistenciadelosusuariosalosquevandirigidoslosemailsquerecibamos.
Cada vez que nuestro Postfix reciba un email dirigido a una direccin de correo de uno de los
dominios de los que l se hace cargo (los especificados en la directiva mydestination ) se
conectaralabasededatosqueindiquemosaquparacomprobarquedichodestinatarioexiste,y
en caso afirmativo, de cul es el mailbox (directorio del disco del servidor) donde tiene que
almacenardichoemail.
Lasdirectivasprincipalesson:
virtual_mailbox_base:Labasedelarutafsicaeneldiscodurodelservidordondeestn
losmailboxdecadausuario.Elvalormsindicadoes / ,yaquelarutadecadamailbox
laespecificaremosenlabasededatos,segunseaunusuariouotro.
virtual_uid_maps:EluiddelusuarioqueejecutaeldemoniodePostfix.Normalmentees
elusuariopostfix,ysuuidsepuedeverconelcomando vipw .Sistevalorfuerapor
ejemploel102,elvalorquehabraqueconfigurarparastadirectivasera static:102 .
virtual_gid_maps:Igualqueelvaloranterior,perostavezenlugardeluidhace
referenciaalgiddelgrupomail.stevalorsepuedeverconelcomando vigr ,ysidicho
valorfueraporejemploel8,elvalorquehabraqueconfigurarparastadirectivasera:
static:8 .
virtual_mailbox_maps:Aquvamosaindicarlarutafsicadelmailboxdelusuario,que
comoennuestrocasoestenlabasededatos,hayquecrearunarchivodetextoplano
conlaconfiguracinnecesariaparaquePostfixpuedaconectarseadichabasededatos.
Porlotanto,elvalorquepondremosenstadirectivaser
pgsql:/etc/postfix/db/users.cf o mysql:/etc/postfix/mysql/users.cf (despus
crearemosdichoarchivo).
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 24/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
virtual_maps:EnstadirectivapodemosconfigurardndedebePostfixbuscarlos
posiblesaliasdelusuarioqueestbuscando,ydadoqueennuestrocasosta
informacinesttambinenlabasededatos,hayquecrearunarchivodetextoplano
conlaconfiguracinnecesariaparaquePostfixpuedaconectarseadichabasededatos.
Porlotanto,elvalorquepondremosenstadirectivaser
mysql:/etc/postfix/db/alias.cf o pgsql:/etc/postfix/db/alias.cf (despuscrearemos
stearchivotambin).
Amododeresumen,laconfiguracindestasdirectivasseraalgoas:
ParaPostgreSQL:
virtual_mailbox_base=/
virtual_uid_maps=static:102
virtual_gid_maps=static:8
virtual_mailbox_maps=pgsql:/etc/postfix/db/users.cf
virtual_maps=pgsql:/etc/postfix/db/aliases.cf
ParaMySQL:
virtual_mailbox_base=/
virtual_uid_maps=static:102
virtual_gid_maps=static:8
virtual_mailbox_maps=mysql:/etc/postfix/db/users.cf
virtual_maps=mysql:/etc/postfix/db/aliases.cf
Como veis, nicamente se diferencian en las lineas que estn resaltadas (lineas 45 y 46), a la
horadeespecificarqutipodebasededatosvamosausar(PostgreSQLoMySQL).
Por lo tanto, dichos archivos (segn la base de datos de usuarios que habamos creado antes)
seranalgoas:
ParaPostgreSQL:
#ConfiguraciondePostfixparaobtenerlosdatosdelos
#usuariosvirtualesquehayenlabasededatos
#
hosts=localhost
user=app_postfix
password=QZrRPfzuq
dbname=email
query=SELECT"path_maildir"FROMusersWHERE"email_local"='%s'AND"user_active"='1'
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 25/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
#ConfiguraciondePostfixparaobtenerlosaliasdelos
#usuariosvirtualesquehayenlabasededatos
#
hosts=localhost
user=app_postfix
password=QZrRPfzuq
dbname=email
query=SELECT"email_local"FROMusers_aliasesWHERE"email_alias"='%s'
ParaMySQL:
#ConfiguraciondePostfixparaobtenerlosdatosdelos
#usuariosvirtualesquehayenlabasededatos
#
hosts=localhost
user=app_postfix
password=QZrRPfzuq
dbname=email
query=SELECTpath_maildirFROMusersWHEREemail_local='%s'ANDuser_active='1'
#ConfiguraciondePostfixparaobtenerlosaliasdelos
#usuariosvirtualesquehayenlabasededatos
#
hosts=localhost
user=app_postfix
password=QZrRPfzuq
dbname=email
query=SELECTemail_localFROMusers_aliasesWHEREemail_alias='%s'
Comopodeisver,lanicadiferenciaquehayentresiutilizamosPostgreSQLoMysqlesqueen
ste ltimo los nombres de las columnas NO pueden ir entre comillas, mientras que en
PostgreSQLesobligatorio.
Yconesto,yadeberamostenertodalapartedeconfiguracinbsicadenuestroservidorSMTP
(Postfix)terminada...
Vamos a intentar iniciar el servicio (o reiniciarlo, si ya estaba levantado) para ver si hemos
configuradotodocorrectamente:
$sudo/etc/init.d/postfixstart
[ok]StartingPostfixMailTransportAgent:postfix
Podemos echar un ojo al log para ver si el servicio se ha iniciado correctamente. El log de los
servicios de correo se encuentra en /var/log/mail.log en Debian y similares, y en
/var/log/maillog enCentOS/RedHat.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 26/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Sivemosalgoparecidoaestoenellog(sinningnotromensajechungo),podemosalegrarnos:
postfix/master[27126]:daemonstartedversion2.9.6,configuration/etc/postfix
Si vemos algun mensaje de error, Postfix debera ser lo suficientemente explcito como para
darnosenellogunabuenapistasobredondeestelproblema,quesilohay,astasalturasdela
configuracin seguramente no sea ms que un error de sintaxis o alguna tontera que hayamos
hechoenalgunodelosarchivosquehemoseditadohastaahora.Asquearrglalo!!xDD
Paraprobarquetodofuncionacorrectamente,losuyoestratardeenviarunemailalusuarioque
habamos creado en la base de datos y ver si Postfix es capaz de aceptar el email, obtener la
informacin del destinatario y guardar el email en su mailbox. Y para eso nada mejor que
conectarnosmediantetelnetal puertodelPostfix y teclear los comandos SMTP necesarios para
enviarunemail.
Primeronosconectamos:
$telnetlocalhost25
Trying127.0.0.1...
Connectedtolocalhost.
Escapecharacteris'^]'.
220pornohardware.comESMTPPostfix(Debian/GNU)
EstoseraunejemplodelaconversacinquedebemosmantenerconelservidorSMTP:
$telnetlocalhost25
Trying127.0.0.1...
Connectedtolocalhost.
Escapecharacteris'^]'.
220pornohardware.comESMTPPostfix(Debian/GNU)
EHLOremitente.com
250remitente.com
250PIPELINING
250SIZE25600000
250VRFY
250ETRN
250STARTTLS
250AUTHPLAIN
250AUTH=PLAIN
250ENHANCEDSTATUSCODES
2508BITMIME
250DSN
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 27/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
MAILFROM:prueba@bhean.com
2502.1.0Ok
RCPTTO:adama@pornohardware.com
2502.1.5Ok
DATA
354Enddatawith<CR><LF>.<CR><LF>
Estoesunapruebaparaversitodofuncionacorrectamente
.
2502.0.0Ok:queuedasBE75A100D0
QUIT
2212.0.0Bye
Connectionclosedbyforeignhost.
Si hay algun problema lo veremos en el log del servidor, y tambin al ejecutar los comandos
anterioresconel telnet .
AntesdedarporterminadalaconfiguracindelSMTP,hayunpardeopcionesmuyinteresantes
quesepuedenincluirenel main.cf yquepuedenresultarmuytilesenalgunasocasiones:
blacklist:Seutilizaparaespecificardireccionesdeemailconcretas(odominiosenteros)
quedebenserrechazados(porquesepamosquesonspamoslgoas).
whitelist:Igualqueelanterior,peroalrevs.PermiteconfigurarservidoresdelosqueSI
queremosaceptaremails.
check_sender:Permiteaceptarorechazaremailsenfuncindeladireccindel
remitente.
check_body:Igualqueelanterior,peroenfuncindelcuerpodelemail.
Todasestascomprobacionesseirnejecutandoporordendeaparicin.Postfixirprocesndolas
una tras otra hasta que una de ellas concuerde con el email recibido. Si ninguna concuerda, el
emailseraceptado.Perosialgunadeellasconcuerda,seaceptarorechazardependiendode
loquehayamosconfiguradoendichacomprobacin.
smtpd_recipient_restrictions=regexp:/etc/postfix/blacklist,
permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 28/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
regexp:/etc/postfix/blacklist,
permit
Aquellasquecomienzanporregexp:seutilizanparadefinir(enunarchivoaparte)determinadas
acciones (aceptar el email, rechazarlo, etc) mediante patrones de expresiones regulares. Por
ejemplo,elarchivo /etc/postfix/blacklist podraserparecidoaesto:
/soyun@spamer\.com$/REJECTSPAMisnotallowedhere/ElSPAMnoestapermitidoaqui
/@spam\.com$/REJECTSPAMisnotallowedhere/ElSPAMnoestapermitidoaqui
Nota: Antes de nada, al igual que en los anteriores casos que hemos visto, hay que utilizar el
comando postmap con estos archivos para que Postfix pueda utilizarlos. Simplemente
ejecutamos:
$postmapblacklist
Perosielemailrecibidonocoincidieraconningunadelasexpresionesregularesde blacklist ,
entonces Postfix pasara a la siguiente restriccin que hubiera configurada en
smtpd_recipient_restrictions , en ste caso permit_mynetworks (que significa que estn
permitidoslosemailsenviadosdesdelasmquinasdenuestrared,esdecir,losservidorescuyas
IPsestnespecificadasenladirectiva mynetworks del main.cf ).
Delmismomodopodemosconfigurartambinunarchivoparahacertodolocontrario,esdecir,en
lugar de rechazar aquellos emails que coincidan con las expresiones regulares que
especifiquemos,podramosquererquePostfixaceptaraaquellosemailsquecoincidancondichas
expresiones.
83.138.165.68OK
5.153.231.4OK
CualquieremailprocedentededichasIPsseraaceptadopornuestroservidor.Porsupuesto,para
utilizarstearchivohabraquegenerartambinelcorrespondiente whitelist.db conelcomando
postmap .
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 29/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Y por ltimo, los archivos check_sender y check_body se basan en el mismo concepto que los
anteriores... solo que como su propio nombre indican, estos comprueban coincidencias con el
remitentedelemailyconelcuerpodelmismo,respectivamente.
smtpd_sender_restrictions=regexp:/etc/postfix/check_sender
body_checks=regexp:/etc/postfix/check_body
Yendichosarchivossecrearanlasexpresionesregularesquequeramoscomprobar,juntoconel
cdigodeestadoyelmensajequequeremosquesedevuelvasialgunacoincide:
/@dominiospamer\.com$/550NoqueremosSPAM
/@otrospamer\.com$/550NoqueremosSPAM
/RyanHarding/REJECTNoqueremosSPAM
/Bet2Day/REJECTNoqueremosSPAM
Haymuchasotrasopciones,porloqueosrecomiendoqueleecheisunojoala documentacin
oficialdePostfixsiquereisveralgomsendetalle.
EncuantoalSMTP,porelmomentopodemosdarloporterminado...perorecordarquesiutilizais
unfirewall(y si no lo haceis, deberais! insensatos!) debis abrir los puertos necesarios, que en
stecasosonel25paraelSMTPyel465paraelSMTPSSL...
AhoraqueyatenemosPostfixfuncionandoparaelservicioSMTP,vamosacontinuarconunade
las partes ms importantes para evitar el spam: configurarlo para que nicamente nuestros
usuariospuedanusarloparaelenvodeemails.
CONFIGURACINDESASLPARA
AUTENTICACINDEPOSTFIX
Postfix debe aceptar los emails que vayan destinados a nuestros usuarios... pero qu pasa con
aquellosemailsquenuestrosusuariosquieranenviaraotraspersonas?
Un servidor SMTP abierto es el paraiso de cualquier spamer, por lo que nicamente nuestros
usuarios deben poder utilizar nuestro SMTP para enviar emails. De lo contrario, cualquiera que
descubranuestroservidornosutilizarparaenviarmilesdeemailsatodoelmundo...ynosolo
debemosevitarloparanocontribuirconelenvodespam,sinoquepodranmeterlaIPdenuestro
servidorenalgunadelasmuchsimaslistasnegrasdeservidoresdespamquehayenInternet,lo
queharaquetodoslosservidoresdeemailsdelmundorechazaranelcorreoenviadopornuestro
servidor,inclusolosemailslegtimosenviadospornuestrosusuarios.
Paraevitarlo,debemosconfigurarPostfixparaquesolonuestrosusuariospuedanhacerusodel.
ParallevaracabostatareadebemosutilizarSASL.
SASLharquePostfixsoloacepteenviaremailsdelosusuariosqueseidentifiquen,paralocual
consultar la base de datos a travs de PAM (Pluggable Authentication Modules), que es un
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 30/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
sistemadeautenticacinmuyextendidoenelmundounix/linux.
$sudoaptgetinstalllibgsasl7libsasl22libsasl2moduleslibsasl2modulessqlsasl2binlibpammysq
YsiutilizamosRedhat/CentOS,debemosdescargareinstalarlospaquetesmanualmente,yaque
noseencuentranenlosrepositoriosoficialesdestasdistribuciones(elijeDebianlaprximavez,
jejejee)xDD
UnavezinstaladostantoSASL2comoPAM,laconfiguracindeambosesmuysencilla:primero
habilitamos la ejecucin del demonio de SASL en el arranque del servidor y especificamos el
mtododeautenticacin pam ,editandoelarchivo /etc/default/saslauthd :
#
#Settingsforsaslauthddaemon
#Pleaseread/usr/share/doc/sasl2bin/README.Debianfordetails.
#
#Shouldsaslauthdrunautomaticallyonstartup?(default:no)
START=yes
#Whichauthenticationmechanismsshouldsaslauthduse?(default:pam)
#
#AvailableoptionsinthisDebianpackage:
#getpwentusethegetpwent()libraryfunction
#kerberos5useKerberos5
#pamusePAM
#rimapusearemoteIMAPserver
#shadowusethelocalshadowpasswordfile
#sasldbusethelocalsasldbdatabasefile
#ldapuseLDAP(configurationisin/etc/saslauthd.conf)
#
#Onlyoneoptionmaybeusedatatime.Seethesaslauthdmanpage
#formoreinformation.
#
#Example:MECHANISMS="pam"
MECHANISMS="pam"
#ToknowifyourPostfixisrunningchroot,check/etc/postfix/master.cf.
#Ifithastheline"smtpinetnysmtpd"or"smtpinetnsmtpd"
#thenyourPostfixisrunninginachroot.
#Ifithastheline"smtpinetnnsmtpd"thenyourPostfixisNOT
#runninginachroot.
OPTIONS="cm/var/run/saslauthdr"
Despus, configuramos PAM para que se conecte a nuestra base de datos para comprobar el
login/password de nuestros usuarios. Para ello, editamos el archivo /etc/pam.d/smtp (si no
existiera,locrearamos)conlosvaloresdenuestrabasededatos,ydelusuario app_sasl queya
habamoscreadopreviamenteparaestoalcomienzodesteartculo:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 31/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
authsufficientpam_pgsql.so\\
user=app_sasl\\
passwd=hb9mwJGcc\\
host=127.0.0.1\\
db=email\\
table=users\\
usercolumn=login\\
passwdcolumn=password_crypt\\
crypt=1\\
where=user_active=1\\
debug=1
authsufficientpam_unix_auth.so
accountrequiredpam_pgsql.so\\
user=app_sasl\\
passwd=hb9mwJGcc\\
host=127.0.0.1\\
db=email\\
table=users\\
usercolumn=login\\
passwdcolumn=password_crypt\\
crypt=1\\
where=user_active=1\\
debug=1
accountsufficientpam_unix_acct.so
Porltimo,editamos(ocreamos,enelcasodenoexistir)elarchivo /etc/postfix/sasl/smtpd.conf
.EnlindicaremosaPostfixquedebeusareldemonioSASLparaautenticaralosusuarios:
pwcheck_method:saslauthd
saslauthd_path:/var/run/saslauthd/mux
mech_list:plain
log_level:5
$sudousermodGsaslpostfix
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 32/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Por ltimo, debemos asegurarnos que las directivas de configuracin de SASL estn
correctamenteespecificadasenel main.cf dePostfix:
smtpd_sasl_path=smtpd
smtpd_sasl_auth_enable=yes
#smtpd_sasl2_auth_enable=yes
smtpd_sasl_security_options=noanonymous
smtpd_sasl_local_domain=$mydestination
broken_sasl_auth_clients=yes
smtpd_recipient_restrictions=permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
check_client_accesshash:/etc/postfix/whitelist,
permit
Ylisto!ArrancamoseldemoniodeSASL:
$sudo/etc/init.d/saslauthdstart
Ysitodohaidobien,yadeberamostenerelservidorPostfixcorrectamente.
ParacomprobarqueSASLestcorrectamenteconfiguradoyfuncionacomoqueremos,existeel
comando testsaslauth .Esmuysencillodeutilizar,solohayquepasarleelusuario,elpasswordy
el mtodo de autenticacin que queremos comprobar. Por ejemplo, en nuestro caso bill es el
usuario(campo login delatabla users ),galacticalapassword(cuyovalorencriptadoeselque
habamosguardadoenelcampo password_crypt delatabla users )y smtp esloquequeremos
comprobar,porloqueelcomandoquedaraas:
$testsaslauthdssmtpubillpgalactica
0:OK"Success."
Si ejecutamos el mismo comando, pero con el nombre de usuario o la password mal puesta,
deberamosveralgoparecidoa:
$testsaslauthdssmtpunobillpnogalactica
0:NO"authenticationfailed"
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 33/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Sielresultadodestoscomandosnoeselesperado(siempreossaleauthenticationfailedoalgo
as),podeishabilitarelmododedepuracin(debug)deSASLparaquemuestrelainformacinde
autentificacin en el log, descomentando la linea #debug que os indiqu en el archivo
/etc/pam_pgsql.conf o /etc/pam_pgsql.conf .
Tambinpodeiscomprobarquetodofuncionacomodeberaintentandoenviarunemaildeforma
annima (sin identificarnos) y comprobar que Postfix NO os deja hacerlo... y despus hacer la
mismaprueba,perostavezidentificndonoscorrectamenteantes.
ParacomprobarqueelservidorNOaceptaqueenviemosemailssinidentificarnos:
$telnetipdevuestroservidort25
Trying127.0.0.1...
Connectedtolocalhost.
Escapecharacteris'^]'.
220pornohardware.comESMTPPostfix(Debian/GNU)
EHLOremitente.com
250remitente.com
250PIPELINING
250SIZE25600000
250VRFY
250ETRN
250STARTTLS
250AUTHPLAIN
250AUTH=PLAIN
250ENHANCEDSTATUSCODES
2508BITMIME
250DSN
MAILFROM:prueba@bhean.com
2502.1.0Ok
RCPTTO:cualquiercosa@hotmail.com
5545.7.1<cualquiercosa@hotmail.com>:Relayaccessdenied
QUIT
2212.0.0Bye
Connectionclosedbyforeignhost.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 34/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Como podis ver, estamos intentando enviar un email desde nuestro servidor de correo a la
direccin cualquiercosa@hotmail.com ,aloculstenosrespondeconun Relayaccessdenied .Es
decir,queNOpodemosenviaremailsadireccionesquenoseanlasdenuestropropioservidor,a
noserquenosidentifiquemospreviamente.
Quizs haya algo en el log que os ayude a encontrar el problema. Recordar que el log de los
serviciosdecorreoseencuentraen/var/log/mail.logenDebianysimilares,yen/var/log/maillogen
CentOS/RedHat.
INSTALACINDECOURIERCOMOSERVIDOR
POP/IMAP
As como para poder enviar emails necesitamos un servidor SMTP, para poder acceder a ellos
para su lectura necesitamos un servidor POP o IMAP, que son los 2 protocolos ms extendidos
paraesefin.
Podismontarambosonicamenteuno...aunquelaverdadesquePOPnotieneprcticamente
ninguna ventaja hoy en da, cada vez se usa menos, y en mi opinin no tiene ningn sentido
mantenerlo. Si os quedsteis anclados en los 90 y echis de menos geocities, los gifs
animados con smbolos de @rrobas dando vueltas, o simplemente eres un Amish montando el
servidordecorreodetualdea,POPesloquebuscas.Paratodoslosdems,IMAPeslasolucin.
Noquieroextendermemucho,peroparaquequedeunpocomsclaro,ospondrunapequea
tablacomparativasobrealgunasdelasdiferenciasmsnotablesentreambosprotocolos:
POP3 IMAP4
Depende
Permitetrabajaroffline Si
delcliente
Nmerodetransacciones Bajo Alto
Permitetrabajaronline No Si
Veremails/cabecerassin
No Si
descargarlospreviamente
Ndecarpetasgestionables 1 Ilimitado
Gestindecarpetas No Si
Buzonesmultiusuario(acceso
No Si
mltiple)
Estados/flagsenmensajes No Si
Bsquedaenmensajes No Si
GestinMIME No Si
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 35/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
POP3 IMAP4
Mecanismosdeextensinde
No Si
funciones
Firmacifrada No Si
Autenticacinprotegida APOP Nativo
Como podis ver, el uso de POP hoy en da no tiene ningn sentido... por lo que a no ser que
necesiteis implementarlo por algn extrao motivo, usar siempre IMAP. De hecho, aunque se
puedenutilizarambosalmismotiempoNOosrecomiendoque lo hagais, ya que si un usuario
(porejemplo)sedescargaelcorreoutilizandoPOP,simstardeaccedeporIMAPnopodrver
nadayaqueunavezquePOPdescargaelcorreo,steseeliminadelservidor.Yalnopermitir
POP el uso de carpetas, nicamente se descarga el correo delINBOX (bandeja de entrada), lo
que significa que si habeis organizado vuestros mensajes en carpetas utilizando IMAP, esos
mensajesnopodreisdescargarlosdesdePOP.
Comosiempre,loprimeroquetenemosquehaceresinstalarlospaquetesnecesarios.
EnDebian/Ubuntu:
sudoaptgetinstallcourierauthdaemoncourierimapcourierimapsslcourierauthlibmysqlcourieraut
EnRedhat/CentOS:
PordesgraciaenstasdistribucionesnoexistenpaquetesRPMensusrepositoriosoficiales,as
que o bien lo instalais compilando su cdigo fuente a mano (podis descargarlo aqu) o bien
generais los RPMs vosotros mismos tal y como se explica aqu. Obviamente es mucho
ms incmodo que utilizar los paquetes de los repositorios oficiales, pero si hubirais elegido
unadistribucincomoDiosmandanotendraisquepreocuparos...
Encualquiercaso,unavezinstalado,laconfiguracindeCourieresmuysencilla:nicamentehay
queeditar3archivos:
/etc/courier/authdaemonrc
/etc/courier/imapd
/etc/courier/authpgsqlrc(o/etc/courier/authmysqlrc,segnloqueestemosusando)
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 36/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
##NAME:authmodulelist:2
#
#Theauthenticationmodulesthatarelinkedintoauthdaemond.The
#defaultlistisinstalled.Youmayselectivelydisablemodulessimply
#byremovingthemfromthefollowinglist.Theavailablemodulesyou
#canuseare:authuserdbauthpamauthpgsqlauthldapauthmysqlauthcustomauthpipe
authmodulelist="authpgsql"
La primera de ellas indica el nmero de conexiones por IP que nuestro servidor IMAP puede
atender. El valor por defecto suele ser vlido en la mayora de los casos, pero en el protocolo
IMAPseestableceunaconexionporcadacarpetaIMAPalaquenosconectemos,porloquesi
tenemos varias cuentas y leemos el correo de varias carpetas, puede que necesitemos
aumentarlo.Elvalorpordefectoes50,peroyosueloconfigurarloa120:
##NAME:MAXPERIP:0
#
#MaximumnumberofconnectionstoacceptfromthesameIPaddress
MAXPERIP=120
##NAME:IMAPDSTART:0
#
#IMAPDSTARTisnotuseddirectly.Rather,thisisaconvenientflagto
#bereadbyyoursystemstartupscriptin/etc/rc.d,likethis:
#
#./etc/courier/imapd
#
#casex$IMAPDSTARTin
#x[yY]*)
#/usr/lib/courier/imapd.rcstart
#;;
#esac
#
#ThedefaultsettingisgoingtobeNO,soyou'llhavetomanuallyflip
#ittoyes.
IMAPDSTART=YES
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 37/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
sus mailbox (los directorios que contendrn los mensajes de cada usuario) y el resto de
informacinnecesaria.
Estainformacindeconexinseindicautilizandolasdirectivas:
PGSQL_HOST:Direccindelservidordebasededatos.Ennuestrocasoeslocalhost,ya
quetantoCouriercomolabasededatosestnenelmismoservidor.
PGSQL_PORT:Puertoenelqueestescuchandolabasededatos.Elpuertopordefecto
dePostgreSQLesel5432yeldeMySQLesel3306.
PGSQL_USERNAME:UsuarioqueutilizarCourierparaconectarsealabasededatos.
Nosotroshabamoscreadoelusuarioapp_courierparaesto.
PGSQL_PASSWORD:PassworddelusuariodefinidoenPGSQL_USERNAME.
NOTA: Si por algn motivo quisiramos conectar a un servidor de base a travs de un socket
localenlugardeatravsdelared,debemoseliminarladirectivaPGSQL_HOSTeindicarenla
directivaPGSQL_PORTelnmerodedichosocket.Porejemplo,sinuestrosocketlocaldebase
dedatoses /tmp/.s.PGSQL.5400 ,debemosindicarelvalor 5400 enPGSQL_PORT.
Elarchivodeconfiguracinquedaraentoncesas:
##NAME:LOCATION:0
#
#Theserverhostname,port,userid,andpasswordusedtologin.
PGSQL_HOSTlocalhost
PGSQL_PORT5432
PGSQL_USERNAMEapp_courier
PGSQL_PASSWORDOQ5JQ3+pNR
El resto del archivo de configuracin es muy sencillo, y casi todas sus directivas son
autoexplicativas,perovamosadarunpequeorepasoalrestodeellas:
PGSQL_DATABASE:Aquseindicaelnombredelabasededatosquecontienelas
tablasdondeseencuentralainformacindelosusuarios.
PGSQL_USER_TABLE:Nombredelatablaquecontienelainformacindelosusuarios.
PGSQL_CRYPT_PWFIELD:Nombredelcampo(columna)quecontiene
lapasswordencriptadadelosusuarios.
DEFAULT_DOMAIN:Sidefinimossteparmetro,sialguienintentaautenticarse(por
ejemplo)conelusuariofulanito,Courierlosustituirpofulanito@DEFAULT_DOMAIN.
Estoestilcuandoelusernamedenuestrosusuariosessudireccindeemail,ynuestro
servidornicamenteseusaparaelcorreodeunsolodominio,deformaquelagente
puedeutilizarelusernamesintenerqueteclearelrestohastacompletarladireccin
(@DEFAULT_DOMAIN).
PGSQL_UID_FIELD:UIDdelusuariolocaldelservidorqueseusarparaaccederalos
emailsdelservidor.Tpicamentesesueleutilizarelusuariodelsistemapostfix,yaqueal
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 38/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
guardarsedichosemailsusandoeseusuario,nosaseguramosasdetenerpermisospara
accederadichosarchivos.ParasaberquUIDtieneunusuarioencuestinpodemos
usarelcomando id (pasndolecomoparmetroelnombredelusuariodelque
queremosobtenerlainformacin).Porejemplo: idpostfix .Ennuestrocasoelvalor
obtenidoesel103,peroasegratedecomprobarculeselquenecesitastuyaque
puedevariardeunsistemaaotro.
PGSQL_GID_FIELD:EnstecasohayqueindicarelGIDdelgrupoqueutilizaremos
paraaccederalosemailsdelservidor.Tpicamentesesueleutilizarelgrupomail,porlo
queparaaveriguarelgiddedichogrupopodemosutilizardenuevoelcomando idmail .
Ennuestrocasoelvalorobtenidoesel8,peroaligualqueantes,asegratede
comprobarculesstegidentusistema.
PGSQL_LOGIN_FIELD:Nombredelcampo(columna)quecontienelosusernamesde
losusuarios.
PGSQL_HOME_FIELD:Nombredelcampo(columna)quecontienelarutaalahomedel
usuario(noconfundirconlarutadelosmailbox).
PGSQL_MAILDIR_FIELD:Nombredelcampo(columna)quecontienelarutade
losmailboxesdelosusuarios.Normalmentelosmailboxsuelenestarenlaruta
$HOME/Maildir ,donde $HOME eselvalorespecificadoenPGSQL_HOME_FIELD.
PGSQL_QUOTA_FIELD:Nombredelcampo(columna)quecontienelainformacinsobre
lacuotadediscodelosusuarios.
PGSQL_WHERE_CLAUSE:Aqupodemosindicarunacondicinquedeberncumplir
losusuariosparapoderidentificarseennuestroservidor.Lacondicinaquespecificada
seaadircomoWHEREenlaconsultaSQLqueCourierejecutarcuandounusuario
intenteautenticarseennuestroservidor.Esmuytilpara(porejemplo)restringir
temporalmenteelaccesoaunusuarioenconcretosintenerqueeliminarlo,simplemente
utilizandounacolumna"user_active"comolaquehemoscreadoenlatabladeusuario,o
algosimilar.Osquedarmsclaroviendoelejemplodelarchivodeconfiguracinque
pondracontinuacin.
PGSQL_HOSTlocalhost
PGSQL_PORT5432
PGSQL_USERNAMEapp_courier
PGSQL_PASSWORDOQ5JQ3+pNR
PGSQL_DATABASEemail
PGSQL_USER_TABLEusers
PGSQL_CRYPT_PWFIELD"password_crypt"
PGSQL_UID_FIELD103
PGSQL_GID_FIELD8
PGSQL_LOGIN_FIELD"login"
PGSQL_HOME_FIELD'/'
PGSQL_NAME_FIELDconcat("name","","surname")
PGSQL_MAILDIR_FIELD"path_maildir"
PGSQL_WHERE_CLAUSE"imap_access"='1'AND"user_active"='1'
Y con esto ya deberamos tener Courier listo... as que ya solo queda levantar los servicios.
Primero authdaemon (para autenticar a los usuarios) y luego los servicios propios de IMAP e
IMAPSSL :
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 39/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
$sudo/etc/init.d/courierauthdaemonstart
$sudo/etc/init.d/courierimapstart
$sudo/etc/init.d/courierimapsslstart
Configurar el servicio IMAP a travs deSSL(algo MUY importante) no tiene ningn misterio. Si
vais a utilizar certificados SSL generados por vosotros mismos y autofirmados, basta con que
levanteis el servicio courierimapssl sin ms. Y si tenis certificados SSL propios y firmados,
solohayqueconfigurardichoscertificadosenelarchivo /etc/courier/imapdssl antesdelevantar
elservicio,ylisto.
Detodasformas,instalarloestansencillocomosiempre:
EnDebian/Ubuntu:
$sudoaptgetinstallgamin
EnRedHat/CentOS:
$sudoyuminstallgamin
Unavezhechoesto,yadeberafuncionarperfectamente(tantolarecepcindeemailsmediante
SMPT>PostfixcomoelaccesoaellosmedianteIMAP>Courier).Asquesitodohaidobien,ya
deberaispoderconfigurarlacuentaenvuestroclientedecorreo.Existenmuchsimosclientesde
correodiferentes(Thunderbird,Evolution,KMail,etc)porloquenoentrarendetallessobrecmo
configurarunacuentaenellos,peronotieneningnmisterio...esigualquecualquierotracuenta
decorreoquehayaisconfigurado,soloqueindicandolosdatosdeconexindevuestroservidor
(ladireccindelhostdondelohabeisinstalado)ylosdatosdeaccesoavuestracuenta(segnel
ejemplo que os he puesto, usuario bill , password galactica y direccin de email
adama@pornohardware.com ).
Por supuesto, y al igual que hicimos al configurar Postfix, debemos abrir los puertos necesarios
paralosserviciosdeIMAPeIMAPSSLennuestrofirewall.Debeisabrirelpuerto143paraIMAP
yel993paraIMAPSSL.
Sillegadosastepuntonopudiraisconectaros,onopudiraisaccederconelusuario/password
o hubiera algun otro error o comportamiento extrao, podis editar el archivo
/etc/courier/authdaemonrc yhabilitarladirectiva DEBUG_LOGIN=1 paraaumentarelniveldedetalle
enloslogsdelprocesodeautenticacin.Silohaceis,noolvideisreiniciarlosserviciosde(courier
authdaemon,courierimapycourierimapssl)paraquesereflejenloscambios.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 40/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Ellogpordefectodondeseguardatodalainformacinrelativaalcorreo(Postfix,Courier,etc)es
/var/log/mail.log enDebian/Ubuntu,o /var/log/maillog enRedhat/CentOS.
INSTALACINDEANTIVIRUSYANTISPAM
Noseconcibeunservidordecorreohoyendasinestos2servicios.
En mis tiempos, la nica forma de coger un virus en tu ordenador era que alguien te pasara
undisqueteinfectado(muchosnosabrisniloqueessodeldisquete,jejeje).Elnmerodevirus
en aquella poca era bajsimo, e incluso los mejores de ellos tardaban muchsimo tiempo en
propagarse(yaunas,jamslograbanexpandirsecomolohacenhoyenda).
La llegada del correo electrnico facilit la comunicacin entre personas y sistemas por todo el
mundo, sin importar las distancias fsicas que hubiera entre los interlocutores de dichas
comunicaciones. Rpidamente los virus aprovecharon sta via para propagarse como lo hacen
hoyenda.
Por desgracia, el usuario en general sigue siendo un mero usuario tonto (es decir, que
prcticamentedesconoceelfuncionamientodecualquiersistema,yselimitanicamenteausarlo
casi a ciegas) por lo que no se puede confiar en que tengan un antivirus actualizado en sus
ordenadores.Estaesunadelasrazonesprincipalesporlasqueesresponsabilidaddelservidor
decorreointerceptaryeliminarlosvirusantesdequelleguenalusuario(adems,esmssencillo
ytienemssentidoacabarconellosANTESdequelleguenasudestinatarioquedejarstalabor
ensusmanos).
Yconrespectoalspam,lalacradeInternetquemsodio,sucedeexactamentelomismo.
Cualquier persona con unos minimsimos conocimientos tecnolgicos puede enviar miles de
emailsamillonesdepersonasencuestindeminutossininvertirniunsoloeuro,yademssin
quelosdestinatariosdedichosemailspuedansaberinclusoquinselosestenviado.
Esto es aprovechado cada minuto del da por miles de spammers, que inundan los mailbox de
todoelmundoconpublicidadnosolicitada.
Yaunqueparezcaunaprcticainofensiva,elspamnosolocuestaingentescandidadesdedinero
a las empresas y organizaciones que sostienen Internet debido a las grandes y
sobredimensionadas infraestructuras que deben manejar para cubrir ste uso extra del correo
electrnico (se estima que el 94% del correo mundial es spam, sino que provoca una enorme
prdidadetiempoyrecursospersonalesaquienespadecenstetormento.
Por todos estos motivos, un buen antivirus y algunos filtros antispam son absolutamente
necesariosentodoslosservidoresdecorreodelmundo.
Para instalar y configurar estos elementos, la mejor forma de hacerlo es mediante un filtro de
contenidos.Yenmiopinin,elmejorenstecampoesAmavis.
Podramos definir Amavis (o mejor dicho, amavisdnew, que es como se llama realmente) como
uninterfacequeconectaelservidordecorreoconotrosprogramas(antivirus,antispams,etc)de
formatransparenteparaelusuario.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 41/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Cuandounemailllegaanuestroservidordecorreo,steseloentregaaamavisdnew,elcualse
encargadepasrseloalosdistintosfiltrosquetengamosconfigurados,ysielmensajelossupera,
elservidordecorreoloalmacenaenelbuzndeldestinatariocorrespondiente.Encasocontrario
se pueden llevar a cabo diferentes acciones dependiendo de qu filtro haya sido el que ha
bloqueado el email. Por ejemplo, se puede configurar para que si un email contiene un virus,
automticamenteseenveunmensajealapersonaquehaenviadoelemailadvirtindoledeque
suordenadorpodraestarinfectado.
Existenvariosprogramasantiviruslibres,gratuitosyquefuncionan
muy bien en GNU/Linux. Personalmente el que ms me gusta
esClamAV.
Unodelospuntosmsimportantesenestetipodesoftwareesla
rpida localizacin e inclusin en sus bases de datos de los
nuevosvirusquesevanencontrando.
Yconrespectoalosfiltrosantispam,tambinexistenvarios...aunqueelquemsdestacaenel
mundoopensourceesSpamAssassin.
Ambosprogramas(ClamAVySpamAssassin)estnperfectamenteintegradosenAmavis,porlo
quelainstalacindetodoestoes(comodecostumbre)algotrivialenGNU/Linux:
EnDebian/Ubuntu:
$sudoaptgetinstallamavisdnewspamassassinclamavdaemonclamavfreshclam
EnRedHat/CentOS:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 42/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
$sudoyuminstallamavisdnewclamavspamassassin
Losvirusenlosemailssuelenirenlosarchivosadjuntosquehayenellos...perodichosarchivos
a veces estn comprimidos, lo cual impide que el antivirus pueda analizarlos. Para evitar esto,
debemosinstalarlosdescompresoresdelosformatosmscomunes(zip,arj,rar,etc).
Paraello,instalamoslossiguientespaquetes:
EnDebian/Ubuntu:
$sudoaptgetinstallbzip2gzipxziprpmlzopunrarfreearjp7zipfullzooarccabextract
EnRedHat/CentOS:
$sudoyuminstallbzip2gziprpmlzoparjp7zipunzooarccabextract
ParaconfigurarAmavisdebemoseditaralgunosarchivos:
/etc/amavis/conf.d/05domain_id:Enstearchivodebemosindicareldominioprincipal
denuestroservidor.Haydosformasdehacerlo:obienasignandodirectamenteelnombre
deldominioalavariable$mydomain,obienindicandoendichavariablequeobtengael
valordelarchivo /etc/mailname ,conloqueindicaramoseldominioendichoarchivo.En
nuestrocasoutilizamos pornohardware.com .
/etc/amavis/conf.d/05node_id:Enstearchivodebemosindicar(delmismomodoque
enelanterior)elnombredelservidor.Ennuestrocasoutilizamos mail.pornohardware.com .
/etc/amavis/conf.d/15content_filter_mode:Descomentandolalineacorrespondiente
enstearchivohabilitaremoselusodelantivirus(enstecaso,ClamAV)ydelantispam
(Spamassassin).SiporalgnmotivonoquisiramosqueAmavisutilizaraalgunodelos
dos,bastaracondejarcomentadalalineacorrespondiente.
/etc/amavis/conf.d/20debian_defaults:Lamayoradelasopcionesdeconfiguracinse
encuentranaqu.Losnombresdelasvariablessonbastantedescriptivosyhaybastantes
comentariosenelarchivo.Lasprincipalesopcionesquedebemosconfigurarson:
$sa_spam_subject_tag :Aqudefinimoselprefijoqueseantepondralttulodelos
D_BOUNCE :Rechazaelmensajeinformandoalremitenteatravsdeamavisd
new(steeselvalorqueyosueloutilizar).
D_REJECT :RechazaelmensajeinformandoatravsdelMTA.
D_PASS :Aceptaelmensaje.
:Lomismoqueenelcasoanterior,peroparalosmensajesque
$final_spam_destiny
Amavishayamarcadocomospam.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 43/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
$sudousermodGamavisclamav
EncuantoaSpamassassin,porahoranicamenteeditamoselarchivo /etc/default/spamassassin
paraqueeldemonioseinicie,poniendoa 1 elvalordeladirectiva ENABLED :
#/etc/default/spamassassin
#DuncanFindlay
#WARNING:pleasereadREADME.spamdbeforeusing.
#Theremaybesecurityrisks.
#Changetoonetoenablespamd
ENABLED=1
ParaconectarAmavisanuestroSMTP,debemosindicarenlaconfiguracindePostfixelpuerto
enelqueAmavisescucha.Editamossuconfiguracin(archivo master.cf )yloindicamos:
#
#Otherexternaldeliverymethods.
#
ifmailunixnnpipe
flags=Fuser=ftnargv=/usr/lib/ifmail/ifmailr$nexthop($recipient)
bsmtpunixnnpipe
flags=Fq.user=bsmtpargv=/usr/lib/bsmtp/bsmtpt$nexthopf$sender$recipient
scalemailbackendunixnn2pipe
flags=Ruser=scalemailargv=/usr/lib/scalemail/bin/scalemailstore${nexthop}${user}${extension
mailmanunixnnpipe
flags=FRuser=listargv=/usr/lib/mailman/bin/postfixtomailman.py
${nexthop}${user}
smtpamavisunixy2smtp
osmtp_data_done_timeout=1200
odisable_dns_lookups=yes
#FiltroparaAmavis/Postfix
127.0.0.1:10025inetnysmtpd
ocontent_filter=
olocal_recipient_maps=
orelay_recipient_maps=
osmtpd_restriction_classes=
osmtpd_client_restrictions=
osmtpd_helo_restrictions=
osmtpd_sender_restrictions=
osmtpd_recipient_restrictions=permit_mynetworks,reject
omynetworks=127.0.0.0/8
ostrict_rfc821_envelopes=yes
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 44/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
virtual_mailbox_maps=mysql:/etc/postfix/mysql/mysql_virt.cf
virtual_maps=mysql:/etc/postfix/mysql/alias.cf
local_transport=virtual
#Amavis
content_filter=smtpamavis:[127.0.0.1]:10024
soft_bounce=no
unknown_local_recipient_reject_code=550
Ahoraqueesttodoconfigurado,iniciamoslosserviciosqueacabamosdeinstalaryconfigurar,y
reiniciamosPostfix:
$sudo/etc/init.d/clamavdaemonstart
$sudo/etc/init.d/clamavfreshclamstart
$sudo/etc/init.d/spamassassinstart
$sudo/etc/init.d/amavisstart
$sudo/etc/init.d/postfixrestart
Sihubieraalgnproblemaoalgunodelosdemoniosnoseiniciaracorrectamente,yasabesque
todalainformacindelosprocesosrelacionadosconelemailesten /var/log/mail.log (siusas
Debian/Ubuntu)oen /var/log/maillog (siusasRedhat/CentOS).
Pero contra el SPAM nunca se est completamente protegido... y obviamente Spamassasin nos
ayudar a frenarlo, pero no lo evitar al 100%. Por lo tanto, an hay ms cosas que podemos
hacerparacompletarnuestrosistema.
POSTGREY
LaprimeradeellassellamaPostGrey,yaunquehaygentequepiensaqueestanefectivacomo
molesta para el usuario, es una de las mejores medidas que podemos implantar para reducir la
cantidaddespamquellegueanuestrosbuzones.
Elprotocolodeenvodecorreoestablecequesiseintentaenviarunemailaunservidor,yste
responde con un cdigo de error 45x (error temporal), se debe intentar volver a enviar el email
pasadountiempo(normalmente5minutosdespus).
La mayora de los servidores de correo que utilizan los spamers no estn configurados
correctamente,yNOreintentanelenvodeunemailsistefalla.
Postgreyharquesiemprequenosllegueunemaildeundestinatariodesconocido,serechaceel
emailyserespondaconunerror45x.Sielservidorestcorrectamenteconfigurado,reintentar
denuevolaentregapasadosunosminutos...ycuandolohaga,Postgreyloaceptar.Adems,se
guardar dicho remitente en una base de datos propia de Postgrey, por lo que a partir de ese
momento se aceptarn los emails de ste remitente a la primera, sin necesidad de volver a
rechazarlos.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 45/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Puede que sea un poco molesto en alguna circunstancia (sobre todo si necesitamos recibir un
email urgente de alguien que no nos ha escrito antes) ya que tardaremos ms de lo normal en
recibirdichoemail,perograciasaestoevitaremosrecibirunmontndespam.
LainstalacindePostgreyesigualdesencillaqueelresto:
EnDebian/Ubuntu:
$sudoaptgetinstallpostgrey
EnRedHat/CentOS:
$sudoyuminstallpostgrey
Unavezinstalado,elpuertopordefectoenelqueestarescuchandoPostGreyesel10023,as
quetenemosqueaadirlocomounanuevarestriccinennuestroPostfix(enelmismositiodonde
anteriormentehabamosconfiguradolasblacklistsyelrestoderestricciones):
smtpd_recipient_restrictions=regexp:/etc/postfix/blacklist,
permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_serviceinet:127.0.0.1:10023,
regexp:/etc/postfix/blacklist,
permit
YapodemosiniciareldemoniodePostGrey:
$sudo/etc/init.d/postgreystart
YreiniciarPostfixparaquetengaencuentalanuevarestriccin:
$sudo/etc/init.d/postfixrestart
Apartirdestemomento,cadavezquenosllegueunemail,Postfixlorechazartemporalmente
paraqueelservidordecorreodelremitentelointentedenuevopasadosunosminutos.
Si transcurrido ese tiempo el servidor de correo de dicho remitente reintenta el envo de nuevo,
Postfixloaceptarnormalmente,ymarcarensubasededatosinternaqueyanosernecesario
volverarechazarcorreosdeesedestinatarioenelfuturo.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 46/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Sialgunavezmigraiselservidordecorreoaotroservidordiferente,yquereisconservarstabase
dedatosinternaconlosdatosquePostGreyhayaconseguidohastaesemomento,bastaconque
migreistambinelcontenidode /var/lib/postgrey/ alnuevoservidor.
Y por supuesto, podis especificar tambin excepciones (whitelists) para que PostGrey no
rechace los emails ni siquiera la primera vez editando los archivos
/etc/postgrey/whitelist_recipients y /etc/postgresy/whitelist_clients .
Noolvideisque~~podis~~debisrevisarellogdelservidordecorreoamenudoporsihubiera
algn problema o algn comportamiento no deseado, que como ya sabeis se encuentra en
/var/log/mail.log siusaisDebianosimilares,yen /var/log/maillog siusaisCentOS/RedHat.
Y para poder dar por terminadas las configuraciones relativas al spam, solo nos faltara
implementarelsistemaSPFennuestroservidor:
SPF(SENDERPOLICYFRAMEWORK)
El sistema SPF intenta disminuir el spam evitando la falsificacin de las direcciones de correo
electrnicodelosmensajes.YsuprincipalimplementacineselproyectoOpenSPF.
BajomipuntodevistaesunamedidadeseguridadMUYbuena,yrealmenteseratilsitodoslos
servidoresdecorreoloutilizarandeformapredeterminadayobligatoria...peropordesgracianolo
hacen,yloqueesanpeor,muchosdelosadministradoresdesistemasquegestionanservidores
decorreonisiquierasabendesuexistencia.
Sufuncionamientoesmuysimple:dadoqueladireccindelremitentedeunemailvieneindicada
nicamente en una de las cabeceras del email, cualquiera puede manipular dicha cabecera y
enviarunemailconunremitentefalso.
Nosenecesitangrandesconocimientosniherramientasavanzadas,cualquierlamerpuedeenviar
unemailacualquierpersonahacindosepasarporcualquiera.Ylosspamersutilizanestoadiario
parasimularemailsdepersonasconocidasodesitioswebsdeinters,deformaqueaumentan
lasposibilidadesdequealrecibiresosemails,caigamosenlatrampaylosleamos.
SPF intenta evitar esto, rechazando los emails que provengan de servidores de correo que NO
son los servidores de correo oficiales de dicho dominio. Es decir, si el servidor de correo
depornohardware.comtienelaIP1.2.3.4(porejemplo),siunservidordecorreorecibeunemail
deunadireccindeltipo@pornohardware.comqueprovienedelaIP5.6.7.8,automticamentelo
rechazar porque asumir que no se trata de un email legtimo. SPF da por sentado que para
enviar emails del dominio @pornoharware.com nicamente se van a utilizar unos servidores
determinados(losqueelTodopoderosoadministradordepornohardware.comhaya configurado),
porloquesiunemailprovienedeotrosevidordirente,muyseguramentesetratedeunemailNO
legtimo(spam).
ElsistemaSPFconstade2partes:
IncluirunregistroenelDNSdenuestrodominioquesirvaparaquelosdemsservidores
decorreosepancualessonnuestrosservidoreslegtimos,yrechacenemailsque
(aunqueparezcaqueproviniendenosotros)hayansidoenviadosdesdeotrosservidores.
Configurarnuestroservidordecorreoparaquecuandonosllegueunemail,
comprobemosenelDNSdeldominiodelremitentedelemailsiefectivamentedicho
mensajeprovienedeunservidorautorizadoono.
El paso 1 es tan sencillo como incluir un registro de tipo TXT que indique quines son los
servidoresquepuedenenviarnuestrosemails.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 47/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
Lasintaxisdeestosregistrosesmuysencilla:
v:ConsteparmetroseindicalaversindeSPF(queactualmenteesla1).
mx:Consteparmetroseindicaquelosservidoresdecorreoconfiguradosenelregistro
detipoMXdenuestrodominioestnautorizadosaenviaremaildedichodominio.
ptr:Consteparmetroseindicaquelosservidorescorrespondientesasubdominiosde
nuestrodominioestnautorizadosaenviarnuestrosemails.Esdecir,cualquierservidor
cuyonombresea*.pornohardware.com.
all:Dependiendodelcdigoqueindiquemosaqu,losservidoressernmsomenos
estrictosalahoraderecibirnuestroscorreos.Losposiblesvaloresdesteparmetro
son:
all:NOsedebenaceptaremailsnuestrosqueprovengandeservidoresqueNO
sonlosespecificadosenelregistroSPFdenuestroDNS.
~all:SedebenaceptaremailsnuestrosaunqueprovengandeservidoresqueNO
sonlosespecificadosenelregistroSPFdenuestroDNS,peromarcandodichos
emailscomoposibleSPAM,deformaquesealosclientesdecorreodelosusuarios
finalesquienspuedanestablecerreglasparaaceptaronodichosemails.
?all:SedebenaceptaremailsnuestrosaunqueprovengandeservidoresqueNO
sonlosespecificadosenelregistroSPFdenuestroDNS.
pornohardware.com.INTXT"v=spf1mxa:mail.ejemplo1.coma:mail.ejemplo2.comall"
ste registro especificara como vlidos para enviar emails de nuestro dominio a aquellos
servidores que estn definidos en los registros MX de nuestro dominio, y tambin los
servidores mail.ejemplo1.com y mail.ejemplo2.com. Y al haber especificado all , aquellos
servidores que reciban un email proveniente de un servidor diferente a los que acabamos de
mencionar,debenRECHAZARdichoemail.
ExistenmuchosserviciosenInternetqueospuedenayudaraconfiguraronlineelregistroSPFde
vuestrodominio,comoporejemploSPFWizard.
De sta forma hemos configurado nuestro DNS para que los dems servidores de correo del
mundo sepan cules son nuestros servidores... pero ahora tenemos que hacer que nuestro
servidorhagaesamismacomprobacincuandollegueunemaildelosdems,yrechazardichos
emails si hubieran sido enviados por servidores distintos a los que esos dominios
hayanautorizado.
EndistribucionesbasadasenDebian/Ubuntu,comosiempreestanfcilcomoejecutar:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 48/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
$sudoaptgetinstallpostfixpolicydspfpython
#FiltroparaAmavis/Postfix
127.0.0.1:10025inetnysmtpd
ocontent_filter=
olocal_recipient_maps=
orelay_recipient_maps=
osmtpd_restriction_classes=
osmtpd_client_restrictions=
osmtpd_helo_restrictions=
osmtpd_sender_restrictions=
osmtpd_recipient_restrictions=permit_mynetworks,reject
omynetworks=127.0.0.0/8
ostrict_rfc821_envelopes=yes
#postfixpolicydspfpython
policydspfunixnnspawn
user=nobodyargv=/usr/bin/policydspf
Y por ltimo, editamos tambin el archivo main.cf para indicar a Postfix que use el filtro que
acabamosdeconfigurar(justoenlaseccinderestriccionesquehabamosutilizadoparaaadirel
filtrodePostGrey):
smtpd_recipient_restrictions=regexp:/etc/postfix/blacklist,
permit_mynetworks,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_serviceinet:127.0.0.1:10023,
check_policy_serviceunix:private/policydspf,
regexp:/etc/postfix/blacklist,
permit
ReiniciamosPostfix,yyatenemosnuestroservidorpreparadoparahacerfrentealmalditospam!
$sudo/etc/init.d/postfixrestart
ESTADSTICASYMONITORIZACIN
Ahoraqueyatenemoselservidorcompletofuncionandoal100%nopodemosabandonarloasu
suerteyesperarquesigafuncionandoduranteelrestodenuestrasvidassinnisiquieradedicarle
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 49/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
unmnimodeatencin.Nomerefieroaquehayaqueestarpendientedelcadada,perosque
convienealmenostenermonitorizadosalgunosdesusvalores,sobretodoalahoradeidentificar
posiblescuellosdebotellaopicosdeactividadquepuedandarnosalgnindicativodequealgono
vabien,odequenecesitamosampliarelhardwarede nuestros sistemas para hacer frente a la
demanda...
Dejando al margen las recomendaciones obvias sobre monitorizacin propia de los servicios de
nuestro sistema (me refiero a algn software para detectar y avisar si alguno de ellos cae,
tipoNagiososimilar)loquepretendoexplicareslamonitorizacindelUSOqueseledaanuestro
sistema.
Los 3 principales programas que yo conozco y suelo utilizar para monitorizar el uso de mis
servidoresdecorreoson:
mailgraph:steprogramamuestragrficasentiemporealsobreelusodePostfix,tales
comoemailsrecibidos,emailsenviados,etc.ygeneragrficasconlainformacindiaria,
semanal,mensualyanual.
queuegraph:Lomismoqueelanterior,peroconinformacinacercadelacolade
mensajes(nmerodemensajesencolados,mensajesmensajesenviados,etc).
couriergraph:Lomismoquelosdosanteriores,peroconinformacinsobrelas
conexionesaCourier(conexionesIMAP,conexionesPOP,etc).
Los 3 programas son muy parecidos, y se basan en RDD para almacenar la informacin, por lo
que no necesitan servidores de base de datos a los que conectarse ni tienen apenas ninguna
dependencia. Simplemente se instalan en el mismo servidor donde estn los servicios que
queremos monitorizar, y desde un navegador accedemos a una URL concreta para ver las
grficasgeneradas.
$sudoaptgetinstallmailgraphqueuegraphcouriergraph
YendistribucionesbasadasenRedhat/CentOS:
$sudoyuminstallmailgraphqueuegraphcouriergraph
Unavezloshayaisinstalado,bastaconabrirunnavegadoryaccederadichosCGIstecleandoen
la barra de direcciones: http://localhost/cgibin/mailgraph.cgi, http://localhost/cgi
bin/queuegraph.cgi o http://localhost/cgibin/couriergraph.cgi (en lugar de localhost , quizs en
vuestrocasodebaisponerladireccindelservidordondeloshayaisinstalado).
Silohabeisinstaladobien,alaccederaesasURLsdeberasveralgoparecidoaesto:
MAILGRAPH:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 50/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
QUEUEGRAPH:
COURIERGRAPH:
Yconrespectoateneruninformemsomenosdetalladadosobreelnmerodeemailsquese
hanenviado/recibido,destinatariosquemscorreohanenviado/recibido,diasquemsemailsse
hanenviado/recibido,etc.yorecomiendoelprogramaIsoqlog.
Con este software, y a base de la informacin que se obtiene del log del servidor (
/var/log/mail.log o /var/log/maillog ) se pueden generar informes bastante detallados y tiles
sobrelaactividadindividualdecadausuarioyobtenerasunavisinmuchomsampliadeluso
queseledaanuestroservidor.
DenuevolainstalacinestrivialenDebian/Ubuntu:
$sudoaptgetinstallisoqlog
Y para el resto de distribuciones, se puede descargar tanto el cdigo fuente como paquetes
RPMdesdelawebdelproyecto:http://www.enderunix.org/isoqlog/
Unavezinstalado,nicamentehayquedefiniruncronparaquegenerelosinformescadacierto
tiempo.Yolosuelohacercada12horas,astengolosinformesdetalladosactualizados2vecesal
da,perorealmentepuedesponerlocuandoquieras.
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 51/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
/etc/isoqlog/isoqlog.conf
#isoqlog2.0Configurationfile
logtype="postfix"
logstore="/var/log/mail.log"
domainsfile="/etc/isoqlog/isoqlog.domains"
outputdir="/var/www/reports"
htmldir="/usr/share/isoqlog/htmltemp"
langfile="/usr/share/isoqlog/lang/english"
hostname="mail.pornohardware.com"
maxsender=100
maxreceiver=100
maxtotal=100
maxbyte=100
/etc/isoqlog/isoqlog.domains
pornohardware.com
pornosoftware.com
Paragenerarelinformedeformamanualbastaconejecutarelcomando:
$sudoisoqlog
Unavezgenerados,losinformessonalgoparecidoaesto:
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 52/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
ComoveislainformacinquemuestrantodosestossistemasdemonitorizacinesMUYtil,porlo
que sumado a la monitorizacin global del servidor (con Cacti, Zabbix o similar) nos permitirn
mantenernuestrorecininstaladoservidorenperfectofuncionamientoduranteeltiempoquehaga
falta.
Ydemomentoaquseacabasteartculo,queyavasiendohora!
Espero que toda sta chapa que he escrito os sirva de ayuda a la hora de configurar vuestro
propioservidordecorreo,yaseaporqueoslohanpedidoenvuestraempresaoporquehabeis
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 53/54
2017529 InstalacinyconfiguracindeunservidordecorreocompletoenLinuxpornoHARDWARE.com
decididotenerelcontroldevuestropropiocorreopersonal,locualesunadelasmejorescosas
que podis hacer en la vida si de verdad os preocupa lo ms mnimo vuestra privacidad y la
seguridad de vuestros datos y conversaciones. Por favor, no hagais comola gran masa tonta y
delegueis la gestin de vuestro email a ladrones y estafadores con doble moralidad (como
Google/Gmailytodasesasgrandesempresas)quenodudarnenparsear,etiquetarycatalogar
incluso vuestros emails ms personales con la excusa de mostraros publicidad ms
relevante(comosiademsesofueraalgobueno).
He tenido especial cuidado a la hora de enumerar los comandos, configuraciones, etc. y he ido
contrastndolo paso a paso con mis actuales servidores de correo para verificar que toda la
informacinqueoshepuestoescorrecta...peroporsupuestohepodidocometeralgnfallo(jaja)
xDDDD.
Sisehadadosteremotoyextrasimocaso,porfavor,decrmelo(escribirloenloscomentarios
delartculo)ylocorregirloantesposible.
Yporsupuesto,nodudeisendistribuirycompartirstainformacincontodoelmundo...peropor
favor,citarsiemprelafuentedesteartculo,quedespusdelacantidaddehorasytrabajoque
mehacostadoescribirlo,almenosdarmeelreconocimientoapropiado!xDDD
Alaaaaaaaaaaaaaaaa
REFERENCIAS
http://www.postfix.org/documentation.html
http://www.couriermta.org/status.html
http://www.openspf.org/
http://whatismyipaddress.com/blacklistcheck
http://sopa.dis.ulpgc.es/iiaso/portal_aso/leclinux/seguridad/pam/pam_doc.pdf
https://pornohardware.com/2015/01/01/instalacionyconfiguraciondeunservidordecorreocompletoenlinux/ 54/54