Professional Documents
Culture Documents
Page 1 of 23
Ubuntu/Debian + Postfix + Courier IMAP + MySQL + Amavisd-new + SpamAssassin + ClamAV + SASL + TLS + SquirrelMail/Roundcube + Postgrey INDICE
Introduccin Configuracin de Ip fija Configuracin de Ip pblica Configuracin de la red Actualizacin de los repositorios Instalacin del software necesario PostFix How-to de Shorewall para la configuracin del firewall Iptables Configuracin de Shorewall para el servicio SSH Configuracin de PostFix Configuracin de MySQL para PostFix Creacin de la Base de Datos Configuracin de Courier IMAP Servidor de correo avanzado Antispam y Antivirus (Spamassssin y Clamav) Polticas de control (Postgrey) Autenticacin SASL SASL/Courier IMAP TLS en PostFix Webmail (Rouncube) Agregar usuarios y dominios
INTRODUCCIN
Gua paso a paso para configurar un servidor de correo en un sistema GNU/Linux. Es fcil de seguir y termina con un potente servidor de correo seguro, que acepta dominios y usuarios ilimitados, y todo el correo se puede leer a travs de sus clientes favoritos, o a travs de correo web. Es seguro, el trfico se cifra y se bloquea casi todo el spam y los virus.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 2 of 23
Una vez que ya confirmamos nuestro registro a travs del correo que proporcionamos. Nos logueamos en la siguiente pagina: http://www.no-ip.com/login/
ya dentro vamos a ver la siguiente pagina en la cul vamos a darle un click al icono encerrado en color rojo
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 3 of 23
En el apartado de Hostname information nos encontramos con opciones por llenar: Hostname: Aqu deben poner la pagina que quieran para su servidor (yo como ejemplo pondr server1) El dominio: Como va a ser gratuito nos vamos al apartado de No-IP Free Domains que est adelante de hostname y elegimos el que queramos (yo elegir para lo que sigue en la configuracin el dominio "no-ip.org". Por lo que quedara as server1.no-ip.org y es el que utilizar de aqu en adelante. Y por ltimo seleccionamos la opcin "create host"
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 4 of 23
Bueno eso es todo lo que tenemos que hacer en la pagina de no-ip ahora vamos a configurar no-ip en ubuntu. Ya desde una terminal ejecutamos los siguientes comandos: sudo apt-get install no-ip Durante la instalacin veremos una pantalla como esta
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 5 of 23
Introducimos en minutos con que frecuencia queremos que nuestro servidor enve nuestra IP hacia no-ip.com ( 30 es un buen numero )
Este apartado lo podemos dejar en blanco sin problemas ya que se supone que solo tenemos esta cuenta para solo nuestro servidor
Aqu debemos introducir el nombre con el que est identificada nuestra tarjeta de red. ( Esto podemos verlo con el comando ifconfig )
Configuracin de la RED
HOSTNAME Un FQDN (Fully Qualified Domain Name) es un nombre que incluye el nombre de la computadora y el nombre de dominio asociado a ese equipo. Por ejemplo, dada la computadora llamada serv1 y el nombre de dominio bar.com, el FQDN ser serv1.bar.com, a su vez un FQDN asociado a serv1 podra ser post.serv1.bar.com. La longitud mxima permitida para un FQDN es 255 caracteres (bytes), con una restriccin adicional a 63 bytes por etiqueta dentro de un nombre de dominio. Las etiquetas FQDN se restringen a un juego de caracteres limitado: letras A-Z de ASCII, los dgitos, y el carcter - , y no distinguen maysculas de minsculas. La sintaxis de los nombres de dominio se discute en varios RFCs -- RFC 1035, RFC 1123 y RFC 2181. En 2004 se aadieron algunos caracteres como , , ,
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 6 of 23
, , ... como caracteres permitidos para las etiquetas. Ahora entramos a /etc/hosts nano /etc/hosts y lo modificamos de la siguiente manera (recuerden que aqu pondrn el host que crearon en la pagina de no-ip) 127.0.0.1 192.168.0.100 localhost.localdomain localhost server1.no-ip.org server1
# The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ahora ejecutamos echo server1.no-ip.org > /etc/hostname /etc/init.d/hostname restart para ver el resultado ejecutamos hostname Editamos /etc/resolv.conf nano /etc/resolv.conf
y enseguida modificamos de la siguiente manera: domain no-ip.org search no-ip.org nameserver aqu_va_la_ip_del_gateway
INSTALACIN DEL SOFTWARE NECESARIO MySQL y Postfix (MTA: para enviar correo)
Postfix es un agente de transporte de mensajes (MTA) que transporta los mensajes de un agente de usuario de correo (MUA, o cliente de correo) a un servidor de correo con SMTP. Un MTA tambin acepta mensajes desde los servidores de correo remoto para transmitir a otros MTA o entregarlos a los buzones locales. Despus de transmitir o entregar un mensaje, el trabajo de Postfix termina. Otros servidores son responsables de hacer llegar el mensaje al usuario final. Por ejemplo, los MTA, como POP3 o IMAP, entregan el mensaje a un MUA, como Mutt, Outlook o Apple Mail, donde el usuario pueda leerlo. El MTA (Mail Transportation Agent) Postfix pretende ser rpido, fcil de administrar y seguro, a la vez que suficientemente compatible con Sendmail como para que los usuarios existentes no se asusten. Por lo tanto, externamente mantiene el estilo de Sendmail, mientras que internamente es completamente diferente. A diferencia de Sendmail, Postfix no es un programa monoltico, sino una combinacin de pequeos programas, cada uno de los cuales lleva a cabo una funcin
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 7 of 23
especializada. Instalamos la base de datos y el servidor de correo: sudo aptitude install mysql-client mysql-server postfix postfix-mysql Respondemos a las preguntas: New password for the MySQL "root" user: <-- Aqu_pones_el_password_de_root_para_sql Repeat password for the MySQL "root" user: <-- repites_el_password_de_root_para_sql Create directories for web-based administration? <-- No General type of mail configuration: <-- Internet Site System mail name: <-- server1.example.com SSL certificate required <-- Ok
SASL
SASL son las siglas de Simple Authentication and Security Layer, un mtodo para aadir soporte para la autenticacin a protocolos basados en la conexin que ha sido estandarizado por la IETF (Internet Engineering Task Force). Se usa en servidores para manejar las peticiones de autenticacin de los clientes. Para ello, el protocolo incluye un comando para identificar y autenticar un usuario contra un servidor y para, opcionalmente, negociar la proteccin de las subsiguientes interacciones del protocolo. Si se negocia su uso, una capa de seguridad es aadida entre el protocolo y la conexin. sudo aptitude install libsasl2-modules libsasl2-modules-sql libgsasl7\ libauthen-sasl-cyrus-perl sasl2-bin libpammysql
ClamAV
ClamAV es una herramienta antivirus GPL para UNIX. El propsito principal de este software es la integracin con los servidores de correo (escaneo de datos adjuntos). El paquete proporciona un servicio multihilo flexible y escalable, un analizador de lnea de comandos y una utilidad para la actualizacin automtica via Internet. Los programas estn basados en una librera distribuida con el paquete Clam AntiVirus, la cual puede ser usada por su propio software. Y lo ms importante, la base de datos se mantiene actualizada constantemente. Otras caractersticas destacables son el soporte de firmas digitales en la actualizacin de la base de datos, el anlisis durante el acceso bajo Linux y FreeBSD, la deteccin de virus, gusanos y troyanos, el soporte integrado para archivos comprimidos con Rar, Zip, Gzip y Bzip2 y formatos de correo Mbox, Maildir y ficheros crudos de correo. sudo aptitude install clamav-base libclamav6 clamav-daemon clamav-freshclam
SquirrelMail
SquirrelMail es un paquete de correo por web basado en estndares y escrito en PHP 4. Incorpora soporte PHP para los protocolos IMAP y SMTP, y todas sus pginas se crean en puro HTML 4.0 (sin requerir el uso de JavaScript), de modo que se garantize la mxima compatibilidad entre navegadores. Tiene muy pocos requerimientos y es muy fcil de instalar y configurar. SquirrelMail tiene toda la funcionalidad que se espera de un cliente de correo electrnico, incluyendo soporte de MIME, agendas de contactos y gestin de carpetas. sudo aptitude install squirrelmail squirrelmail-locales php-pear php5-cli
phpMyAdmin
phpMyAdmin es una herramienta de software libre escrito en PHP para manejar la administracin de MySQL a travs de la World Wide Web. phpMyAdmin es compatible con una amplia gama de operaciones con MySQL. Las operaciones ms utilizadas son compatibles con la interfaz de usuario (manejo de bases de datos, tablas, campos, relaciones, ndices, usuarios, permisos, etc), mientras que usted todava tiene la capacidad de ejecutar directamente cualquier sentencia SQL. sudo aptitude install phpmyadmin Escriba S para configurarlo, introduzca la contrasea de root mysql, escriba una contrasea de usuario mysql phpmyadmin dos veces. Acepte apache2 como el servidor web.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 8 of 23
ShoreWall
El Shoreline Firewall, ms comnmente conocido como "Shorewall", es una herramienta de alto nivel para configurar Netfilter. Usted describe sus requerimentos del firewall/gateway usando entradas en un conjunto de archivos de configuracin. Shorewall lee los archivos de configuracin y con la ayuda de iptables, iptables-restore, IP y las TC utilities, Shorewall configura Netfilter y el subsistema de red de Linux para satisfacer sus necesidades. Shorewall se puede utilizar en un sistema firewall, un multi-funcin de gateway/router/servidor o en un independiente sistema de GNU/Linux. Shorewall no usar el modo compatibilidad ipchains de Netfilter y por lo tanto pueden aprovechar las capacidades de seguimiento del estado de conexiones de Netfilter. Shorewall no es un demonio. Una vez que ha configurado Shorewall el subsistema de red de Linux, su trabajo se ha completado. El programa /sbin/shorewall se puede utilizar en cualquier momento para controlar el firewall Netfilter. Shorewall no es ms fcil de usar de las herramientas disponibles de configuracin de iptables, pero creo que es el ms flexible y potente. sudo aptitude install shorewall-common shorewall-perl sudo aptitude install shorewall shorewall-doc
Configuracin de Postfix
Ejecutamos dpkg-reconfigure postfix Elegimos y escribimos lo pongo en forma resumida pero es cada una de las pantallas: 1. General Type of mail configuration, elegimos. Internet Site 2. System mail name, teclamos. server1.no-ip.org 3. Root and postmaster mail recipient tu cuenta de usuario 4. Other destinatation to accept mail for (blanck for none): server1.no-ip.org, localhos.no-ip.org, no-ip.org, localhost 5. Local Networks (nota: agregamos nuestro intervalo de red) 127.0.0.0/0 (::ffff:127.0.0.0)/104 (::1)/128 192.168.0.0/100 6. Internet protocols to use: all
Firewall Shorewall
Autor: Joel Barrios Dueas
Antes de empezar a configurar iptables a travs de Shorewall vamos a hablar acerca de las opciones ms comunes de iptables: -A aade una cadena, la opcin -i define una interfaz de trfico entrante -o define una interfaz para trafico saliente -j establece una regla de destino del trfico, que puede ser ACCEPT, DROP o REJECT.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 9 of 23
-m define que se aplica la regla si hay una coincidencia especfica --state define una lista separada por comas de distinto tipos de estados de las conexiones (INVALID, ESTABLISHED, NEW, RELATED). --to-source define que IP reportar al trfico externo -s define trafico de origen -d define trfico de destino --source-port define el puerto desde el que se origina la conexin --destination-port define el puerto hacia el que se dirige la conexin -t tabla a utilizar, pueden ser nat, filter, mangle o raw.
Ejemplos de reglas.
Reenvo de paquetes desde una interfaz de red local (eth1) hacia una interfaz de red pblica (eth0): iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT Aceptar reenviar los paquetes que son parte de conexiones existentes (ESTABLISHED) o relacionadas de trfico entrante desde la interfaz eth1 para trfico saliente por la interfaz eth0: iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT Permitir paquetes en el propio muro cortafuegos para trfico saliente a travs de la interfaz eth0 que son parte de conexiones existentes o relacionadas: iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT Permitir (ACCEPT) todo el trfico entrante (INPUT) desde (-s) cualquier direccin (0/0) la red local (eth1) y desde el retorno del sistema (lo) hacia (-d) cualquier destino (0/0): iptables -A INPUT -i eth1 -s 0/0 -d 0/0 -j ACCEPT iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT Hacer (-j) SNAT para el trfico saliente (-o) a trves de la interfaz eth0 proveniente desde (-s) la red local (192.168.0.0/24) utilizando (--to-source) la direccin IP w.x.y.z. iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j SNAT --to-source x.y.z.c Descartar (DROP) todo el trfico entrante (-i) desde la interfaz eth0 que trate de utilizar la direccin IP pblica del servidor (w.x.y.z), alguna direccin IP de la red local (192.168.0.0/24) o la direccin IP del retorno del sistema (127.0.01) iptables -A INPUT -i eth0 -s w.x.y.x/32 -j DROP iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos SMTP (25), HTTP(80), HTTPS (443) y SSH (22): iptables iptables iptables iptables -A -A -A -A INPUT INPUT INPUT INPUT -p -p -p -p tcp tcp tcp tcp -s -s -s -s 0/0 0/0 0/0 0/0 -d -d -d -d 0/0 0/0 0/0 0/0 --destination-port --destination-port --destination-port --destination-port 25 --syn -j ACCEPT 80 --syn -j ACCEPT 443 --syn -j ACCEPT 22 --syn -j ACCEPT
Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-tcp) para los puertos (--destination-port) del protocolos SMTP (25) en el servidor (w.x.y.z/32), desde (-s) cualquier lugar (0/0) hacia (-d) cualquier lugar (0/0). iptables -A INPUT -p tcp -s 0/0 -d w.x.y.z/32 --destination-port 25 --syn -j ACCEPT Aceptar (ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (--destination-port) de los protocolos POP3 (110), POP3S (995), IMAP (143) y IMAPS (993): iptables iptables iptables iptables -A -A -A -A INPUT INPUT INPUT INPUT -p -p -p -p tcp tcp tcp tcp -s -s -s -s 0/0 0/0 0/0 0/0 -d -d -d -d 0/0 0/0 0/0 0/0 --destination-port --destination-port --destination-port --destination-port 110 995 143 993 --syn --syn --syn --syn -j -j -j -j ACCEPT ACCEPT ACCEPT ACCEPT
Aceptar (ACCEPT) el trfico entrante (-i) proveniente desde la interfaz eth1 cuando las conexiones se establezcan desde el puerto (--sport) 67 por protocolos (-p) TCP y UDP. iptables -A INPUT -i eth1 -p tcp --sport 68 --dport 67 -j ACCEPT iptables -A INPUT -i eth1 -p udp --sport 68 --dport 67 -j ACCEPT Aceptar (ACCEPT) conexiones de trfico entrante (INPUT) por protocolo (-p) UDP cuando se establezcan desde (-s) el servidor DNS 200.33.145.217 desde el puerto (--source-port) 53 hacia (-d) cualquier destino (0/0): iptables -A INPUT -p udp -s 201.161.1.226/32 --source-port 53 -d 0/0 -j ACCEPT
Cerrar accesos.
Descartar (DROP) el trfico entrante (INPUT) para el protocolo (-p) TCP hacia los puerto (--destination-port) de SSH (22) y Telnet (23): iptables -A INPUT -p tcp --destination-port 22 -j DROP iptables -A INPUT -p tcp --destination-port 23 -j DROP Descartar (DROP) todo tipo de conexiones de trfico entrante (INPUT) desde (-s) la direccin IP a.b.c.d: iptables -A INPUT -s a.b.c.d -j DROP Rechazar (REJECT) conexiones hacia (OUTPUT) la direccin IP a.b.c.d desde la red local: iptables -A OUTPUT -d a.b.c.d -s 192.168.0.0/24 -j REJECT Eliminar reglas. En general se utiliza la misma regla, pero en lugar de utilizar -A (append), se utiliza -D (delete). Elininar la regla que descarta (DROP) todo tipo de conexiones de trfico entrante (INPUT) desde (-s) la direccin IP a.b.c.d: iptables -D INPUT -s a.b.c.d -j DROP
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 10 of 23
Mostrar la lista de cadenas y reglas. Una vez cargadas todas las cadenas y reglas de iptables es posible visualizar stas utilizando el mandato iptables con las opciones -n, para ver las listas en formato numrico, y -L, para solicitar la lista de stas cadenas. iptables -nL Cuando no hay reglas ni cadenas cargadas, la salida debe devolver lo siguiente: Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Cuando hay cadenas presentes, la salida, suponiendo que se utilizarn los ejemplos de este documento, debe devolver algo similar a lo siguiente: Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 DROP all -- 192.168.1.64 0.0.0.0/0 DROP all -- 172.16.0.0/24 0.0.0.0/0 DROP all -- 127.0.0.0/8 0.0.0.0/0 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 192.168.1.64 tcp dpt:25 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993 flags:0x17/0x02 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:68 dpt:67 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:68 dpt:67 ACCEPT udp -- 201.161.1.226 0.0.0.0/0 udp spt:53 Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 11 of 23
cp /usr/share/doc/shorewall/default-config/hosts /etc/shorewall/ nano /etc/shorewall/hosts # loc eth0:192.168.0.0/100 A continuacin, establezca cul es la poltica por defecto para el acceso del firewall. cp /usr/share/doc/shorewall/default-config/policy /etc/shorewall/ nano /etc/shorewall/policy $FW net ACCEPT net $FW DROP info net all DROP info # The FOLLOWING POLICY MUST BE LAST all all REJECT info Para seguridad en caso de que se caiga cp /usr/share/doc/shorewall/default-config/routestopped /etc/shorewall/ nano /etc/shorewall/routestopped eth0 0.0.0.0 routeback Configurar las reglas cp /usr/share/doc/shorewall/default-config/rules /etc/shorewall/ nano /etc/shorewall/rules SSH/ACCEPT net $FW ABIERTA PARA LOS NEGOCIOS Una vez que su servidor est funcionando volver a este paso y abrir el acceso SMTP y Web a otras personas. nano /etc/shorewall/rules Ping/ACCEPT net $FW # Permit all ICMP traffic FROM the firewall TO the net zone ACCEPT $FW net icmp # mail lines SMTP/ACCEPT net $FW SMTPS/ACCEPT net $FW Submission/ACCEPT net $FW IMAP/ACCEPT net $FW IMAPS/ACCEPT net $FW #web Web/ACCEPT net $FW Para probar la sintaxis de configuracin, ejecute shorewall check Reiniciar con /etc/init.d/shorewall restart Luego, para activarlo durante el arranque: nano /etc/default/shorewall startup=1
MTA POSTFIX
Usted debe poner el nombre de su servidor en este archivo sudo nano /etc/mailname por lo que el archivo queda de la siguiente forma server1.no-ip.org Ahora se abrir el archivo de configuracin principal de postfix: nano /etc/postfix/main.cf Debian y Ubuntu ya se ponen algunos valores razonables por defecto en este archivo.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 12 of 23
myhostname = server1.no-ip.org myorigin = /etc/mailname mydestination = server1.no-ip.org, localhost, localhost.localdomain, localhost.no-ip.org, no-ip.org mynetworks = 192.168.1.0/100, 127.0.0.0/8 [::1]/128 Luego, decida lo que tendr el texto de bienvenida. Informacin suficiente, pero no divulgue todo a los hackers potenciales. smtpd_banner = $myhostname ESMTP $mail_name A continuacin, tiene que decidir si va a enviar todo el correo saliente a travs de otro servidor SMTP, o enviar a travs de su propia cuenta. # leave blank to do it yourself relayhost = # or put it an accessible smtp server relayhost = smtp.yourisp.com Lo siguiente es informacin de la red. Que se pueden conectar desde cualquier lugar, y slo confiar en este equipo. inet_interfaces = all mynetworks_style = host A continuacin, puede enmascarar algunas direcciones salientes. # masquerade_domains = <a>mail.example.com</a> www.example.com <a>!sub.dyndomain.com</a> # masquerade_exceptions = root A medida que va a utilizar dominios virtuales, estos deben estar vacos. local_recipient_maps = mydestination = A continuacin, crear unos poco nmeros. # how long if undelivered before sending warning update to sender delay_warning_time = 4h # will it be a permanent error or temporary unknown_local_recipient_reject_code = 450 # how long to keep message on queue before return as failed. # some have 3 days, I have 16 days as I am backup server for some people # whom go on holiday with their server switched off. maximal_queue_lifetime = 7d # max and min time in seconds between retries if connection failed minimal_backoff_time = 1000s maximal_backoff_time = 8000s # how long to wait when servers connect before receiving rest of data smtp_helo_timeout = 60s # how many address can be used in one message. # effective stopper to mass spammers, accidental copy in whole address list # but may restrict intentional mail shots. smtpd_recipient_limit = 16 # how many error before back off. smtpd_soft_error_limit = 3 # how many max errors before blocking it. smtpd_hard_error_limit = 12 Ahora podemos especificar algunas restricciones. Tenga cuidado de que cada opcin de configuracin quede en una sola lnea.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 13 of 23
# Requirements for the HELO statement smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit # Requirements for the sender details smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit # Requirements for the connecting server smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client blackholes.easynet.nl, reject_rbl_client dnsbl.njabl.org # Requirement for the recipient address smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, permit smtpd_data_restrictions = reject_unauth_pipelining Otras restricciones: # require proper helo at connections smtpd_helo_required = yes # waste spammers time before rejecting them smtpd_delay_reject = yes disable_vrfy_command = yes Lo siguiente es necesario para establecer algunos mapas y bsquedas de los dominios virtuales. # not sure of the difference of the next two # but they are needed for local aliasing alias_maps = hash:/etc/postfix/aliases alias_database = hash:/etc/postfix/aliases # this specifies where the virtual mailbox folders will be located virtual_mailbox_base = /var/spool/mail/virtual # this is for the mailbox location for each user virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf # and this is for aliases virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf # and this is for domain lookups virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf # this is how to connect to the domains (all virtual, but the option is there) # not used yet # transport_maps = mysql:/etc/postfix/mysql_transport.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 Es necesario crear un archivo de alias. Slo se utiliza a nivel local, y no por sus dominios de correo propios. sudo cp /etc/aliases /etc/postfix/aliases # may want to view the file to check if ok. # especially that the final alias, eg root goes # to a real person sudo postalias /etc/postfix/aliases A continuacin, tiene que configurar la carpeta donde se almacena el correo virtual. Esto puede haber sido ya realizada por el apt-get. Y tambin crear el usuario que ser el propietario de las carpetas. # to sudo sudo sudo sudo add if there is not a virtual user mkdir /var/spool/mail/virtual groupadd --system virtual -g 5000 useradd --system virtual -u 5000 -g 5000 chown -R virtual:virtual /var/spool/mail/virtual
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 14 of 23
user=mail password=<a>mailPASSWORD</a> dbname=maildb table=domains select_field=domain where_field=domain hosts=127.0.0.1 additional_conditions = and enabled = 1 Si se especifica una IP en los hosts, (en oposicin a 'localhost'), entonces se comunican a travs de TCP y no la toma de mysql. (Restriccin chroot). Posdata. No olvides cambiar las contraseas con la contrasea elegida usuario de correo.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 15 of 23
En la versiones anteriores se necesitaba descomentar esta lnea #skip-networking Sin embargo en el actual archivo por defecto une la direccin al localhost, lo cual est bien. bind-address = 127.0.0.1 Habilite estas lineas general_log_file = /var/log/mysql/mysql.log general_log = 1 Reinicie MySQL para aplicar la nueva configuracin /etc/init.d/mysql restart
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 16 of 23
y less 21-ubuntu_defaults pero no cambie nada en ellos. 25-amavis_helpers la configuracin por defecto esta bien 30-template-localization la configuracin por defecto esta bien Editar archivo de usuario sudo nano 50-user y en la mitad del archivo insertar @local_domains_acl = qw(.); $log_level = 2; $syslog_priority = 'debug'; # $sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level # $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level $sa_kill_level_deflt = 8.0; # triggers spam evasive actions # $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent $final_spam_destiny = D_PASS; # $final_spam_destiny = D_REJECT; # default # $final_spam_destiny = D_BOUNCE; # debian default # $final_spam_destiny = D_DISCARD; # ubuntu default, recommended as sender is usually faked Hemos configurado amavis para escanear y pasar a lo largo del correo entrante. Ahora vamos a la configuracin de postfix para que se comunique con amavis. nano /etc/postfix/master.cf Aadir estas lneas al final del archivo (asegrese de que no estn presentes). (Nota las lneas con (-o) al inicio tienen espacios delante de ellos. amavis -o -o -o -o unix 2 smtp_data_done_timeout=1200 smtp_send_xforward_command=yes disable_dns_lookups=yes max_use=20 smtp
127.0.0.1:10025 inet n smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks Tambin agregar las dos lneas siguientes inmediatamente debajo del servicio de transporte "pick-up": -o content_filter= -o receive_override_options=no_header_body_checks y luego agregue a main.cf sudo nano /etc/postfix/main.cf content_filter = amavis:[127.0.0.1]:10024 Activar el anlisis de ClamAV de amavis en archivos temporales. sudo adduser clamav amavis Con esto se debe conseguir que amavis trabaje. Si los correos son recogidos por amavis y pasan despus a postfix entonces se ve bien. Slo cuando termine de hacer pruebas descomente las lneas de antivirus y antispam en: sudo nano 15-content_filter_mode @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); Cuando las cosas esten funcionando vamos a bajar el nivel de registro, y empezar a rebotar/descartar spam. sudo nano /etc/amavis/conf.d/50-user
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 17 of 23
@local_domains_acl = qw(.); $log_level = 1; $syslog_priority = 'info'; # $sa_tag_level_deflt = 2.0; # add spam info headers if at, or above that level } # $sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level $sa_kill_level_deflt = 8.0; # triggers spam evasive actions # $sa_dsn_cutoff_level = 10; # spam level beyond which a DSN is not sent # $final_spam_destiny = D_PASS; # $final_spam_destiny = D_REJECT; # default # $final_spam_destiny = D_BOUNCE; # debian default $final_spam_destiny = D_DISCARD; # ubuntu default, recommended as sender is usually faked La configuracin por defecto de SpamAssassin estaban bien, pero usted puede modificarla en /etc/spamassassin/local.cf. Por ejemplo usted puede aumentar o disminuir los niveles necesarios antes de que los correos sean marcados como spam, y antes de rechazarlos. He aqu un ejemplo de mi local.cf. skip_rbl_checks use_razor2 use_dcc use_pyzor use_bayes bayes_path bayes_file_mode 0 0 0 0 1 /etc/spamassassin/bayes 0770
Una vez que haya una coleccin de spam y no spam (200 de cada uno), puede entrenar el filtro Bayesiano en SpamAssassin con estos mensajes de correo electrnico. Revise esto en el sitio web de SpamAssassin. # E.g. like this sa-learn --showdots -C /etc/spamassassin --spam /var/spool/mail/virtual/quarantine/.spam/* sa-learn --showdots -C /etc/spamassassin --ham /var/spool/mail/virtual/mine/cur/* Si usted nota que mucho spam se dejan pasar, a continuacin, hacer ms ajustes. Si usted recibe demasiados falsos positivos, es decir, mensajes de correo electrnico real marcados como spam, afloje un poco la puesta a punto. Una configuracin correcta de SpamAssassin debe coger el 97% de todo el spam. Con aproximadamente 1 de cada 1000 falsos positivos. El sitio SpamAssassin tiene un montn de informacin sobre su creacin. Vale la pena una buena lectura a travs de esta. Usted necesita decirle a SpamAssassin que smapd en el arranque. sudo nano /etc/default/spamassassin ENABLED=1
Script ejemplo
Ejemplo de script y crontab para reentrenar spam/ham a partir de carpetas IMAP: crear un script /usr/local/bin/learn-spam asi:
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 18 of 23
#!/bin/bash PATH=/usr/bin:/usr/sbin:/bin:/sbin ## SPAM: for i in /home/miope/Maildir/.SPAM.ES_SPAM/cur/* do cat $i | rm -f $i done ## HAM: for i in /home/miope/Maildir/.SPAM.NOesSPAM/cur/* do cat $i | sa-learn -C /etc/spamassassin/ --ham --no-rebuild rm -f $i done sa-learn -C /etc/spamassassin/ --rebuild sa-learn -C /etc/spamassassin/ --spam --no-rebuild
en /etc/crontab: ## Re-entreno la base bayesiana con los spams mal clasificados: 52 6 1 * * root /usr/local/bin/learn-spam
Anti Virus
ClamAV
ClamAV no necesita configuracin. Los archivos de configuracin estn en /etc/clamav, pero se generan automticamente, as que no es necesario editarlos. De forma predeterminada freshclam, el demonio que actualiza la base de datos de definiciones de virus, se ejecuta 24 veces al da. Eso parece un poco excesivo, por lo que se tiende a establecer que sea una vez al da. sudo dpkg-reconfigure clamav-freshclam Tambin se le preguntar si quiere que sea el demonio (s) y el servidor ms cercano a usted. Slo si es necesario puede utilizar el comando siguiente para reconfigurar con un monton de preguntas. No es necesario a menos que necesite configurar. sudo dpkg-reconfigure clamav-base
Postgrey
La configuracin por defecto de postgrey est bien. Sin embargo, usted necesita decirle a Postfix para que lo use. sudo nano /etc/postfix/main.cf Y a continuacin, modifique las restricciones del destinatario: smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit Puede modificar listas blancas en /etc/postgrey. Puede ajustar la configuracin postgrey modificando el archivo /etc/default/postgrey. Por ejemplo demora, lista blanca automtica, o rechazo de mensajes. POSTGREY_OPTS="--inet=10023 --max-age=365"
Autenticacin SASL
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 19 of 23
SASL asegura la autenticacin real (entrada), mediante la codificacin de las contraseas de modo que no puede ser fcilmente interceptado. El resto de los correos electrnicos son, sin embargo texto plano. SASL puede ser un dolor de cabeza en crear, sobre todo porque no es compatible con el almacenamiento de contraseas cifradas por defecto en Ubuntu. En ediciones anteriores de este tutorial se describe cmo configurar SASL usando contraseas de texto sin formato en la base de datos. Obviamente, esto no es lo ideal, por lo que hay maneras de combinar SASL y el almacenamiento de contraseas encriptadas. En el futuro los paquetes que viene con Ubuntu podr apoyar la opcin de configuracin password_format de SASL. Pero hasta entonces se puede configurar SASL para pedir PAM que compare las contraseas: Instalar paquetes: sudo aptitude install sasl2-bin libpam-mysql libsasl2-modules libsasl2-modules-sql Habilitar postfix para que acceda a los archivos de SASL: sudo adduser postfix sasl Crear archivos sasl accesibles incluso por el chroot de Postfix: sudo mkdir -p /var/spool/postfix/var/run/saslauthd Aadir configuraciones SASL a postfix: sudo vi /etc/postfix/main.cf # SASL smtpd_sasl_auth_enable = yes # If your potential clients use Outlook Express or other older clients # this needs to be set to yes broken_sasl_auth_clients = no smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = Modificar estas configuraciones ya existentes: # Add permit_sasl_authenticated to you existing smtpd_sender_restrictions smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit # Add permit_sasl_authenticated to you existing smtpd_recipient_restrictions smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit Cambiar la forma en que se ejecuta SASLAUTHD: sudo nano /etc/default/saslauthd # Toggle this to yes START=yes # Switch this to be under postfix's spool # And add -r so that the realm(domain) is part of the username OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd" Dile a postfix cmo interactuar con SASL: sudo nano /etc/postfix/sasl/smtpd.conf pwcheck_method: saslauthd mech_list: plain login cram-md5 digest-md5 log_level: 7 allow_plaintext: true auxprop_plugin: mysql sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: mail sql_passw: mailPASSWORD sql_database: maildb sql_select: select crypt from users where id='%u@%r' and enabled = 1
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 20 of 23
(Cuando SASL este trabajando puede quitar la lnea log_level.) Decir a pam cmo hacer para autenticar SMTP a travs de mysql: sudo nano /etc/pam.d/smtp Estos deben estar en dos lneas auth required pam_mysql.so user=mail passwd=aPASSWORD host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 account sufficient pam_mysql.so user=mail passwd=aPASSWORD host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1 Adems de tailing var/log/mail.log y /var/log/mysql/mysql.log es muy util el tail de auth.log al probar SASL tail -f /var/log/auth.log Reinicie postfix y saslauthd para habilitar SASL en el envo de mensajes de correo electrnico. sudo /etc/init.d/saslauthd restart sudo /etc/init.d/postfix restart
Cifrado TLS
El cifrado del trfico evita que alguien este escuchando las comunicaciones en su correo electrnico. Y es muy recomendable. Hay diferentes tipos de comunicacin para cifrar. El trfico de datos entre las aplicaciones de correo electrnico y nuestro servidor cuando se lee correo electrnico o al enviar mensajes de correo electrnico, y la comunicacin entre otros servidores de correo electrnico y nuestro servidor.
TLS en Postfix
Para cifrar necesita certificados. En primer lugar usted necesita crear un certificado para postfix y uno para Courier. En postfix se tiene que hacer esto para un certificado de 3 aos: cd /etc/postfix openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 999 x509 Luego hay que aadir estos a /etc/postfix/main.cf smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/postfix.cert smtpd_tls_key_file = /etc/postfix/postfix.key smtpd_data_restrictions = reject_unauth_pipelining Seguido por la adicin o hacer que estos se encuentre en master.cf: # these may already be present in your file, # however I usually have to add them # also, this specific line used to use fifo, it now needs to use unix type tlsmgr unix - - n 300 1 tlsmgr smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes 587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes Estos puertos son necesarios para los clientes que no podrn utilizar la opcin STARTTLS en el puerto 25. El puerto 465 (la lnea SMTPS) es una solucin no oficial, para que los clientes Por ejemplo, Evolucin de Novel, puedan utilizar hasta que corrijan su software para trabajar con STARTTLS. Los paquetes de Debian crea certificado de courier para usted. De lo contrario debe hacer esto (en nombre del caso del servidor no es el mismo que el nombre del equipo): openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999 A continuacin edite /etc/courier/imapd-ssl y asegurarse de que esta es la ruta al certificado. TLS_CERTFILE=/etc/courier/imapd.pem Ya hay algunas configuraciones de TLS en Debian por default para este archivo: sudo nano /etc/postfix/main.cf
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 21 of 23
# TLS parameters #smtp_use_tls = no smtp_tls_security_level = may #smtpd_use_tls=yes smtpd_tls_security_level = may smtpd_tls_auth_only = no smtp_tls_note_starttls_offer = yes smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key #smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache #smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache A continuacin echemos un vistazo al archivo master.cf. sudo nano /etc/postfix/master.cf Por defecto slo el servicio norma SMTP es permitido, que est muy bien. Pero prefiero que permita submission (puerto 587), para que los clientes puedan utilizarlo y puedan restringir slo a TLS. Tambin habilito el servicio SMTPS (puerto 465) por alguna compatibilidad con algunos clientes viejos (Outlook Express, etc). submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes # if you do not want to restrict it encryption only, comment out next line -o smtpd_tls_auth_only=yes # -o smtpd_tls_security_level=encrypt # -o header_checks= # -o body_checks= -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous # -o milter_macro_daemon_name=ORIGINATING smtps inet n - - - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_tls_auth_only=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o smtpd_sasl_security_options=noanonymous,noplaintext -o smtpd_sasl_tls_security_options=noanonymous # -o milter_macro_daemon_name=ORIGINATING En algunas situaciones SASL y TLS no se llevan bien juntos. Estas situaciones son en combinaciones de almacenar contraseas cifradas, mediante la autenticacin MD5 en el trfico cifrado.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 22 of 23
sudo /etc/init.d/apache2 reload Despus, vaya a la instalacin de RoundCube segn dnde y cmo haya modificado los alias, por ejemplo, en http://mail.example.com/roundcube. Eso debera ser Usted, evidentemente, puede modificar y ajustar an ms. Una cosa que puede ser til es que el alias de roundcube en apache sobre diferentes mquinas virtuales, y configurar username_domain en main.inc.php aadir diferentes direcciones de correo electrnico, o configurar el servidor de correo default_host a diferentes servidores de correo dependiendo de la maquina virtual. ms informacin en el wiki de roundcube.
Dominios y Usuarios
Ahora vamos a aadir algunos datos de esta ndole. Digamos que quiere este equipo para manejar los datos de los dominios ficticios "blobber.org", "whopper.nu" y "lala.com". Luego diga que el nombre de esta mquina es "mail.blobber.org". Todo el correo electrnico de lala.com, se enviar a whupper.nu. INSERT INTO domains (domain) VALUES ('blobber.org'), ('mail.blobber.org'), ('whopper.nu'), ('lala.com'); INSERT INTO aliases (mail,destination) VALUES ('@lala.com','@whupper.nu'), ('@mail.blobber.org','@blobber.org'), ('postmaster@whopper.nu','postmaster@localhost'), ('abuse@whopper.nu','abuse@localhost'), ('postmaster@blobber.org','postmaster@localhost'), ('abuse@blobber.org','abuse@localhost'); Usted tambin tiene dos usuarios llamados "Xandros" y "Vivita". INSERT INTO users (id,name,maildir,crypt) VALUES ('xandros@blobber.org','xandros','xandros/', encrypt('apassword') ), ('vivita@blobber.org','vivita','vivita/', encrypt('anotherpassword') ); INSERT INTO aliases (mail,destination) VALUES ('xandros@blobber.org','xandros@blobber.org'), ('vivita@blobber.org','vivita@blobber.org'); Usted quiere que todo el correo para whooper.nu vaya para Xandros INSERT INTO aliases (mail,destination) VALUES ('@whopper.nu','xandros@blobber.org'); Tambin hay un usuario "Karl",pero l quiere todo el correo enviado a una cuenta externa. INSERT INTO aliases (mail,destination) VALUES ('karl@blobber.org','karl.vovianda@gmail.com'); Entonces, qu hace cada una de estas lneas realmente? Los usuarios requieren de cuatro campos. ID es la direccin de correo electrnico del usuario, y tambin su nombre de usuario para autenticarse. NAME es una descripcin opcional del usuario. MAILDIR es el nombre dentro de la carpeta /var/spool/mail/virtual. Se debe terminar en una /, de lo contrario no ser utilizado como un formato maildir de Unix. CRYPT es la contrasea de texto cifrado a utilizar. Los alias son la parte interesante. Vamos a empezar desde un punto de vista de arriba hacia abajo para ver cmo los correos electrnicos llegan a su destino: Llega un correo dirigido a "john@whopper.nu". Postfix busca dominios y encuentra que whopper.nu es un dominio que escucha. Postfix luego busca en los alias y encuentra que el correo coincide "john@whopper.nu". Postfix encuentra que otro dominio recibe todos los corres que son enviados desde "@whopper.nu" y son enviados a "xandros@blobber.org"
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011
Page 23 of 23
A continuacin, busca "xandros@blobber.org" y encuentra uno, cuyo destino es el mismo que el correo, por es el destino final.
http://www.esdebian.org/wiki/instalacion-configuracion-postfix-debianubuntu
18/07/2011