Parte Dos de La Guia de Instalacion Servidor Debian
-
Upload
roxanavigil3 -
Category
Documents
-
view
174 -
download
8
Transcript of Parte Dos de La Guia de Instalacion Servidor Debian
5.1.1 Servidor IMAP/IMAPS Objetivo
Instalar un servidor de e-mail que soporte el protocolo IMAPS.
Instalación
root@server:~# aptitude install dovecot-imapd
Configuración
Toda la configuración está almacenada en el archivo /etc/dovecot/dovecot.conf.
Luego de la instalación de dovecot, se necesita indicar cuáles son los protocoles que se
pretenden activar en el archivo de configuración. En este caso, los
protocolos IMAP e IMAPS:
/etc/dovecot/dovecot.conf
# [...]
# Protocols we want to be serving: imap imaps pop3 pop3s
managesieve
# If you only want to use dovecot-auth, you can set this to "none".
#protocols = imap imaps
protocols = imap imaps
# [...]
El servidor de e-mail dovecot sólo acepta conexiones encriptadas vía TLS (Transport Layer
Security) o SSL(Secure Sockets Layer). Ambos requieren certificados digitales.
Los certificados SSL para dovecot son generados automáticamente durante la instalación.
Sin embargo, podemos utilizar los Certificados ssl Auto-firmados que se generaron
previamente:
/etc/dovecot/dovecot.conf
# [...]
##
## SSL settings
##
# IP or host address where to listen in for SSL connections.
Remember to also
# add imaps and/or pop3s to protocols setting. Defaults to same as
"listen"
# setting if not specified.
#ssl_listen =
# SSL/TLS support: yes, no, required. </usr/share/doc/dovecot-
common/wiki/SSL.txt>
#ssl = yes
# PEM encoded X.509 SSL/TLS certificate and private key. They're
opened before
# dropping root privileges, so keep the key file unreadable by
anyone but
# root.
#ssl_cert_file = /etc/ssl/certs/dovecot.pem
#ssl_key_file = /etc/ssl/private/dovecot.pem
ssl_cert_file = /etc/ssl/certs/server.crt
ssl_key_file = /etc/ssl/private/server.key.insecure
# If key file is password protected, give the password here.
Alternatively
# give it when starting dovecot with -p parameter. Since this file
is often
# world-readable, you may want to place this setting instead to a
different
# root owned 0600 file by using !include_try <path>.
#ssl_key_password =
# [...]
La localización de los buzones de correo debe indicarse también, para evitar
ambigüedades. En este caso se encuentran en un sub-directorio del directorio home de
cada usuario llamada ”Maildir”:
/etc/dovecot/dovecot.conf
# [...]
##
## Mailbox locations and namespaces
##
# Location for users' mailboxes. This is the same as the old
default_mail_env
# setting. The default is empty, which means that Dovecot tries to
find the
# mailboxes automatically. This won't work if the user doesn't have
any mail
# yet, so you should explicitly tell Dovecot the full location.
#
# If you're using mbox, giving a path to the INBOX file (eg.
/var/mail/%u)
# isn't enough. You'll also need to tell Dovecot where the other
mailboxes are
# kept. This is called the "root mail directory", and it must be
the first
# path given in the mail_location setting.
#
# There are a few special variables you can use, eg.:
#
# %u - username
# %n - user part in user@domain, same as %u if there's no domain
# %d - domain part in user@domain, empty if there's no domain
# %h - home directory
#
# See </usr/share/doc/dovecot-common/wiki/Variables.txt> for full
list.
# Some examples:
#
# mail_location = maildir:~/Maildir
# mail_location = mbox:~/mail:INBOX=/var/mail/%u
# mail_location =
mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%n
#
# </usr/share/doc/dovecot-common/wiki/MailLocation.txt>
#
#mail_location =
mail_location = maildir:~/Maildir
# [...]
Las ramas del árbol Maildir debe generarse a partir del home de cada usuario. Para esto,
debe ser ejecutado el comando maildirmake.dovecot por cada usuario ya creado.
El comando más abajo muda la identidad del usuario corriente para un usuario “fribeiro” y
crea la rama Maildir en elhome del mismo usuario. Este comando debe repetirse con cada
usuario ya existente:
root@server:~# su - fribeiro -c 'maildirmake.dovecot ~/Maildir'
Esta rama también debe ser creada sobre el directorio /etc/skel. El contenido
de /etc/skelse utiliza como modelo para el directorio home de los usuarios que sean
creados en el futuro. Así, cuando se activaran nuevos usuarios, las ramas de Maildir se
generarían automáticamente:
root@server:~# maildirmake.dovecot /etc/skel/Maildir
Reiniciar el servidor:
root@server:~# /etc/init.d/dovecot restart
Verificación
Verificar el servicio imap para las direcciones locales:
root@server:~# telnet 127.0.0.1 imap
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
STARTTLS AUTH=PLAIN] Dovecot ready.
a001 login fribeiro password
a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE
CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC
ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
a002 examine inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1291979249] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a002 OK [READ-ONLY] Select completed.
a003 logout
* BYE Logging out
a003 OK Logout completed.
Connection closed by foreign host.
Desde otro sistema, verificar si son rechazadas las conexiones IMAP simples sim TLS por
ser consideradas inseguras, una vez se envíen las contraseñas en texto simple:
fribeiro@laptop:~$ telnet 192.168.1.100 imap
Trying 192.168.1.100...
Connected to 192.168.1.100.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
STARTTLS LOGINDISABLED] Dovecot ready.
a001 login fribeiro password
* BAD [ALERT] Plaintext authentication not allowed without SSL/TLS, but
your client did it anyway. If anyone was listening, the password was
exposed.
a001 NO [CLIENTBUG] Plaintext authentication disallowed on non-secure
(SSL/TLS) connections.
a002 logout
* BYE Logging out
a002 OK Logout completed.
Connection closed by foreign host.
Sin embargo, las conexiones IMAPS deben ser aceptadas a partir de cualquier sistema:
fribeiro@laptop:~# openssl s_client -connect 192.168.1.100:imaps
CONNECTED(00000003)
depth=0 /C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
verify return:1
---
Certificate chain
0 s:/C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
i:/C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICBzCCAXACCQCBpikwVIulPjANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJQ
VDERMA8GA1UECBMIUG9ydHVnYWwxETAPBgNVBAoTCEhvbWUgTGFuMRMwEQYDVQQD
FAoqLmhvbWUubGFuMB4XDTEwMTEwNTEyMDkxNFoXDTExMTEwNTEyMDkxNFowSDEL
MAkGA1UEBhMCUFQxETAPBgNVBAgTCFBvcnR1Z2FsMREwDwYDVQQKEwhIb21lIExh
bjETMBEGA1UEAxQKKi5ob21lLmxhbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEAwvRP1cWKzoUPPtSUVK+G/HFgaoToc50Ir3gmBbhlycXPJvRbVwfF2+wBXdoS
pNzJdmi6iA0cwaiy2BiUpH4WCk+nZGrGyJDUafxOdaUt8G/64lmSeUedBf3sSoQ6
9iR+fq85uTCJkbe2ZXgkfYZ/djnnkX9BnA7fD7szWbv6StMCAwEAATANBgkqhkiG
9w0BAQUFAAOBgQCLnbmCLs8jwnwG8zL1a8BWxarjitmLbqwXgo+qXtzu0qeFrZJ2
f42bk9M3I83SeQUKTGvK9Mj7CXmorKEsDv18F6rzQO9x2UInrwXYN9BcMVg5YHsf
HQkwhzgWXZNWJT0drFgNKsugvug7dE1UWVFJgafXwACQIFOaLkqpLdznDw==
-----END CERTIFICATE-----
subject=/C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
issuer=/C=PT/ST=Portugal/O=Home Lan/CN=*.home.lan
---
No client certificate CA names sent
---
SSL handshake has read 1094 bytes and written 319 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID:
CF0CD4E5B509B27A41516D693EE5C8BF874FD19444FF2D28F5EAB078A5038324
Session-ID-ctx:
Master-Key:
98478963F48B5C45438DE5312A266B9C3E23BF0FC1E75CEF7FC633B363CE131266BAB1751
3E1357AB3074900F5D057CC
Key-Arg : None
Start Time: 1291980431
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
AUTH=PLAIN] Dovecot ready.
a001 login fribeiro password
a001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE
CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC
ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
a002 examine inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS ()] Read-only mailbox.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1291979249] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
a002 OK [READ-ONLY] Select completed.
a003 logout
* BYE Logging out
a003 OK Logout completed.
closed
Configuración de los clientes
Como verificación final, puede crearse una cuenta en un cliente de e-mail,
como Thunderbird: Para esto, debe seleccionarse el protocolo IMAP, la conexión
requiere TLS (puerto 143) o SSL (puerto 993) y la dirección será la del servidor
(192.168.1.100 o mail.home.lan, en caso de que haya configurado previamente
un Servidor DNS para la red local).
Si se configuró el acceso sin TLS o SSL, el acceso será negado:
Certificados auto-firmados
Dado que los certificados son auto-firmados, en los clientes e-mail aparecerá una ventana
donde consta que no conocen la autoridad del certificado.
Una verificación debe indicar que el certificado utilizado es realmente el que queremos
usar:
Una vez verificado el certificado, este podrá ser añadido a la lista de excepciones de
seguridad.
5.1.2 Quotas Objetivo
Establecer un límite a la capacidad de almacenamiento de e-mails en el servidor IMAP.
A partir de las especificaciones de nuestro servidor, el sistema de cuotas será
implementado teniendo el cuenta lo siguiente: # 1. Como nuestro servidor sólo dispone del
protocolo imap, 1. sólo debe activarse el sistema de cuotas asociado a este protocolo. Sin
embargo, dovecot también soporta cuotas en el protocolo pop3. # 2. El límite de la cuota
tendrá como base el espacio disponible en el disco. Sin embargo, el sistema de cuotas
de dovecot 2. acepta como límites una cantidad de mensajes. # 3. La limitación se aplica a
todos los usuarios por igual, aunque dovecotsoporta la definición de cuotas por usuario.
Configuración
El sistema de cuotas en dovecot se realiza con plugins. Basta con activar esos plugins y
configurar sus opciones.
Son necesarios 2 plugins: # quota: 1. se encarga de todo el sistema de gestión de cuotas;
# imap_quota: 2. reporta información sobre las cuotas, usando el protocolo imap.
Toda la configuración se efectúa en el archivo de configuración/etc/dovecot/dovecot.conf:
/etc/dovecot/dovecot.conf
# [...]
##
## IMAP specific settings
##
protocol imap {
# Login executable location.
#login_executable = /usr/lib/dovecot/imap-login
# IMAP executable location. Changing this allows you to execute
other
# binaries before the imap process is executed.
#
# This would write rawlogs into user's ~/dovecot.rawlog/, if it
exists:
# mail_executable = /usr/lib/dovecot/rawlog
/usr/lib/dovecot/imap
# </usr/doc/dovecot-common/wiki/Debugging.Rawlog.txt>
#
# This would attach gdb into the imap process and write
backtraces into
# /tmp/gdbhelper.* files:
# mail_executable = /usr/lib/dovecot/gdbhelper
/usr/lib/dovecot/imap
#
#mail_executable = /usr/lib/dovecot/imap
# Maximum IMAP command line length in bytes. Some clients
generate very long
# command lines with huge mailboxes, so you may need to raise
this if you get
# "Too long argument" or "IMAP command line too large" errors
often.
#imap_max_line_length = 65536
# Maximum number of IMAP connections allowed for a user from each
IP address.
# NOTE: The username is compared case-sensitively.
#mail_max_userip_connections = 10
# Support for dynamically loadable plugins. mail_plugins is a
space separated
# list of plugins to load.
#mail_plugins =
mail_plugins = quota imap_quota
#mail_plugin_dir = /usr/lib/dovecot/modules/imap
# [...]
En seguida, debe definirse el tipo y los valores de la cuota. En este ejemplo es impuesto
un límite de 20 Mb de almacenamiento en el maildir de cada usuario.
La configuración también está almacenada en /etc/dovecot/dovecot.conf.
/etc/dovecot/dovecot.conf
# [...]
##
## Plugin settings
##
plugin {
# Here you can give some extra environment variables to mail
processes.
# This is mostly meant for passing parameters to plugins.
%variable
# expansion is done for all values.
# Quota plugin. Multiple backends are supported:
# dirsize: Find and sum all the files found from mail
directory.
# Extremely SLOW with Maildir. It'll eat your CPU and
disk I/O.
# dict: Keep quota stored in dictionary (eg. SQL)
# maildir: Maildir++ quota
# fs: Read-only support for filesystem quota
#
# Quota limits are set using "quota_rule" parameters, either in
here or in
# userdb. It's also possible to give mailbox-specific limits, for
example:
# quota_rule = *:storage=1048576
# quota_rule2 = Trash:storage=102400
# User has now 1GB quota, but when saving to Trash mailbox the
user gets
# additional 100MB.
#
# Multiple quota roots are also possible, for example:
# quota = dict:user::proxy::quota
# quota2 = dict:domain:%d:proxy::quota_domain
# quota_rule = *:storage=102400
# quota2_rule = *:storage=1048576
# Gives each user their own 100MB quota and one shared 1GB quota
within
# the domain.
#
# You can execute a given command when user exceeds a specified
quota limit.
# Each quota root has separate limits. Only the command for the
first
# exceeded limit is excecuted, so put the highest limit first.
# Note that % needs to be escaped as %%, otherwise "% " expands
to empty.
# quota_warning = storage=95%% /usr/local/bin/quota-warning.sh
95
# quota_warning2 = storage=80%% /usr/local/bin/quota-warning.sh
80
#quota = maildir
quota = maildir
quota_rule = *:storage=20M
# [...]
Reiniciar el servidor:
root@server:~# /etc/init.d/dovecot restart
Verificación
Verificar que el servicio IMAP soporta las cuotas:
root@server:~# telnet 127.0.0.1 imap
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
STARTTLS AUTH=PLAIN] Dovecot ready.
a001 capability
* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT
SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE
CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC
ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA STARTTLS
AUTH=PLAIN
a001 OK Capability completed.
a002 logout
* BYE Logging out
a002 OK Logout completed.
Connection closed by foreign host.
La respuesta al comandocapability debe mostrar que el servicio soporta las cuotas.
Clientes
La mayor parte de los clientes de e-mail actuales pueden proveerle al usuario
informaciones sobre cuotas. En el caso de thunderbird, este soporte está proveído
por add-ons, Para esto, debe buscar: “quotas” en el
sitiohttps://addons.mozilla.org/thunderbird.
Después de la instalación, es posible obtener otras informaciones acerca del estado del
buzón de correo con relación al límite impuesto por las cuotas:
En muchos clientes, borrar un e-mail implica una copia en la carpeta “Trash” y no borrar el
original. Si la cota ya haya sido superada, esta operación podrá ser negada con un error
“Cuota Excedida”. En este caso, el mensaje debe ser borrado directamente sin la copia en
“Trash”. En el thunderbird, las teclas Shift+ Del permiten borrar un mensaje sin enviarlo al
“Trash”.
5.2.1 Servidor SMTP Un servidor SMTP debe representar una preocupación constante en el ámbito de la
seguridad. Si el servidor esté apenas configurado, puede ser eventualmente utilizado por
terceros, para el envío de mensajes en nombre de otro o para envío de spam. Esto puede
ocasionar situaciones graves, como la inclusión del dominio en las listas negras (donde
quedaría impedido para enviar e-mails genuinos), o puede ocasionar consecuencias legales.
Objetivo
Instalar un servidor de envío dee-mails basado en el protocolo SMTP para la red local.
Instalación
root@server:~# aptitude install postfix
La instalación ofrece una serie de configuraciones predefinidas.
Seleccionar la opción Site Internet:
También será solicitado el nombre de e-mail que debe ser “home.lan”:
Configuración
Aunque el usuario root recibe e-mails, es preferible que estos sean redirigidos hacia un
usuario “humano”. Estos “aliases” son definidos en el archivo /etc/aliases:
/etc/aliases
# See man 5 aliases for format
postmaster: root
root: fribeiro
Siempre que se edita el archivo /etc/aliases, la base de datos correspondiente debe ser
actualizada:
root@server:~# newaliases
El origen de los e-mails enviados, o sea, la parte que sigue al ”@”, se define en la única
línea del archivo/etc/mailname:
/etc/mailname
home.lan
La configuración restante se almacena en el archivo /etc/postfix/main.cf.
Durante la Instalación del servidor IMAP, quedó definida que la localización y el tipo de
buzones era “Maildir”. La configuración de postfix debe indicar que la entrega del correo
debe ser hecha en la misma localización, lo que se hace en el archivo /etc/postfix/main.cf:
/etc/postfix/main.cf
# [...]
# Entregar correio em ~/Mailbox
home_mailbox = Maildir/
# [...]
Definir las direcciones por donde el postfix acepte recibir las conexiones:
/etc/postfix/main.cf
# [...]
# Interfaces por onde são aceites ligações
inet_interfaces = 127.0.0.1, 192.168.1.100
# [...]
Definir también la lista de clientes privilegiados (aquellos que pueden, por ejemplo, usar el
servidor para enviar e-mails para otro dominio (relay)):
/etc/postfix/main.cf
# [...]
# Clientes de confianca
mynetworks = 127.0.0.0/8, 192.168.1.0/24
# [...]
Definir la lista de dominios para los cuales el servidor es el destino final:
/etc/postfix/main.cf
# Emails para estes dominios sao entregues neste servidor
mydestination = home.lan, server.home.lan, localhost.home.lan,
localhost
Conexiones encriptadas
Las conexiones al servidor pueden generarse de modo encriptado (TLS) (smtpd_use_tls
= yes) También puede especificarse que sólo sean aceptadas las autenticaciones
(smtpd_tls_auth_only = yes). Pueden utilizarse también los Certificados Auto-
firmados que se generaron previamente, en lugar de los generados automáticamente
durante la instalación de postfix:
/etc/postfix/main.cf
# [...]
# TLS parameters
# smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/certs/server.crt
smtpd_tls_key_file = /etc/ssl/private/server.key.insecure
smtpd_tls_session_cache_database =
btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database =
btree:${queue_directory}/smtp_scache
# [...]
Seguridad
Deben definirse una restricciones rigurosas para el acceso al servidor SMTP.
/etc/postfix/main.cf
# [...]
## Seguranca
# Aceitar ligacoes apenas a partir da rede local
smtpd_client_restrictions = permit_mynetworks,
reject
# Utilizadores locais podem enviar emails para qualquer endereco
smtpd_recipient_restrictions = permit_mynetworks,
reject_unauth_destination
# Rejeitar ligacoes de clientes que nao saibam o seu hostname
smtpd_helo_restrictions = reject_unknown_sender_domain
# Rejeitar email de dominios que nao existem
smtpd_sender_restrictions = reject_unknown_sender_domain
# [...]
Reiniciar el servicio SMTP:
root@server:~# /etc/init.d/postfix restart
Verificación
Para esto de conectarse al servidor smtp:
root@server:~# telnet localhost smtp
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.home.lan ESMTP Postfix (Debian/GNU)
EHLO localhost
250-server.home.lan
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: fribeiro
250 2.1.0 Ok
RCPT TO: fribeiro
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test
testing 123
.
250 2.0.0 Ok: queued as A2BF81ED81
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
La línea 250-STARTTLS indica que el servidor acepta conexiones encriptadas. Sin
embargo, en esta prueba no se utiliza TLS, porque la conexión se hace desde el propio
sistema, que está considerado como seguro..
Configuración de clientes
En un cliente de e-mail, como Thunderbird, cree una cuenta de correo con salida (SMTP),
indicando como dirección la del servidor (192.169.1.100) y el puerto 25. En la zona de
seguridad, no se debe activar la autenticación. En las opciones de conexión segura,
pueden ser usado el protocolo TLS o ninguno. El protocoloSSL no podrá ser usado (por
ahora).
Enviar algunos mensajes a destinatarios reales y ficticios: Deben ser entregados los e-
mails que tengan como destinatarios los usuarios válidos del domínio home.lan (por
ejemplo: [email protected]). Los e-mails para los destinatarios ficticios del
dominio home.lan serão recusado imediatamente (ex. [email protected]). Demais
emails (mesmo para utilizadores e domínios válidos) serán rechazados por los servidores
de destino. En este caso, y después de algún tiempo, nuestro servidor generará un
mensaje donde se informa el rechazo del pedido.
5.2.2 Servidor SMTP com autenticación Cuando se instala el Servidor SMPT, su uso se limita a la red interna.
Si es necesario acceder al servidor a partir del exterior (por ejemplo, a partir de Internet)
debe preverse un mecanismo que limite su acceso sólo a los usuarios autorizados. Esto
con el fin de prevenir el riesgo de que nuestro servidor sea considerado como un open
relay.
Objetivo
Complementar la instalación del Servidor SMPT con un mecanismo de autenticación de
usuarios, en este caso vamos a emplear el soporte sasl de dovecot.
Configuración
La configuración está divida en dos partes. Primero, la configuración de dovecot para que
trabaje con postfix. Y segundo, la configuración de postfix para autenticar usuarios
en dovecot:
Dovecot
Se debe modificar el archivo que está almacenado en la siguiente
dirección /etc/dovecot/dovecot.conf.
/etc/dovecot/dovecot.conf
# [...]
auth default {
# Space separated list of wanted authentication mechanisms:
# plain login digest-md5 cram-md5 ntlm rpa apop anonymous
gssapi
mechanisms = plain login
# [...]
# It's possible to export the authentication interface to other
programs:
socket listen {
#master {
# Master socket is typically used to give Dovecot's local
delivery
# agent access to userdb so it can find mailbox locations. It
can
# however also be used to disturb regular user
authentications.
# WARNING: Giving untrusted users access to master socket may
be a
# security risk, don't give too wide permissions to it!
#path = /var/run/dovecot/auth-master
#mode = 0600
# Default user/group is the one who started dovecot-auth
(root)
#user =
#group =
#}
client {
# The client socket is generally safe to export to everyone.
Typical use
# is to export it to your SMTP server so it can do SMTP AUTH
lookups
# using it.
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
# [...]
Reiniciar el servicio dovecot:
root@server:~# /etc/init.d/dovecot restart
Postfix
Se debe modificar el archivo que está almacenado en la siguiente
dirección /etc/postfix/main.cf:
Se deben añadir los parámetros SASL:
/etc/postfix/main.cf
# [...]
# SASL parameters
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
# [...]
Las restricciones de seguridad deben permitir el acceso a los usuarios autenticados
vía sasl:
/etc/postfix/main.cf
# [...]
## Seguranca
# Aceita ligações apenas a partir da rede local ou utilizadores
autenticados
smtpd_client_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject
# Utilizadores locais ou autenticados podem enviar emails para
qualquer endereco
# Rejeitar todos os outros
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
# [...]
Reiniciar el servicio postfix:
root@server:~# /etc/init.d/postfix restart
Configuración de clientes
En las opciones de seguridad dentro de la configuración del servidor smtp de los clientes,
debe indicarse cuál usuario se autenticará:
Ao enviar uma mensagem, será pedida a respectiva password.
5.2.3 Relay SMTP Antes de iniciar
Teóricamente, el servidor SMTP que fue configurado para la red local puede enviar e-mails
para cualquier destinatario. Pero en la práctica, es poco probable que dichos e-mails
lleguen a su destino final. Esto ocurre porque los proveedores de acceso a internet, con el
fin de filtrar el envío de mensajes no solicitados (spam), imponen reglas muy estrictas para
aceptar y re-encaminar e-mails.
Asimismo, aunque el e-mail llegara a su destino, cualquier respuesta eventual estaría
dirigida para el remitente (por ejemplo [email protected]) de un dominio que no existe
fuera de la red local. Y por tanto no llegaría de vuelta.
Por tanto, si se quiere enviar correos hacia el exterior, se deben resolver dos cuestiones:
El servidor smtp de nuestro proveedor de acceso a internet (ISP) debe aceptar una
conexión de nuestro servidor.
La dirección de correo del remitente debe referir a un dominio válido, para que pueda
recibir respuestas.
Para resolver estas cuestiones, lo más simple es utilizar servidores con direcciones
válidas. De esta forma, al enviar e-mails para el exterior, debe ocurrir lo siguiente:
Nuestro servidor enviará el e-mail a través de un servidor SMTP externo. En caso
necesario, deberá autenticarse como usuario válido.
Nuestra dirección de e-mail debe ser sustituida por una dirección de correo electrónico
válido en el exterior.
En este caso, vamos a utilizar el servidor SMTP de Gmail (smtp.gmail.com) y una dirección
de Gmail ([email protected]).
Instalación
La instalación de los paquetes de autenticación:
root@server:~# aptitude install libsasl2-modules sasl2-bin
Configuración
saslauthd
El arranque automático del servicio saslauthd se configura en el
archivoo /etc/default/saslauthd:
/etc/default/saslauthd
#
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
#
# Should saslauthd run automatically on startup? (default: no)
START=yes
#[...]
Reiniciar el servicio saslauthd:
root@server:~# /etc/init.d/saslauthd restart
relay
Para usar un servidor smtp intermedio (o relay), se configura postfix en el
archivo /etc/postfix/main.cf:
En primer lugar, se indicará el servidor smtp de Gmail como “relay”.
/etc/postfix/main.cf
# [...]
#
# relay
#
relayhost = [smtp.gmail.com]
Luego, se configurará una conexión encriptada (tls) y autenticada (sasl_auth), así como la
localización de los archivos con los parámetros de autenticación (password_maps):
/etc/postfix/main.cf
# [...]
#
# SASL SUPPORT FOR SERVERS
#
# The following options set parameters needed by Postfix to enable
# Cyrus-SASL support for authentication of mail servers.
#
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
Los parámetros de autenticación del servidor smtp de Gmail están almacenados en el
archivo/etc/postfix/sasl/sasl_passwd:
/etc/postfix/sasl/sasl_passwd
[smtp.gmail.com] pinguim.ribeiro:myGmailPassword
Por seguridad, el archivo /etc/postfix/sasl/sasl_passwd sólo debe permitir el acceso del
usuario root:
root@server:# chmod 600 /etc/postfix/sasl/sasl_passwd
Siempre que el archivo /etc/postfix/sasl/sasl_passwd fuese alterado, la base de datos
correspondiente debe ser regenerada:
root@server:# postmap /etc/postfix/sasl/sasl_passwd
mapeo de direcciones
Al enviar e-mails al exterior, las direcciones internas ([email protected]) deben ser
substituidas por direcciones externas ([email protected]).
Por tanto Postfix debe ser configurado para usar el archivo para mapear direcciones. Para
esto se debe modificar el archivo /etc/postfix/main.cf:
/etc/postfix/main.cf
smtp_generic_maps = hash:/etc/postfix/generic
El archivo para mapear direcciones consiste en una lista de direcciones locales con sus
correspondientes direcciones externas. El tamaño de la lista no está limitado, por lo que
puede ser aumentada para contener las direcciones de todos los usuarios locales.
Este fichero se encuentra en /etc/postfix/generic:
/etc/postfix/generic
[email protected] [email protected]
Siempre que el archivo /etc/postfix/generic sea modificado, debe regenerarse la base de
datos correspondiente:
root@server:# postmap /etc/postfix/generic
Reiniciar postfix:
root@server:~# /etc/init.d/postfix restart
5.2.4 Teste Open Relay Objetivo
Es crucial asegurarse de que el servidor de envío de e-mail (SMTP) no sea accesible ni
pueda ser utilizado por terceros (open relay). En caso contrario, nuestro servidor puede ser
utilizado para el envío de spam y acabar en una lista negra de servidores abiertos
(blacklist). Esto haría imposible enviar e-mails legítimos a través de otros servidores. La
mejor manera de certificar que nuestro servidor nunca sea utilizado como open relay es
hacer el siguiente test.
Verificación
En http://spamlinks.net/prevent-secure-relay-test.htm existen varias conexiones a servicios
que verifican la seguridad de un servidor SMTP, haciendo varios intentos de acceso a
nuestro servidor a partir de diferentes métodos.
Una de las pruebas utiliza una conexión telnet desde uno de los servidores del test. Éste
intenta conectarse en seguida a nuestro servidor SMTP y el resultado del test se muestra
en la ventana de telnet:
server:# telnet rt.njabl.org 2500
Trying 69.28.95.130...
Connected to rt.njabl.org.
Escape character is '^]'.
If you are excluded from testing, connect again on port 2501 to force the
test.
testing 81.84.15.97
Net::SMTP>>> Net::SMTP(2.29)
Net::SMTP>>> Net::Cmd(2.26)
Net::SMTP>>> Exporter(5.58)
Net::SMTP>>> IO::Socket::INET(1.27)
Net::SMTP>>> IO::Socket(1.28)
Net::SMTP>>> IO::Handle(1.24)
>>> EHLO rt.njabl.org
<<< 250-server.home.lan
<<< 250-PIPELINING
<<< 250-SIZE 10240000
<<< 250-VRFY
<<< 250-ETRN
<<< 250-STARTTLS
<<< 250-ENHANCEDSTATUSCODES
<<< 250-8BITMIME
<<< 250 DSN
>>> MAIL FROM:<[email protected]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<[email protected]>
<<< 554 5.7.1 <rt.njabl.org[69.28.95.130]>: Client host rejected: Access
denied
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<[email protected]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<[email protected]>
<<< 554 5.7.1 <rt.njabl.org[69.28.95.130]>: Client host rejected: Access
denied
# [...]
>>> RSET
<<< 250 2.0.0 Ok
>>> MAIL FROM:<[email protected]>
<<< 250 2.1.0 Ok
>>> RCPT TO:<relaytest%[email protected]>
<<< 554 5.7.1 <rt.njabl.org[69.28.95.130]>: Client host rejected: Access
denied
Can't relay
Connection closed by foreign host.
En este caso, todas las tentativas de acceso fallaron. Por tanto, nuestro servidor puede
considerarse como razonablemente seguro.
5.3.1 amavisd-new Objetivo
Integrar un sistema de filtros en el servidor smtp.
Después de la configuración, en el momento en que el servidor smtp (postfix) reciba un e-
mail, va a enviarlo al sistema de filtros (amavisd-new) que invocará diversos filtros y
alterará los encabezados de acuerdo con los resultados, para devolverlo luego al
servidor smtp.
Instalación
root@server:~# aptitude install amavisd-new
El paquete amavisd-new sugiere la instalación de otros paquetes, necesarios para analizar
archivos comprimidos, con el fin de que su contenido sea examinado:
root@server:~# aptitude install arj cabextract cpio lha lzop nomarch
ripole tnef unrar zoo
Configuración
La configuración consiste en indicarle al servidorsmtp (postfix) para que envíe los e-mail al
sistema de filtros y los vuela a recibir luego de su análisis. Para esto, debe modificar el
archivo /etc/postfix/main.cf:
/etc/postfix/main.cf
# [...]
#
# amavisd-new scanner
#
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
Luego, debe configurar el postfix o servicio para que reciba los e-mails filtrados
por amavisd-new, lo que se configura en el archivo /etc/postfix/master.cf:
/etc/postfix/master.cf
# [...]
#
# amavisd-new scanner
#
amavis unix - - - - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
-o smtp_generic_maps=
127.0.0.1:10025 inet n - - - - smtpd
-o content_filter=
-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_end_of_data_restrictions=
-o smtpd_restriction_classes=
-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
-o local_header_rewrite_clients=
-o local_recipient_maps=
-o relay_recipient_maps=
-o strict_rfc821_envelopes=yes
Reiniciar el servicio SMTP:
root@server:~# /etc/init.d/postfix restart
Verificación
Debe asegurar que los servicios funcionen:
root@server:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
# [...]
tcp 0 0 localhost:10024 *:*
LISTEN 3672/amavisd (maste
tcp 0 0 localhost:10025 *:*
LISTEN 3759/master
# [...]
Comprobar que amavisd-new acepte conexiones:
root@server:~# telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.
Comprobar también que postfix pueda recibir de vuelta los mensajes filtrados:
root@server:~# telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 server.home.lan ESMTP Postfix (Debian/GNU)
quit
221 2.0.0 Bye
Connection closed by foreign host.
El sistema de filtros está operando. El paso siguiente debe ser la instalación y
configuración de los filtros.
5.3.2 Filtro Anti-vírus Objetivo
Integrar un anti-virus en el sistema de filtros de e-mails.
Instalación
Ver instalación de ClamAV y instalación de amavisd-new.
Configuración
Debemos activar el filtro anti-virus en el archivo /etc/amavis/conf.d/15-content_filter_mode:
/etc/amavis/conf.d/15-content_filter_mode
# [...]
#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:
@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl,
\$bypass_virus_checks_re);
# [...]
Adicionar el usuario clamav al grupo amavis:
root@server:~# adduser clamav amavis
Reiniciar los servicios:
root@server:~# /etc/init.d/amavis restart
root@server:~# /etc/init.d/clamav-daemon restart
Verificación
Para esto, puede simularse el envío de un e-mail con un “virus”, usando como contenido el
archivo de pruebasEICAR:
root@server:~# telnet 127.0.0.1 10024
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
EHLO localhost
250-[127.0.0.1]
250-VRFY
250-PIPELINING
250-SIZE
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 XFORWARD NAME ADDR PORT PROTO HELO SOURCE
MAIL FROM:<postmaster>
250 2.1.0 Sender <postmaster> OK
RCPT TO:<postmaster>
250 2.1.5 Recipient <postmaster> OK
DATA
354 End data with <CR><LF>.<CR><LF>
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.7.0 Ok, discarded, id=02582-02 - INFECTED: Eicar-Test-
Signature(69630e4574ec6798239b091cda43dca0:69)
QUIT
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.
El “vírus” fue correctamente detectado.
El servidor de e-mail tiene ahora un filtro anti-virus integrado. Los mensajes que contengan
virus no serán entregados. En lugar del mensaje, será entregada una notificación de la
detección del e-mail con virus.
5.3.3 Filtro Anti-spam
Objetivo
Integrar un filtro anti-spam al sistema de filtros de e-mails.
Instalación
Ver instalación de Spamassassin y instalación de amavisd-new].
Configuración
La configuración consiste en activar el filtro anti-spam en el archivo /etc/amavis/conf.d/15-
content_filter_mode:
/etc/amavis/conf.d/15-content_filter_mode
# [...]
#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:
@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl,
\$bypass_spam_checks_re);
# [...]
De manera predeterminada, los e-mails considerados spam son ubicados en cuarentena
sin que información alguna llegue al destinatario. En esta configuración queremos que los
e-mails indiquen apenas la probabilidad despam, dejándole al usuario que elija las
acciones a realizar. Las configuraciones personalizadas se almacenan en el
archivo /etc/amavis/conf.d/50-user:
/etc/amavis/conf.d/50-user
use strict;
#
# Place your configuration directives here. They will override
those in
# earlier files.
#
# See /usr/share/doc/amavisd-new/ for documentation and examples of
# the directives you can use in this file
$sa_spam_subject_tag = '***SPAM*** ';
$sa_tag_level_deflt = undef; # 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 = 9999; # triggers spam evasive actions
#------------ Do not modify anything below this line -------------
1; # insure a defined return
La “sensibilidad” del filtroanti-spam puede ser afinada alterando el
valor $sa_tag2_level_deflt: Si tiene un valor más bajo, entonces serán necesarios menos
indicadores para que un mensaje sea considerado como spam. Sin embargo, este valor no
debe ser inferior a 5, porque corremos el riesgo de que todos los mensajes aun los
legítimos, sean considerados como spam.
Reiniciar el servicio amavisd-new:
root@server:~# /etc/init.d/amavis restart
5.4.1 Fetchmail Objetivo
La instalación del paquete fetchmail permite la descarga de e-mails alojados en servidores
externos en nuestro servidor local. fetchmail soporta varios protocolos de acceso y
esquemas de autenticación.
Instalación
root@server:~# aptitude install fetchmail
Configuración
La configuración será definida por el usuario. Consiste en la creación del archivo de
configuración de fetchmail y en la creación de una tarea periódica que ejecuto
el fetchmail para que recoja los e-mails.
Configuración personal
Cada usuario debe crear en su home el archivo .fetchmailrc.
Por ejemplo, el usuario fribeiro deberá guardar su configuración personal
de fetchmail en/home/fribeiro/.fetchmailrc:
/home/fribeiro/.fetchmailrc
poll pop.gmail.com proto pop3 user "pinguim.ribeiro" pass
"password" is "[email protected]" options ssl keep
En este ejemplo, fetchmail descargará los e-mails del usuario pinguim.ribeiro del
servidor pop.gmail.com, utilizando el protocolo pop3 y una conexión ssl, para luego
redirigirlos al usuario [email protected].
La opción keep mantiene los mensajes en el servidor, lo que es útil en la fase de pruebas.
Después, esta opción puede ser retirada. Con algunos servidores pop3, es necesario
añadir la opción uidl, que obliga al cliente a mantener una lista de los mensajes ya
descargados, lo que garantiza que los nuevos mensajes serán descargados.
Por seguridad, como el archivo contiene contraseñas, sólo puede ser accesible al propio
usuario:
fribeiro@server:~$ chmod 600 .fetchmailrc
Ejecución periódica
Luego, debe ser creada una tarea periódica para ejecutar el fetchmail cada 10 minutos, por
ejemplo:
fribeiro@server:~$ crontab -e
# m h dom mon dow command
*/10 * * * * /usr/bin/fetchmail &> /dev/null
Verificación
Es posible probar la ejecución del fetchmail con el comando fetchmail -v, desde uno de
los clientes:
fribeiro@server:~$ fetchmail -v
fetchmail: 6.3.18 querying pop.gmail.com (protocol POP3) at Sat 22 Jan
2011 02:25:43 PM WET: poll started
Trying to connect to 209.85.227.109/995...connected.
fetchmail: Server certificate:
fetchmail: Issuer Organization: Google Inc
fetchmail: Issuer CommonName: Google Internet Authority
fetchmail: Subject CommonName: pop.gmail.com
fetchmail: pop.gmail.com key fingerprint:
6B:C4:63:05:87:1E:72:88:ED:81:C5:A2:51:6B:B7:B6
fetchmail: POP3< +OK Gpop ready for requests from 94.132.12.38
f33pf1347527wej.11
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< USER
fetchmail: POP3< RESP-CODES
fetchmail: POP3< EXPIRE 0
fetchmail: POP3< LOGIN-DELAY 300
fetchmail: POP3< X-GOOGLE-VERHOEVEN
fetchmail: POP3< UIDL
fetchmail: POP3< .
fetchmail: POP3> USER pinguim.ribeiro
fetchmail: POP3< +OK send PASS
fetchmail: POP3> PASS *
fetchmail: POP3< +OK Welcome.
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for pinguim.ribeiro at pop.gmail.com
fetchmail: POP3> QUIT
fetchmail: POP3< +OK Farewell.
fetchmail: 6.3.18 querying pop.gmail.com (protocol POP3) at Sat 22 Jan
2011 02:25:45 PM WET: poll completed
fetchmail: normal termination, status 1
5.5.1 Roundcube Objetivo
El paquete Roundcube, con su interfaz basada en la tecnología ajax, permite la consulta
de e-mails de una manera fácil e cómoda.
Instalación
root@server:~# aptitude install roundcube roundcube-sqlite
Durante esta fase, se solicitará información para la configuración de la base de datos:
El tipo de base de datos a seleccionar será sqlite:
Configuración
La instalación de roundcube genera automáticamente un archivo de configuración para
integrarse con el servidorapache2. Sin embargo, por seguridad, la configuración no está
activada automáticamente. Para activarla, es necesario editar el archivo de configuración
que se encuentra en /etc/apache2/conf.d/roundcube:
/etc/apache2/conf.d/roundcube
# Those aliases do not work properly with several hosts on your
apache server
# Uncomment them to use it or adapt them to your configuration
Alias /roundcube/program/js/tiny_mce/ /usr/share/tinymce/www/
Alias /roundcube /var/lib/roundcube
[...]
roundcube debe restringir el acceso apenas a nuestro servidor de e-mail, lo que puede ser
configurado en el archivo /etc/roundcube/main.inc.php:
/etc/roundcube/main.inc.php
#[...]
// the mail host chosen to perform the log-in
// leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL/TLS connection, enter hostname with prefix ssl:// or
tls://
$rcmail_config['default_host'] = 'localhost';
#[...]
Para que o roundcube cree correctamente la dirección e-mail de los nuevos usuarios, debe
indicarse el nombre del dominio “home.lan”:
/etc/roundcube/main.inc.php
#[...]
// This domain will be used to form e-mail addresses of new users
// Specify an array with 'host' => 'domain' values to support
multiple hosts
$rcmail_config['mail_domain'] = 'home.lan';
#[...]
La dirección e-mail, así como otros parámetros, pueden afinarse posteriormente en las
configuraciones deroundcube.
Obligar conexiones seguras
OOpcionalmente, en caso de que se tenga configurado Apache2 con soporte SSL, las
conexiones seguras (https) pueden ser configuradas como obligatorias en el archivo de
configuración /etc/roundcube/main.inc.php:
/etc/roundcube/main.inc.php
#[...]
// enforce connections over https
// with this option enabled, all non-secure connections will be
redirected.
// set the port for the ssl connection as value of this option if
it differs from the default 443
$rcmail_config['force_https'] = TRUE;
#[...]
Reiniciar el servicio apache2:
root@server:~# /etc/init.d/apache2 restart
Verificación
Desde un navegador de internet, escriba la dirección de acceso a la
interfaz webmailhttp://192.168.1.100/roundcube:
La página de roundcube deberá aparecer y, si configuró la opción de conexiones seguras,
la dirección debe comenzar por https.
roundcube dispone de muchas opciones de configuración, como la lengua de la interfaz, el
huso horario y el e-mail del usuario. Se sugiere una visita a lasconfiguraciones
personales (Settings), luego del primer login.
6.1.1 Logwatch Objetivo
Intalar el paquete Logwatch, para recibir diariamente por e-mail, un resumen de los
archivos log del sistema.
O logwatch se ejecuta diariamente, analiza los archivos log y envía un resumen por e-mail
al administrador (root) del sistema.
Es importante que el alias del root esté correctamente definido para un usuario ‘humano’, en
el archivo /etc/aliases Este paso ya tuvo que haberse realizado durante la configuración
de Servidor SMTP.
Instalación
root@server:~# aptitude install logwatch
Verificación
logwatch enviará sus resultados por e-mail para el root; Sin embargo, este paso también
puede ejecutarse en un terminal:
root@server:~# logwatch
################### Logwatch 7.3.6 (05/19/07) ####################
Processing Initiated: Thu Jan 6 14:28:31 2011
Date Range Processed: yesterday
( 2011-Jan-05 )
Period is day.
Detail Level of Output: 0
Type of Output/Format: stdout / text
Logfiles for Host: server
##################################################################
--------------------- Disk Space Begin ------------------------
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 2.5G 1.3G 1.3G 51% /
/dev/sda6 5.2G 139M 5.1G 3% /home
---------------------- Disk Space End -------------------------
###################### Logwatch End #########################
6.2.1 Munin Objetivo
El paquete munin permite monitorizar diversos parámetros de uno o varios sistemas, por
ejemplo, el estado y carga de los servicios, temperaturas, espacio en disco,
etc. munin funciona según una arquitectura cliente-servidor, en que un sistema servidor
recoge y organiza datos recibidos de varios sistemas clientes. Para monitorizar sólo un
servidor, debe instalarse y configurarse los paquetes cliente y servidor en el mismo
sistema.
El paquete munin utiliza una interfaz web. Por tanto, es necesario instalar un servidor http.
Para más informaciones, puede consultar la instalación deApache2 y Apache2 SSL, si
prefiere conexiones seguras.
Instalación
Cliente
Del lado del cliente, la instalación consiste en instalar el paquete cliente y algunos extras:
root@server:~# aptitude install munin-node munin-plugins-extra
Servidor
Del lado del servidor es necesaria la instalación del paquete munin:
root@server:~# aptitude install munin
Configuración
Cliente
La configuración del sistema cliente consiste en añadir la dirección del servidor, a la lista
de direcciones que pueden establecer conexión con el cliente. La dirección debe añadirse
en el formato de expressão regular. En nuestro caso, como el cliente y el servidor es lo
mismo, es suficiente añadir la dirección 127.0.0.1. Esta configuración debe efectuarse en
el archivo /etc/munin/munin-node.conf:
/etc/munin/munin-node.conf
# [..]
# A list of addresses that are allowed to connect. This must be a
# regular expression, since Net::Server does not understand CIDR-
style
# network notation unless the perl module Net::CIDR is installed.
You
# may repeat the allow line as many times as you'd like
allow ^127\.0\.0\.1$
# [..]
El servicio cliente debe ser reiniciado:
root@server:~# /etc/init.d/munin-node restart
Servidor
En el servidor deben añadirse a la configuración las direcciones de los clientes a contactar,
lo que puede hacerse en el archivo /etc/munin/munin.conf:
/etc/munin/munin.conf
# [...]
# a simple host tree
[server.home.lan]
address 127.0.0.1
use_node_name yes
# [...]
En caso de que existan más clientes, sólo se requiere añadir los nombres respectivos y
sus direcciones en bloques semejantes a los del listado.
También debe definirse un rango de direcciones IP, a partir de las cuales se pueda
acceder a la interfaz webmunin: la opción Allow from 192.168.1.0/24 sólo permite el
acceso a partir de la red interna. En caso de que se pretenda acceder desde cualquier
dirección, se debe especificar Allow from All.
Esta configuración se almacena en el archivo /etc/apache2/conf.d/munin:
/etc/apache2/conf.d/munin
Alias /munin /var/cache/munin/www
<Directory /var/cache/munin/www>
Order allow,deny
#Allow from localhost 127.0.0.0/8 ::1
Allow from 192.168.1.0/24
# Allow from all
Options None
# [...]
Segurança
Debido a que munin ofrece mucha información acerca de las características del sistema,
su nivel de acceso debe ser restringido. El servidor httpd apache2 puede proteger un
directorio, dando acceso sólo a los usuarios devidamente autenticados y autorizados.
Como se pretende el máximo de seguridad, la autenticación se realizará mediante el
método de autenticación “Digest” del apache2, que transmite los datos de forma segura.
La configuración se realiza en dos etapas. En primer lugar, debe crearse el archivo de
autorizaciones para el recurso Munin en el servidor apache2, con los usuarios y sus
respectivas contraseñas:
root@server:~# htdigest -c /etc/munin/munin-htpasswd Munin fribeiro
Adding password for fribeiro in realm munin.
New password:
Re-type new password:
La opción -c crea un archivo de nuevo. Para añadir otro usuario, esta opción debe ser
omitida.
En segundo lugar, modificamos la configuración de apache2 para exigir un usuario y
contraseña válidos, para acceder al directorio /munin. Esto puede hacerse en el
archivo /etc/apache2/conf.d/munin:
/etc/apache2/conf.d/munin
# [...]
# This file can be used as a .htaccess file, or a part of
your apache
# config file.
#
# For the .htaccess file option to work the munin www
directory
# (/var/cache/munin/www) must have "AllowOverride all" or
something
# close to that set.
#
AuthUserFile /etc/munin/munin-htpasswd
AuthName "Munin"
AuthType Digest
require valid-user
# [...]
El módulo de autenticación auth_digest debe estar activo:
root@server:~# a2enmod auth_digest
Reiniciar el servidor apache2:
root@server:~# /etc/init.d/apache2 restart
Verificación
Verificar el funcionamiento de munin, Debe abrir un navegador de Internet e
indicar http://192.168.1.100/muninen la barra de direcciones:
Plugins
Es posible expandir la funcionalidad de munin, recurriendo a diversos plugins disponibles
en el sitio de Internet del proyecto, en http://muninexchange.projects.linpro.no. Pero su
configuración se escapa del ámbito de esta guía.
7.1.1 Fail2Ban Objectivo
Fail2Ban es una aplicación que analiza continuamente los ficheros log y bloquea las
direcciones Internet de donde se hayan originado varias tentativas fallidas de acceso con
contraseña inválida.
Fail2Ban es extremadamente eficaz en la prevención de ataques de fuerza bruta y ataques
de negación de servicio(DoS).
Instalación
root@server:~# aptitude install fail2ban whois
Configuración
La configuración que resulta de la instalación de fail2ban activa el puerto ssh. Sin embargo,
es posible monitorizar y proteger otros puertos.
La documentación de fail2ban aconseja que toda la configuración se realice en archivos
con la extensión .local. Estos pueden ser creados copiando el archivo de la configuración
original, con la extensión .conf:
root@server:~# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Toda la configuración será efectuada, a partir de este momento, en el
archivo /etc/fail2ban/jail.local.
En una primera etapa, definimos cuáles son las direcciones que no estarán sujetas a
restricciones (la dirección local y la red local), por cuánto tiempo estarán bloqueadas las
direcciones de donde provengan las amenazas (1800 segundos (30 minutos)) y después
de cuántas tentativas (3 tentativas permitidas). Esta configuración debe realizarse en el
archivo /etc/fail2ban/jail.local:
/etc/fail2ban/jail.local
# [...]
[DEFAULT]
# "ignoreip" can be an IP address, a CIDR mask or a DNS host
ignoreip = 127.0.0.1 192.168.1.0/24
bantime = 1800
maxretry = 3
# [...]
También se define la dirección e-mail que recibirá las alertas:
/etc/fail2ban/jail.local
# [...]
#
# Destination email address used solely for the interpolations in
# jail.{conf,local} configuration files.
destemail = root@localhost
# [...]
Luego, debe configurarse la acción a realizar cuando se detecta un posible ataque. En
este caso, la dirección IP del atacante es bloqueada y u e-mail es enviado al administrador
del sistema.
/etc/fail2ban/jail.local
# [...]
#
# ACTIONS
#
# Default banning action (e.g. iptables, iptables-new,
# iptables-multiport, shorewall, etc) It is used to define
# action_* variables. Can be overriden globally or per
# section within jail.local file
banaction = iptables-multiport
# [...]
#
# Action shortcuts. To be used to define action parameter
# [...]
# Choose default action. To change, just override value of
'action' with the
# interpolation to the chosen action shortcut (e.g. action_mw,
action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_mwl)s
# [...]
Por último, se definen los parámetros del servicio que se pretende proteger. Para esto, se
edita la sección JAILSdel archivo /etc/fail2ban/jail.local:
/etc/fail2ban/jail.local
# [...]
#
# JAILS
#
# [...]
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
# [...]
Ahora debe reiniciarse el servicio fail2ban:
root@server:~# /etc/init.d/fail2ban restart
Verificación
Durante cada (re)inicio del servicio fail2ban se envía un e-mail de notificación al
administrador del sistema:
Subject: [Fail2Ban] ssh: started
From: Fail2Ban <[email protected]>
To: root@localhost
Date: Tue, 13 Jan 2011 22:14:28 +0000 (WET)
Hi,
The jail ssh has been started successfully.
Regards,
Fail2Ban
En de que sea necesaria una acción defensiva, el administrador también será notificado:
Subject: [Fail2Ban] ssh: banned 219.143.232.144
From: Fail2Ban <[email protected]>
To: root@localhost
Date: Tue, 13 Jan 2011 22:25:06 +0000 (WET)
Hi,
The IP 219.143.232.144 has just been banned by Fail2Ban after
3 attempts against ssh.
Here are more information about 219.143.232.144:
% [whois.apnic.net node-1]
% Whois data copyright terms http://www.apnic.net/db/dbcopyright.html
inetnum: 219.143.232.0 - 219.143.233.127
netname: Sinotrans-Air-Transport-Development-Co-Ltd
country: CN
descr: 16F Building A Jinyun Plaza,NO.43 Xizhimen South
Street,Xicheng District, Beijing,P.R.China
admin-c: HC55-AP
tech-c: HC55-AP
status: ASSIGNED NON-PORTABLE
changed: [email protected] 20071010
mnt-by: MAINT-CHINANET-BJ
source: APNIC
person: Hostmaster of Beijing Telecom corporation CHINA TELECOM
nic-hdl: HC55-AP
e-mail: [email protected]
address: Beijing Telecom
address: No. 107 XiDan Beidajie, Xicheng District Beijing
phone: +86-010-58503461
fax-no: +86-010-58503054
country: cn
changed: [email protected] 20040115
mnt-by: MAINT-CHINATELECOM-BJ
source: APNIC
Lines containing IP:219.143.232.144 in /var/log/auth.log
Dec 21 23:40:54 server sshd[4311]: Did not receive identification string
from 219.143.232.144
Dec 21 23:44:19 server sshd[4318]: Invalid user globus from
219.143.232.144
Dec 21 23:44:19 server sshd[4318]: (pam_unix) authentication failure;
logname= uid=0 euid=0 tty=ssh ruser= rhost=219.143.232.144
Dec 21 23:44:21 server sshd[4318]: Failed password for invalid user
globus from 219.143.232.144 port 43536 ssh2
Dec 21 23:44:22 server sshd[4320]: Invalid user marine from
219.143.232.144
Dec 21 23:44:22 server sshd[4320]: (pam_unix) authentication failure;
logname= uid=0 euid=0 tty=ssh ruser= rhost=219.143.232.144
Regards,
Fail2Ban
El paquete Fail2Ban puede proteger servidores e-mail, ftp, web, etc. Para esto debe editarse
el archivo /etc/fail2ban/jail.local para incluir los servicios que se planee proteger.
7.2.1 Rootkit Hunter Objetivo
Instalar el paquete rkhunter, un sistema de detección de rootkits que alerta por e-mail al
administrador del sistema, en caso de que detecte alteraciones en el sistema que indiquen
la presencia de un rootkit.
Instalación
root@server:~# aptitude install rkhunter
Configuración
La configuración predeterminada del paquete rkhunter suele ser suficiente. El
archivo /etc/default/rkhunter define que las actualizaciones de la base de datos tengan una
periodicidad semanal, la verificación de rootkits diaria y que los resultados sean enviados
por e-mail al administrador del sistema (root).
Para esto, debe actualizarse la base de datos de propiedades de los archivos de rkhunter:
root@server:~# rkhunter --propupd
[ Rootkit Hunter version 1.3.6 ]
File updated: searched for 162 files, found 127
Utilización
rkhunter puede ser ejecutado desde la línea de comandos:
root@server:~# rkhunter --check
[ Rootkit Hunter version 1.3.6 ]
Checking system commands...
Performing 'strings' command checks
Checking 'strings' command [ OK ]
Performing 'shared libraries' checks
Checking for preloading variables [ None found
]
Checking for preloaded libraries [ None found
]
Checking LD_LIBRARY_PATH variable [ Not found
]
Performing file properties checks
Checking for prerequisites [ OK ]
/bin/bash [ OK ]
/bin/cat [ OK ]
/bin/chmod [ OK ]
/bin/chown [ OK ]
/bin/cp [ OK ]
/bin/date [ OK ]
/bin/df [ OK ]
/bin/dmesg [ OK ]
/bin/echo [ OK ]
/bin/egrep [ OK ]
# [...]
System checks summary
=====================
File properties checks...
Files checked: 127
Suspect files: 0
Rootkit checks...
Rootkits checked : 243
Possible rootkits: 0
Applications checks...
All checks skipped
The system checks took: 2 minutes and 37 seconds
All results have been written to the log file (/var/log/rkhunter.log)
One or more warnings have been found while checking the system.
Please check the log file (/var/log/rkhunter.log)
Actualización de la base de datos
La base de datos del rkhunter se actualiza cada semana de forma automática. Pero, es
posible proceder a su actualización siempre que sea necesario:
root@server:~# rkhunter --update
[ Rootkit Hunter version 1.3.6 ]
Checking rkhunter data files...
Checking file mirrors.dat [ No update
]
Checking file programs_bad.dat [ Updated ]
Checking file backdoorports.dat [ Updated ]
Checking file suspscan.dat [ No update
]
Checking file i18n/cn [ No update
]
Checking file i18n/de [ No update
]
Checking file i18n/en [ No update
]
Checking file i18n/zh [ No update
]
Checking file i18n/zh.utf8 [ No update
]
7.3.1 Debsecan Objetivo
debsecan efectúa una evaluación de la seguridad del sistema y relata las vulnerabilidades
conocidas y asociadas a los paquetes instalados en el sistema, notificando al
administrador (root) de los resultados.
Instalación
root@server:~# aptitude install debsecan
Configuración
Debsecan puede configurarse para ser ejecutado diariamente a través de una tarea
programada (cron). Sus resultados se envían por e-mail al administrador del sistema (root):
root@server:~# debsecan-create-cron
Utilización
La tarea programada durante la configuración enviará un e-mail al administrador con el
resultado del análisis de seguridad:
Subject: Debian security status of server
Date: Tue, 8 Feb 2011 22:33:39 +0000 (WET)
From: [email protected] (root)
Security report based on general data
If you specify a proper suite, this report will include information
regarding available security updates and obsolete packages. To set
the correct suite, run "dpkg-reconfigure debsecan" as root.
*** Fixed vulnerabilities
CVE-2010-4250
<http://security-tracker.debian.org/tracker/CVE-2010-4250>
- linux-base
- linux-headers-2.6.32-5-amd64
- linux-headers-2.6.32-5-common
- linux-image-2.6.32-5-amd64
- linux-libc-dev
*** New vulnerabilities
CVE-2010-4022...
<http://security-tracker.debian.org/tracker/CVE-2010-4022>
- libgssapi-krb5-2, libk5crypto3, libkrb5support0, libkrb5-3
(low urgency)
CVE-2011-0281...
<http://security-tracker.debian.org/tracker/CVE-2011-0281>
- libgssapi-krb5-2, libk5crypto3, libkrb5support0, libkrb5-3
CVE-2011-0282...
<http://security-tracker.debian.org/tracker/CVE-2011-0282>
- libgssapi-krb5-2, libk5crypto3, libkrb5support0, libkrb5-3
*** Vulnerabilities
CVE-2007-2379 The jQuery framework exchanges data using JavaScript...
<http://security-tracker.debian.org/tracker/CVE-2007-2379>
- libjs-jquery (remotely exploitable, low urgency)
CVE-2010-2943 The xfs implementation in the Linux kernel before...
<http://security-tracker.debian.org/tracker/CVE-2010-2943>
- linux-image-2.6.32-5-amd64, linux-libc-dev, linux-base,
linux-headers-2.6.32-5-common, linux-headers-2.6.32-5-amd64
(remotely exploitable, high urgency)
CVE-2010-3435 The (1) pam_env and (2) pam_mail modules in Linux-PAM...
<http://security-tracker.debian.org/tracker/CVE-2010-3435>
- libpam0g, libpam-modules, libpam-runtime (low urgency)
# [...]
CVE-2011-0536 CVE-2010-3847 opens new vulnerability
<http://security-tracker.debian.org/tracker/CVE-2011-0536>
- libc6-dev, libc-dev-bin, locales, libc-bin, libc6
CVE-2011-0755 Integer overflow in the mt_rand function in PHP...
<http://security-tracker.debian.org/tracker/CVE-2011-0755>
- php5-gd, php5-sqlite, php-pear, php5-common, php5-pspell,
php5-mcrypt, php5-cli, libapache2-mod-php5, php5, php5-mysql
(remotely exploitable, medium urgency)
TEMP-0546164-933E0D php5's pear is vulnerable to symlink attacks
<http://security-tracker.debian.org/tracker/TEMP-0546164-933E0D>
- php5-gd, php5-sqlite, php-pear, php5-common, php5-pspell,
php5-mcrypt, php5-cli, libapache2-mod-php5, php5, php5-mysql
(low urgency)
TEMP-0612034-33CBAD aptitude tempfile
<http://security-tracker.debian.org/tracker/TEMP-0612034-33CBAD>
- aptitude (low urgency)
De forma opcional, debsecan también puede ejecutarse en la línea de comandos:
root@server:~# debsecan
CVE-2010-4015 libpq5 (remotely exploitable, medium urgency)
CVE-2007-2379 libjs-jquery (remotely exploitable, low urgency)
CVE-2011-0413 isc-dhcp-common (remotely exploitable, high urgency)
CVE-2010-4698 libgd2-xpm (remotely exploitable, medium urgency)
CVE-2010-4022 libgssapi-krb5-2 (low urgency)
CVE-2011-0281 libgssapi-krb5-2
CVE-2011-0282 libgssapi-krb5-2
CVE-2010-3435 libpam0g (low urgency)
CVE-2010-3853 libpam0g (low urgency)
CVE-2010-4706 libpam0g (low urgency)
CVE-2010-4707 libpam0g (low urgency)
CVE-2010-4708 libpam0g (low urgency)
CVE-2010-2943 linux-image-2.6.32-5-amd64 (remotely exploitable, high
urgency)
CVE-2010-3699 linux-image-2.6.32-5-amd64 (remotely exploitable, low
urgency)
CVE-2010-3865 linux-image-2.6.32-5-amd64 (high urgency)
CVE-2010-4075 linux-image-2.6.32-5-amd64 (low urgency)
CVE-2010-4076 linux-image-2.6.32-5-amd64 (low urgency)
CVE-2010-4077 linux-image-2.6.32-5-amd64 (low urgency)
CVE-2010-4565 linux-image-2.6.32-5-amd64 (low urgency)
CVE-2010-4655 linux-image-2.6.32-5-amd64
# [...]