lunes, 28 de abril de 2008

Flisol 2008 Caaguazú

El pasado sábado 26 de abril se realizo la tercera Edición de la Flisol Caaguazú, con la participación de más de 100 personas.

El evento comenzó con un retraso de una hora, dando comienzo a las 14 hs, con las palabras del maestro de ceremonia Lic. Adalberto Arevalos, luego de una breve introducción al Evento, el Lic. Rubén Mercado realizo la presentación de introducción a GNU/Linux.


La segunda presentación estuvo a cargo del Pastor, Rodolfo Arce que dio una introducción a GNU/Linux con su estilo particular, pasando luego a realizar su presentación de Seguridad en Sistemas Operativos.


El momento mas emociónante del evento llego con la presentación del Kubuntu con Kde4 que lo hiciera Rodolfo Arce, seguida de la Presentación de Escritorios 3D en Mandriva 2008 de parte de Ángel y Cristian. Para pasar al final del evento con la presentación de Slax 6.03 booteando desde un pendrive y luego desde la memoria de un teléfono celular a cargo de Richard Acosta (wily001) y Rodolfo Arce.


Al final del Evento se regalaron remeras con el logo del evento y cedes de Kubuntu a los participantes.

Fotos del Evento:








jueves, 24 de abril de 2008

Ubuntu 8.04 LTS Hardy Heron

Finalmente el día esperado día llegó y hoy ya se anunció la disponibilidad de la versión definitiva de Ubuntu 8.04 LTS (Long Term Support) "Hardy Heron" en sus ediciones Desktop y Server. Algunas de sus novedades inclyen: Kernel 2.6.24 con mejoras sustanciales en sistemas de 64 bits, X.org 7.3 con nueva autoconfiguración, ufw (Uncomplicated Firewall), Likewise Open para una mejor integración con redes Active Directory, umenu para instalar el sistema en una partición a través de Windows usando Wubi, Firefox 3.0 Beta 5 con una renovada página de inicio y mucho más.

Como siempre, el resto de las distribuciones derivadas de Ubuntu también se actualizan a esta nueva versión simultáneamente, incluyendo a Kubuntu, Edubuntu (ahora Ubuntu Education Edition), Xubuntu, Ubuntu Studio y Mythbuntu.

Recordemos que por tratarse de una versión "LTS", la edición Desktop de Hardy Heron será soportada por 3 años (hasta el 2011) y la edición Server por 5 años (hasta el 2013). Pero como sabemos, la exepción es Kubuntu 8.04, que tendrá un ciclo de soporte normal por 18 meses para su versión con KDE 3.58.

De acuerdo a su calendario de lanzamientos, la versión 8.04.1 debería estar disponible el próximo 3 de Julio, corrigiendo los errores que se reporten hasta ese momento. A los usuarios de la anterior versión LTS, Ubuntu 6.06 "Dapper Drake", se les aconseja esperar hasta esa v8.04.1 antes de actualizarse.

viernes, 4 de abril de 2008

Instalar DHCP

En este documento voy a tratar de explicar como instalar y configurar un servidor de dhcp en tu GNU/Linux. El servidor particular del que voy a hablar es el ISC DHCP versión 3.

1. Preliminares

Un DHCP (Dynamic Host Configuration Protocol) es un demonio que asigna direcciones IP dinámicas a equipos que se conectan a la red. Es muy útil y cómodo en redes cuyas terminales cambian día a día en miembros y número, como es el caso de las laptops que se traen y llevan al trabajo. Si se tiene una red con seis o menos equipos, no es necesario un DHCP.

2. Instalación.

a. Mediante el tarball.

Descarga la última versión:

# wget ftp://ftp.nominum.com/pub/isc/dhcp/dhcp-latest.tar.gz

Descomprímimos:

# tar -xzvf dhcp-version.tar.gz

Configuración

# cd dhcp-version

# ./configure

Compila e instala

# make

# make install <--(para este paso deberás ser root)

b. Mediante rpms (Redhat, Mandrake, Suse,...)

Descarga el paquete correspondiente dhcpd-version.rpm e instálalo

# rpm -ivh dhcpd-version.rpm

c. Mediante debs (Debian)

# apt-get install dhcp3-server

Te instalará también dhcp3-common y quizás alguna dependencia más, también te preguntará la interface donde el DHCP "escuchara" las peticiones, tipicamente es la "eth0".

3. Configuración básica.

Lo primero es asegurarnos que nuestra interface ethernet es multicast, al hacer "ifconfig -a" verá algo somo esto:

eth0 Link encap:10Mbps Ethernet HWaddr 00:C0:4F:D3:C4:62
inet addr:183.217.19.43 Bcast:183.217.19.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2875542 errors:0 dropped:0 overruns:0
TX packets:218647 errors:0 dropped:0 overruns:0
Interrupt:11 Base address:0x210

Si ve la palabra MULTICAST todo está bien, de otra manera deberá recompilar su kernel.

El fichero de configuración es dhcpd.conf. En Debian está en /etc/dhcp3/, en el resto de distribuciones puede variar su localización, para encontrarlo teclee "ifconfig / -name dhcpd.cponf".

Vamos a comentar las principales opciones de configuración.

# El nombre del dominio

option domain-name "tudominio.com";

# Los servidores de dns que ha de utilizar

option domain-name-servers 192.168.1.2, tu.isp.ns.server;

# Tiempo por defecto y máximo que se asigna una ip

default-lease-time 600;

max-lease-time 7200;

# Si el servidor es el oficial para la red

authoritative;

# Definición de una red local

subnet 192.168.1.0 netmask 255.255.255.0 {

# Rango de ips disponibles para asignación por dhcp

range 192.168.1.100 192.168.1.150;

# Gateway

option routers 192.168.1.1;

# Dirección de broadcast

option broadcast-address 192.168.1.255;

# Servidor WINS

option netbios-name-servers 192.168.1.2;

}

# Asignación de una ip fija a un ordenador concreto (se pueden poner tantas como se quiera)

host unofijo {

# Dirección MAC de la tarjeta de red.

hardware ethernet 00:D0:59:32:AF:6B;

# IP asignada

fixed-address 192.168.1.99;

}

La dirección MAC de la tarjeta de red la puedes obtener con "ifconfig" en linux o "ipconfig /all" en dos/windows

Reiniciamos:

4. Configuración de los clientes.

a. Windows. En la configuración de red -> propiedades de tcp/ip, has de seleccionar 'Obtener una dirección IP automáticamente' y 'Obtener la dirección del servidor DNS automáticamente'.

b. GNU/Linux. Has de instalar el dhcp-client/dhcpcd/pump/dhclient (según distribución). Las instrucciones son similares a las del server. Tras ello hay que configurar la tarjeta de red para que use dhcp y asegurarse de que el cliente está arrancado. No se como se hace en las demás distribuciones, pero en debian para configurar la tarjeta basta con poner en /etc/network/interfaces las siguientes líneas (suponiendo la tarjeta eth0, que es lo habitual):

auto eth0

iface eth0 inet dhcp

5. Actualización automática del dns.

Se puede configurar el servidor dhcp para que actualice automáticamente el dns con las ips que va asignando/desasignando.

Como esto requiere tocar la configuración tanto del dhcp como del dns, lo completaré en breve.

Otro ejemplo de dhcpd.conf:

server-identifier rennie.internal.lan;

default-lease-time 28800;

max-lease-time 86400;

option domain-name "internal.lan";

option domain-name-servers ns.internal.lan;

option routers 192.168.1.1;

ddns-updates on;

ddns-update-style interim;

ddns-domainname "internal.lan";

ddns-rev-domainname "in-addr.arpa";

subnet 192.168.1.0 netmask 255.255.255.0 {

range 192.168.1.100 192.168.1.200;

}

include "/etc/rndc.key";

zone internal.lan. {

primary 127.0.0.1;

key rndckey;

}

zone 1.168.192.in-addr.arpa {

primary 127.0.0.1;

key rndckey;

}

Cómo Configurar Postfix 1.1.x con SASL.

Software requerido:

Se recomienda utilizar al menos las siguientes versiones de software. No utilice versiones inferiores.

  • postfix-1.1.12
  • cyrus-sasl-2.1.10
  • cyrus-sasl-plain-2.1.10
  • cyrus-sasl-md5-2.1.10
  • imap-2001a

Antes de continuar verifique siempre la existencia posibles actualizaciones de seguridad. Para Red Hat Linux 8.0 y 9 hay paquetería de actualización en los siguientes enlaces:

Si utiliza apt para RPM, solo bastará ejecutar:

apt-get update
apt-get install postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5 imap

Sustituir Sendmail con Postfix en el sistema.

Si utiliza distribuciones como Red Hat Linux 9 o Yellow Dog Linux 3.0, solo necesitará utilizar el comando redhat-switch-mail, el cual se encargará de realizar todos los cambios pertinentes en el sistema para cambiar de Sendmail hacia Postfix como MTA predeterminado.

SASL.

¿Que es SASL?

SASL es un método para añadir soporte para autenticación a los protocolos como

Procedimientos

Edite /usr/lib/sasl/smtpd.conf y verifique que esté el siguiente contenido:

pwcheck_method: sasldb

Para activar el soporte SASL, se debe asignar al menos una contraseña a cualquier cuenta de usuario en el sistema.

/usr/sbin/saslpasswd -c usuario1

Debido a que Postfix gtrabaja por defecto con chroot(), y es conveniente que siga haciendolo así, es perferible mover /etc/sasldb hacia la ruta acequible para postfix que corresponde a /var/spool/postfix/etc/sasldb:

mv /etc/sasldb /var/spool/postfix/etc/sasldb

A fin de mantener un nivel de seguridad aceptable y permitir al mismo tiempo que ostfix pueda acceder al fichero de contraseñas, debemos asignar nuevos permisos a /var/spool/postfix/etc/sasldb:

chmod 640 /var/spool/postfix/etc/sasldb
chgrp postfix /var/spool/postfix/etc/sasldb

Lo antrerior designa permisos de lectura y escritura para root y de solo lectura para el usuario postfix.

Crear enlace simbólico para poder utilizar el comando saslpasswd normalmente y no tener que realizar el tedioso procedimiento de tener que copiar de nuevo dicho fichero cada vez que se de da alta o se modifique una cuenta.

ln -s /var/spool/postfix/etc/sasldb /etc/

De de alta todas las cuentas de usuario restantes:

/usr/sbin/saslpasswd -c usuario2
/usr/sbin/saslpasswd -c usuario3
Etc.

Levantar el demonio saslauthd y añadirlo a los servicios activos:

/sbin/service saslauthd start
/sbin/chkconfig saslauthd on

IMAP y POP3

Configuraremos de una vez el protocolo mediante el cual el usuario recuperará su correo. Puede utilizarse IMAP (Internet Message Access Protocol) o bien POP3 (Post Office Protocol, versión 3) o bien ambos. Si se elige IMAP, el todo el correo pemanecerá en el servidor hasta que sea eliminado explicitamente. Si se utiliza POP3, el correo será descargado por completo por medio del clietne del correo hacia la máquina del usuario.

Para habilitar uno u otro protocolo, o ambos, utilizaremos el comando chkconfig:

chkconfig imap on
chkconfig ipop3 on

Postfix.

¿Que es Postfix?

Postfix es un MTA, que es acrónimo de "Mail Transport Agent" y que a su vez significa "Agente de Transporte de Correo". Postfix fue desarrollado como un reemplazo para Sendmail. Postfix es la versión libre de Secure Mailer de IBM cuyo desarrollo fue iniciado por Wietse Vename en el T.J. Research Lab propiedad de IBM.

Postfix es una magnífica alternativa hacia Sendmail, el cual desafortunadamente posee un pésimo historial de seguridad. ¿Por que se sigue usando Sendmail? Porque viene incluido como MTA por defcto en la mayoría de las distribuciones de Linux y otros sabores de UNIX. Postfix es menos complicado de configurar, es más rápido, fácil de administar y seguro.

Postfix trabaja por defecto dentro de una jaula (chroot) localizada en /var/spoo/postfix, y por tal motivo es todavía más seguro reduciendo enormemente los riesgos para el sistema en el caso del surgimiento de una vulnerabilidad.

Procedimientos.

Editar al final del fichero /etc/postfix/aliases la línea que por defecto especifica como alias de root a postfix, lo cual se debe cambiar y definir en su lugar una cuenta de usuario válida. ¡Eso es algo muy importante!

root:          usuario

Al terminar, ejecute el comando newaliases a fin de convertir /etc/postfix/aliases en /etc/postfix/aliases.db.

newaliases

Editar /etc/postfix/main.cf y donde se definirán algunas variables.

Redundar el nombre del servidor, el cual también debe ser un nombre de dominio completamente resuelto por un DNS:

myhostname = mail.midominio.com

Definase además el dominio a utilizar.

mydomain = midominio.com

Redundar el dominio a utilizar para los mensajes salientes. Por defecto se añade $myhostname, pero si así se desea, pude establecerse $mydomain.

myorigin = $myhostname

En Red Hat Linux se establece localhost como única interfaz para escuchar peticiones. Puede comentarse la línea, puesto que Postfix escuchará peticiones por todas las interfaces por defecto:

# inet_interfaces = localhost

Defina los dominios a adminstrar:

mydestination = $myhostname, localhost.$mydomain, dominio.virtual

Defina los equipos a los que se permitirá enviar libremente el correo a través de postfix:

mynetworks = 192.168.1.0/24, 127.0.0.0/8

Si desea incrementar el nivel de seguridad o bien simplemente le interesa utilizar el método de autenticación que se explica más adelante, puede definir una lista de IP contenida en un fichero, el cual incluirá además de las IP propias del servidor y las de aquellos equipos a los que verdaderamente se permitirá enviar correo libremente a través de postfix:

mynetworks = $config_directory/mynetworks

Un ejemplo del contenido de mynetworks sería:

127.0.0.0/8
192.168.1.254

Si se utiliza una dirección IP pública, como por ejemplo 148.240.39.174, nunca se defina el segmento de este en mynetworks (148.240.39.0/24), ya que de otro modo cualquier otro equipo de dicha red tenría permitido hacer uso del servidor de correo.

Redundemos los dominios que se permite para enviar correo designando la variable $mydestination:

relay_domains = $mydestination

A fin de poder aprovechar las funciones de filtrado y administración del correo que posee procmail, defina en la ruta donde se localiza éste:

mailbox_command = /usr/bin/procmail

Si se va a autilizar autenticación, debe definirse lo siguiente:

smtpd_sasl_auth_enable = yes
smtp_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtp_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtpd_recipient_restrictions = 
               permit_sasl_authenticated,
               permit_mynetworks,
               reject_unknown_client,
               check_relay_domains

Crear el fichero /etc/postfix/saslpass y definir una cuenta específica por cada dominio administrado que además deberá autenticar escribiendo la contraseña correspondiente y que previamente se asignó con el comando saslpasswd.

mail.midominio.com     dominio1@mail.midominio.com:clave-del-usuario
dominio.virtual        dominio2@dominio.virtual:clave-del-usuario

Se deben crear cuentas en el sistema para este fin particular, y no olvidar que a fin de poder ser utilizadas por Postfix, se asignan las contraseñas para dichas cuentas con el comando saslpasswd.

Se debe convertir /etc/postfix/saslpass a /etc/postfix/saslpass.db

postmap /etc/postfix/saslpass

Asignar permisos apropiados a /etc/postfix/saslpass y /etc/postfix/saslpass.db

chmod 600 /etc/postfix/saslpass*

La configuración ha concluído, y solo resta arrancar o reiniciar Postfix.

service postfix restart

Alta de las cuentas de correo.

Las cuentas de correo deben de darse de alta sin acceso a shell, recordando que, a diferencia de los protocolos IMAP o POP3, al acceso hacia el protocolo

useradd -s /bin/false -c "Nombre del usuario" usuario
saslpasswd -c usuario

Si necesita cambiar la contraseña a cualquier usuario, utilice el comando saslpasswd sin parámetros adicionales:

saslpasswd usuario

Si desea dar de baja la contrseña de cualquier usuario, utilice el siguiente comando:

saslpasswd -d usuario

Finalmente, para poder recuperar el correo ya sea a través de IMAP o POP3, si será necesario asignar una contraseña con el comando passwd:

passwd usuario

Probando el servicio SMTP.

telnet mail.midominio.com 25

Lo anterio devuelve la siguiente salida:

Trying 192.168.1.254...
Connected to mail.midominio.com.
Escape character is '^]'.
220 mail.midominio.com ESMTP Postfix

Verifique comando "helo" para el dominio

helo mail.midominio.com

Lo anterior devuleve lo siguiente:

250 mail.midominio.com

Verifique funciones del servidor con comando "ehlo"

ehlo mail.midominio.com

Lo anterior debe devolver algo como lo siguiente.

250-mail.midominio.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME

Note las dos líneas que especifican los métodos de autenticación.

250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5
250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5

Ambas especifican los métodos soportados. La segunda particularmente se utiliza para los clientes de correo electrónico que autentican con errores o bien con el viejo y obsoleto protocolo "AUTH=PLAIN", como sería el caso de Outlook Express 4.

Para salir del shell, ejecute el comando "quit".

Solo resta probar la configuraciñon del servidor de correo con cualquier cliente de correo electrónico, el cual deberá de configurarse con soporte para autenticación para el protocolo

Configuración SMTP para Evolution.

Parámetros adicionales para Postfix.

Hay algunos parámetros adicionales para /etc/postfix/main.cf que permitirán controlar mejor el comportamiento del servidor de correo de manera sencilla.

mailbox_size_limit

Si se desea limitar el tamaño máximo de los buzones de correo, puede hacerse a través de mailbox_size_limit asignando cualquier valor deseado en bytes. Por ejemplo, si se quiere limitar el tamaño de los buzones de correo a 20 MB, por supuesto factorizando por 1024, se utilizaría la siguiente línea:

mailbox_size_limit = 20480000

message_size_limit

Si se desea limitar el tamaño máximo de un mensaje de correo electrónico, puede hacerse a través de message_size_limit. Por ejemplo, si se quiere limitar el tamaño máximo de un mensaje a 5 MB, se utilizaría la siguiente línea:

message_size_limit = 5120000

recipient_canonical_maps

Si se desea transformar las direcciones de correo externas en direcciones de correo internas, se debe añadir la siguiente línea:

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

Si por ejemplo, entregar el correo para webmaster@midominio.com en la cuenta local pepe y webmaster@dominio.virtual en la cuenta local pedro, dentro de /etc/postfix/sender_canonical debería ponerse lo siguiente:

webmaster@midominio.com               pepe
webmaster@dominio.virtual      pedro

Al terminar de editar el fichero, se debe ejecutar el siguiente comando para convertir /etc/postfix/recipient_canonical en /etc/postfix/recipient_canonical.db:

postmap /etc/postfix/recipient_canonical

sender_canonical_maps

Si se desea transformar direcciones de correo internas en direcciones de correo externas, se debe añadir la siguiente línea:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Por ejemplo, si se tiene un dominio inválido o no registrado como sería miredlocal.org, y se desea que el correo emitido desde la cuenta julio salga como soporte@midominio.com, y ss desea que el correo emitido por pablo salga como soporte@dominio.virtual, /etc/postfix/recipient_canonical debería ponerse lo siguiente:

julio   soporte@midominio.com
pablo   soporte@dominio.virtual

Al terminar de editar el fichero, se debe ejecutar el siguiente comando para convertir /etc/postfix/sender_canonical en /etc/postfix/sender_canonical.db:

postmap /etc/postfix/sender_canonical

Manejo del Spam y correo proveniente de fuentes indeseables.

check_client_access

Hay varias formas de hacer frente al Spam y correo proveniente de fuentes indeseables. Una es a través del parámetro check_client_access, con el cual se define la localización del fichero que contendrá las tablas de de control de acceso.

check_client_access = hash:/etc/postfix/access

/etc/postfix/access contendrá una lista de direcciones IP, nombres de dominios, nombres de equipos y direcciones de correo electrónico. Puede definirse si se accepta o de rechaza explícitamente el correo proveniente de los elementos de dicha lista. A continuación se muestran distintos ejemplos:

El valor "OK" específica aceptar explícitamente correo.

amigo@algundominio.com         OK
otroamigo@otrodominio.com      OK

El valor "REJECT" rechaza todo el correo proveniente y dirigido hacia las direcciones especificadas:

#Rechaza correo de las siguientes direcciones y dominios
spammer@productoinutil.com     REJECT
dominiohostil.net              REJECT
enviosmasivos.com              REJECT
masivo.com                     REJECT
209.61.129.8                   REJECT
 
#rechaza el correo proveniente de todo el segmento 172.16.18
172.16.18                      REJECT

Cualquier código "5xx" significa error fatal e indica al cliente de correo electrónico no intentar de nuevo. A diferencia de REJECT, que rechaza la entrega del mensaje, un código 550, por ejemplo, rebota el mensaje incluyendo una parte del contenido original.

proveedor@necio.com    550 No me interesan sus productos
holgazan@flojo.com     554 Ponte a hacer algo util

Cualquier código "4xx" significa que el cliente de correo electrónico debe reintentar más tarde.

lista-de-correo@undominio.org  450 Estamos realizando mantenimiento

smtpd_client_restrictions y listas negra de servicio de nombres de dominio (DNSBL)

Anteriormente se había establecido la variable smtpd_client_restrictions con los valores permit_sasl_authenticated, permit_mynetworks y check_relay_domains, los cuales son necesarios para un nivel de seguridad aceptable si se utiliza autenticación para el servicio de

smtpd_client_restrictions = 
               permit_sasl_authenticated,
               permit_mynetworks,
               check_relay_domains,
               reject_unknown_client, 
               reject_maps_rbl

A continuación se añaden las definiciones para las listas negras que se desee utilizar o las que se hayan contratado:

maps_rbl_domains =
               relays.ordb.org,
               opm.blitzed.org,
               list.dsbl.org,
               sbl.spamhaus.org,
               relays.mail-abuse.org,
               cbl.abuseat.org

Agregar muchas listas ciertamente garantiza un mínimo de Spam, pero significa también que el correo tardará mucho más tiempo en validarse y entregarse en los buzones de correo. Pude llegar a demorar hasta varios minutos después de el envío desde el cliente de correo electrónico. Recomendamos elegir dos o tres listas negras a lo sumo.

smtpd_helo_required y stmpd_helo_restrictions

Por lo general los programas utilizados para enviar spam nunca envían comando helo al conectarse al servidor, o bien lo hacen desde servidores sin un registro MX o A en un DNS. Por tal motivo es buena idea habilitar las retricciones que negarán el acceso a cualquier cliente de correo que no envíe comando helo

smtpd_helo_required = yes
stmpd_helo_restrictions = reject_unknown_hostname

Nota: Es importante no caer en el error común de confundir stmpd_helo_restrictions = reject_unknown_hostname con smtpd_client_restrictions = reject_unknown_client.

Bibliografía.

Referencias.

  • RFC2821: Simple Mail Transfer Protocol (SMTP).
  • RFC2060: Internet Message Access Protocol (IMAP) Version 4rev1.
  • RFC1939: Post Office Protocol Version 3 (POP3).

Flisol 2008 "Caaguazu Paraguay"

El Grupo de Usuarios de Linux de Caaguazú Paraguay , realizara el proximo 26 de abril la Flisol, como tambien se realizaran en las Ciudadades de Asunción, Fernado de la Mora, Cuidad del Este y Carapegua..

Wiki del Evento:
http://www.flisol.net/FLISOL2008

Wiki de la Ciudad:
http://flisol.info/FLISOL2008/Paraguay/Caaguazu