CentOS (Comunnity enterprise Operating System) es un sistema operativo de código libre, basado en el núcleo Red Hat, pero con código liberado. CentOS es la alternativa gratuíta a Red Hat, y por ello, suele tener bastante tirón para implementarlo como servidor en una pequeña o mediana red. CentOS puede ser usado también como servidor LAMP, servidor de correo, servidor DHCP, DNS, y un largo etcétera.
CentOS puede ser usado también como un router, usando dos tarjetas de red, una hacia la red de área local y otra al exterior(Internet)
Para empezar esta entrada, nos centraremos primero en una situación "de la vida real":
Imaginemos que tenemos una red de área local de por ejemplo tres o cuatro ordenadores, todos conectados por un switch, y queremos usar un ordenador ajeno a esos como servidor, para administrar a esos ordenadores direcciones IP y servicios de red cualesquiera. El ordenador servidor se usará como router, y también como firewall, filtrando las conexiones, rechazando algunas y aceptando otros puertos, para así tener control absoluto sobre las conexiones.
Configuración del servidor:
- El servidor tiene para esta administración dos interfaces: eth0 y eth1
- eth0 para local.
- eth1 para salida a Internet.
- La configuración del firewall de la red se administrará mediante iptables
- El método para enrutar los paquetes será NAT.
Éste esquema se da en bastantes empresas a nivel pequeño y mediano. La diferencia es que nosotros usaremos CentOS, mientras que en una empresa es más probable usar un Windows Server (No tengo nada contra WS, pero resulta más eficiente el uso de Linux para administración de servidores. Más control)
Una vez planteado todo, lo iremos montando poco a poco.
El esquema a seguir será el siguiente:
- Instalaremos un servidor DHCP y configuraremos las opciones del mismo.
- Configurar las interfaces eth0 y eth1 para su funcionamiento.
- Enrutar los paquetes entre las dos conexiones (IP Forward y NAT)
- Establecer las políticas de filtrado (iptables)
Sugerencia: Recomiendo usar CentOS en runlevel 3 (Línea de comandos). Ganaremos rapidez en el servidor al omitir el entorno gráfico.
Nota: Todos los comandos deben ser ejecutados como Superuser (root).
1. Instalación del servidor DHCP y configuración del mismo.
En primer lugar, hay que descargar de los repositorios de CentOS el servidor DHCP. El paquete actual a fecha de hoy es
dhcp-3.0.5-29.el5_7.1. Para instalarlo, en la línea de comandos, escribimos
# yum install dhcp
El ordenador buscará en los repositorios de CentOS el paquete solicitado. Una vez lo tenga, lo bajará a nuestro ordenador, lo configurará y lo intentará inicializar sin éxito, debido a que no tiene una configuración predefinida todavía.
Una vez tenemos bajado el servidor DHCP, vamos a proceder a configurarlo.
En primer lugar, tenemos que tener fijada cuál va a ser nuestra política de administración de las direcciones IP, así como del rango de direcciones disponible, máscara de subred, puerta de enlace y servidor DNS. Como será un servidor único, no usaremos política de alquiler de direcciones.
El archivo de configuración a editar se encuentra en
/etc y se llama
dhcpd.conf. Si lo ejecutamos con nano y vim, nos saldrá que el archivo de configuración de muestra se encuentra en /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample. Para evitar posibles fallos y autorizaciones erróneas, introduciremos nuestro propio dhcpd.conf sin copiar el archivo de muestra.
Como ejemplo, vamos a usar la subred 172.16.1.0, máscara de subred 255.255.255.0, puerta de enlace la 172.16.1.1, DNS el 8.8.8.8. La administración de direcciones IP va de la 20 a la 30.
El archivo quedaría así:
# /etc/dhcpd.conf
ddns-update-style none;
ignore client-updates;
subnet 172.16.1.0 netmask 255.255.255.0 {
option routers 172.16.1.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;
range dynamic-bootp 172.16.1.20 172.16.1.30;
}
Guardamos el archivo. Ahora tenemos configurado correctamente todas las opciones que requería nuestro servidor. Seguimos sin poder ejecutar el servicio debido a que no hemos configurado la dirección IP del interfaz a usar, pero lo arreglamos enseguida.
PD: Las dos primeras líneas (ddns-update-style y ignore client-updates) vienen a decir que no queremos actualizaciones dns e ignoraremos las peticiones de clientes queriendo renovar su dirección IP local.
(Corrección hecha por el usuario Juan Ortega. Comentario más abajo. Gracias por la ayuda)
Si tenemos un equipo al que le queremos dar una IP fija, añadimos la siguiente línea:
host (nombre máquina abreviado) {
option host-name (nombre máquina completo);
hardware ethernet (dirección mac);
fixed-address (dirección ip que le damos);
}
El nombre abreviado o completo de máquina lo pueden poner como quieran.
Nota: la dirección IP que le demos debe estar en la subred o subredes del servidor DHCP que definan.
2. Configurar las interfaces eth0 y eth1
Las interfaces eth0 y eth1, por lo general, tendrán diferente rango de direcciones IP:
- eth0: Deberá llevar la dirección que pusimos en option-routers, ya que CentOS es nuestro servidor y puerta de enlace para la red local.
- Bloque de direcciones a usar:
- Dirección IP: 172.16.1.1
- Máscara de subred: 255.255.255.0
- No requiere de gateway ni DNS.
- eth1: A gusto del consumidor. Yo utilizaré un modelo DHCP, ya que usaremos CentOS solo para enrutar la red local y servir como filtro y eth1 se conectaría a un router ADSL, pero si necesita ser implementado como red fija, especificaré donde proceda.
En CentOS, las configuraciones de las interfaces de red no se hacen por ifconfig de forma general. En su lugar, lo haremos más eficiente.
Hay dos modos:
- Usando la Utilidad de configuración en modo texto (setup). Se ejecuta poniendo en la línea de comandos # setup. Es más fácil de manejar.
- Editando los archivos de configuración. Se encuentran en /etc/sysconfig/network-scripts/ y su nombre es ifcfg-ethx, donde x es el número de conexión
Setup es una sencilla herramienta semigráfica que mediante un menú intuitivo nos permite configurar las interfaces fácilmente.
La edición de los ficheros de configuración se puede realizar utilizando Vim o Nano, el que más rabia os dé.
El fichero de configuración será algo así para eth0:
# (Controlador del adaptador de red)
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
HWADDR=(Dirección MAC del adaptador)
IPADDR=172.16.1.1
NETMASK=255.255.255.0
Para el fichero eth1, algo tal que así:
# (Controlador del adaptador de red)
DEVICE=eth1
BOOTPROTO=dhcp
ONBOOT=yes
HWADDR=(Dirección MAC del adaptador)
Si queremos especificar un gateway en cualquiera de los dos adaptadores, se añadirá
GATEWAY=(Dirección del gateway). Si queremos añadir un servidor DNS, debemos cambiar el archivo de configuración
ubicado en
/etc/resolv.conf,
y en las líneas que proceden escribir.
nameserver (dirección DNS)
Una vez modificados los valores de los ficheros de configuración y del Setup, debemos reiniciar el servicio para que la configuración tenga efecto. Para ello, escribimos:
# service network restart
Una vez realizamos la siguiente acción, la dirección de las dos interfaces se cambiará a la que hayamos configurado en el Setup o los ifcfg. Acto seguido, procederemos a iniciar el servicio dhcp, para así inicializar la red local. Para ello, en la misma consola, escribimos:
# service dhcpd start
PD: Si falla el inicio de dhcpd, revisa los ficheros de configuración (generalmente es que falta un punto y coma, o algo mal puesto de nombre). Si no encuentras nada, existe un fichero en /var/log/messages que nos dirá lo que nos chirría de la configuración general de dhcp o cualquiera que estemos usando. Si falla alguna cosa, revisar este archivo es lo más conveniente. se ejecuta con:
# cat /var/log/messages
3. Enrutar los paquetes entre las dos conexiones (IP Forward y NAT)
Hemos configurado las dos interfaces, pero aunque hayamos configurado, nos resulta un poco "inútil", debido a que aún nos falta realizar el enrutamiento y el seguimiento de paquetes entre interfaces. Para ello, debemos activar el
IP Forward y establecer
NAT para realizar un enrutamiento exitoso.
- Activar IP Forward: Para activarlo, tenemos que editar el fichero /etc/sysctl.conf, y en la línea denominada
net.ipv4.ip_forward = 0
Editar el 0 por un 1. Reiniciar el servidor CentOS para que los cambios hagan efecto.
- Establecer NAT como configuración de enrutamiento: Por sí solo, el IP Forward no sirve de nada si no ejecutamos una excepción en iptables para añadir una "ruta" interna entre ambas interfaces y así poder enrutar.
Para ello, en la consola, escribimos:
# iptables -F
# iptables -t nat -F
Estos dos primeros comandos son para limpiar las configuraciones.
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -d 0/0 -j MASQUERADE
Una vez realizado ésto, CentOS podrá enrutar los paquetes que le lleguen desde eth0 a eth1 y así, dar acceso a Internet a la red local en DHCP que montamos anteriormente.
4. Establecer las políticas de filtrado (iptables).
Una vez todo está funcionando, es posible que solo queramos que estén abiertos determinados puertos, o denegar el acceso a un usuario concreto, permitir que pase información de un puerto... Para ello, CentOS y su iptables (cortafuegos) nos podrán ayudar para establecer qué dejamos o no pasar a través de la red.
Lo primero de todo, antes de establecer filtros, vamos a eliminar la configuración antigua del cortafuegos. Para eso, teclearemos los siguientes comandos:
# iptables -F (Borra todas las reglas de iptables)
# iptables -X (Igual que -F)
# iptables -Z (Pone el contador de paquetes de iptables a cero)
# iptables -t nat -F (Borra la regla de enrutamiento NAT anterior)
Una vez tecleamos todos estos comandos, procederemos a disponer nuestra propia configuración. Por ejemplo:
- Permitiremos acceso a los puertos de Internet básicos (80 y 443, HTTP y HTTPS)
- Permitiremos un puerto de conexión segura (22, SSH)
- A un equipo le daremos acceso total.
Para empezar, restauraremos la última línea de cuando usamos NAT en el servidor:
# iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -d 0/0 -j MASQUERADE
Para que el servidor acepte y reenvíe paquetes, debemos aceptar las políticas de uso (INPUT para enviar paquetes, FORWARD para enrutar, y POSTROUTING para enviar a la ruta)
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -t nat -P POSTROUTING ACCEPT
Para aceptar las políticas de HTTP y HTTPS, añadiremos la siguiente línea:
# iptables -A FORWARD -s 172.16.1.0/24 -p tcp --dport 80 -j ACCEPT
# iptables -A FORWARD -s 172.16.1.0/24 -p tcp --dport 443 -j ACCEPT
Para aceptar el SSH, añadiremos la siguiente línea:
# iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 22 -j ACCEPT
Para rechazar los paquetes de un determinado número de puerto.
# iptables -I INPUT -s 172.16.1.0/24 -p tcp --dport (puerto cualesquiera) -j DROP
Para el acceso total a un equipo, añadiremos la siguiente línea. Como ejemplo, pondré el 172.16.1.2
# iptables -A FORWARD -s 172.16.1.2 -j ACCEPT
Para consultar todos los cambios hechos, ejecutamos:
# iptables -L
Para guardar la configuración, ejecutamos:
# iptables-save
Nota: Para las reglas iptables, es más recomendable usar un script, para ejecutar todo a la vez y no uno a uno.
Siguiendo estos pasos, conseguiremos tener nuestra propia red local con un CentOS como router.
Fuentes:
Redes de Área local. Aplicaciones y Servicios Linux [Formación del profesorado]. Instituto de Tecnologías Educativas.
Experiencia propia.
Revisión de artículo: Octubre de 2013
Razón: Corrección del contexto. Adición de la cláusula de rechazo de paquetes. Corrección de la cláusula de IP fija gracias al comentario de un usuario.