Archive for octubre, 2008

Como instalar un server de DNS con BIND en linux

Posted in Curso Adm. Servidores, Servidores on octubre 31st, 2008 by Itimag – Be the first to comment

Continuando con el Curso de Administración de Servidores, hoy toca ver como instalar un servidor bind en  una distribución basada en Debian (Debian etch, Ubuntu, Kubuntu, etc.)

En pocas palabras, ¿Qué hace un servidor de DNS?

Es el encargado de convertir distintos nombres de dominio (Ej: www.itimag.net) en su ip. Por lo tanto, cada vez que accedemos a un servidor mediante un dominio de internet, pasamos por un servidor de dns que se encarga de decirnos cúal es la ip del equipo en la que se encuentra la web a la que estamos accediendo.

Pasemos a la acción. Para instalar bind, ejecutamos el siguiente comando en una consola o shell:

su
apt-get install bind9

Por razones de seguridad, vamos a ejecutar el BIND de tal forma que pueda correr en un directorio chroot. Lo hacemos de la siguiente forma:

/etc/init.d/bind9 stop

Editamos el fichero /etc/default/bind9 . Queremos que el demonio del bind se ejecute con el usuario bind sin privilegios, “chrooted” al directorio /var/lib/named. Para ello, buscamos donde pone <<OPTIONS=”-u bind”>> y lo substituimos por <<OPTIONS=”-u bind -t /var/lib/named”>>:

nano /etc/default/bind9
OPTIONS="-u bind -t /var/lib/named"
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes

Ahora creamos los directorios necesarios en /var/lib:

mkdir -p /var/lib/named/etc
mkdir /var/lib/named/dev
mkdir -p /var/lib/named/var/cache/bind
mkdir -p /var/lib/named/var/run/bind/run

Y a continuación movemos el directorio de configuración desde /etc hasta /var/lib/named/etc:

mv /etc/bind /var/lib/named/etc

Creamos un link simbólico al nuevo directorio de configuración partiendo del antiguo directorio (para evitar problemas cuando bind se actualice):

ln -s /var/lib/named/etc/bind /etc/bind

Hacemos “null” y “random”, y cambiamos los permisos de los directorios:

mknod /var/lib/named/dev/null c 1 3
mknod /var/lib/named/dev/random c 1 8
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
chown -R bind:bind /var/lib/named/var/*
chown -R bind:bind /var/lib/named/etc/bind

Ahora necesitamos modificar el fichero /etc/default/syslogd con la finalidad de registrar los mensajes que muestre bind el algún fichero de log. Debemos buscar la linea que pone <<SYSLOGD=”">> y lo substituimos por <<SYSLOGD=”-a /var/lib/named/dev/log”>>:

nano /etc/default/syslogd

El fichero resultante es el siguiente:

#
# Top configuration file for syslogd
#
 
#
# Full documentation of possible arguments are found in the manpage
# syslogd(8).
#
 
#
# For remote UDP logging use SYSLOGD="-r"
#
SYSLOGD="-a /var/lib/named/dev/log"

Reiniciamos el demonio del generador de logs:

/etc/init.d/sysklogd restart

Iniciamos o arrancamos BIND, y chequeamos /var/log/syslog para observar si se han producido errores:

/etc/init.d/bind9 start

Para ver si hay errores, hacemos:

less /var/log/syslog

Ahora pulsamos la z para recorrer el texto hasta el final y observamos si se ha producido algún error tras reiniciar:

Ejemplo:

Sep 22 13:13:01 ksxxxxx syslogd 1.4.1#18: restart.
 
Sep 22 13:13:01 ksxxxxx /USR/SBIN/CRON[11162]: (root) CMD (/usr/local/rtm/bin/rtm 12 &gt; /dev/null 2&gt; /dev/null)
 
Sep 22 13:13:15 ksxxxxx named[11217]: starting BIND 9.3.4-P1.1 -u bind -t /var/lib/named
 
Sep 22 13:13:15 ksxxxxx named[11217]: found 1 CPU, using 1 worker thread
 
Sep 22 13:13:15 ksxxxxx named[11217]: loading configuration from '/etc/bind/named.conf'
 
Sep 22 13:13:15 ksxxxxx named[11217]: no IPv6 interfaces found
 
Sep 22 13:13:15 ksxxxxx named[11217]: listening on IPv4 interface lo, 127.0.0.1#53
 
Sep 22 13:13:15 ksxxxxx named[11217]: listening on IPv4 interface eth0, 213.251.xxx.xxx#53
 
Sep 22 13:13:15 ksxxxxx named[11217]: command channel listening on 127.0.0.1#953
 
Sep 22 13:13:15 ksxxxxx named[11217]: zone 0.in-addr.arpa/IN: loaded serial 1
 
Sep 22 13:13:15 ksxxxxx named[11217]: zone 127.in-addr.arpa/IN: loaded serial 1
 
Sep 22 13:13:15 ksxxxxx named[11217]: zone 255.in-addr.arpa/IN: loaded serial 1
 
Sep 22 13:13:15 ksxxxxx named[11217]: zone localhost/IN: loaded serial 1
 
Sep 22 13:13:15 ksxxxxx named[11217]: running

En este ejemplo, no se observa ningún mensaje de error y, por lo tanto, la instalación ha sido un éxito.

Protegiendo el servidor ssh de ataques

Posted in Curso Adm. Servidores, Servidores on octubre 23rd, 2008 by Itimag – Be the first to comment

Ya hemos visto como configurar y acceder por ssh. También hemos visto como hacer nuestro servidor ssh accesible desde nuestra red interna e internet. ¿Qué es lo que no hemos visto sobre ssh? Como proteger ssh de ataques internos y externos.

Un equipo conectado a internet siempre está expuesto a correr el riesgo de recibir ataques pero podemos disminuirlos de forma descomunal con una buena configuración. Esto implica modificar la mayoría de parámetros por defecto del fichero de configuración con la finalidad de reducir al máximo la posibilidad de que alguien vulnere o consiga el acceso a nuestro sistema sin consentimiento. En caso de no realizar estas modificaciones le estaríamos dando al atacante una gran parte del acertijo que debe resolver para acceder a nuesto equipo.

Lo primero que debemos hacer para poder realizar los cambios es conectarnos al servidor mediante ssh. Podríamos hacerlo de dos formas:

  1. Usando la ip privada estática de nuestra red:
  • Utilizando el usuario root:
    ssh root@192.168.x.xxx -p 22
  • Utilizando el usuario que definimos durante la instalación:
    ssh user@192.168.x.xxx -p 22
  1. Usando nuestra ip pública (normalmente dinámica):
  • Utilizando el usuario root :
    ssh root@xxx.xxx.xxx.xxx -p 22
  • Utilizando el usuario que definimos durante la instalación:
    ssh user@xxx.xxx.xxx.xxx -p 22

El acceso a ssh con el usuario root desde el puerto 22 viene por defecto y por lo tanto es algo que debemos modificar de tal forma que siempre accederemos al servidor con el usuario que creamos durante la instalación del sistema operativo y, una vez dentro, ya accederemos como root para poder realizar cambios.

Una vez dentro, en caso de haver accedido con el usuario que no es root, ejecutamos el siguiente comando para obtener los permisos de éste último:

su

Ahora, abrimos el fichero de configuración de ssh con un editor de texto (yo uso el nano):

nano /etc/ssh/sshd_config

Modificamos el puerto desde el cual accedemos al servidor. Para ello, buscamos la siguiente linea

Port 22

y modificamos el numero del puerto (si queremos, lo podemos modificar por otro):

Port 754

Importante!! Para acceder desde internet, debemos abrir este puerto en el router (el protocolo TCP) para nuestra ip privada (192.168.x.xxx) del servidor.

Buscamos la linea siguiente:

PermitRootLogin yes

La substituimos por lo siguiente para evitar el acceso con el usuario root

PermitRootLogin no

Añadimos lo siguiente al final del fichero:

MaxAuthTries 3
MaxStartups 3

MaxAuthTries 3 hace que se cierre la conexión tras 3 intentos fallidos ingresando la contraseña. Tras estos 3 intentos, se puede volver a intentar conectando de nuevo.

MaxStartups 1 limita a 1 el número de pantallas de login simultáneas por ip que podemos tener abiertas para acceder con un usuario. Esto no impide que no podamos tener varias sesiones simultáneas abiertas.

Guardamos los cambios pulsando “ctrl + x” y “S” a contnuación.

Ahora debemos reiniciar el servidor ssh para que los cambios surjan efecto:

/etc/init.d/ssh restart

Ahora, sin cerrar la sesión de ssh, abrimos una nueva consola y volvemos a acceder al servidor con los mismos datos que antes.

ssh root@192.168.x.xxx -p 22

¿Qué observamos?
Observamos que no se nos permite conectarnos ya que no tenemos acceso desde el puerto 22.
Veamos si nos lo permite en el puerto que hemos definido:

ssh root@192.168.x.xxx -p 754

Observamos que ahora si que conecta y nos pide la contraseña. La insertamos y observaremos que nos apracere el mensaje “Permission denied, please try again.”. Esto es porque el usuario root no tiene permisos para acceder.
Ahora solo nos falta por ver que podemos acceder con el usuario que hemos definido antes:

ssh user@192.168.x.xxx -p 754

Observamos que si hemos podido entrar.

¿Por qué hacemos todas estas verificaciones?

Al no cerrar la primera sesión ssh, verificamos que no tengamos ningún problema para acceder al servidor tras hacer los cambios. Nos podríamos encontrar por ejemplo, en el caso de que el servidor estuviera en una red desconocida, que entre nuestro servidor e internet hay un firewall que no nos permite el acceso al servidor por el puerto que definimos o bien que el puerto que hemos puesto no se encuentre abierto.
Es entonces cuando debemos volver a dejar la conexión en el puerto 22, reiniciar ssh y ver si funciona correctamente mediante una nueva consola.

Una vez comprobado que los camios han surgido con éxito, para tener permisos root o para poder realizar cambios sobre el servidor, simplemente tenemos que escribir lo siguiente en consola:

Su

Ahora se nos pide la contraseña de root. La introducimos y ya tendremos permiso para realizar cualquier cambio en el servidor.

Asignar una ip privada estática a nuestra tarjeta de red en Linux Debian

Posted in Curso Adm. Servidores, Servidores on octubre 21st, 2008 by Itimag – Be the first to comment

Ya hemos visto como instalar ssh (secure shell) pero aún nos falta por ver cómo asignar una ip privada a nuestra tarjeta de red del servidor con la finalidad de tener acceso desde cualquier equipo de nuestra casa sin la necesidad de tener la cpu que hace de servidor conectada a un teclado, monitor u otros periféricos.

Lo primero que debemos conocer es la red de nuestra casa. ¿Dispongo de router o dispongo de un simple módem conectado directamente a mi equipo? ¿O tengo el módem conectado a un router neutro con entrada WAN? ¿O tengo un equipo con dos tarjetas de red que por una de ellas recibe la conexión de internet y con la otra comparte esta misma con otro equipo?

En caso de disponer de un módem conectado directamente a nuestro servidor, no debemos realizar ninguno de los cambios aquí expuestos.

En caso de disponer de un router, de un módem conectado al router, o de un equipo conectado a otro equipo que dispone de internet, debemos hacernos las siguientes preguntas: ¿Cual es la puerta de enclace?¿Y la máscara de subred?

Lo podemos averiguar haciendo lo siguiente:

  • En Linux:

  1. Abrimos un terminal y ejecutamos el siguiente comando:
    sudo
    route

    Nos aparecerá algo como esto, donde observamos el gateway del Destination=”default”. Nos apuntamos la ip que observamos marcada. Esta es nuestra puerta de enlace o gateway.

  2. Ahora debemos conocer la máscara de subred y nuestra ip privada. Lo hacemos mediante el comando ifconfig:
    ifconfig

Nos quedamos con la información que aparece en la linea marcada. Concretamente, con las direcciones que pone en “inet addr:” y “Mask:”. La “inet addr” es la dirección privada asignada a nuestra tarjeta de red y el campo “Mask” es la mascará de subred de nuestra red.

  • En Windows:

Mira aquí

¿Y ahora qué?

Ahora que conocemos los datos necesarios, vamos a modificar el fichero /etc/network/interfaces. Para ello, escribimos lo siguiente en una consola de nuestro servidor y pulsamos intro:

sudo
nano /etc/network/interfaces

En caso de que aparezca la linea “auto eth0″, la eliminamos.

En cualquier caso, debemos añadir lo siguiente si es que nuestro servidor funciona con una tarjeta de red no wireless (ethX y no wlanX).

iface eth0 inet static
             address "La_ip_privada"
             netmask "la_mascara_de_subred"
             gateway "La_puerta_de_enlace_de_o_gateway"

Siendo “La_ip_privada”, “la_mascara_de_subred” y “La_puerta_de_enlace_o_gateway” los datos recogidos antes con una pequeña puntualización: la ip privada no es recomendable que sea la misma que la que nos aparece. Esto es porque nuestro router nos asigna una ip privada con los últimos 3 dígitos lo más bajo que puede(a partir de .xxx dígitos finales. Por ejemplo: .100) y esto puede provocar un conflicto de red si encendemos el servidor tras encender otro equipo de nuestra red ya que puede ser que el router le asigne nuestra ip privada (192.168.2.101) a otro equipo. Por lo tanto, en el caso de que tengamos la ip privada 192.168.2.101, no es recomendable ponernos los últimos dígitos como 101 sino que nos pondremos 120 de tal forma que nuestra ip privada sería 192.168.2.115 y evitamos posibles conflictos de red.

En caso de que nuestra tarjeta de red sea wireless, debemos substituir “iface eth0 inet static” por “iface wlan0 inet static”

Debemos acordarnos de la ip que asignemos ya que la utilizaremos para acceder por ssh.

A continuación os dejo una captura de como ha quedado el asunto en mi equipo:

Ahora, debemos guardar los cambios. Esto lo hacemos pulsado “ctrl + X” y a continuación se nos pedirá si deseamos guardar los cambios. Ponemos una “S” y pulsamos intro.

Para que los cambios surjan efecto, hacemos lo siguiente:

ifconfig eth0 down
ifconfig eth0 up

Volvemos a hacer un ifconfig y observamos como los cambios han surgido efecto. Si es así, nos dirigimos a otro equipo y accedemos al servidor por ssh. En caso de que funcione (debería) ya podemos quitar el teclado, monitor y otros periféricos de nuestro servidor y administrarlo todo de forma remota.

Si queremos poder acceder desde internet a nuestro servidor por ssh, simplemente debemos conocer nuestra ip pública (cuidado que esta normalmente es dinámica, cambia. Es la que nos da nuestro proveedor del servicio) y abrir los puertos en nuestro router. Para conocer nuestra ip pública, es suficiente con entrar en esta web. En cambio, para abrir puertos en nuestro router, una vez sepamos el modelo de éste, podemos acceder a esa misma web en la que hay muchos manuales en el lado izquierdo (donde pone “Routers Wireless” o “Routers Ethernet”).

De momento, para acceder a ssh desde internet, será suficiente con abrir el puerto 22 usando el protocolo TCP para la ip privada de nuestro servidor.

Esto es todo por hoy. Esper que sea de vuestro agrado. Un saludo.

Instalar y Acceder por ssh a nuestro servidor

Posted in Curso Adm. Servidores, Otros, Servidores on octubre 20th, 2008 by Itimag – 1 Comment

¿Qué es ssh o secure shell y para qué sirve?

Veamos la definición que nos da la wikipedia:

SSH (Secure SHell) -intérprete de comandos seguro- es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red. Permite manejar por completo la computadora mediante un intérprete de comandos, y también puede redirigir el tráfico de X para poder ejecutar programas gráficos si tenemos un Servidor X (en sistemas Unix) corriendo.

Además de la conexión a otras máquinas, SSH nos permite copiar datos de forma segura (tanto ficheros sueltos como simular sesiones FTP cifradas), gestionar claves RSA para no escribir claves al conectar a las máquinas y pasar los datos de cualquier otra aplicación por un canal seguro tunelizado mediante SSH.

¿Cómo instalo ssh en una distribución linux basada en debian?

Abrimos una consola e introducimos lo siguiente:

apt-get install ssh

Tras pulsar intro se nos va a preguntar la contraseña de root. La introducimos y listo.

¿Cómo accedo por ssh?

Usando linux:

Es muy sencillo. Debemos seguir los siguientes pasos:

  1. Abrimos una consola (Programa de terminal)
  2. Escribimos:
ssh user@tu_server -p puerto

Hay que tener en cuenta que:

  • user= es el nombre de usuario
  • tu_server: la ip del servidor o nombre de dominio ya instalado en la máquina.
  • Puerto = es el puerto de acceso a ssh. Por defecto es el 21 pero más adelante veremos como cambiarlo para obtener más seguridad.

Usando Windows:

Para acceder desde windows a nuestro servidor, deberemos bajarnos un programa llamado putty. Lo podeis descargar desde aquí y a continuación os dejo un link al siguiente manual donde se explica su uso.

¿Y ahora?¿Qué hago?

Si estamos instalando ssh será porqué lo hemos hecho en un ordenador de casa en vez de alquilar un servidor dedicado en alguna empresa, la cual nos habría entregado el equipo con ssh para que lo podamos administrar.

Para que podamos quitar el teclado, monitor y demás periféricos a nuestro ordenador que hará de servidor, primero debemos modificar la ip privada (normalmente asignada por DHCP) asignada a nuestro equipo por nuestro router con la finalidad de que ésta siempre sea la misma. Si quisiéramos, también podríamos conectar al servidor utilizando la ip pública asignada por nuestro operador (normalmente es una ip dinámica, que cambia). Para ello, debemos abrir el puerto 22 (TCP) de nuestro router para la ip privada de nuestro equipo, la cual vamos a hacer fija.

En caso de tener únicamente un módem conectado a nuestro equipo, esto no hará falta ya que podemos acceder directamente al equipo utilizando la ip pública de este.

Más adelante veremos como hacer todo esto en más detalle. Un saludo.