Configuración inicial

Una vez instalado el equipo podemos iniciarlo y entrar en nuestra cuenta de administrador.

Lo primero será hacer un repaso de los archivos de configuración para comprobar que todo esté correctamente y configurar algunos parámetros que aumenten la seguridad del equipo.

También prepararemos el equipo para poder acceder a él desde el exterior y que se inicien los servicios necesarios correctamente para no necesitar acceso físico al mismo durante la realización de la práctica.

Particiones y sistemas de ficheros

En primer lugar echamos un ojo a las particiones disponibles examinando el fichero /etc/fstab.

# <file system>                              <mount point>   <type>         <options>          <dump>  <pass>
proc                                         /proc           proc           defaults           0        0
# / was on /dev/sda5 during installation
UUID=52cd9609-2ac8-4b12-8fb5-d978d24b5510    /               ext3           errors=remount-ro  0       1
# swap was on /dev/sda6 during installation
UUID=e9da68e9-af0c-45d5-90bd-09ba872addad    none            swap           sw                 0       0
/dev/scd0                                    /media/cdrom0   udf,iso9660    user,noauto        0       0

Vemos que aparecen todos nuestros discos (y ningún otro ajeno).

En el contenido en lugar de los discos como /dev/sdaX aparece el UUID, que identifica de forma única a cada disco. Aunque aparecen en los comentarios las particiones a las que corresponden podemos ver las correspondencias con la orden.

root@cactus:# ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 may  6 02:23 52cd9609-2ac8-4b12-8fb5-d978d24b5510 -> ../../sda5
lrwxrwxrwx 1 root root 10 may  6 02:23 9417-721B -> ../../sda1
lrwxrwxrwx 1 root root 10 may  6 02:23 e9da68e9-af0c-45d5-90bd-09ba872addad -> ../../sda6
lrwxrwxrwx 1 root root 10 may  6 02:23 F6B68E75B68E3661 -> ../../sda2

Los discos montados corresponden, en efecto, con sda5 y sda6. Las otras dos particiones corresponden con otros sistemas instalados en el disco. En concreto, se corresponden con un equipo windows, cuyos sistemas de ficheros, FAT y NTFS no soportan UUID, por lo que se muestra otro identificador llamado UID.

Arranque y parada del sistema

Para el arranque del sistema se empleará un runlevel determinado, en concreto el 2. Los servicios necesarios para el funcionamiento del servidor se configurarán de modo que se siempre se inicien al arrancarse en este nivel de ejecución. De este modo será posible reiniciar el equipo sin necesidad de iniciar manualmente ningún servicio.

Con este fin se utilizarán los scripts de /etc/init.d, tanto los proporcionados por los servicios que instalemos (gestor de bases de datos, servidor web...) como aquellos que tengamos que escribir para arrancar, parar o reiniciar nuestros propios servicios.

En primer lugar se examina el archivo de configuración /etc/inittab. A continuación se muestran las lineas más importantes de este fichero.

# The default runlevel.
id:2:initdefault:

El nivel por defecto será 2, el seleccionado para el servidor Cactus. Esto significa que al iniciar el equipo sin especificar otro nivel, será este en el que arranque.:

root@cactus:# runlevel

Como vemos, se puede comprobar que el nivel de ejecución actual es este mismo.

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

Aquí vemos la definición de cada uno de los niveles junto al número que se asigna para los ficheros rc* de iniciación de cada nivel.

A los usuarios no se les permitirá entrar directamente a sus cuentas del sistema, sin embargo, para prevenir que un hipotético usuario pueda provocar un reinicio del sistema, en este mismo archivo comentamos la siguiente linea.

# ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

También modificaremos el mensaje de pre-login del servidor de modo que no muestre información sobre la versión del sistema instalado. De este modo no se da información a un posible atacante sobre el sistema que se usa.

En un primer lugar el mensaje era:

Debian GNU/Linux 6.0 \n \l

Y en su lugar colocamos:

Bienvenido al Servidor de Cactus

Configuración de red

Dado que queremos que el servidor sea accesible desde el exterior será necesario configurar correctamente su conexión a la red.

En primer lugar editamos el archivo /etc/network/interfaces.

# The primary network interface
iface eth0 inet static
        address 192.168.1.222
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.1

Hemos añadido la interfaz de red corrrespondiente. Se ha configurado una red de forma estática, así podremos acceder siempre al equipo con la misma dirección. Los parámetros son los siguientes:

  • Dirección del equipo: 192.168.1.222
  • Máscara de red: 255.255.255.0
  • Red: 192.168.1.0
  • Broadcast: 192.168.1.255
  • Puerta de enlace: 192.168.1.1

Los servidores DNS se encontrarán en el archivo /etc/resolv.conf, añadimos a este fichero lo siguiente.

search rufian.eu
nameserver 8.8.8.8
nameserver 8.8.4.4

De este modo el equipo buscará resolver los nombres de los equipos en rufian.eu y se añaden los servidores de nombres 8.8.8.8 y 8.8.4.4.

Además de esto, como el equipo está en una red local, es necesario que los integrantes del grupo podamos acceder a él desde fuera de la misma.

Para conseguir esto se define el servidor como un equipo DMZ en la configuración del router. De este modo cualquier usuario desde fuera de la red local podrá acceder a los servicios del servidor (en realidad, solo para aquellos que no estén en el router configurados para otros equipos de la red).

Habilitar las conexiones remotas (SSH)

Puesto que vamos a utilizar el equipo de forma remota habilitaremos las conexiones mediante SSH.

Dado que elegimos no instalar SSh en el inicio lo instalaremos con la orden:

root@cactus:# apt-get install ssh

Después examinaremos el archivo de configuración /etc/ssh/sshd_config. Algunas lineas a las que hay que prestar especial atención son las siguientes.

# What ports, IPs and protocols we listen for
Port 22

En principio se utiliza el puerto 22 que se establece por defecto, pero podría ser interesante para evitar que un posible atacante pueda intentar hacer una conexión probando directamente en este puerto.

Protocol 2

El único protocolo aceptado es el 2, no se acepta el 1 por tener una seguridad menor.

# Authentication:
LoginGraceTime 30

Se establece un tiempo máximo de 30 segundos para el login, tras pasar este tiempo no se aceptará una conexión y habrá que iniciar el proceso de nuevo.

# Authentication:
PermitRootLogin yes

Puede ser interesante no permitir el login remoto del usuario administrador, pero en este caso es necesario permitirla dado que será necesario para realizar la práctica.

MaxAuthTries 2

Se establece que el máximo número de intentos será de dos con el fin de evitar ataques de fuerza bruta.

Una vez configurado iniciaremos el servidor con:

root@cactus:# /etc/init.d/ssh restart

Y podemos comprobar que ssh se encuentra entre los scripts de inicio para el nivel de ejecución 2 examinando los ficheros en /etc/rc2.d.

root@cactus:# ls/etc/rc2.d | grep ssh

              S03ssh

Servicios de inicio

Por último instalamos chkconfig para comprobar los servicios que se iniciarán con el sistema.

root@cactus:# apt-get install chkconfig

Y con la orden siguiente podemos examinar los servicios que hay, con el fin de detectar posibles servicios que no queramos que estén corriendo en nuestro servidor, ya sea porque no deseamos utilizarlos o porque no sean seguros.:

root@cactus:# chkconfig -- list

Si encontraramos algún servicio que no desearamos que estuviera lo desactivaríamos. Por ejemplo, si detectaramos que el servicio de telnet está activado ejecutariamos:

chkconfig httpd off