Guìa para puesta en funcionamiento de un FIREWALL/NAT

Imagen de danmk3
AdjuntoTamaño
Plain text icon firewall.txt1.94 KB
Plain text icon rc.firewal-2.4.txt9.97 KB

Forums: 

La presenta guìa indica como configurar IPTABLES: reglas, mòdulos, scripts y consideraciones varias. Està basada en la distro RedHat 7.X, 8.0, 9.0 y Fecora core 2. Los paths a los archivos y directorio difieren en las distros de diferente marca y/o version, pero en si la funcionalidad es la misma para GNU-Linux.

SOFTWARE REQUERIDO:
1. Redhat Linux 7.X, 8.0 o 9.0. Fedora core 2 (http://www.linuxiso.org)
2. rc.firewall-2.4 [archivo adjunto]
3. firewall [archivo adjunto]

HARDWARE REQUERIDO:
1. 2 (dos) tarjetas de red, NO una.
2. Una IP de cada red que desean conectar, ejemplo:
   una pùblica(dada por tu ISP) y,
   una privada (tomaremos una de la red 192.168.10.0/24: 192.168.10.1)

GUÌA:
IPTABLES es una aplicaciòn estandard de las distro que manejan kernel 2.4, no confundir con IPCHAIN que es màs aplicada a kernel 2.2 y difieren en el manejo del filtrado de paquetes: un ejemplo de esto es NAT, el manejo de NAT es màs "nativo" en IPTABLES contrario a IPCHAIN que debìa hacer varios pasos para realizarlo.

NOTA: asumimos:
a) Que ya tienes instalado Linux.
b) Que las tarjetas de red fueron detectadas y funcionan con sus adecuados controladores.
b) Que NO estàn configuradas las interfaces de red.
c) Que NO tienes ninguna regla activa en IPTABLES.

Paso 1. Configurar las tarjetas de red.

En el directorio /etc/sysconfig/network-scripts/, crea o debe exitir los archivos ifcfg-ethX, la X indica la posiciòn de la interface: inician en 0 (cero) y su màximo es el nùmero de slots de expansiòn que tiene la tarjeta madre (he instalado hasta 6 tarjetas de red).

Como se tiene 2 tarjetas debe existir ifcfg-eth0 y ifcfg-eth1, estas definen las interfaces de red fìsicas+principales. Las llamadas interfaces virtuales se nombrar ifcfg-ethX:Y, donde X es la interface fìsica+principal;y, Y es la virtual que va de 0 hasta 128 (no he confirmado esto, màximo he colocado 8 virtuales en una tarjeta). Por regla general, las posiciones màs cercanas a 0 (cero) son para las IP pùblicas o que son vistas hacia Internet.

Como ejemplo ifcfg-eth0 deberìa contener:

D EVICE=eth0
B OOTPROTO=static
I PADDR=216.239.39.99 -- Asignada por el ISP
N ETMASK=255.255.255.248 -- Definida por el ISP
O NBOOT=yes

Como ejemplo, ifcfg-eth1 deberìa contener:

D EVICE=eth1
B OOTPROTO=static
I PADDR=192.168.10.1
N ETMASK=255.255.255.0
O NBOOT=yes

NOTA: Existen otro datos como BROADCAST, NETWORK que para esta guìa no se usaràn, solo como ejemplo:

BROADCAST=192.168.10.255
NETWORK=192.168.10.0

Una vez configurada las interfaces, se reinicia el servicio de red con /etc/rc.d/init.d/network restart. Hay como activar estos cambios on-fly usando ifconfig pero para aseguranos que la configuraciòn està correcta se deberìa reiniciar la màquina, antes que hagas esto se debe completar el paso 2.

Paso 2. Activar la pasarela de paquetes y asignar un GW por default

En el directorio /etc/, ingresa al archivo sysctl.conf, allì se encuentra esta lìnea:

net.ipv4.ip_forward = 0

Debes cambiar el 0 por 1, y queda asì:

net.ipv4.ip_forward = 1

En el directorio /etc/sysconfig/, ingresa al archivo network, este debe contener estos datos:

NETWORKING=yes
HOSTNAME=fwquito
GATEWAY=216.239.39.97 -- Asignada por el ISP

Ahora sì puedes reiniciar la màquina. :)

Paso 3. Configura rc.firewal-2.4

IMPORTANTE: revisa el archivo rc.firewal-2.4 adjunto, tiene las reglas bàsicas de permisos para el FIREWALL/NAT. Debes cambiar el path de IPTABLES hacia donde està el ejecutable de iptables.

Si consideras adecuado puedes agregar estas reglas justo antes de limpiar las reglas. Descomenta la regla quitando el #:

# Deshabilitar broadcast
#/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Deshabilitar el ping… quizá discutible.
#/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# Deshabilitar la redirección del ping
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

# Registrar los accesos extraños, paquetes falseados, etc..
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

====================

Si consideras adecuado agrega estas reglas, yo considero que deberìas agregarlas:

echo " Prohibiendo ICMP"
$IPTABLES -A INPUT -i $EXTIF -p icmp -j DROP
$IPTABLES -A INPUT -i $EXTIF -p icmp --icmp-type echo-request -j DROP

echo " Direcciones privadas NO permitidas desde Internet"
$IPTABLES -A INPUT -i $EXTIF -d 10.0.0.0/8 -j DROP
$IPTABLES -A INPUT -i $EXTIF -d 172.16.0.0/12 -j DROP
$IPTABLES -A INPUT -i $EXTIF -d 192.168.0.0/16 -j DROP
$IPTABLES -A INPUT -i $EXTIF -d 127.0.0.1/32 -j DROP
$IPTABLES -A FORWARD -d 10.0.0.0/8 -j DROP
$IPTABLES -A FORWARD -d 172.16.0.0/12 -j DROP
$IPTABLES -A FORWARD -d 192.168.0.0/16 -j DROP

### Ping of death ###
echo " Ping of death"
$IPTABLES -N ping-death
$IPTABLES -A ping-death -m limit --limit 1/s -j ACCEPT
$IPTABLES -A ping-death -j DROP
$IPTABLES -A FORWARD -p icmp --icmp-type echo-request -j ping-death

=====================

Para activar NAT, ademàs de incluir los modulos, debes agregar reglas como las siguientes (en el rc.firewall-2.4 esta una regla general, yo recomiendo hacer por IP y no por segmento o por toda la RED )

$IPTABLES -t nat -A POSTROUTING -o $EXTIF -s 192.168.10.21/32 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -s 192.168.10.22/32 -j MASQUERADE

======================

Para direccionar el servicio HTTP (puerto 80) hacia un servidor de la red privada, agrega estas reglas (ESTOS PRIMEROS 2 DATOS DEBEN ESTAR A CONTINUACIÒN DE LA DEFINICIÒN DE
EXTIF="eth0" Y INTIF="eth1"):

WEBINTIP=192.168.10.2
EXTIP=216.239.39.99

# Direccionamiento de peticio HTTP a 192.168.10.2
$IPTABLES -A FORWARD -p tcp --dport 80 -d $WEBINTIP -j ACCEPT
$IPTABLES -A PREROUTING -t nat -p tcp --dport 80 -d $EXTIP -j DNAT --to $WEBINTIP

Si fuese al puerto SMTP cambiar el 80 por 25.

Si el direccionamiento es hacia otro puerto del servidor interno, las reglas deben lucir asì:

# Direccionamiento al puerto 8080 de peticio HTTP
$IPTABLES -A FORWARD -p tcp --dport 8080 -d $WEBINTIP -j ACCEPT
$IPTABLES -A PREROUTING -t nat -p tcp --dport 80 -d $EXTIP -j DNAT --to $WEBINTIP:8080

=======================

Una vez que tengas todas las reglas que consideras adecuadas, grabas y sales de archivo.

Lo mueves a /etc/rc.d/ y le cambias los permisos (rwx solo para root, para el resto sin permisos) asì:

chmod 700 /etc/rc.d/rc.firewall

Paso 4. Script de inicio del firewall
Revisa el archivo firewall adjunto. Debes cambiar el path donde esta el ejecutable de IPTABLES.

Paso 5. Subscripciòn del servicio firewall a los booteables
Desde la lìnea de comando y como superusuario ejecuta esto:

chkconfig --level=345 firewall on

Paso 6. Reiniciar el servidor
Que màs puedo decir, :)

NOTAS Y SUGERENCIAS:
a. Algunos recomiendan que las reglas por default deberìan ser prohibido toda conexiòn, es decir:

$IPTABLES -P INPUT ACCEPT --cambiar por--> $IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT --cambiar por--> $IPTABLES -P OUTPUT DROP

Esto conlleva a que pongamos expresamente las reglas de conexiòn tanto para nuestra red interna como desde Internet, o de lo contrario no habrà comunicaciòn. Esto es vàlido para quienes son paranoicos de la seguridad, a mi parecer esto es una traba si lo que hace el firewall es dar acceso a un sitio web visto a Internet y salida desde la red interna. Colocar reglas que cierren los puertos màs vulnerables es suficiente (puertos 22,21,20 y 199) o desechen conxiones desde IPs peligrosas.

b. No permitir conexiones administrativas desde el exterior, ni acceso al POP o IMAP (estos deben ser a travès de webemail y con conexiones certficadas en SSL).

c. Pueden revisar http://www.e-infomax.com/ipmasq/howto/c-html/firewall-examples.html, que es donde me base para instalar mi primer FIREWALL y en que se basa gran parte de esta guìa :)

d. Todo comentario o sugerencia es bienvenido.

Saludos

Danmk3