Objectiu:
Aquest tutorial explica com instal·lar i configurar un servidor de correu postfix. A més, per que els clients puguin consultar el seu correu, també instal·larem els paquets pop3 i imap de Courier.
També ens interessa que els clients s’autentiquin, tant per consultar el seu correu, com per enviar-ne. De les dues maneres, volem autenticar contra un servidor LDAP. Per això utilitzarem el paquet SASLAuth.
Finalment, per fer contents els nostres usuaris els hi instal·larem un antivirus i antispam al servidor. D’aquesta feina se n’encarregarà MailScanner conjuntament amb Spamassassin i Clam Anti-Virus.
Què és un servidor de correu?
A aquestes alçades explicar el que és un servidor de correu és una mica redundant, oi 😉 ?
Obtenció del software necessari:
Partim de la base que disposem d’un servidor amb Ubuntu 7.04 Server. És molt probable que aquest tutorial funcioni sobre d’altres distribucions, però ha estat provat principalment sobre Ubuntu.
NOTA: És molt recomanable seguir els tutorials d’aquesta mateixa pàgina abans de continuar ja que es suposaran implementats:
Utilitzarem l’eina apt per aconseguir tot el software necessari. S’ha entrat al sistema utilitzant l’usuari root. Per començar actualitzem les nostres fonts de apt.
$ apt-get update
Per instal·lar el paquet postfix executarem la següent comanda:
$ apt-get install postfix postfix-ldap procmail
Durant la instal·lació se’ns faran una sèrie de preguntes. Respondrem el següent:
- Tipus de configuració?: Lloc d’Internet
- Nom del correu: domini.com *
* Fixeu-vos que, a diferencia d’altres tutorials, no s’ha utilitzat domini.local, en aquest cas volem que el servidor de correu sigui accessible d’arreu.
Per defecte els arxius de configuració de postfix s’instal·len a la carpeta /etc/postfix. Particularment haurem de modificar l’arxiu /etc/postfix/main.cf i el /etc/postfix/master.cf. Podem veure que el sistema està funcionant si provem de connectar via telnet al port 25:
$ telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 ubuntu ESMTP Postfix
Tot correcte fins aquí.
Configuració:
El següent que farem és reconfigurar el paquet postfix:
$ dpkg-reconfigure postfix
Aquesta segona vegada ja ens demanarà més coses:
- Tipus de configuració?: Lloc d’Internet
- On hauria d’anar a parar el correu dirigit a root?: (en blanc)
- Nom del correu: domini.com *
- Altres destinacions per a les quals s’accepta correu?: domini.com
- Forçar actualitzacions síncrones a la cua de correu?: Sí
- Xarxes locals?: 127.0.0.0/8
- Voleu utilitzar procmail per al lliurament local?: Sí
- Mida màxima de la bústia: 0
- Caràcter d’extensió de les adreces locals?: +
- Protocols d’Internet?: ambdós
Ara l’arxiu main.cf quedarà modificat amb les noves opcions, el nostre és com aquest:
myhostname = ubuntu smtpd_banner = $myhostname ESMTP $mail_name biff = no append_dot_mydomain = no delay_warning_time = 4h alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = domini.com relayhost = mynetworks = 127.0.0.0/8 mailbox_command = procmail -a "$EXTENSION" mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = all
La configuració actual permet només als usuaris locals enviar missatges, això és, des de la mateixa màquina del servidor. L’integració amb LDAP ens permetrà dues coses interessants:
- definir àlies de correu en el servidor LDAP
- autenticar els usuaris als que permetrem fer relay a traves del servidor de correu.
El primer que farem és afegir un Unitat Organitzativa al nostre LDAP. Hem preparat el següent arxiu ldif (postfix.ldif):
dn:ou=Postfix,dc=domini,dc=local ou: Postfix objectClass: top objectClass: organizationalUnit userPassword: secret dn:ou=alias,ou=Postfix,dc=domini,dc=local ou: alias objectClass: top objectClass: organizationalUnit
Per afegir-lo al nostre servidor utilitzarem la següent comanda:
$ apt-get install ldap-utils $ ldapadd -x -D "cn=admin,dc=domini,dc=local" -W -f postfix.ldif Enter LDAP Password: secret adding new entry "ou=Postfix,dc=domini,dc=local" adding new entry "ou=alias,ou=Postfix,dc=domini,dc=local"
Instal·lació Courier i relacionats:
Els paquets de Courier afegeixen el següent al nostre servidor:
- possibilitat d’accés amb pop3 o imap
- respectius mòduls d’autenticacióó
- schema LDAP
Els paquets que hem d’instal·lar són:
$ apt-get install courier-ldap courier-pop courier-imap courier-authdaemon
Aquesta comanda farà instal·lar força paquets extres, els podem acceptar tots. Durant la instal·lació ens demanara si volem crear uns directoris per l’administració via web, no és necessari en el nostre.
Un cop feta la instal·lació podem comprobar amb nmap que tot està funcionant (encara sense configurar, però):
$ nmap localhost Starting Nmap 4.20 ( http://insecure.org ) at 2007-06-19 18:48 CEST Interesting ports on localhost (127.0.0.1): Not shown: 1690 closed ports PORT STATE SERVICE 25/tcp open smtp 53/tcp open domain 110/tcp open pop3 143/tcp open imap 389/tcp open ldap Nmap finished: 1 IP address (1 host up) scanned in 0.068 seconds
Anem ja a configurar tots els accessos al directori LDAP. El primer que fem és afegir el schema al directori.
$ cd /etc/ldap/schema/ $ cp /usr/share/doc/courier-authlib-ldap/authldap.schema.gz . $ gunzip authldap.schema.gz
Com veurem a més endavant, guardarem tot el correu en una carpeta fora dels Homes dels usuaris del sistema, cosa que es baralla una mica amb la configuraciño típica de Courier. Així doncs, i aprofitant que estem en un mon linux on tenim llibertat d’acció modificarem una mica l’authldap.schema per adaptar-lo a les nostres necessitats. Afegirem un nou atribut:
attributetype ( 1.3.6.1.4.1.10018.1.1.15 NAME 'mailrootstore' DESC 'Root folder for mail repositories' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
i modificarem l’objectClass CourierMailAccount:
objectclass ( 1.3.6.1.4.1.10018.1.2.1 NAME 'CourierMailAccount' SUP top AUXILIARY DESC 'Mail account object as used by the Courier mail server' MUST ( mail $ homeDirectory ) MAY ( uidNumber $ gidNumber $ mailbox $ uid $ cn $ gecos $ description $ loginShell $ quota $ userPassword $ clearPassword $ defaultdelivery $ disableimap $ disablepop3 $ disablewebmail $ sharedgroup $ disableshared $ mailhost $ mailrootstore) )
El que hem fet és afegir el mailrootstore, que definirem com la ruta estàtica a l’arrel d’una bústia de correu d’un usuari.
A continuació modifiquem l’arxiu /etc/ldap/slapd.conf per a que contingui la referència a aquest nou schema:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/authldap.schema
Afegir usuaris al directori LDAP amb suport de correu:
Ja podem doncs, afegir usuaris al directori. Ho podem fer de diverses maneres:
- amb la comanda ldapadd a partir d’un fitxer .ldif
- amb l’eina gràfica phpldapadmin, que és força més còmoda.
- afegir els atributs de correu a usuaris ja existents que poguem tenir d’altres tutorials, com per exemple el de samba.
Els atributs a afegir al directori són:
- objectClass: CourierMailAccount
- mail: usuari@domini.com
- mailrootstore: /home/busties/usuari
- mailbox: Maildir/
- quota: 0
Triem l’opció que ens vagi millor.
Per a que els missatges de correu es puguin guardar al disc fa falta crear una estructura de directoris. Concretament utilitzant l’eina maildirmake.
$ mkdir -pv -m 2755 /home/busties $ chown -v root:Domain Users /home/busties
El grup que utilitzem és indiferent, en el nostre cas usem Domain Users. Tots els usuaris del correu hauran de pertànyer a aquest grup, si no existeix s’haurà de crear.
Aleshores, per a cada usuari haurem de crear un arxiu ocult anomenat .procmailrc amb el següent contingut:
PATH=/usr/bin:/bin:/usr/local/bin:. MAILDIR=/home/busties/$LOGNAME/Maildir DEFAULT=$MAILDIR/
Si ho creem en /etc/skel evitarem fer-ho manualment cada cop que afegim un usuari al sistema.
Finalment, un pas que si hem de fer manualment és crear l’estructura de correu amb:
$ mkdir /home/busties/usuari $ cd /home/busties/usuari $ maildirmake Maildir $ chmod -R 0700 /home/busties/usuari $ chown usuari:Domain Users /home/busties/usuari
L’estructura està llesta per emmagatzemar correus. Com això ho haurem de fer per a cada usuari no seria mala idea generar un script que ho fes automàticament.
Afegir àlies a l’LDAP:
És interessant poder definir àlies de correu. Els emmagatzemarem a la OU que hem creat abans al directori LDAP. Per fer un exemple en crearem un per mitja d’un arxiu alias.ldif:
dn: cn=Info,ou=alias,ou=Postfix,dc=domini,dc=local cn: Info sn: Exemple mail: info@domini.com maildrop: usuari@domini.com objectClass: inetOrgPerson objectClass: CourierMailAlias objectClass: top
Per afegir aquest arxiu alias.ldif al directori farem:
$ ldapadd -x -D "cn=admin,dc=domini,dc=local" -W -f alias.ldif Enter LDAP Password: secret adding new entry "cn=Info,ou=alias,ou=Postfix,dc=domini,dc=local"
Ara hem de modificar de nou l’arxiu /etc/postfix/main.cf per a que aquest sapiga on anar a buscar la informació LDAP. Afegirem les següents línies a l’arxiu:
virtual_maps = ldap:valiases valiases_server_host = adreça_ip_del_servidor_LDAP valiases_search_base = ou=alias,ou=Postfix,dc=domini,dc=local valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias)) valiases_result_attribute = maildrop valiases_bind = no
A més l’entrega local també l’ha de gestionar el Postfix amb l’accés a l’LDAP, afegim el següent a la configuració:
local_transport = local local_recipient_maps = ldap:/etc/postfix/ldap_alias.cf unix:passwd.byname $alias_maps
L’arxiu /etc/postfix/ldap_alias.cf permet la connexió al servidor. Aquest conté:
domains_server_host = localhost domains_search_base = dc=domini,dc=local bind_dn = cn=admin,dc=domini,dc=local scope = sub bind = yes version= 3 bind_pw = secret server_host = localhost server_port = 389 search_base = ou=Users,dc=domini,dc=local query_filter = (mail=%s) result_attribute = mail
En aquest punt ja podem recarregar la configuració del postfix:
$ /etc/init.d/postfix reload
Enviar el primer missatge:
Podem enviar un missatge mitjançant:
$ sendmail info@domini.com test .
L’usuari usuari@domini.com hauria de tenir un missatge nou a la carpeta /home/busties/usuari/Maildir/new/
Accés via pop3 i imap (configuració courier):
Per que els usuaris que es connectin via pop3 o imap es puguin autenticar contra l’LDAP també haurem de configurar l’authdaemon de courier. L’arxiu que s’ha de modificar és /etc/courier/authdaemonrc que haurà de contenir la següent línia:
authmodulelist="authldap"
Per configurar l’accés LDAP hem de modificar l’arxiu /etc/courier/authldaprc. Ha de contenir:
LDAP_URI ldap://127.0.0.1 LDAP_PROTOCOL_VERSION 3 LDAP_BASEDN dc=domini, dc=local LDAP_BINDDN cn=admin, dc=domini, dc=local LDAP_BINDPW secret LDAP_TIMEOUT 5 LDAP_MAIL uid LDAP_FILTER (objectClass=CourierMailAccount) LDAP_HOMEDIR mailrootstore LDAP_MAILDIR mailbox LDAP_FULLNAME cn LDAP_CRYPTPW userPassword LDAP_DEREF never LDAP_UID uidNumber LDAP_GID gidNumber LDAP_AUTHBIND 1 LDAP_TLS 0
Finalment reiniciem el servei d’autenticació del courier:
$ /etc/init.d/courier-authdaemon restart
A partir d’aquest punt ja podem configurar els nostres clients pop3 i imap per accedir al servidor.
Ja tenim un servidor de correu amb autenticació pop3 i imap amb LDAP. L’informació dels àlies també es guarda a l’LDAP. Només ens falta l’autenticació en el moment de l’enviament. Això ho resoldrem amb SASLAuth.
Autenticació SMTP (SASLAuth):
La llibreria SASL ve a ser l’autenticació per a SMTP. La instal·lació es fa amb:
$ apt-get install sasl2-bin libsasl2-modules
El primer que farem és canviar l’arxiu /etc/default/saslauthd, ha de posar:
START=yes MECHANISMS="ldap"
A continuació crearem l’arxiu /etc/saslauthd.conf amb el contingut:
ldap_servers: ldap://127.0.0.1 ldap_bind_dn: cn=admin, dc=domini, dc=local ldap_bind_pw: secret ldap_search_base: ou=Users,dc=domini,dc=local ldap_filter: uid=%u ldap_password_attr: userPassword
i ja el podem iniciar:
$ /etc/init.d/saslauthd start
Ara modifiquem l’arxiu /etc/postfix/master.cf, hem de treure el dimoni smtpd del chroot modificant la línia al respecte que quedi de la següent manera:
smtp inet n - n - - smtpd
i recarreguem el postfix:
$ /etc/init.d/postfix reload
Afegim l’usuari postfix al grup sasl:
$ adduser postfix sasl
i ja podem afegir les següents línies al final del /etc/postfix/main.cf, controlen els permisos dels usuaris autenticats amb SASL:
smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_application = smtpd smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_auth_destination permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject
L’últim que queda fer és crear l’arxiu /etc/postfix/sasl/smtpd.conf amb el contingut:
pwcheck_method: saslauthd mech_list: login
podem provar que l’autenticació SASL funciona amb la comanda:
$ testsaslauthd -u usuari -p secret 0: OK "Success."
i a correr! 🙂 A la segona part d’aquest tutorial afegirem Antispam i Antivirus.