Preparación del Sistema Linux

Instale tan sólo lo imprescindible del sistema Linux. Mi instalación comenzó con la configuración del servidor y luego desactivé todos los servicios en /etc/inetd.conf. Para más seguridad, deberá desinstalar los servicios innecesarios.

Puesto que la mayoría de las distribuciones no disponen de un núcleo que se adapte a sus necesidades, será preciso que compile su propio núcleo. Lo mejor será hacerlo con otro computador que no sea el cortafuegos. Si usted ha instalado un compilador C y otras utilidades en su cortafuegos, desinstálelos después de completar la configuración del núcleo.

Compilación del núcleo

Comience con una instalación mínima de su distribución Linux. Cuantos menos programas cargue, menos agujeros, puertas traseras o fallos introducirán problemas de seguridad en su servidor.

Use un núcleo estable. Yo uso el núcleo 2.2.13 en mi sistema, por lo que esta documentación se basa en la instalación en ese núcleo.

Necesitará recompilar el núcleo Linux con las opciones apropiadas. Si usted no ha recompilado antes su núcleo, lea el Cómo Núcleo, el Cómo Ethernet, y el Cómo NET-2.

Aquí tiene la configuración relativa a la red en la que trabajo. He marcado algunas líneas con ?. Si usted usa esta aplicación, actívela también.

Yo uso "make menuconfig" para editar la configuración de mi núcleo.

<*> Packet socket
[ ] Kernel/User netlink socket
[*] Network firewalls
[ ] Socket Filtering
<*> Unix domain sockets
[*] TCP/IP networking
[ ] IP: multicasting
[*] IP: advanced router
[ ] IP: kernel level autoconfiguration
[*] IP: firewalling
[?] IP: always defragment (required for masquerading)
[?] IP: transparent proxy support
[?] IP: masquerading
--- Protocol-specific masquerading support 
    will be built as modules.
[?] IP: ICMP masquerading
--- Protocol-specific masquerading support 
    will be built as modules.
[ ] IP: masquerading special modules support
[*] IP: optimize as router not host
< > IP: tunneling
< > IP: GRE tunnels over IP
[?] IP: aliasing support
[*] IP: TCP syncookie support (not enabled per default)
--- (it is safe to leave these untouched)
< > IP: Reverse ARP
[*] IP: Allow large windows (not recommended 
    if <16Mb of memory)
< > The IPv6 protocol (EXPERIMENTAL)
---
< > The IPX protocol
< > Appletalk DDP
< > CCITT X.25 Packet Layer (EXPERIMENTAL)
< > LAPB Data Link Driver (EXPERIMENTAL)
[ ] Bridging (EXPERIMENTAL)
[ ] 802.2 LLC (EXPERIMENTAL)
< > Acorn Econet/AUN protocols (EXPERIMENTAL)
< > WAN router
[ ] Fast switching (read help!)
[ ] Forwarding between high speed interfaces
[ ] PU is too slow to handle full bandwidth
QoS and/or fair queueing  --->

Después de realizar la configuración que usted necesita, deberá recompilar, reinstalar el núcleo y reiniciar.

Use la orden:

make dep; make clean; make bzlilo; make modules; make modules_install;init 6 para llevarlo a cabo en un solo paso

Configuración de dos tarjetas de red

Si su ordenador dispone de dos tarjetas de red, necesitará añadir una línea adicional a su fichero /etc/lilo.conf para describir el IRQ y la dirección de ambas tarjetas. La línea adicional será similar a ésta:

append="ether=12,0x300,eth0 ether=15,0x340,eth1"

Configuración de las Direcciones de Red

Ahora comienza la parte divertida de la instalación. No entraré en detalles sobre cómo instalar una LAN, para ello, lea el Cómo de redes en Linux.

Nuestro objetivo es disponer de dos conexiones a red para su sistema de filtro cortafuegos. Uno en el lado de Internet (el lado inseguro) y el otro en el LAN (el lado seguro).

De todas formas, tendrá que tomar decisiones.

  1. ¿Usará un número de dirección IP real, o se inventará alguno para su LAN?

  2. ¿Su ISP asignará la dirección IP dinámicamente, o usará direcciones IP fijos?

Puesto que lo que usted quiere es que desde Internet no se pueda acceder a su red privada, no deberá utilizar "direcciones reales", simplemente invéntese direcciones para su LAN privada. Esto no es muy recomendable, porque si los datos salen de su LAN, podrían terminar en el puerto de otro sistema.

Existe un rango de números de dirección para Internet destinado a redes privadas. Este rango es 192.168.1.xxx, el mismo que usaremos en nuestros ejemplos.

Para ello necesitará usar la máscara IP. Con este proceso, el cortafuegos enviará paquetes y los traducirá a una dirección IP "REAL " " para navegar por Internet.

Usando una dirección IP sin ruta, su red será más segura. Los encaminadores de Internet no pasarán paquetes con estas direcciones.

Llegado este punto puede resultar aconsejable que lea el Cómo de IP Masquerade.

          24.94.1.123  ____________   192.168.1.1 
   _/\__/\_        \ |             | /         _______________ 
  |        |        \| Sistema     |/         | Estación/ones | 
 / Internet \--------| Cortafuegos |----------| de Trabajo    | 
 \_  _  _  _/        |_____________|          |_______________| 
   \/ \/ \/

Deberá tener una dirección IP "real" para asignarle su tarjeta IP de red. Esta dirección le podrá ser asignada permanentemente. (Una dirección IP fija) o se le podrá asignar un tiempo de conexión a la red por el proceso PPP.

Elija el número IP interno. Por ejemplo, 192.168.1.1 a la tarjeta LAN. Esta será su dirección IP de puerta de enlace. De la misma forma, se podrá asignar a los demás computadores de la red protegida (LAN) un número del rango 192.168.1.xxx. (192.168.1.2 hasta 192.168.1.254)

Yo uso RedHat Linux para configurar la red y añado un fichero ifcfg-eth1 en el directorio /etc/sysconfig/network-scripts. También podrá encontrar un fichero ifcfg-ppp0 o ifcfg-tr0 en este directorio. Estos ficheros 'ifcfg-' se usan en RedHat para configurar y desactivar los dispositivos de red al reiniciar el equipo, y se ejecutan después de la conexión. Se nombran después del tipo de conexión.

Aquí mostramos el fichero ifcfg-eth1 (segunda tarjeta ehternet) como ejemplo;

DEVICE=eth1 
IPADDR=192.168.1.1 
NETMASK=255.255.255.0 
NETWORK=192.168.1.0 
BROADCAST=192.168.1.255 
GATEWAY=24.94.1.123 
ONBOOT=yes

Si usa una conexión conmutada, necesitará ver los ficheros ifcfg-ppp0 y chat-ppp0, que controlan su conexión PPP.

El fichero ifcfg debe tener un aspecto parecido al siguiente:

    DEVICE="ppp0"           
    ONBOOT="yes"
    USERCTL="no"
    MODEMPORT="/dev/modem"      
    LINESPEED="115200"          
    PERSIST="yes"   
    DEFABORT="yes"  
    DEBUG="yes"     
    INITSTRING="ATZ"
    DEFROUTE="yes"  
    HARDFLOWCTL="yes"           
    ESCAPECHARS="no"
    PPPOPTIONS=""   
    PAPNAME="LoginID"           
    REMIP=""        
    NETMASK=""      
    IPADDR=""       
    MRU=""          
    MTU=""          
    DISCONNECTTIMEOUT=""        
    RETRYTIMEOUT="5"
    BOOTPROTO="none"

Comprobación de su red

Empiece usando las órdenes ifconfig y route. Si usted tiene dos tarjetas de red, ifconfig deberá presentar un aspecto similar a éste:

# ifconfig
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3924  Metric:1
          RX packets:1620 errors:0 dropped:0 overruns:0
          TX packets:1620 errors:0 dropped:0 overruns:0
          collisions:0 txqueuelan:0

eth0      Link encap:10Mbps Ethernet  HWaddr 00:00:09:85:AC:55
          inet addr:24.94.1.123 Bcast:24.94.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1000 errors:0 dropped:0 overruns:0
          TX packets:1100 errors:0 dropped:0 overruns:0
          collisions:0 txqueuelan:0
          Interrupt:12 Base address:0x310

eth1      Link encap:10Mbps Ethernet  HWaddr 00:00:09:80:1E:D7
          inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1110 errors:0 dropped:0 overruns:0
          TX packets:1111 errors:0 dropped:0 overruns:0
          collisions:0 txqueuelan:0
          Interrupt:15 Base address:0x350

y su tabla de encaminado similar a:

# route -n
Kernel routing table
Destination     Gateway         Genmask         Flags MSS    Window Use Iface
24.94.1.0       *               255.255.255.0   U     1500   0       15 eth0
192.168.1.0     *               255.255.255.0   U     1500   0        0 eth1
127.0.0.0       *               255.0.0.0       U     3584   0        2 lo
default         24.94.1.123     *               UG    1500   0       72 eth0

Nota: 24.94.1.0 se encuentra en lado de Internet del cortafuegos y 192.168.1.0 en el lado de la red privada (LAN).

Asegúrese de que todos los computadores de su LAN puedan conectar con la dirección interna de su sistema cortafuegos. (192.168.1.1 en este ejemplo) Si no conectan, vuelva al Cómo de Redes en Linux y trabaje en la red un poco más.

Luego, desde el cortafuegos, trate de conectar con Internet. Yo uso www.internic.net com página de prueba. Si no funciona, inténtelo con un servidor de su ISP. Si aún así no funciona, es que alguna parte de su conexión a Internet es errónea. Desde el cortafuegos, debería poder conectarse a cualquier direcció de Internet. Trate de revisar la configuración de su puerta de enlace por defecto. Si usted usa una conexión conmutada, revise su nombre (ID) y contraseña (Password), relea el Cómo Net-2, e inténtelo de nuevo.

A continuación, trate de conectar con la dirección externa del cortafuegos (24.94.1.123) desde el computador de su LAN. Esto no debería ser posible, pero si lo consigue es que la máscara o el IP Forwarding están activados, o que ya se han filtrado grupos de paquetes. Apague los equipos e inténtelo de nuevo, puesto que necesita saber si el filtro está activo.

Para núcleos posteriores al 2.1.102 pueder usar la orden;

echo "0" > /proc/sys/net/ipv4/ip_forward

Si usa un núcleo anterior (¿por qué?), necesitará recompilar su núcleo con el reenvío de paquetes desactivado. (O mejor actualícelo)

Intente conectar de nuevo con la dirección externa del cortafuegos (24.94.1.123). Ahora no debería conseguirlo.

Conecte a continuación el reenvío de paquetes o la máscara. Debería ser capaz de conectar con cualquier página de Internet desde cualquier equipo de su LAN.

echo "1" > /proc/sys/net/ipv4/ip_forward

NOTA IMPORTANTE: Si usted usa una dirección IP "REAL" (que no sea 192.168.1.*) y no puede conectar con Internet, pero PUEDE hacerlo desde el lado de Internet del cortafuegos, asegúrese de que su proveedor de servicios de internet (ISP) encamina paquetes para la dirección de su red privada.

Una manera de comprobarlo es que algún amigo, usando un proveedor local, se conecte con su red. Si la conexión se detiene en el encaminador de su proveedor, entonces no permiten la entrada de información.

¿Funciona? Estupendo. La parte más difícil ha terminado.

Protección del Cortafuegos

Un cortafuegos es inútil si el sistema en el que está instalado es vulnerable a ataques externos. Un "chico malo" podría acceder desde un servicio sin cortafuegos y modificar el sistema según sus propias necesidades. Usted tendrá que desactivar cualquier servicio innecesario.

Mire el fichero /etc/inetd.conf Con él se configurará el inetd, también llamado "super servidor", que controla varios servidores demonio y los inicia, cuando se requiere, por un paquete que llega a un puerto "bien conocido".

Deberá desactivar cualquier echo, discard, daytime, chargen, ftp, gopher, shell, login, exec, talk, ntalk, pop-2, pop-3, netstat, systat, tftp, bootp, finger, cfinger, time, swat que tenga en su cortafuegos.

Para apagarlo, ponga # como primer carácter de la línea de servicio. Una vez hecho esto, envíe un SIG-HUP al proceso mediante la orden "kill -HUP <pid>", donde <pid> es el número de preocesos de inetd. Con esto, el inetd se releerá su fichero de configuración (inetd.conf) y reiniciará sin apagar el sistema.

Compruébelo haciendo telnet al puerto 15 (netstat) de su cortafuegos. Si se produce una salida de información por pantalla, no ha desactivado todos los servicios.

telnet localhos 15

Usted también puede crear el fichero /etc/nologin. Escriba unas cuantas líneas de texto del tipo (MORRALLA RELLENO). Una vez creado el fichero, la entrada de identificación no permitirá la conexión al usuario. Podrá ver los contenidos de este fichero pero no podrá conectar. Sólo root puede hacerlo.

También puede editar el fichero /etc/securetty. Si el usuario es root, entonces la entrada de identificación debe estar registrada en una tty listada en /etc/securetty. Los errores se registrarán en la utilidad syslog. Con estas dos medidas activadas, la única manera de conectar con el cortafuegos será desde la consola de root.

NUNCA haga un telnet a un sistema identificándose como root. Si necesita realizar acceso root remoto utilice SSH (Secure Shell); tal vez debería incluso desactivar telnet.

Si es usted realmente paranoico tendrá que usar el "lids" (Linux Intrusion Detect System), un parche para el núcleo de Linux que detecta cualquier intrusión en el sistema; el "lids" protege ficheros importantes impidiendo su modificación. Una vez activado, nadie (incluyendo root) puede modificar ficheros, directorios o subdirectorios, a menos que reinicie el sistema con la opción de LILO security=1, especialmente concebido para modificar ficheros protegidos. (Yo iniciaría además el equipo en el modo de usuario único).