Configuración Esencial de Servidores GNU/Linux: Red, DHCP, Proxy y Firewall
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 20,45 KB
Historia de GNU/Linux y sus Componentes
¿Qué es GNU?
Proyecto iniciado por Richard Stallman en 1983 con el objetivo de crear un sistema operativo completamente libre.
¿Qué es Linux?
Linux es un núcleo de sistema operativo libre tipo Unix. Es uno de los principales ejemplos de software libre. El núcleo es el componente que hace la unión entre el hardware y el software (recordar el concepto del 'kernel').
¿Por qué el sistema operativo se llama GNU/Linux?
GNU/Linux es el término promovido por la Free Software Foundation (FSF) y su fundador Richard Stallman, así como sus patrocinadores, para el sistema operativo que incluye las utilidades de la FSF y el núcleo Linux. Entre otros, notablemente Debian GNU/Linux usa este término en su nombre. Algunos de los programas que contribuyen a su funcionamiento son:
- Bison
- Bash
- Binutils
- GCC (GNU Compiler Collection)
- GNOME
- Entre otros
Pioneros Clave en el Desarrollo de Sistemas Operativos
Ken Thompson
Pionero en las ciencias de la computación. Su trabajo incluye el lenguaje de programación B y el sistema operativo UNIX, así como Plan 9 para los Laboratorios Bell. Se le atribuye a Thompson, junto con Dennis Ritchie, la creación de UNIX.
Dennis Ritchie
Fue un científico computacional estadounidense. Colaboró en el diseño y desarrollo de los sistemas operativos Multics y Unix, así como en el desarrollo de varios lenguajes de programación como el C, tema sobre el cual escribió un célebre clásico de las ciencias de la computación junto con Brian W. Kernighan: El lenguaje de programación C.
Andrew Tanenbaum
Tanenbaum es más conocido por ser el creador de Minix, una réplica gratuita del sistema operativo UNIX con propósitos educativos, y por sus influyentes libros sobre ciencias de la computación.
Richard Stallman
Es un programador estadounidense y fundador del movimiento por el software libre. Entre sus logros destacados como programador se incluye la realización del editor de texto GNU Emacs, el compilador GCC y el depurador GDB, bajo la rúbrica del Proyecto GNU. Sin embargo, es principalmente conocido por el establecimiento de un marco de referencia moral, político y legal para el movimiento del software libre, como una alternativa al desarrollo y distribución del software no libre o privativo. Es también inventor del concepto de copyleft (aunque no del término), un método para licenciar software de tal forma que su uso y modificación permanezcan siempre libres y disponibles para la comunidad.
Linus Torvalds
Ingeniero de software finlandés, conocido por iniciar y mantener el desarrollo del kernel (núcleo) Linux, basándose en el sistema operativo libre Minix creado por Andrew S. Tanenbaum y en algunas herramientas, utilidades y compiladores desarrollados por el Proyecto GNU. Actualmente, Torvalds es responsable de la coordinación del proyecto. Pertenece a la comunidad de habla sueca de Finlandia.
¿Qué es una Distribución Linux?
Una distribución Linux (coloquialmente conocida como 'distro') es una distribución de software basada en el núcleo Linux que incluye determinados paquetes de software para satisfacer las necesidades de un grupo específico de usuarios, dando así origen a ediciones domésticas, empresariales y para servidores. Por lo general, están compuestas, total o mayoritariamente, de software libre, aunque a menudo incorporan aplicaciones o controladores propietarios.
Además del núcleo Linux, las distribuciones incluyen habitualmente las bibliotecas y herramientas del Proyecto GNU y el X Window System. Dependiendo del tipo de usuarios a los que la distribución esté dirigida, se incluye también otro tipo de software como procesadores de texto, hojas de cálculo, reproductores multimedia, herramientas administrativas, etcétera. En el caso de incluir herramientas del Proyecto GNU, también se utiliza el término distribución GNU/Linux.
Distribuciones Linux Destacadas
A continuación, se comentan brevemente el nombre y las características básicas de dos distribuciones populares:
CentOS (Community Enterprise Operating System)
CentOS es una distribución de Linux basada en las fuentes libremente disponibles de Red Hat Enterprise Linux (RHEL). Cada versión de CentOS se mantiene durante 7 años (mediante actualizaciones de seguridad). Las nuevas versiones se lanzan cada 2 años y se actualizan regularmente (cada 6 meses) para el soporte de nuevo hardware.
Algunas de las principales características de CentOS son:
- Fácil mantenimiento
- Idoneidad para el uso a largo plazo en entornos de producción
- Entorno favorable para los usuarios y mantenedores de paquetes
- Soporte a largo plazo de las versiones principales
- Desarrollo activo
- Infraestructura de la comunidad
- Gestión abierta
- Modelo de negocio abierto
- Soporte comercial ofrecido por socios proveedores
Debian y su Contrato Social
Debian o Proyecto Debian (en inglés, Debian Project) es una comunidad conformada por desarrolladores y usuarios que mantiene un sistema operativo GNU basado en software libre. El sistema se encuentra precompilado, empaquetado en formato .deb
para múltiples arquitecturas de computador y para varios núcleos.
La comunidad de desarrolladores del proyecto cuenta con la representación de Software in the Public Interest, una organización sin ánimo de lucro que brinda cobertura legal a varios proyectos de software libre. El proyecto Debian fue fundado en 1993 por Ian Murdock, después de haber estudiado en la Universidad de Purdue. Murdock escribió el Manifiesto de Debian, que utilizó como base para la creación de la distribución Debian. Dentro de este texto, los puntos destacables son: mantener la distribución de manera abierta y coherente con el espíritu de Linux (núcleo) y GNU.
Características adicionales de Debian:
- SELinux instalado por defecto.
- Debian puede ser ejecutada como una distribución Live, tanto en plataformas x86 (32 bits) como en x86-64 (64 bits).
- Debian 5.0 utiliza el kernel 2.6.26, que entre otras cosas incluye soporte nativo para NTFS-3g (montaje de particiones Windows) y para máquinas virtuales a través de KVM.
Configuración de Interfaces de Red
Nombre y Ruta de las Interfaces de Red
La ruta común para la configuración de interfaces de red es /etc/sysconfig/network-scripts/
.
Parámetros Básicos para Configurar una Interfaz de Red
Algunos parámetros básicos para configurar una interfaz de red son:
DEVICE="eth0"
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=00:1E:0B:7E:C4:19
PEERDNS=yes
PEERROUTES=yes
Interfaces de Red Necesarias para un Servidor de Conexión
Se requieren dos interfaces de red para un servidor de conexión. Esto se debe a que una servirá para obtener internet del proveedor de servicios, y la otra para la red interna, donde se configurarán los parámetros para proporcionar internet a las máquinas de la red local.
Comandos para Revisar la Configuración de la NIC
El comando principal para revisar la existencia y configuración de la NIC (Network Interface Card) es ifconfig
.
Instalación y Configuración de DHCP
¿Qué es DHCP?
DHCP (acrónimo de Dynamic Host Configuration Protocol, que se traduce como Protocolo de Configuración Dinámica de Host) es un protocolo que permite a los dispositivos en una red obtener automáticamente su información de configuración de red (dirección IP, máscara de subred, puerta de enlace, etc.) de un servidor DHCP.
Instalación de DHCP
Para instalar DHCP en sistemas basados en Red Hat/CentOS, se utiliza el comando:
yum install dhcp
Nota: Para sistemas basados en Debian/Ubuntu, se usaría apt-get update
y apt-get install isc-dhcp-server
.
Archivos de Configuración de DHCP
Para que DHCP funcione, se deben modificar los siguientes archivos y rutas:
- Detener el servicio DHCP:
/etc/init.d/dhcpd stop
- Configurar el archivo DHCP en
/etc/sysconfig/dhcp
:Con el editor
vi
, en la línea donde se encuentra el parámetroDHCPDARGS=
, se agregaeth1
, que será la interfaz para la red local. - Modificar el archivo de configuración principal:
Luego, se modifica el archivo
/etc/dhcp/dhcpd.conf
convi
. - Reiniciar el servicio DHCP:
/etc/init.d/dhcpd restart
Declaraciones Clave en DHCP
A continuación, se describen algunas declaraciones importantes en la configuración de DHCP:
subnet
: Define el segmento de subred sobre el que actuará DHCP.netmask
: Define la máscara de red de la subred.option routers
: Parámetro que especifica, mediante IP, la ubicación del router (puerta de enlace).option domain-name-servers
: Especifica, mediante dirección IP, la ubicación de los servidores DNS.hardware ethernet
: Dirección MAC asociada a la tarjeta de red del equipo.fixed-address
: Dirección IP estática destinada a un equipo específico.
Instalación y Configuración de Squid Proxy
¿Qué es Squid?
Squid es un Servidor Intermediario (Proxy) para sistemas Unix. Además, es un sistema GNU. Entre otras cosas, Squid puede funcionar como servidor intermediario y caché de contenido de red para los protocolos HTTP, FTP, Gopher y WAIS. También funciona como proxy SSL, caché transparente, WWCP, aceleración HTTP, caché de consultas DNS, y ofrece funcionalidades como filtrado de contenido y control de acceso por IP y por usuario.
Instalación de Squid
Para instalar Squid en sistemas basados en Red Hat/CentOS, se utiliza el comando:
yum install squid
Nota: Para sistemas basados en Debian/Ubuntu, se usaría apt-get install squid
.
Archivos de Configuración de Squid
El archivo principal a modificar es /etc/squid/squid.conf
. Además, se pueden agregar y crear archivos para clasificar sitios permitidos y denegados, como /etc/squid/listas/permitidos
o /etc/squid/listas/denegados
.
¿Qué son las ACL en Squid?
Las ACLs (Listas de Control de Acceso) son reglas que determinan qué sitios, direcciones IP o usuarios son permitidos o denegados. En ellas se especifican los orígenes o destinos de los dominios o direcciones.
Generación de ACL en Squid
Para generar ACLs, se pueden seguir los siguientes ejemplos:
1. Permitir sitios específicos:
Se crearán, dentro del archivo de permitidos (/etc/squid/listas/permitidos
), los siguientes nombres de sitios:
google.cl
Luego, dentro del archivo de configuración de Squid (/etc/squid/squid.conf
), se agregará la siguiente regla:
acl permitidos dstdomain "/etc/squid/listas/permitidos"
http_access allow permitidos
2. Denegar sitios específicos:
En el archivo de sitios restringidos (/etc/squid/listas/restringido
), se agregará:
sex.cl
A estos se les agregará la siguiente regla en /etc/squid/squid.conf
:
acl denegado dstdomain "/etc/squid/listas/restringido"
http_access deny denegado
3. Denegar redes o PCs específicos:
También se pueden denegar redes o PCs específicos, como en el siguiente ejemplo:
acl denegado src 192.168.0.20
http_access deny denegado
Configuración del Espacio de Caché de Squid
El espacio de almacenamiento de los datos de caché se configura mediante el parámetro cache_dir
:
Directory-Name
: Define la ruta absoluta al directorio designado para la caché. En la mayoría de distribuciones GNU/Linux, el directorio predeterminado es/var/spool/squid
; en Debian/Ubuntu, se usa/var/spool/squid3
. Por ejemplo:cache_dir ufs /var/spool/squid3 100 16 256
Mbytes
: Define la cantidad de espacio en disco en MB para el directorio definido. El valor predeterminado es 100 MB. Por ejemplo:cache_dir ufs /var/spool/squid3 100 16 256
Regeneración del Espacio de Caché de Squid
El parámetro maximum_object_size
define el tamaño máximo de los objetos que serán almacenados en la caché de disco. Los objetos mayores a este tamaño NO serán almacenados en disco. El valor se especifica en kilobytes, y su valor predeterminado es 4MB.
maximum_object_size 4096 KB
Instalación y Configuración de DansGuardian
¿Qué es DansGuardian?
DansGuardian es un software de filtro de contenido. También ofrece soporte antivirus para la plataforma Windows y puede filtrar contenido de páginas web, todo esto en una máquina con Squid instalado.
Configuración Básica de DansGuardian
Todo lo concerniente a DansGuardian se ubica en /etc/dansguardian
. El archivo de configuración principal se llama dansguardian.conf
. Para empezar, abrimos este archivo con nuestro editor de textos preferido y modificamos los siguientes parámetros:
- Idioma de los mensajes de restricción: Para que los mensajes de restricción aparezcan en español (si desea ver todos los lenguajes disponibles o editar el código HTML que presentará cada lenguaje, puede dirigirse a
/usr/share/dansguardian/languages
), modificamos el siguiente parámetro:language = 'spanish'
- Puerto de escucha de DansGuardian: Modificando este parámetro, configuraremos el puerto por el que DansGuardian escuchará las peticiones. Por defecto es el
8080
; si este puerto está ocupado por otro servicio, puede asignarle otro.filterport = 8080
- IP del Proxy: Modificando este parámetro, configuraremos la IP del proxy. En nuestro caso, es Squid y está instalado en el mismo servidor. Si el proxy estuviera en otro servidor, especificamos en este parámetro la dirección IP del servidor proxy; de lo contrario, lo dejamos en
127.0.0.1
.proxyip = 127.0.0.1
- Puerto del Proxy: Modificando este parámetro, configuramos el puerto por el que escucha el servidor proxy (en este caso, Squid). Como el servidor Squid escucha por el puerto
3128
, se mantiene ese valor.proxyport = 3128
Guardamos el archivo de configuración y levantamos el servicio:
/etc/init.d/dansguardian start
Ejecución de DansGuardian
Para iniciar la ejecución de DansGuardian, se utiliza el comando:
/etc/init.d/dansguardian start
Gestión de Firewall con Iptables
¿Qué es Iptables?
Iptables es el nombre de la herramienta de espacio de usuario (User Space) a través de la cual los administradores crean reglas para el filtrado de paquetes y los módulos de NAT. Es la herramienta estándar de firewall en la mayoría de las distribuciones modernas de GNU/Linux.
Comandos y Tablas de Iptables
A continuación, se describen algunos comandos y parámetros comunes de Iptables:
-A
(Append): Agrega una nueva regla al final de la cadena.-D
(Delete): Elimina una regla específica de la cadena.-P
(Policy): Establece la política por defecto para una cadena.-R
(Replace): Reemplaza una regla existente en una posición específica.-L
(List): Lista las reglas actuales de una o todas las cadenas.-F
(Flush): Elimina todas las reglas de una o todas las cadenas.-j
(Jump/Target): Especifica la acción o destino del tráfico, que puede serACCEPT
,DROP
,REJECT
, o saltar a otra cadena.-m
(Match): Define un módulo de coincidencia extendido para aplicar la regla si hay una coincidencia específica.--state
: Define una lista separada por comas de diferentes tipos de estados de las conexiones (INVALID
,ESTABLISHED
,NEW
,RELATED
).--to-source
: Define la IP de origen para el tráfico saliente (usado en SNAT).-s
(Source): Define la dirección IP de origen del tráfico.-d
(Destination): Define la dirección IP de destino del tráfico.--source-port
: Define el puerto de origen de la conexión.--destination-port
: Define el puerto de destino de la conexión.-t
(Table): Especifica la tabla a utilizar, que puede sernat
,filter
,mangle
oraw
.
Configuración de Iptables para Proxy Transparente
Para que el servidor de conexión funcione de forma transparente con Squid, se deben configurar las siguientes reglas en /etc/squid/squid.conf
(se recomienda hacer una copia de seguridad antes de eliminar su contenido y luego ingresar lo siguiente):
http_port 3128 transparent
cache_mem 100 MB
cache_dir ufs /var/spool/squid 150 16 256
acl localnet src 10.10.10.0/24
acl localhost src 127.0.0.1/32
http_access allow localhost
http_access allow localnet
Luego, debemos configurar las reglas de Iptables para permitir el acceso a Internet a través del proxy transparente. Para ello, ingresamos las siguientes reglas:
sudo iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT --to <IP_PUBLICA_SERVIDOR>
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to <IP_INTERNA_SERVIDOR_PROXY>:3128
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
NOTA: En las variables --dport
, --to
y --to-port
, nótese que se utiliza doble guion (--
) antes de cada variable. Por motivos de formato, en el texto original podría aparecer como un solo guion.
Otras reglas útiles para la configuración de proxy:
- Si tiene un proxy en un equipo diferente, utilice la siguiente regla:
iptables -t nat -A PREROUTING -i <interfaz_entrada> -p tcp --dport 80 -j DNAT --to <ip_proxy>:<puerto_proxy>
- Si tiene el servicio de proxy en la misma máquina, use la siguiente regla:
iptables -t nat -A PREROUTING -i <interfaz_entrada> -s <ip_origen> -p tcp --dport 80 -j REDIRECT --to-port <puerto_proxy>
- Asegúrese de que su red no esté en la ruta del bloque IP del servidor proxy. De lo contrario, tendrá que añadir la ruta en sus tablas de enrutamiento y agregar la siguiente regla a sus Iptables:
iptables -t nat -A POSTROUTING -o <interfaz_salida> -s <ip_origen> -d <ip_destino> -j SNAT --to <ip_origen_mismo_bloque_destino>