IPTables en Apache, ftp, aMule y samba

Mayo 25th, 2007

IptablesTal como esta la red actualmente, tener un pc siempre conectado y sin ningún tipo de protección es poco menos que suicida. En este post explicaremos como hacer unas sencillas reglas que protegeran relativamente nuestro sistema permitiendo los servicios de samba, apache, mysql, ftp y aMule.
En una máquina Linux, el firewall no es ningún Software añadido. Lo que existen son front-ends en los que configurar el filtrado de paquetes como Firewall Builder, Firestarter, o Gnome Lokkit. Nosotros vamos a crear un script efectivo de forma facilisima.

Comenzamos:

Los comandos de IPTables básicos son:

  • iptables –F : flush de reglas
  • iptables –L : listas las reglas activas en ese momento
  • iptables –A : añadir regla
  • iptables –D : borra la regla indicada

Con los atributos siguientes:

  • -i eth0: interfaz de red eth0
  • -s 0.0.0.0/0: dirección de acceso (cualquiera en este caso)
  • -p TCP: tipo de puerto
  • –dport: puerto de destino
  • -j “acción”: Donde acción puede ser: REJECT>, LOG, DNAT, o SNAT

La estructura del comando iptables es:
iptables "opcion" "estado del paquete" "origen,tipo,puerto,etc..." "acción"

Por ejemplo:
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT

Donde “A” añade la regla, “OUTPUT” es el estado del paquete, “-p tcp” el tipo de protocolo, “–dport 53″ el puerto de destino y “-j ACCEPT” es la acción a realizar con el paquete. Esta seria una de las reglas para permitir consultas DNS.

Ahora que ya sabemos como funcionan las reglas, vamos a ver un sencillo script

#!/bin/sh
## SCRIPT de IPTABLES
## Ejemplo de script para proteger nuestra máquina
##
##
echo -n Aplicando Reglas de Firewall..
#
# Instalando modulos
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
#
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
#
# Establecemos politica por defecto: denegar todos los que entran, aceptar la salida
# permitiendo el reenvio, acceptar y poner a cero el byte y los contadores de paquetes
# de la cadena de PREROUTING y POSTROUTING en la tabla nat
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
#
# Acepta acceso de las conexiones ya establecidas, con lo cual no es necesario
# generar una segunda regla para las respuestas de cada servicio.
iptables -A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
## Empezamos a filtrar
# El localhost se deja (por ejemplo conexiones locales a mysql)
/sbin/iptables -A INPUT -i lo -j ACCEPT
#
# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.1.33 -j ACCEPT
#
# Permitimos el acceso a samba desde la lan
iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp –dport 137 -j ACCEPT
#
# Permitimos las conexiones del aMule. En mi caso uso los puertos 2662 y 2672
iptables -A INPUT -p tcp –dport 2662 -j ACCEPT
iptables -A INPUT -p udp –dport 2662+3 -j ACCEPT
iptables -A INPUT -p udp –dport 2672 -j ACCEPT
#
# Permitimos el acceso ftp
iptables -A INPUT -s 0.0.0.0 -p tcp –dport 20:21 -j ACCEPT
#
# Permitimos el puerto 80, tenemos apache corriendo
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
#
# Permitimos el acceso ssh desde cualquier sitio
iptables -A INPUT -s 0.0.0.0 -p udp –dport 22 -j ACCEPT
iptables -A INPUT -s 0.0.0.0 -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -s 0.0.0.0 -p udp –dport 22 -j ACCEPT
iptables -A INPUT -s 0.0.0.0 -p tcp –dport 22 -j ACCEPT
#
# Permitir consultar a los dns
iptables -A OUTPUT -p tcp –dport 53 -j ACCEPT
iptables -A OUTPUT -p udp –dport 53 -j ACCEPT
#
echo ” OK . Verifique que lo que se aplica con: iptables -L -n”

Con esto ya tenemos las reglas del firewall, ahora vamos ha iniciarlas. Guardamos el script en /etc/init.d/ y le damos el nombre firewall.sh.

Le damos permisos de ejcución:
$ chmod 755 /etc/init.d/firewall.sh

Lo iniciamos
$ /etc/init.d/firewall.sh

y hacemos que se ejecute cuando se inicie el sistema (proceso para debian):
$ update-rc.d firewall.sh defaults

que equivale a los argumentos:
update-rc.d firewall.sh start 20 2 3 4 5 . stop 20 0 1 6
donde “start 20 2 3 4 5 .” indica que se iniciará con prioridad 20 y niveles de ejecución “2 3 4 5″.

También desde webmin es muy fácil añadir el scirpt al inicio.
Para comprobar si funciona haremos:
$ iptables -L -v
pkts | bytes | target | prot | opt | in | out | source | destination
6637K | 1546M | ACCEPT | 0 | -- | any | any | anywhere | anywhere

Que nos listará las reglas de iptables aceptando, rechazando, etc… paquetes. Información basada en http://pello.info, Wikipedia y debian.org y mis ejercicios.

Publicado en la categoría Linux, Redes

2 Responses

    The Wil Family » Blog Archive » Seguridad en SSH: iptables, denyhosts, sudoers… Dijo:

    [...] rootkits o hacerse con el control del mismo. Lo primero para mantener nuestra maquina protegida, será hacer un script de IPTABLES personalizado para nuestro sistema, con política por defecto [...]

    servtelecom Dijo:

    He puesto tu ejemplo y funciona perfectamente pero he añadido una 3 eth para que otra red pueda compartir internet, lo que me gustaria saber es… como puedo hacer para que… desde una red o desde la otra compatan recursos de windows haciendo \\ip\recurso ya que no funciona!
    red1 172.26.1.0
    red2 172.26.2.0

    no puedo hacer, entre estas redes un \\ip\recurso

    Entre las dos redes si que puedo navegar por internet! y desviar puertos pero los recursos compartidos no, solo al servidor samba que es el mismo firewall y que esta entre medio de las dos lineas!

Hacer comentario