sábado, 21 de diciembre de 2013

Instalación y configuración de Postfix y Dovecot con soporte para TLS y autenticación.Instalación y configuración de Postfix y Dovecot con soporte para TLS y autenticación.


Instalación y configuración de Postfix y Dovecot con soporte para TLS y autenticación.

Acerca de Postfix.

Postfix, originalmente conocido por los nombres VMailer e IBM Secure Mailer, es un popular agente de transporte de correo (MTA o Mail Transport Agent), creado con la principal intención de ser una alternativa más rápida, fácil de administrar y segura que Sendmail. Fue originalmente escrito por Wietse Venema durante su estancia en el Thomas J. Watson Research Center de IBM.
URL: http://www.postfix.org/.

Acerca de Dovecot.

Dovecot es un servidor de POP3 e IMAP de fuente abierta que funciona en Linux y sistemas basados sobre Unix™ y diseñado con la seguridad como principal objetivo. Dovecot puede utilizar tanto el formato mbox como maildir y es compatible con las implementaciones de los servidores UW-IMAP y Courier IMAP.
URL: http://dovecot.procontrol.fi/.

Acerca de SASL y Cyrus SASL.

SASL (Simple Authentication and Security Layer) es un estructura para la seguridad de datos en protocolos de Internet. Desempareja mecanismos de la autenticación desde protocolos de aplicaciones, permitiendo, en teoría, cualquier mecanismo de autenticación soportado por SASL para ser utilizado en cualquier protocolo de aplicación que capaz de utilizar SASL. Actualmente SASL es un protocolo de la IETF (Internet Engineering Task Force) que ha sido propuesto como estándar. Está especificado en el RFC 2222 creado por John Meyers en la Universidad Carnegie Mellon.
Cyrus SASL es una implementación de SASL que puede ser utilizada del lado del servidor o del lado del cliente y que incluye como principales mecanismos de autenticación soportados a ANONYMOUS, CRAM-MD5, DIGEST-MD5, GSSAPI y PLAIN. El código fuente incluye también soporte para los mecanismos LOGIN, SRP, NTLM, OPT y KERBEROS_V4.
URL: http://asg.web.cmu.edu/sasl/sasl-library.html.

Acerca de DSA.

DSA (Digital Signature Algorithm o Algoritmo de Firma digital) es un algoritmo creado por el NIST (National Institute of Standards and Technology o Instituto Nacional de Normas y Tecnología de EE.UU.), publicado el 30 de agosto de 1991, como propuesta para el proceso de firmas digitales. Se utiliza para firmar información, más no para cifrar ésta. URL: http://es.wikipedia.org/wiki/DSA

Acerca de RSA.

RSA, acrónimo de los apellidos de sus autores, Ron Rivest, Adi Shamir y Len Adleman, es un algoritmo para el ciframiento de claves públicas que fue publicado en 1977, patentado en EE.UU. en 1983 por el el Instituto Tecnológico de Michigan (MIT). RSA es utilizado ampliamente en todo el mundo para los protocolos destinados para el comercio electrónico.
URL: http://es.wikipedia.org/wiki/RSA

Acerca de X.509.

X.509 es un estándar ITU-T (estandarización de Telecomunicaciones de la International Telecommunication Union ) para infraestructura de claves públicas (PKI o Public Key Infrastructure). Entre otras cosas, establece los estándares para certificados de claves públicas y un algoritmo para validación de ruta de certificación. Este último se encarga de verificar que la ruta de un certificado sea válida bajo una infraestructura de clave pública determinada. Es decir, desde el certificado inicial, pasando por certificados intermedios, hasta el certificado de confianza emitido por una Autoridad Certificadora (CA o Certification Authority).
URL: http://es.wikipedia.org/wiki/X.509

Acerca de OpenSSL.

OpenSSL es una implementación libre, de código abierto, de los protocolos SSL (Secure Sockets Layer o Nivel de Zócalo Seguro) y TLS (Transport Layer Security o Seguridad para Nivel de Transporte). Está basado sobre el extinto proyecto SSLeay, iniciado por Eric Young y Tim Hudson, hasta que éstos comenzaron a trabajar para la división de seguridad de EMC Corporation.
URL: http://www.openssl.org/

Equipamiento lógico necesario.

Instalar los paquetes postfix, dovecot, cyrus-sasl y cyrus-sasl-plain:
yum -y install postfix dovecot cyrus-sasl cyrus-sasl-plain
Si acaso estuviese instalado, elimine el paquete cyrus-sasl-gssapi, ya que este utiliza el método de autenticación GSSAPI, mismo que requeriría de la base de datos de cuentas de usuario de un servidor Kerberos:
yum remove cyrus-sasl-gssapi
De igual manera, si estuviese instalado, elimine el paquete cyrus-sasl-md5, ya que este utiliza los métodos de autenticación CRAM-MD5 y Digest-MD5, mismos que requerían asignar las claves de acceso para SMTP a través del mandato saslpasswd2. Outlook carece de soporte para estos métodos de autenticación.
yum remove cyrus-sasl-md5

Procedimientos.

Todos los procedimientos deben realizarse como el usuario root.

Definiendo Postfix como agente de transporte de correo predeterminado.

El mandato alternatives, con la opción alternatives--config mta, se utiliza para conmutar el servicio de correo electrónico del sistema y elegir que paquete utilizar. Sólo es necesario utilizar éste si previamente estaban instalados Sendmail o Exim. Sí este es el caso, ejecute lo siguiente desde una terminal y defina Postfix como agente de transporte de correo (MTA, Mail Transport Agent), seleccionado éste.
alternatives --config mta
Lo anterior devolverá una salida similar a la siguiente, donde deberá elegir entre postfix y sendmail como MTA predeterminado del sistema:

Hay 2 programas que proporcionan 'mta'.

  Selección    Comando
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix
   2           /usr/sbin/sendmail.sendmail

Presione Intro para mantener la selección actual[+] o escriba el número de la selección:  1
Si estuviera presente sendmail, detenga éste (es el MTA predeterminado en CentOS 5 y Red Hat Enterprise Linux 5) e inicie postfix:
service sendmail stop
chkconfig sendmail off
service postfix start
chkconfig postfix on

SELinux y Postfix.

A fin de que SELinux permita a Postfix escribir el el directorio de entrada de correo electrónico (/var/spool/mail/), es necesario habilitar la siguiente política:
setsebool -P allow_postfix_local_write_mail_spool 1
Solo en CentOS 5 y Red Hat Enterpise Linux 5, a fin de que SELinux permita la lectura de correo electrónico, es necesario habilitar la siguiente política:
setsebool -P mail_read_content 1
En CentOS 6 y Red Hat Enterpise Linux 6, esta política dejó de existir, pues se volvió innecesaria.

Configuración de Postfix.

Generando firma digital y certificado para ambos servicios.

Acceda al directorio /etc/pki/tls/.
cd /etc/pki/tls/
La creación de la firma digital y certificado requiere utilizar una clave con algoritmo RSA de 2048 octetos (bits), con estructura X.509 y sin DES. En el ejemplo a continuación, se establece una validez por 1825 días (cinco años) para el certificado creado:
openssl req -x509 -nodes -newkey rsa:2048 -days 1825 \
    -out certs/dominio.tld.crt -keyout private/dominio.tld.key
Lo anterior solicitará se ingresen varios datos:
  • Código de dos letras para el país.
  • Estado o provincia.
  • Ciudad.
  • Nombre de la empresa o razón social.
  • Unidad o sección.
  • Nombre del anfitrión.
  • Dirección de correo.
La salida debe devolver algo similar a lo siguiente:
Generating a 1024 bit DSA private key
writing new private key to 'smtp.key'
-----
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name
or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:MX
State or Province Name (full name) [Berkshire]:Distrito Federal
Locality Name (eg, city) [Newbury]:Mexico
Organization Name (eg, company) [My Company Ltd]:Empresa, S.A. de C.V.
Organizational Unit Name (eg, section) []:Direccion Comercial
Common Name (eg, your name or your server's hostname) []:*.dominio.tld
Email Address []:webmaster@dominio.com
Si definió un nombre de anfitrión absoluto (ejemplo: mail.dominio.tld), el certificado sólo será válido cuando el servidor de correo electrónico sea invocado con el nombre definido en el campo Common Name. Es decir, sólo podrá utilizarlo cuando se defina mail.dominio.tld como servidor SMTP/IMAP/POP3 con soporte TLS desde el cliente de correo electrónico. Funcionará incorrectamente si se invoca al servidor como, por mencionar un ejemplo, correo.dominio.tld. Es por eso que se sugiere utilizar *.dominio.com si se planea acceder hacia el mismo servidor con diferentes subdominios del mismo dominio.
A fin de facilitar a los clientes de correo electrónico el poder gestionar una futura actualización de certificado, conviene añadir una huella distintiva indubitable (fingerprint) al certificado.
openssl x509 -subject -fingerprint -noout -in certs/dominio.tld.crt
Es indispensable que todos los archivos de claves y certificados tengan permisos de acceso de sólo lectura para el usuario root:
chmod 400 certs/dominio.tld.crt private/dominio.tld.key
Regrese al directorio de inicio del usuario root.
cd

Archivo de configuración /etc/postfix/master.cf.

Editar el archivo /etc/postfix/master.cf:
vim /etc/postfix/master.cf
Si utiliza CentOS 5 o Red Hat Enterprise Linux 5, debe descomentar las siguientes líneas resaltadas en negrita:
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Si utiliza CentOS 6 o Red Hat Enterprise Linux 6, debe descomentar las siguientes líneas resaltadas en negrita:
smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       n       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Archivo de configuración /etc/postfix/main.cf.

A continuación, se debe editar el archivo /etc/postfix/main.cf:
vim /etc/postfix/main.cf
Respetando el resto del contenido original de este archivo y asumiendo que el nombre de anfitrión del servidor es mail.dominio.com y que se va a utilizar para gestionar el correo electrónico de dominio.com, solo se deben localizar y configurar los siguientes parámetros:

# Todo lo siguiente solo requiere descomentarse o bien modificar la línea 
# correspondiente que esté descomentada.

# Definir el nombre de anfitrión del sistema (hostname).
myhostname = mail.dominio.com

# Definir el dominio principal a gestionar.
mydomain = dominio.com

myorigin = $mydomain

# Definir se trabaje por todas las interfaces.
# De modo predeterminado solo trabaja por la interfaz de retorno del sistema
# (loopback), es decir, solo escucha peticiones a través de sobre 127.0.0.1 
#inet_interfaces = localhost
inet_interfaces = all

# Si se van a manejar más dominios de correo electrónico, añadirlos también.
mydestination = $myhostname, $mydomain, localhost.localdomain, localhost

# Definir tus redes locales, ejemplo asume que tu LAN es 192.168.1.0/24
mynetworks = 192.168.1.0/24, 127.0.0.0/8

# Si se van a manejar más dominios de correo electrónico, añadirlos también.
relay_domains = $mydestination

# Importante para poder utilizar procmail para filtrar correo.
mailbox_command = /usr/bin/procmail

# Todo lo siguiente está ausente en la configuración.
# Añadir todo al final del archivo main.cf
#
smtpd_tls_security_level = may
smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
# Las rutas deben corresponder a las del certificado y firma digital creados.
smtpd_tls_key_file = /etc/pki/tls/private/dominio.tld.key
smtpd_tls_cert_file = /etc/pki/tls/certs/dominio.tld.crt
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
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


# Soporte para autenticar a través de SASL.
# smtpd_sasl_local_domain = # Solo como referencia.
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
A fin de ahorrar tiempo realizando búsqueda de los parámetros anteriores, todo lo anterior también se puede configurar utilizando el mandato postconf, del siguiente modo:
postconf -e 'myhostname = mail.dominio.com'
postconf -e 'mydomain = dominio.com'
postconf -e 'myorigin = $mydomain'
postconf -e 'inet_interfaces = all'
postconf -e 'mydestination = $myhostname, $mydomain, localhost.localdomain, localhost'
postconf -e 'mynetworks = 192.168.1.0/24, 127.0.0.0/8'
postconf -e 'relay_domains = $mydestination'
postconf -e 'mailbox_command = /usr/bin/procmail'
postconf -e 'smtpd_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt'
postconf -e 'smtpd_tls_key_file = /etc/pki/tls/private/dominio.tld.key'
postconf -e 'smtpd_tls_cert_file = /etc/pki/tls/certs/dominio.tld.crt'
postconf -e 'smtpd_tls_auth_only = no'
postconf -e 'smtp_use_tls = yes'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtp_tls_note_starttls_offer = yes'
postconf -e 'smtpd_tls_loglevel = 1'
postconf -e 'smtpd_tls_received_header = yes'
postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
postconf -e 'tls_random_source = dev:/dev/urandom'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'smtpd_sasl_security_options = noanonymous'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_sasl_authenticated_header = yes'
postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'

Archivo de configuración /etc/aliases.

Se debe editar también el archivo /etc/aliases:
vim /etc/aliases
Se debe definir que el correo del usuario root se entregue al cualquier otro usuario del sistema. El objetivo de esto es que jamás se tenga necesidad de utilizar la cuenta del usuario root y se prefiera en su lugar una cuenta de usuario sin privilegios. Solo se requiere descomentar la última línea de este archivo, que como ejemplo entrega el correo del usuario root al usuario marc y definir un usuario existente en el sistema
#root: marc
root: fulano
Al terminar, se ejecuta el mandato postalias para generar el archivo /etc/aliases.db que será utilizado por Postfix:
postalias /etc/aliases

Configuración de Dovecot en CentOS 5 y Red Hat Enterprise Linux 5.

Parámetros del archivo /etc/dovecot.conf.

Editar el archivo /etc/dovecot.conf:
vim /etc/dovecot.conf
En el parámetro protocols, se deben activar todos los servicios (imap, imaps, pop3 y pop3s).
protocols = imap imaps pop3 pop3s
De modo predeterminado, el soporte SSL de Dovecot está activo. Verifique que el parámetro ssl_disable tenga el valor no o bien solo esté comentado.
#ssl_disable = no
Y se especifican las rutas del certificado y clave a través de los parámetros ssl_cert_file y ssl_key_file, del siguiente modo:
ssl_cert_file = /etc/pki/tls/certs/dominio.tld.crt
ssl_key_file = /etc/pki/tls/private/dominio.tld.key

Configuración de Dovecot en CentOS 6 y Red Hat Enterprise Linux 6.

CentOS 6 y Red Hat Enterprise Linux 6 utilizan la versión 2.0 de Dovecot y por lo cual cambia radicalmente la configuración respecto de la versión 1.0.x, utilizada en CentOS 5 y Red Hat Enterprise Linux 5.

Parámetros del archivo /etc/dovecot/dovecot.conf.

Edite el archivo /etc/dovecot/dovecot.conf y descomente el parámetro protocolos, estableciendo como valor pop3 imap lmtp.
# Protocols we want to be serving.
protocols = imap pop3

Parámetros del archivo /etc/dovecot/conf.d/10-mail.conf.

Alrededor de la línea 30 del archivo /etc/dovecot/conf.d/10-mail.conf, establezca mbox:~/mail:INBOX=/var/mail/%u como valor del parámetro mail_location.
mail_location = mbox:~/mail:INBOX=/var/mail/%u

Parámetros del archivo /etc/dovecot/conf.d/10-ssl.conf.

En el archivo /etc/dovecot/conf.d/10-ssl.conf, descomente las siguientes líneas resaltadas en negrita:
# SSL/TLS support: yes, no, required. <doc/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. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert = </etc/pki/tld/certs/dominio.tld.key
ssl_key = </etc/pki/tls/private/dominio.tld.key

Iniciar servicios y añadir éstos al arranque del sistema.

Se deben añadir al arranque del sistema e iniciar (o reiniciar) los servicios saslauthd, dovecot y postfix:
chkconfig saslauthd on
chkconfig dovecot on
chkconfig postfix on
service saslauthd start
service dovecot start
service postfix restart

Soporte para LMTP.

Si utiliza CentOS 6 o Red hat Enterprise Linux 6, es decir Dovecot 2.0 y Postfix 2.6.6, podrá utilizar LMTP (Local Mail Transfer Protocol) o protocolo de transporte local de correo. Este protocolo esta basado sobre el protocolo SMTP y está diseñado como una alternativa a SMTP para situaciones donde el lado receptor carece de cola de correo (queue mail), como un MTA que entiende conversaciones SMTP. Puede ser utilizado como una forma alternativa y más eficiente para el transporte de correo entre Postfix y Dovecot.
Edite el archivo /etc/dovecot/dovecot.conf y añada lmtp a los valores del parámetro protocolos, de la siguiente forma.
# Protocols we want to be serving.
protocols = imap pop3 lmtp
A fin de poder hacer uso de LMTP de manera apropiada, es necesario añadir el siguiente parámetro en el archivo /etc/postfix/main.cf:
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
O bien ejecutar lo siguiente:
postconf -e 'virtual_transport = lmtp:unix:/var/run/dovecot/lmtp'
Y reiniciar los servicios dovecot y postfix.
service dovecot restart
service postfix restart

Modificaciones necesarias en el muro cortafuegos.

Si se utiliza un cortafuegos con políticas estrictas, como por ejemplo Shorewall, es necesario abrir, además de los puertos 25, 110, 143 y 587 por TCP (SMTP, POP3, IMAP y Submission, respectivamente), los puertos 465, 993 y 995 por TCP (SMTPS, IMAP y POP3S, respectivamente).
Editar el archivo /etc/shorewall/rules:
vim /etc/shorewall/rules
Las reglas para el archivo /etc/shorewall/rules de Shorewall correspondería a algo similar a lo siguiente:
#ACTION SOURCE DEST PROTO  DEST  SOURCE
#    PORT  PORT(S)1
ACCEPT net fw tcp 25,110,143,465,587,993,995
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Para que tomen efecto los cambios, hay que reiniciar el servicio Shorewall.
service shorewall restart

Requisitos en la zona de reenvío en el servidor DNS.

Es indispensable que exista un DNS que resuelva correctamente el dominio y apunte el servicio de correo electrónico hacia la IP del servidor de correo electrónico recién configurado. Asumiendo que se hizo correctamente todo lo mencionado en este documento, la única forma en que se imposibilitaría la llegada y/o salida del correo electrónico se esté utilizando un enlace ADSL con IP dinámica (restringido por le proveedor para utilizar el puerto 25) o bien que el servidor DNS que resuelve el dominio, esté apuntando hacia otra dirección IP para el servicio de correo electrónico. En el DNS se requieren al menos los siguientes registros, donde xx.xx.xx.xx corresponde a la IP del servidor de correo electrónico.
$TTL 86400
@ IN SOA dns1.isp.com alguien.algo.com (
  2010061901 ; Número de serie
  28800 ; Tiempo de refresco
  7200 ; Tiempo entre reintentos
  604800 ; tiempo de espiración
  86400 ; Tiempo total de vida
  )
@ IN  NS dns1.isp.com.
@ IN  NS dns2.isp.com.
@ IN  A a.b.c.d
@ IN  MX 10 mail
@ IN  TXT "v=spf1 a mx -all"
mail IN  A xx.xx.xx.xx
www IN  A a.b.c.d
ftp IN  A a.b.c.d

Comprobaciones.

A través de terminal.

Realice una conexión con el mandato nc (netcat) o bien el mandato telnet, al puerto 25 del sistema. Ingrese el mandato EHLO con el dominio configurado. La salida deberá devolver, entre todas las funciones del servidor, una línea que indica STARTTLS. La salida puede ser similar a la siguiente:
nc 127.0.0.1 25
220 emachine.alcancelibre.org ESMTP Postfix
EHLO dominio.com
250-mail.dominio.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
QUIT
Para salir, solo escriba QUIT y pulse la tecla ENTER.

A través de clientes de correo electrónico.

Utilice cualquier cliente de correo electrónico con soporte para TLS/SSL y configure éste para conectarse hacia el sistema a través de IMAPS (puerto 993) o bien POP3S (puerto 995). Tras aceptar el certificado del servidor, el sistema deberá permitir autenticar, con nombre de usuario y clave de acceso y realizar la lectura del correo electrónico.

Configuración de GNOME Evolution.

Para GNOME Evolution, la configuración de IMAP o POP3, se realiza seleccionando el tipo de servidor, definiendo el nombre del servidor utilizado para crear el certificado, nombre de usuario y usar encriptación segura TLS.
Configuración IMAP, en GNOME Evolution.
Configuración IMAP, en GNOME Evolution.
Se hace lo mismo para la configuración de SMTP (utilizar conexión segura TLS), pero considerando además que también se puede utilizar el puerto 587 (submission) en caso de que el proveedor de acceso a Internet del cliente haya restringido el uso del puerto 25 (smtp).
Configuración SMTP, GNOME Evolution.
Configuración SMTP, GNOME Evolution.

Configuración Mozilla Thunderbird.

Para Mozilla Thunderbird, se define el nombre del servidor utilizado para crear el certificado, usuario y usar conexión segura TLS.
Configuración IMAP, Mozilla Thunderbird.
Configuración IMAP, Mozilla Thunderbird.
Se hace lo mismo para la configuración de SMTP (utilizar conexión segura TLS), pero considerando además que también se puede utilizar el puerto 587 (submission) en caso de que el proveedor de acceso a Internet del cliente haya restringido el uso del puerto 25 (smtp).
Configuración SMTP, Mozilla Thunderbird.
Configuración SMTP, Mozilla Thunderbird.

Modificaciones necesarias en el muro cortafuegos.

Si se utiliza un cortafuegos con políticas estrictas, como por ejemplo Shorewall, es necesario abrir, además de los puertos 25, 110, 143 y 587 por TCP (SMTP, POP3, IMAP y Submission, respectivamente), los puertos 465, 993 y 995 por TCP (SMTPS, IMAP y POP3S, respectivamente).
La regla para el archivo /etc/shorewall/rules de Shorewall correspondería a algo similar a lo siguiente:
#ACTION SOURCE DEST PROTO  DEST  SOURCE
#    PORT  PORT(S)1
ACCEPT all fw tcp 25,110,143,465,587,993,995
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE

Instalación y configuración del servidor de correos Zimbra

Para el cometido necesitamos 2 servidores: Un servidor DNS y otro para el servidor de correos Zimbra.

Se puede instalar y configurar el DNS y Zimbra en un solo servidor pero no es recomendable.
Los requisitos con continuar con el tutorial son:
Bueno empezamos
  1. Servidor DNS
  2. Servidor de Correos
    1. Instalar CentOS 6.4  Pueden guiarse con este tutorial
      La instalación tomará de 15 minutos a más.Aquí es donde hemos configurado:El nombre del equipo: mail.cto.com
      La tarjeta de red:
      IP: 192.168.1.99
      GATEWAY: 192.168.1.1
      DNS primario: 192.168.1.230
      DNS secundario: 8.8.8.8 En este paso ya debemos estar conectado al dominio  que se configuro en el paso 1 y tener acceso a internet
    2. Configurar los pre requisitos para la instalación de Zimbra
      • Iniciar sesión como root
      • Como Zimbra empaqueta su propio Postfix, vamos a detener y deshabilitar el que viene por defecto en CentOS
        1
        2
        #/etc/init.d/postfix stop
        #chkconfig postfix off
      • Instalamos algunos  paquetes y requerimientos de Zimbra
        1
        #yum -y install nc libstdc++.i686 perl sysstat  wget nano
      • Modificamos el archivo hosts
        1
        #nano /etc/hosts
        Colocamos la IP de este servidor con el nombre del equipo, quedando similar a esto:
        1
        2
        127.0.0.1    localhost.localdomain    localhost
        192.168.1.99    mail.cto.com    mail
      • Modificamos el archivo resolv.conf
        1
        #nano /etc/resolv.conf
        Debe quedar algo así:
        1
        2
        3
        search cto.com
        nameserver  dns 192.168.1.230
        nameserver dns 8.8.8.8
      • Editamos el archivo de reglas de sudo
        1
        #nano /etc/sudoers
        Comentamos la siguiente línea, para permitir que las tareas y procesos de  Zimbra ejecuten sudo sin la necesidad de una sesión de login:
        1
        # Defaults requiretty
      • Descargamos Zimbra . En el ejemplo lo descargo en /root/Downloads
      • Descomprimimos el archivo descargado zcs-8.0.4_GA_5737.RHEL6_64.20130524120036.tgz
        1
        #tar –xvcf  /root/Downloads/zcs-8.0.4_GA_5737.RHEL6_64.20130524120036.tgz
      • Procedemos a la instalación de zimbra
        1
        2
        #cd /root/Downloads/zcs-8.0.4_GA_5737.RHEL6_64.20130524120036
        # ./install.sh --platform-override
Aquí empezamos la instalación con ‘Y’ o ‘N’ y  Enter  donde nos pregunte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Do you agree with the terms of the software license agreement? [N] y
 
Checking for prerequisites...
FOUND: NPTL
FOUND: nc-1.84-22
FOUND: sudo-1.8.6p3-7
FOUND: libidn-1.18-2
FOUND: gmp-4.3.1-7
FOUND: /usr/lib64/libstdc++.so.6
Checking for suggested prerequisites...
FOUND: perl-5.10.1
FOUND: sysstat
FOUND: sqlite.10.1
Prerequisite check complete.
 
Select the packages to install
 
Install zimbra-ldap [Y] y
Install zimbra-logger [Y] y
Install zimbra-mta [Y] y
Install zimbra-snmp [Y] y
Install zimbra-store [Y] y
Install zimbra-apache [Y] y
Install zimbra-spell [Y] y
Install zimbra-memcached [N] n
Install zimbra-proxy [N] n
 
Install anyway? [N] y
The system will be modified.  Continue? [N] y
 
Installing packages
zimbra-core......zimbra-core-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-ldap......zimbra- ldap-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-logger......zimbra-logger-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-mta......zimbra-mta-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-snmp......zimbra-snmp-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-store......zimbra-store-8.0.4_GA_5737.RHEL6_64-20130524120036.rpm...done
zimbra-apache......zimbra-apache-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
zimbra-spell......zimbra-spell-8.0.4_GA_5737.RHEL6_64-20130524120036.x86_64.rpm...done
 
DNS ERROR resolving MX for       mail.cto.com
 
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes] y
 
Create domain: mail.cto.com
MX:  mail.cto.com     (Debe salir la ip de la maquina que estoy instalando)
 
Interface: 192.168.1.99
Interface: 127.0.0.1
done.
Checking for port conflicts
 
Main menu
 
Selecciona   opción 3  (Para configurar Zimbra)
Address unconfigured (**) items  (? - help) 3
 
Luego opcion 4 (Para poner una contraseña al usuario Administrador de Zimbra)
Select, or 'r' for previous menu [r] 4
 
Password for admin@mail.cto.com     (min 6 characters): <strong>[LaClaveDelAdmin]</strong> <strong>(la clave de administrador de zimbra)</strong>
 
Luego r (Para salir de la configuración de Zimbra)
Select, or 'r' for previous menu [r] r
 
Luego a (Para aplicar los cambios)
Select from menu, or press 'a' to apply config (? - help) a
Save configuration data to a file? [Yes] y
Save config in file: [/opt/zimbra/config.7087]   Enter
The system will be modified - continue? [No] y
Notify Zimbra of your installation? [Yes] n
 
Configuration complete - press return to exit
Bueno ya tenemos zimbra instalado  y corriendo.
Para comprobar ingresamos desde un navegador (Firefox) al Administrador de Zimbra:
https://mail.cto.com/zimbraadmin/
(Si nos sale una advertencia de seguridad ya que estamos usando https y no tenemos una firma digital lo agregamos para que acepte la excepción)
Nos autentificamos con el usuario admin y listo.

Montar Servidor de Correo en Linux [CentOS]

 Montar Servidor de Correo en Linux [CentOS] Nos centraremos en sendmail.org , las raíces de Sendmail se remontan al nacimiento del correo electrónico, una década antes de que naciese ARPANET, el precursor de Internet. Por entonces, cada buzón de usuario era un fichero con derechos de sólo lectura y las aplicaciones de correo eran simplemente texto incorporado en ese fichero. Cada usuario tenía que abrir y meterse de lleno en el fichero de correo para buscar correos antiguos y leer el correo nuevo era toda una faena. La primera transferencia real de un fichero de mensaje de correo entre dos equipos tuvo lugar hasta el año de 1972, año en el que el correo electrónico empezó a transferirse por FTP a través de un protocolo de red NCP. Este método de comunicación más sencillo muy pronto se hizo popular, incluso hasta el punto de representar la mayor parte del tráfico de ARPANET en menos de un año. Sin embargo, la falta de estándares entre los protocolos existentes convirtió al correo electrónico en más difícil de enviar desde algunos sistemas y así continuó hasta que ARPANET creó el estándar TCP/IP en 1982. Un nuevo
protocolo, SMTP, que se materializaba en el transporte de mensajes. Estos avances, en combinación con la sustitución de los ficheros host por dns, permitieron que se materializasen los agentes MTA con funciones completas. Sendmail, que creció a partir de un precedente sistema de entrega de correo electrónico denominado Delivermail, muy pronto se convirtió en estándar a medida que Internet comenzaba a expandirse y a utilizarse más ampliamente. El unico punto debil que presenta sendmail es que este este posee el mayor numero de errores los cuales son reparados casi de inmediato.

Ahora relacionemonos con algunos terminos antes de continuar

Protocolo SMTP

Simple Mail Transfer Protocol (SMTP) Protocolo Simple de Transferencia de Correo, es un protocolo de la capa
de aplicación. Protocolo de red basado en texto utilizado para el intercambio de mensajes de correo electrónico entre computadoras u otros dispositivos SMTP se basa en el modelo cliente-servidor, donde un cliente envía un mensaje a uno o varios receptores. La comunicación entre el cliente y el servidor consiste enteramente en líneas de texto compuestas por caracteres ASCII. El tamaño máximo permitido para estas líneas es de 1000 caracteres. Las respuestas del servidor constan de un código numérico de tres digitos, seguido de un texto explicativo. El número va dirigido a un procesado automático de la respuesta por autómata, mientras que el texto permite que un humano interprete la respuesta. En el protocolo SMTP todas las órdenes, réplicas o datos son líneas de texto, delimitadas por el carácter <CRLF>. Todas las réplicas tienen un código numérico al comienzo de la línea. En el conjunto de protocolos TCP/IP, el SMTP va por encima del TCP, usando normalmente el puerto 25 en el servidor para establecer la conexión.

Protocolo POP3

POP3 está diseñado para recibir correo, no para enviarlo; le permite a los usuarios con conexiones intermitentes ó muy lentas (tales como las conexiones por módem), descargar su correo electrónico mientras tienen conexión y revisarlo posteriormente incluso estando desconectados. Cabe mencionar que la mayoría de los clientes de correo incluyen la opción de dejar los mensajes en el servidor, de manera tal que, un cliente que utilice POP3 se conecta, obtiene todos los mensajes, los almacena en la computadora del usuario como mensajes nuevos, los elimina del servidor y finalmente se desconecta. En contraste, el protocolo IMAP permite los modos de operación conectado y desconectado. Los clientes de correo electrónico que utilizan IMAP dejan por lo general los mensajes en el servidor hasta que el usuario los elimina directamente. Esto y otros factores hacen que la operación de IMAP permita a múltiples clientes acceder al mismo buzón de correo. La mayoría de los clientes de correo electrónico soportan POP3 ó IMAP; sin embargo, solo unos cuantos proveedores de internet ofrecen IMAP como valor agregado de sus servicios.

Protocolo IMAP

Internet Message Access Protocol, o su acrónimo IMAP, es un protocolo de red de acceso a mensajes electrónicos almacenados en un servidor. Mediante IMAP se puede tener acceso al correo electrónico desde cualquier equipo que tenga una conexión a Internet. IMAP tiene varias ventajas sobre POP, que es el otro protocolo empleado para obtener correo desde un servidor. Por ejemplo, es posible especificar en IMAP carpetas del lado servidor. Por otro lado, es más complejo que POP ya que permite visualizar los mensajes de manera remota y no descargando los mensajes como lo hace POP.

Instalación de Sendmail

El proceso de instalacion de Sendmail requiere de los siguientes paquetes

● sendmail: Este paquete incluye el MUA Sendmail asi como los archivos de configuacion propios de sendmail
● sendmail.cf: Dovecot es el servidor de IMAP y POP3 de Linux
● dovecot: SASL son las siglas de Simple Authentication and Security Layer, método que añade un soporte adicional para la autenticación de los protocolos que fundamentan su conexión en la estandarización fijada por la IETF (Internet Engineering Task Force). Se usa en servidores, como Cyrus IMAP, para controlar las peticiones de acceso de los clientes. El protocolo de autenticación incluirá comandos para la correcta apertura del canal cliente-servidor y las subsiguientes aperturas del canal para la toma de nuevos datos. Opcionalmente, puede negociarse una capa de seguridad entre el protocolo mismo y la conexión. Cyrus SASL utiliza OpenSSL para cifrar los datos.
● cyrus:
● cyrus-sasl-mmd5
● cyrus-sasl-plain
● make
● m4

Para llevar a cabo la instalacion de estos paquetes solo teclear en terminal lo siguiente:

# yum install -y sendmail sendmail.cf dovecot cyrus-sasl cyrussasl-
plain cyrus-sasl-md5 make m4


Configuracion Basica de Sendmail

Los ficheros generados a partir de la instalacion del servidor de coreo Sendmail que modificaremos seran los
siguientes:

● access
● local-host-names
● relay-domains ---> (Este fichero sera creado por ti)
● sendmail.mc

El fichero relay-domains no existe por lo que tendra que ser creado por usted mismo Estos ficheros los puedes localizar en:

/etc/mail

Configuracion del fichero --> /etc/mail/access

En este fichero se definen los dominios o conjunto de direcciones IP que podran hacer uso o no del servidor de correo.

La sintaxis de este fichero es el siguiente

Connect:midominio1.net
Connect:midominio2.net
Connect:midominio3.net
Connect:midominio4.net

Los valores que puede tomar el parametro son los siguientes:

RELAY Permite el envio de correo a travez de nuestro servidor
REJECT Niega el uso de nuestro servidor para la entrega de correo

Pa mas ejemplificado aqui dejo un ejemplo:

# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# If you want to use AuthInfo with "MLAIN LOGIN", make sure to have the
# cyrus-sasl-plain package installed.
#
# By default we allow relaying from localhost...
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY

#IP Publica de su Servidor de correo
Connect: 207.249.24.30 RELAY

#Nombre de su Dominio
Connect: midominio.com.mx RELAY

#Nombre de su Equipo
Connect: correo.midominio.com.mx RELAY

#IP Local de su Servidor de correo
Connect: 192.168.1.10 RELAY

#Dominios y direcciones IP a quienes se les negara el envio de correo
Connect:spammers.com.ar REJECT
Connect:yourporn.net REJECT
Connect:207.46.197.32 REJECT
Connect:207.46.197.32 REJECT


Esto significa solo se permite el envio de correo a nuestro propio dominio asi como tambien a la direccion IP publica que tiene asignada nuestro dominio, asi mismo estamos denegando el uso de nuestro servidor de correo a dominios como spammers.com.ar , yourporn.net y a las direcciones IP 207.46.197.32 y 207.46.197.32.

Configuracion del fichero --> /etc/mail/local-host-names

Se suele utilizar para escribir aquellos dominios o equipos de los cuales sendmail va a recibir correo. Por ejemplo, si nuestro servidor de correo va a aceptar correo proveniente del dominio

midominio.com.mx

y también de la máquina

correo.midominio.com.mx

nuestro fichero local-host-names debería quedar editado de la siguiente forma

correo.midominio.com.mx
midominio.com.mx


Configuracion del fichero --> /etc/mail/relay-domains

En este fichero se introduciran los nombres de los equipos, redes o dominios desde o hacia las que podemos hacer transmisión de correo. Por ejemplo:

midominio.com.mx
correoomidominio.com.mx

Como podemos observar estamos permitiendo la transmisión a cualquier correo que “venga de” o “vaya
hacia” el dominio “midominio.com.mx” , asi como tambien al dominio “correo.midominio.com.mx” .Practicamente es una copia del fichero /etc/mail/local-host-names

Configuracion del fichero --> /etc/mail/sendmail.mc

Este fichero contiene la configuración completa del servidor de correo, es por ello que debe ser cuidadoso al
momento de editarlo.

Activando interfaces de red

Por defecto sendmail esta configurado para enviar correos desde la interfaz loopback 127.0.0.1,esto quiere decir que unicamente el servidor envia correos a si mismo, para cambiar este comportamiento solo deberas ubicar la
siguiente linea

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

y eliminar el parametro

Addr=127.0.0.1

Al final, la linea debera quedar de la siguiente manera

DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl

Con esta accion sendmail asumira que podrá enviar correos desde cualquier IP. Asi mismo tambien podras declar cada una de las direcciones IP por las cuales se podra enviar correo Ejemplo:

DAEMON_OPTIONS(`Port=smtp,Addr=192.168.0.1 Name=MTA')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=172.16.0.10 Name=MTA')dnl

Filtrado de dominios no validos

Por defecto, Sendmail esta configurado para aceptar correos de dominios no resueltos. Una forma de cambiar
este comportamiento es comentando la siguiente linea del fichero /etc/mail/sendmail.mc.

FEATURE(`accept_unresolvable_domains')dnl

Solo tendra que agregar la palabra

dnl

al comienzo de la linea Al finalizar debera quedar de la siguiente forma

dnl FEATURE(`accept_unresolvable_domains')dnl

Con esta accion usted estara restrigiendo el paso de spam a su servidor de correo

Enmascarar dominios

Si tu intencion es enviar correo con solo un dominio lo conveniente es enmascarar todos los correos emitidos
desde el servidor con el nombre de tu dominio. Para ello ubica la siguiente linea

dnl MASQUERADE_AS(`mydomain.com')dnl

descomenta la linea eliminando la palabra

dnl

que se encuentra al principio de la linea y luego introduce el nombre de tu dominio como se a muestra a continuacion

dnl MASQUERADE_AS(`midominio.com.mx')dnl

Con esta accion lograras que tus correos salgan con la terminacion

@midominio.com.mx

Igualmente ubique las siguientes lineas y tambien descomentelas

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

Habilitar el puerto 587 para el envio de correo

Aguas con esto Mexico, Telmex está implementado medidas para ayudar a combatir el spam en sus servicios.
Estó afecta a los usuarios que usan su conectividad, ya que basicamente, están bloqueando el puerto 25 SMTP, el cual comúnmente es utilizado para el envío de correo electrónico.

Si tu cuentas con un servicio Infinitum con IP Dinámica y desea verificar si va a ser afectado por esta medida,
le sugerimos realizar lo siguiente: Revisar la configuración de su cliente de correo para enviar mensajes de forma segura, si confirma que su servicio está siendo bloqueado contacte a su administrador del servicio de correo electrónico sobre las alternativas para enviar correo o bien: Solicita a TELMEX que elimine la protección del puerto 25 SMTP de su cuenta de acceso a Internet. Una vez que se haya eliminado la protección del puerto 25, por favor desconecte su módem y conéctelo nuevamente. Esta solicitud se puede hacer en línea en:
Asi mismo, recomendamos abrir el puerto alternativo 587 de SMTP para el envio de correo en su servidor.

Para hacerlo, busque la siguiente linea

dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

descomenta la linea eliminando la palabra

dnl

que se encuentra al principio de la linea, con eso tendras habilitado el envio por e

dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

Con esta accion habras habilitado el envio de correo a traves del puerto 587

Habilitar la autenticacion de los usuarios de correo
La linea

define(`confAUTH_OPTIONS', `A')dnl

la cual se encuentra habilitada por defecto permite realizar autenticacion de usuarios por el metodo PLAIN o mediante cifrado.
El metodo PLAIN consiste en autenticacion en texto plano
Dejar esta linea activada presenta cierto riesgo de seguridad ya que todas las contraseñas de los usuarios viajan en texto claro lo cual podria ser aprovechado por algun analizador de protocolos y robar las contraseñas.

Una manera de solucionar este problema seria comentando la anterior linea y en su lugar descomentar la siguiente.

define(`confAUTH_OPTIONS', `A p')dnl

Esta accion desactiva la autenticación en texto plano y en su lugar activa la autenticacion mediante cifrado, el unico inconveniente es que obligaria a sus clientes o usuarios a utilizar clientes de correo con soporte para autenticacion mediante cifrado

y no se te olvide:

define(`confAUTH_OPTIONS´, `A´)dn1 - es la auntenticación por metodo PLAIN o mediante cifrado
define(`confAUTH_OPTIONS´, `A p´)dn1 - es la autenticación nada más por cifrado

Adicionalmente ubique las siguientes lineas y tambien descomentelas

TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN
PLAIN')dnl

Configuracion del servidor dovecot

Por defecto,el servidor dovecot tiene deshabilitados los protocolos pop e imap lo cuales son necesarios para la
entrega de correo, la forma de habilitar estos protocolos es de la siguiente manera.

Edite el siguiente fichero con la ayuda de cualquier editor de textos
/etc/dovecot.conf

Ubique la siguiente linea
#protocols = imap imaps pop3 pop3s

Y solo borre las siguientes palabras asi como tambien la almohadilla de “#”
imaps pop3s

Al final debera lucir de la siguiente manera:
protocols = imap pop3

Guarde los cambios y salga de la terminal

Configuracion Avanzada de Sendmail

Limitando el numero de destinatarios de correo

La manera de establecer un numero maximo de destinatarios para un mensaje de correo electronico se hace
agregando la siguiente linea

define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl

justo debajo de la linea

dnl define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl

El numero 10 hace referencia al numero maximo de destinarios para un mensaje de coreo, tu puedes modificar
este valor segun tu conveniencia Al finalizar debera lucir de la sigueinte manera

dnl define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl

Limitando el tamaño de la cabecera de un correo

La manera de establecer un tamaño maximo de cabecera para un mensaje de correo electronico se hace agregando la siguiente linea

define(`confMAX_HEADERS_LENGTH', `10240')dnl

justo debajo de la linea

define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl

El numero 10240 es equivalente a 10Kb (Kilobytes),tu puedes modificar este valor segun tu conveniencia

Al finalizar debera lucir de la sigueinte manera

define(`confMAX_RCPTS_PER_MESSAGE', `10')dnl
define(`confMAX_HEADERS_LENGTH', `10240')dnl

Limitando el tamaño para un mensaje de correo

La manera de establecer un tamaño maximo para un mensaje de correo electronico se hace agregando la siguiente linea

define(`confMAX_MESSAGE_SIZE', `3075000')dnl

justo debajo de la linea

define(`confMAX_HEADERS_LENGTH', `10240')dnl

El numero 3075000 es equivalente a 3Mb (Megabytes),tu puedes modificar este valor segun tu conveniencia

Al finalizar debera lucir de la sigueinte manera

define(`confMAX_HEADERS_LENGTH', `10240')dnl
define(`confMAX_MESSAGE_SIZE', `3075000')dnl

Limitando el numero de procesos hijos en el servidor de correo

La forma de limitar el numero de procesos hijos que se permitirán simultáneamente en el servidor de correo sera de la siguiente manera:

Agrege la siguiente linea

define(`confMAX_DAEMON_CHILDREN', `5')dnl

justo debajo de la linea

define(`confMAX_MESSAGE_SIZE', `3075000')dnl

Al finalizar debera lucir de la sigueinte manera

define(`confMAX_MESSAGE_SIZE', `3075000')dnl
define(`confMAX_DAEMON_CHILDREN', `5')dnl

Limitando el numero de conexiones

La forma de limitar el numero de conexiones por segundo que se permitirán en el servidor de correo sera de la
siguiente manera:

Agrege la siguiente linea

define(`confCONNECTION_RATE_THROTTLE', `4')dnl

justo debajo de la linea

define(`confMAX_DAEMON_CHILDREN', `5')dnl

Al finalizar debera lucir de la sigueinte manera

define(`confMAX_DAEMON_CHILDREN', `5')dnl
define(`confCONNECTION_RATE_THROTTLE', `4')dnl

Alta de cuentas de correo

La forma en que dara de alta cuentas de correo para sus usuarios sera de la siguiente manera

# useradd -s /sbin/nologin nombreDelsuario

Asignando contraseñas a las cuentas de correo

La forma en que asignara contraseñas a las cuentas de correo sera a travez de dos fases.

La primera aplicando el siguiente comando

# passswd nombreDelsuario

y la segunda aplicando este otro

# saslpasswd2 nombreDelsuario

Iniciar , detener o reiniciar el servidor de Correo

Para iniciar el servidor de correo por primera vez solo deberá teclear en terminal el siguiente comando:

[root@ localhost ~]# /etc/init.d/sendmail start

Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el status en el que se encuentra
el servidor de correo. Estas opciones son:

start Inicia el servicio
stop Detiene el servicio
restart Reinicia el servicio.-La diferencia con reload radica en que al ejecutar un restart este mata todos los rocesos relacionado con el servicio y los vuelve a generar de nueva cuenta

reload Recarga el servicio.-La diferencia con restart radica en que al ejecutar un reload este solamente carga las
actualizaciones hechas al fichero de configuración del servicio sin necesidad de matar los procesos relacionados
con el mismo, por lo que podría entenderse que hace el cambio en caliente.

condrestart Reinicio Condicional.- Solamente se inicia si el servicio se encuentra ejecutándose.
status Da a conocer el estado en el que se encuentra el servicio

Como alternativa también podemos ocupar el siguiente comando para iniciar el servidor de correo
[root@ localhost ~]# service sendmail start

Y de igual manera podemos usar las opciones antes descritas en la tabla anterior.
Todo como root

Iniciar , detener o reiniciar el servidor Dovecot

Para iniciar el servidor de correo por primera vez solo deberá teclear en terminal el siguiente comando:

[root@ localhost ~]# /etc/init.d/dovecot start

Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el status en el que se encuentra
el servidor dovecot. Estas opciones son:

start Inicia el servicio
stop Detiene el servicio
restart Reinicia el servicio.-La diferencia con reload radica en que al ejecutar un restart este mata todos los procesos relacionado con el servicio y los vuelve a generar de nueva cuenta

reload Recarga el servicio.-La diferencia con restart radica en que al ejecutar un reload este solamente carga las
actualizaciones hechas al fichero de configuración del servicio sin necesidad de matar los procesos relacionados
con el mismo, por lo que podría entenderse que hace el cambio en caliente.

condrestart Reinicio Condicional.- Solamente se inicia si el servicio se encuentra ejecutándose.
status Da a conocer el estado en el que se encuentra el servicio

Como alternativa también podemos ocupar el siguiente comando para iniciar el servidor de correo
[root@ localhost ~]# service dovecot start

igual como root

Iniciar , detener o reiniciar el servicio de autenticacion

Para iniciar el servidor de correo por primera vez solo deberá teclear en terminal el siguiente comando:

[root@ localhost ~]# /etc/init.d/saslauthd start

Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el status en el que se encuentra
el servicio de autenticacion saslauthd. Estas opciones pueden ser consultadas en la siguiente tabla:

start Inicia el servicio
stop Detiene el servicio
restart Reinicia el servicio.-La diferencia con reload radica en que al ejecutar un restart este mata todos los procesos relacionado con el servicio y los vuelve a generar de nueva cuenta

reload Recarga el servicio.-La diferencia con restart radica en que al ejecutar un reload este solamente carga las
actualizaciones hechas al fichero de configuración del servicio sin necesidad de matar los procesos relacionados
con el mismo, por lo que podría entenderse que hace el cambio en caliente.

condrestart Reinicio Condicional.- Solamente se inicia si el servicio se encuentra ejecutándose.
status Da a conocer el estado en el que se encuentra el servicio

Como alternativa también podemos ocupar el siguiente comando para iniciar el servidor de correo
[root@ localhost ~]# service saslauthd star

miércoles, 11 de diciembre de 2013

Comandos de Linux

 Comandos de Linux

Indice:

  1. Información del Sistema
  2. Apagar (Reiniciar o Cerrar Sesión)
  3. Archivos y Directorios
  4. Encontrar archivos
  5. Montando un sistema de ficheros
  6. Espacio de Disco
  7. Usuarios y Grupos
  8. Permisos en Ficheros (Usa ”+” para colocar permisos y ”-” para eliminar)
  9. Atributos especiales en ficheros (Usa ”+” para colocar permisos y ”-” para eliminar)
  10. Archivos y Ficheros comprimidos
  11. Paquetes RPM (Red Hat, Fedora y similares)
  12. Actualizador de paquetes YUM (Red Hat, Fedora y similares)
  13. Paquetes Deb (Debian, Ubuntu y derivados)
  14. Actualizador de paquetes APT (Debian, Ubuntu y derivados)
  15. Ver el contenido de un fichero
  16. Manipulación de texto
  17. Establecer caracter y conversión de ficheros
  18. Análisis del sistema de ficheros
  19. Formatear un sistema de ficheros
  20. Trabajo con la SWAP
  21. Salvas (Backup)
  22. CD-ROM
  23. Trabajo con la RED ( LAN y Wi-Fi)
  24. Redes de Microsoft Windows (SAMBA)
  25. Tablas IP (CORTAFUEGOS)
  26. Monitoreando y depurando
  27. Otros comandos útiles

Información del sistema

  1. arch: mostrar la arquitectura de la máquina (1).
  2. uname -m: mostrar la arquitectura de la máquina (2).
  3. uname -r: mostrar la versión del kernel usado.
  4. dmidecode -q: mostrar los componentes (hardware) del sistema.
  5. hdparm -i /dev/hda: mostrar las características de un disco duro.
  6. hdparm -tT /dev/sda: realizar prueba de lectura en un disco duro.
  7. cat /proc/cpuinfo: mostrar información de la CPU.
  8. cat /proc/interrupts: mostrar las interrupciones.
  9. cat /proc/meminfo: verificar el uso de memoria.
  10. cat /proc/swaps: mostrar ficheros swap.
  11. cat /proc/version: mostrar la versión del kernel.
  12. cat /proc/net/dev: mostrar adaptadores de red y estadísticas.
  13. cat /proc/mounts: mostrar el sistema de ficheros montado.
  14. lspci -tv: mostrar los dispositivos PCI.
  15. lsusb -tv: mostrar los dispositivos USB.
  16. date: mostrar la fecha del sistema.
  17. cal 2011: mostrar el almanaque de 2011.
  18. cal 07 2011: mostrar el almanaque para el mes julio de 2011.
  19. date 041217002011.00: colocar (declarar, ajustar) fecha y hora.
  20. clock -w: guardar los cambios de fecha en la BIOS.

Apagar (Reiniciar Sistema o Cerrar Sesión)

  1. shutdown -h now: apagar el sistema (1).
  2. init 0: apagar el sistema (2).
  3. telinit 0: apagar el sistema (3).
  4. halt: apagar el sistema (4).
  5. shutdown -h hours:minutes &: apagado planificado del sistema.
  6. shutdown -c: cancelar un apagado planificado del sistema.
  7. shutdown -r now: reiniciar (1).
  8. reboot: reiniciar (2).
  9. logout: cerrar sesión.

Archivos y Directorios de linux

  1. cd /home: entrar en el directorio “home”.
  2. cd ..: retroceder un nivel.
  3. cd ../..: retroceder 2 niveles.
  4. cd: ir al directorio raíz.
  5. cd ~user1: ir al directorio user1.
  6. cd -: ir (regresar) al directorio anterior.
  7. pwd: mostrar el camino del directorio de trabajo.
  8. ls: ver los ficheros de un directorio.
  9. ls -F: ver los ficheros de un directorio.
  10. ls -l: mostrar los detalles de ficheros y carpetas de un directorio.
  11. ls -a: mostrar los ficheros ocultos.
  12. ls *[0-9]*: mostrar los ficheros y carpetas que contienen números.
  13. tree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(1)
  14. lstree: mostrar los ficheros y carpetas en forma de árbol comenzando por la raíz.(2)
  15. mkdir dir1: crear una carpeta o directorio con nombre ‘dir1′.
  16. mkdir dir1 dir2: crear dos carpetas o directorios simultáneamente (Crear dos directorios a la vez).
  17. mkdir -p /tmp/dir1/dir2: crear un árbol de directorios.
  18. rm -f file1: borrar el fichero llamado ‘file1′.
  19. rmdir dir1: borrar la carpeta llamada ‘dir1′.
  20. rm -rf dir1: eliminar una carpeta llamada ‘dir1′ con su contenido de forma recursiva. (Si lo borro recursivo estoy diciendo que es con su contenido).
  21. rm -rf dir1 dir2: borrar dos carpetas (directorios) con su contenido de forma recursiva.
  22. mv dir1 new_dir: renombrar o mover un fichero o carpeta (directorio).
  23. cp file1: copiar un fichero.
  24. cp file1 file2: copiar dos ficheros al unísono.
  25. cp dir /* .: copiar todos los ficheros de un directorio dentro del directorio de trabajo actual.
  26. cp -a /tmp/dir1 .: copiar un directorio dentro del directorio actual de trabajo.
  27. cp -a dir1: copiar un directorio.
  28. cp -a dir1 dir2: copiar dos directorio al unísono.
  29. ln -s file1 lnk1: crear un enlace simbólico al fichero o directorio.
  30. ln file1 lnk1: crear un enlace físico al fichero o directorio.
  31. touch -t 0712250000 file1: modificar el tiempo real (tiempo de creación) de un fichero o directorio.
  32. file file1: salida (volcado en pantalla) del tipo mime de un fichero texto.
  33. iconv -l: listas de cifrados conocidos.
  34. iconv -f fromEncoding -t toEncoding inputFile > outputFile: crea una nueva forma del fichero de entrada asumiendo que está codificado en fromEncoding y convirtiéndolo a ToEncoding.
  35. find . -maxdepth 1 -name *.jpg -print -exec convert ”{}” -resize 80×60 “thumbs/{}” \;: agrupar ficheros redimensionados en el directorio actual y enviarlos a directorios en vistas de miniaturas (requiere convertir desde ImagemagicK).

Encontrar archivos en linux

  1. find / -name file1: buscar fichero y directorio a partir de la raíz del sistema.
  2. find / -user user1: buscar ficheros y directorios pertenecientes al usuario ‘user1′.
  3. find /home/user1 -name \*.bin: buscar ficheros con extensión ‘. bin’ dentro del directorio ‘/ home/user1′.
  4. find /usr/bin -type f -atime +100: buscar ficheros binarios no usados en los últimos 100 días.
  5. find /usr/bin -type f -mtime -10: buscar ficheros creados o cambiados dentro de los últimos 10 días.
  6. find / -name \*.rpm -exec chmod 755 ‘{}’ \;: buscar ficheros con extensión ‘.rpm’ y modificar permisos.
  7. find / -xdev -name \*.rpm: Buscar ficheros con extensión ‘.rpm’ ignorando los dispositivos removibles como cdrom, pen-drive, etc.…
  8. locate \*.ps: encuentra ficheros con extensión ‘.ps’ ejecutados primeramente con el command ‘updatedb’.
  9. whereis halt: mostrar la ubicación de un fichero binario, de ayuda o fuente. En este caso pregunta dónde está el comando ‘halt’.
  10. which halt: mostrar la senda completa (el camino completo) a un binario / ejecutable.

Montando un sistema de ficheros

  1. mount /dev/hda2 /mnt/hda2: montar un disco llamado hda2. Verifique primero la existencia del directorio ‘/ mnt/hda2′; si no está, debe crearlo.
  2. umount /dev/hda2: desmontar un disco llamado hda2. Salir primero desde el punto ‘/ mnt/hda2.
  3. fuser -km /mnt/hda2: forzar el desmontaje cuando el dispositivo está ocupado.
  4. umount -n /mnt/hda2: correr el desmontaje sin leer el fichero /etc/mtab. Útil cuando el fichero es de solo lectura o el disco duro está lleno.
  5. mount /dev/fd0 /mnt/floppy: montar un disco flexible (floppy).
  6. mount /dev/cdrom /mnt/cdrom: montar un cdrom / dvdrom.
  7. mount /dev/hdc /mnt/cdrecorder: montar un cd regrabable o un dvdrom.
  8. mount /dev/hdb /mnt/cdrecorder: montar un cd regrabable / dvdrom (un dvd).
  9. mount -o loop file.iso /mnt/cdrom: montar un fichero o una imagen iso.
  10. mount -t vfat /dev/hda5 /mnt/hda5: montar un sistema de ficheros FAT32.
  11. mount /dev/sda1 /mnt/usbdisk: montar un usb pen-drive o una memoria (sin especificar el tipo de sistema de ficheros).

Espacio de Disco

  1. df -h: mostrar una lista de las particiones montadas.
  2. ls -lSr |more: mostrar el tamaño de los ficheros y directorios ordenados por tamaño.
  3. du -sh dir1: Estimar el espacio usado por el directorio ‘dir1′.
  4. du -sk * | sort -rn: mostrar el tamaño de los ficheros y directorios ordenados por tamaño.
  5. rpm -q -a –qf ‘%10{SIZE}t%{NAME}n’ | sort -k1,1n: mostrar el espacio usado por los paquetes rpm instalados organizados por tamaño (Fedora, Redhat y otros).
  6. dpkg-query -W -f=’${Installed-Size;10}t${Package}n’ | sort -k1,1n: mostrar el espacio usado por los paquetes instalados, organizados por tamaño (Ubuntu, Debian y otros).

Usuarios y Grupos en linux

  1. groupadd nombre_del_grupo: crear un nuevo grupo.
  2. groupdel nombre_del_grupo: borrar un grupo.
  3. groupmod -n nuevo_nombre_del_grupo viejo_nombre_del_grupo: renombrar un grupo.
  4. useradd -c “Name Surname ” -g admin -d /home/user1 -s /bin/bash user1: Crear un nuevo usuario perteneciente al grupo “admin”.
  5. useradd user1: crear un nuevo usuario.
  6. userdel -r user1: borrar un usuario (‘-r’ elimina el directorio Home).
  7. usermod -c “User FTP” -g system -d /ftp/user1 -s /bin/nologin user1: cambiar los atributos del usuario.
  8. passwd: cambiar contraseña.
  9. passwd user1: cambiar la contraseña de un usuario (solamente por root).
  10. chage -E 2011-12-31 user1: colocar un plazo para la contraseña del usuario. En este caso dice que la clave expira el 31 de diciembre de 2011.
  11. pwck: chequear la sintaxis correcta el formato de fichero de ‘/etc/passwd’ y la existencia de usuarios.
  12. grpck: chequear la sintaxis correcta y el formato del fichero ‘/etc/group’ y la existencia de grupos.
  13. newgrp group_name: registra a un nuevo grupo para cambiar el grupo predeterminado de los ficheros creados recientemente.

Permisos en Ficheros (Usa ”+” para colocar permisos y ”-” para eliminar)

  1. ls -lh: Mostrar permisos.
  2. ls /tmp | pr -T5 -W$COLUMNS: dividir la terminal en 5 columnas.
  3. chmod ugo+rwx directory1: colocar permisos de lectura ®, escritura (w) y ejecución(x) al propietario (u), al grupo (g) y a otros (o) sobre el directorio ‘directory1′.
  4. chmod go-rwx directory1: quitar permiso de lectura ®, escritura (w) y (x) ejecución al grupo (g) y otros (o) sobre el directorio ‘directory1′.
  5. chown user1 file1: cambiar el dueño de un fichero.
  6. chown -R user1 directory1: cambiar el propietario de un directorio y de todos los ficheros y directorios contenidos dentro.
  7. chgrp group1 file1: cambiar grupo de ficheros.
  8. chown user1:group1 file1: cambiar usuario y el grupo propietario de un fichero.
  9. find / -perm -u+s: visualizar todos los ficheros del sistema con SUID configurado.
  10. chmod u+s /bin/file1: colocar el bit SUID en un fichero binario. El usuario que corriendo ese fichero adquiere los mismos privilegios como dueño.
  11. chmod u-s /bin/file1: deshabilitar el bit SUID en un fichero binario.
  12. chmod g+s /home/public: colocar un bit SGID en un directorio –similar al SUID pero por directorio.
  13. chmod g-s /home/public: desabilitar un bit SGID en un directorio.
  14. chmod o+t /home/public: colocar un bit STIKY en un directorio. Permite el borrado de ficheros solamente a los dueños legítimos.
  15. chmod o-t /home/public: desabilitar un bit STIKY en un directorio.

Atributos especiales en ficheros (Usa ”+” para colocar permisos y ”-” para eliminar)

  1. chattr +a file1: permite escribir abriendo un fichero solamente modo append.
  2. chattr +c file1: permite que un fichero sea comprimido / descomprimido automaticamente.
  3. chattr +d file1: asegura que el programa ignore borrar los ficheros durante la copia de seguridad.
  4. chattr +i file1: convierte el fichero en invariable, por lo que no puede ser eliminado, alterado, renombrado, ni enlazado.
  5. chattr +s file1: permite que un fichero sea borrado de forma segura.
  6. chattr +S file1: asegura que un fichero sea modificado, los cambios son escritos en modo synchronous como con sync.
  7. chattr +u file1: te permite recuperar el contenido de un fichero aún si este está cancelado.
  8. lsattr: mostrar atributos especiales.

Archivos y Ficheros comprimidos

  1. bunzip2 file1.bz2: descomprime in fichero llamado ‘file1.bz2′.
  2. bzip2 file1: comprime un fichero llamado ‘file1′.
  3. gunzip file1.gz: descomprime un fichero llamado ‘file1.gz’.
  4. gzip file1: comprime un fichero llamado ‘file1′.
  5. gzip -9 file1: comprime con compresión máxima.
  6. rar a file1.rar test_file: crear un fichero rar llamado ‘file1.rar’.
  7. rar a file1.rar file1 file2 dir1: comprimir ‘file1′, ‘file2′ y ‘dir1′ simultáneamente.
  8. rar x file1.rar: descomprimir archivo rar.
  9. unrar x file1.rar: descomprimir archivo rar.
  10. tar -cvf archive.tar file1: crear un tarball descomprimido.
  11. tar -cvf archive.tar file1 file2 dir1: crear un archivo conteniendo ‘file1′, ‘file2′ y’dir1′.
  12. tar -tf archive.tar: mostrar los contenidos de un archivo.
  13. tar -xvf archive.tar: extraer un tarball.
  14. tar -xvf archive.tar -C /tmp: extraer un tarball en / tmp.
  15. tar -cvfj archive.tar.bz2 dir1: crear un tarball comprimido dentro de bzip2.
  16. tar -xvfj archive.tar.bz2: descomprimir un archivo tar comprimido en bzip2
  17. tar -cvfz archive.tar.gz dir1: crear un tarball comprimido en gzip.
  18. tar -xvfz archive.tar.gz: descomprimir un archive tar comprimido en gzip.
  19. zip file1.zip file1: crear un archivo comprimido en zip.
  20. zip -r file1.zip file1 file2 dir1: comprimir, en zip, varios archivos y directorios de forma simultánea.
  21. unzip file1.zip: descomprimir un archivo zip.

Paquetes RPM (Red Hat, Fedora y similares)

  1. rpm -ivh package.rpm: instalar un paquete rpm.
  2. rpm -ivh –nodeeps package.rpm: instalar un paquete rpm ignorando las peticiones de dependencias.
  3. rpm -U package.rpm: actualizar un paquete rpm sin cambiar la configuración de los ficheros.
  4. rpm -F package.rpm: actualizar un paquete rpm solamente si este está instalado.
  5. rpm -e package_name.rpm: eliminar un paquete rpm.
  6. rpm -qa: mostrar todos los paquetes rpm instalados en el sistema.
  7. rpm -qa | grep httpd: mostrar todos los paquetes rpm con el nombre “httpd”.
  8. rpm -qi package_name: obtener información en un paquete específico instalado.
  9. rpm -qg “System Environment/Daemons”: mostar los paquetes rpm de un grupo software.
  10. rpm -ql package_name: mostrar lista de ficheros dados por un paquete rpm instalado.
  11. rpm -qc package_name: mostrar lista de configuración de ficheros dados por un paquete rpm instalado.
  12. rpm -q package_name –whatrequires: mostrar lista de dependencias solicitada para un paquete rpm.
  13. rpm -q package_name –whatprovides: mostar la capacidad dada por un paquete rpm.
  14. rpm -q package_name –scripts: mostrar los scripts comenzados durante la instalación /eliminación.
  15. rpm -q package_name –changelog: mostar el historial de revisions de un paquete rpm.
  16. rpm -qf /etc/httpd/conf/httpd.conf: verificar cuál paquete rpm pertenece a un fichero dado.
  17. rpm -qp package.rpm -l: mostrar lista de ficheros dados por un paquete rpm que aún no ha sido instalado.
  18. rpm –import /media/cdrom/RPM-GPG-KEY: importar la firma digital de la llave pública.
  19. rpm –checksig package.rpm: verificar la integridad de un paquete rpm.
  20. rpm -qa gpg-pubkey: verificar la integridad de todos los paquetes rpm instalados.
  21. rpm -V package_name: chequear el tamaño del fichero, licencias, tipos, dueño, grupo, chequeo de resumen de MD5 y última modificación.
  22. rpm -Va: chequear todos los paquetes rpm instalados en el sistema. Usar con cuidado.
  23. rpm -Vp package.rpm: verificar un paquete rpm no instalado todavía.
  24. rpm2cpio package.rpm | cpio –extract –make-directories *bin*: extraer fichero ejecutable desde un paquete rpm.
  25. rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm: instalar un paquete construido desde una fuente rpm.
  26. rpmbuild –rebuild package_name.src.rpm: construir un paquete rpm desde una fuente rpm.

Actualizador de paquetes YUM (Red Hat, Fedora y similares)

  1. yum install package_name: descargar e instalar un paquete rpm.
  2. yum localinstall package_name.rpm: este instalará un RPM y tratará de resolver todas las dependencies para ti, usando tus repositorios.
  3. yum update package_name.rpm: actualizar todos los paquetes rpm instalados en el sistema.
  4. yum update package_name: modernizar / actualizar un paquete rpm.
  5. yum remove package_name: eliminar un paquete rpm.
  6. yum list: listar todos los paquetes instalados en el sistema.
  7. yum search package_name: Encontrar un paquete en repositorio rpm.
  8. yum clean packages: limpiar un caché rpm borrando los paquetes descargados.
  9. yum clean headers: eliminar todos los ficheros de encabezamiento que el sistema usa para resolver la dependencia.
  10. yum clean all: eliminar desde los paquetes caché y ficheros de encabezado.

Paquetes Deb (Debian, Ubuntu y derivados)

  1. dpkg -i package.deb: instalar / actualizar un paquete deb.
  2. dpkg -r package_name: eliminar un paquete deb del sistema.
  3. dpkg -l: mostrar todos los paquetes deb instalados en el sistema.
  4. dpkg -l | grep httpd: mostrar todos los paquetes deb con el nombre “httpd”
  5. dpkg -s package_name: obtener información en un paquete específico instalado en el sistema.
  6. dpkg -L package_name: mostar lista de ficheros dados por un paquete instalado en el sistema.
  7. dpkg –contents package.deb: mostrar lista de ficheros dados por un paquete no instalado todavía.
  8. dpkg -S /bin/ping: verificar cuál paquete pertenece a un fichero dado.

Actualizador de paquetes APT (Debian, Ubuntu y derivados)

  1. apt-get install package_name: instalar / actualizar un paquete deb.
  2. apt-cdrom install package_name: instalar / actualizar un paquete deb desde un cdrom.
  3. apt-get update: actualizar la lista de paquetes.
  4. apt-get upgrade: actualizar todos los paquetes instalados.
  5. apt-get remove package_name: eliminar un paquete deb del sistema.
  6. apt-get check: verificar la correcta resolución de las dependencias.
  7. apt-get clean: limpiar cache desde los paquetes descargados.
  8. apt-cache search searched-package: retorna lista de paquetes que corresponde a la serie «paquetes buscados».

Ver el contenido de un fichero en linux

  1. cat file1: ver los contenidos de un fichero comenzando desde la primera hilera.
  2. tac file1: ver los contenidos de un fichero comenzando desde la última línea.
  3. more file1: ver el contenido a lo largo de un fichero.
  4. less file1: parecido al commando ‘more’ pero permite salvar el movimiento en el fichero así como el movimiento hacia atrás.
  5. head -2 file1: ver las dos primeras líneas de un fichero.
  6. tail -2 file1: ver las dos últimas líneas de un fichero.
  7. tail -f /var/log/messages: ver en tiempo real qué ha sido añadido al fichero.

Manipulación de texto en linux

  1. cat file1 file2 .. | command <> file1_in.txt_or_file1_out.txt: sintaxis general para la manipulación de texto utilizando PIPE, STDIN y STDOUT.
  2. cat file1 | command( sed, grep, awk, grep, etc…) > result.txt: sintaxis general para manipular un texto de un fichero y escribir el resultado en un fichero nuevo.
  3. cat file1 | command( sed, grep, awk, grep, etc…) » result.txt: sintaxis general para manipular un texto de un fichero y añadir resultado en un fichero existente.
  4. grep Aug /var/log/messages: buscar palabras “Aug” en el fichero ‘/var/log/messages’.
  5. grep ^Aug /var/log/messages: buscar palabras que comienzan con “Aug” en fichero ‘/var/log/messages’
  6. grep [0-9] /var/log/messages: seleccionar todas las líneas del fichero ‘/var/log/messages’ que contienen números.
  7. grep Aug -R /var/log/*: buscar la cadena “Aug” en el directorio ‘/var/log’ y debajo.
  8. sed ‘s/stringa1/stringa2/g’ example.txt: reubicar “string1” con “string2” en ejemplo.txt
  9. sed ‘/^$/d’ example.txt: eliminar todas las líneas en blanco desde el ejemplo.txt
  10. sed ‘/ *#/d; /^$/d’ example.txt: eliminar comentarios y líneas en blanco de ejemplo.txt
  11. echo ‘esempio’ | tr ‘[:lower:]‘ ‘[:upper:]‘: convertir minúsculas en mayúsculas.
  12. sed -e ’1d’ result.txt: elimina la primera línea del fichero ejemplo.txt
  13. sed -n ‘/stringa1/p’: visualizar solamente las líneas que contienen la palabra “string1”.

Establecer caracter y conversión de ficheros

  1. dos2unix filedos.txt fileunix.txt: convertir un formato de fichero texto desde MSDOS a UNIX.
  2. unix2dos fileunix.txt filedos.txt: convertir un formato de fichero de texto desde UNIX a MSDOS.
  3. recode ..HTML < page.txt > page.html: convertir un fichero de texto en html.
  4. recode -l | more: mostrar todas las conversiones de formato disponibles.

Análisis del sistema de ficheros

  1. badblocks -v /dev/hda1: Chequear los bloques defectuosos en el disco hda1.
  2. fsck /dev/hda1: reparar / chequear la integridad del fichero del sistema Linux en el disco hda1.
  3. fsck.ext2 /dev/hda1: reparar / chequear la integridad del fichero del sistema ext 2 en el disco hda1.
  4. e2fsck /dev/hda1: reparar / chequear la integridad del fichero del sistema ext 2 en el disco hda1.
  5. e2fsck -j /dev/hda1: reparar / chequear la integridad del fichero del sistema ext 3 en el disco hda1.
  6. fsck.ext3 /dev/hda1: reparar / chequear la integridad del fichero del sistema ext 3 en el disco hda1.
  7. fsck.vfat /dev/hda1: reparar / chequear la integridad del fichero sistema fat en el disco hda1.
  8. fsck.msdos /dev/hda1: reparar / chequear la integridad de un fichero del sistema dos en el disco hda1.
  9. dosfsck /dev/hda1: reparar / chequear la integridad de un fichero del sistema dos en el disco hda1.

Formatear un sistema de ficheros

  1. mkfs /dev/hda1: crear un fichero de sistema tipo Linux en la partición hda1.
  2. mke2fs /dev/hda1: crear un fichero de sistema tipo Linux ext 2 en hda1.
  3. mke2fs -j /dev/hda1: crear un fichero de sistema tipo Linux ext3 (periódico) en la partición hda1.
  4. mkfs -t vfat 32 -F /dev/hda1: crear un fichero de sistema FAT32 en hda1.
  5. fdformat -n /dev/fd0: formatear un disco flooply.
  6. mkswap /dev/hda3: crear un fichero de sistema swap.

Trabajo con la SWAP

  1. mkswap /dev/hda3: crear fichero de sistema swap.
  2. swapon /dev/hda3: activando una nueva partición swap.
  3. swapon /dev/hda2 /dev/hdb3: activar dos particiones swap.

Salvas (Backup)

  1. dump -0aj -f /tmp/home0.bak /home: hacer una salva completa del directorio ‘/home’.
  2. dump -1aj -f /tmp/home0.bak /home: hacer una salva incremental del directorio ‘/home’.
  3. restore -if /tmp/home0.bak: restaurando una salva interactivamente.
  4. rsync -rogpav –delete /home /tmp: sincronización entre directorios.
  5. rsync -rogpav -e ssh –delete /home ip_address:/tmp: rsync a través del túnel SSH.
  6. rsync -az -e ssh –delete ip_addr:/home/public /home/local: sincronizar un directorio local con un directorio remoto a través de ssh y de compresión.
  7. rsync -az -e ssh –delete /home/local ip_addr:/home/public: sincronizar un directorio remoto con un directorio local a través de ssh y de compresión.
  8. dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr ‘dd of=hda.gz’: hacer una salva de un disco duro en un host remoto a través de ssh.
  9. dd if=/dev/sda of=/tmp/file1: salvar el contenido de un disco duro a un fichero. (En este caso el disco duro es “sda” y el fichero “file1”).
  10. tar -Puf backup.tar /home/user: hacer una salva incremental del directorio ‘/home/user’.
  11. ( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr ‘cd /home/share/ && tar x -p’: copiar el contenido de un directorio en un directorio remoto a través de ssh.
  12. ( tar c /home ) | ssh -C user@ip_addr ‘cd /home/backup-home && tar x -p’: copiar un directorio local en un directorio remoto a través de ssh.
  13. tar cf – . | (cd /tmp/backup ; tar xf – ): copia local conservando las licencias y enlaces desde un directorio a otro.
  14. find /home/user1 -name ‘*.txt’ | xargs cp -av –target-directory=/home/backup/ –parents: encontrar y copiar todos los ficheros con extensión ‘.txt’ de un directorio a otro.
  15. find /var/log -name ‘*.log’ | tar cv –files-from=- | bzip2 > log.tar.bz2: encontrar todos los ficheros con extensión ‘.log’ y hacer un archivo bzip.
  16. dd if=/dev/hda of=/dev/fd0 bs=512 count=1: hacer una copia del MRB (Master Boot Record) a un disco floppy.
  17. dd if=/dev/fd0 of=/dev/hda bs=512 count=1: restaurar la copia del MBR (Master Boot Record) salvada en un floppy.

CD-ROM

  1. cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force: limpiar o borrar un cd regrabable.
  2. mkisofs /dev/cdrom > cd.iso: crear una imagen iso de cdrom en disco.
  3. mkisofs /dev/cdrom | gzip > cd_iso.gz: crear una imagen comprimida iso de cdrom en disco.
  4. mkisofs -J -allow-leading-dots -R -V “Label CD” -iso-level 4 -o ./cd.iso data_cd: crear una imagen iso de un directorio.
  5. cdrecord -v dev=/dev/cdrom cd.iso: quemar una imagen iso.
  6. gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom -: quemar una imagen iso comprimida.
  7. mount -o loop cd.iso /mnt/iso: montar una imagen iso.
  8. cd-paranoia -B: llevar canciones de un cd a ficheros wav.
  9. cd-paranoia – ”-3”: llevar las 3 primeras canciones de un cd a ficheros wav.
  10. cdrecord –scanbus: escanear bus para identificar el canal scsi.
  11. dd if=/dev/hdc | md5sum: hacer funcionar un md5sum en un dispositivo, como un CD.

Trabajo con la RED ( LAN y Wi-Fi)

  1. ifconfig eth0: mostrar la configuración de una tarjeta de red Ethernet.
  2. ifup eth0: activar una interface ‘eth0′.
  3. ifdown eth0: deshabilitar una interface ‘eth0′.
  4. ifconfig eth0 192.168.1.1 netmask 255.255.255.0: configurar una dirección IP.
  5. ifconfig eth0 promisc: configurar ‘eth0′en modo común para obtener los paquetes (sniffing).
  6. dhclient eth0: activar la interface ‘eth0′ en modo dhcp.
  7. route -n: mostrar mesa de recorrido.
  8. route add -net 0/0 gw IP_Gateway: configurar entrada predeterminada.
  9. route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1: configurar ruta estática para buscar la red ’192.168.0.0/16′.
  10. route del 0/0 gw IP_gateway: eliminar la ruta estática.
  11. echo “1” > /proc/sys/net/ipv4/ip_forward: activar el recorrido ip.
  12. hostname: mostrar el nombre del host del sistema.
  13. host www.example.com: buscar el nombre del host para resolver el nombre a una dirección ip(1).
  14. nslookup www.example.com: buscar el nombre del host para resolver el nombre a una direccióm ip y viceversa(2).
  15. ip link show: mostar el estado de enlace de todas las interfaces.
  16. mii-tool eth0: mostar el estado de enlace de ‘eth0′.
  17. ethtool eth0: mostrar las estadísticas de tarjeta de red ‘eth0′.
  18. netstat -tup: mostrar todas las conexiones de red activas y sus PID.
  19. netstat -tupl: mostrar todos los servicios de escucha de red en el sistema y sus PID.
  20. tcpdump tcp port 80: mostrar todo el tráfico HTTP.
  21. iwlist scan: mostrar las redes inalámbricas.
  22. iwconfig eth1: mostrar la configuración de una tarjeta de red inalámbrica.
  23. whois www.example.com: buscar en base de datos Whois.

Redes de Microsoft Windows (SAMBA)

  1. nbtscan ip_addr: resolución de nombre de red bios.
  2. nmblookup -A ip_addr: resolución de nombre de red bios.
  3. smbclient -L ip_addr/hostname: mostrar acciones remotas de un host en windows.

Tablas IP (CORTAFUEGOS)

  1. iptables -t filter -L: mostrar todas las cadenas de la tabla de filtro.
  2. iptables -t nat -L: mostrar todas las cadenas de la tabla nat.
  3. iptables -t filter -F: limpiar todas las reglas de la tabla de filtro.
  4. iptables -t nat -F: limpiar todas las reglas de la tabla nat.
  5. iptables -t filter -X: borrar cualquier cadena creada por el usuario.
  6. iptables -t filter -A INPUT -p tcp –dport telnet -j ACCEPT: permitir las conexiones telnet para entar.
  7. iptables -t filter -A OUTPUT -p tcp –dport http -j DROP: bloquear las conexiones HTTP para salir.
  8. iptables -t filter -A FORWARD -p tcp –dport pop3 -j ACCEPT: permitir las conexiones POP a una cadena delantera.
  9. iptables -t filter -A INPUT -j LOG –log-prefix “DROP INPUT”: registrando una cadena de entrada.
  10. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE: configurar un PAT (Puerto de traducción de dirección) en eth0, ocultando los paquetes de salida forzada.
  11. iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp –dport 22 -j DNAT –to-destination 10.0.0.2:22: redireccionar los paquetes diriguidos de un host a otro.

Monitoreando y depurando

  1. top: mostrar las tareas de linux usando la mayoría cpu.
  2. ps -eafw: muestra las tareas Linux.
  3. ps -e -o pid,args –forest: muestra las tareas Linux en un modo jerárquico.
  4. pstree: mostrar un árbol sistema de procesos.
  5. kill -9 ID_Processo: forzar el cierre de un proceso y terminarlo.
  6. kill -1 ID_Processo: forzar un proceso para recargar la configuración.
  7. lsof -p $$: mostrar una lista de ficheros abiertos por procesos.
  8. lsof /home/user1: muestra una lista de ficheros abiertos en un camino dado del sistema.
  9. strace -c ls >/dev/null: mostrar las llamadas del sistema hechas y recibidas por un proceso.
  10. strace -f -e open ls >/dev/null: mostrar las llamadas a la biblioteca.
  11. watch -n1 ‘cat /proc/interrupts’: mostrar interrupciones en tiempo real.
  12. last reboot: mostrar historial de reinicio.
  13. lsmod: mostrar el kernel cargado.
  14. free -m: muestra el estado de la RAM en megabytes.
  15. smartctl -A /dev/hda: monitorear la fiabilidad de un disco duro a través de SMART.
  16. smartctl -i /dev/hda: chequear si SMART está activado en un disco duro.
  17. tail /var/log/dmesg: mostrar eventos inherentes al proceso de carga del kernel.
  18. tail /var/log/messages: mostrar los eventos del sistema.

Otros comandos útiles

  1. apropos …keyword: mostrar una lista de comandos que pertenecen a las palabras claves de un programa; son útiles cuando tú sabes qué hace tu programa, pero de sconoces el nombre del comando.
  2. man ping: mostrar las páginas del manual on-line; por ejemplo, en un comando ping, usar la opción ‘-k’ para encontrar cualquier comando relacionado.
  3. whatis …keyword: muestra la descripción de lo que hace el programa.
  4. mkbootdisk –device /dev/fd0 `uname -r`: crear un floppy boteable.
  5. gpg -c file1: codificar un fichero con guardia de seguridad GNU.
  6. gpg file1.gpg: decodificar un fichero con Guardia de seguridad GNU.
  7. wget -r www.example.com: descargar un sitio web completo.
  8. wget -c www.example.com/file.iso: descargar un fichero con la posibilidad de parar la descargar y reanudar más tarde.
  9. echo ‘wget -c www.example.com/files.iso‘ | at 09:00: Comenzar una descarga a cualquier hora. En este caso empezaría a las 9 horas.
  10. ldd /usr/bin/ssh: mostrar las bibliotecas compartidas requeridas por el programa ssh.
  11. alias hh=’history’: colocar un alias para un commando –hh= Historial.
  12. chsh: cambiar el comando Shell.
  13. chsh –list-shells: es un comando adecuado para saber si tienes que hacer remoto en otra terminal.
  14. who -a: mostrar quien está registrado, e imprimir hora del último sistema de importación, procesos muertos, procesos de registro de sistema, procesos activos producidos por init, funcionamiento actual y últimos cambios del reloj del sistema.