Ir al contenido principal

Crear firewall con IpTables en Linux (Ubuntu Server)

S

i no disponemos de un hardware firewall pero queremos montar uno para proteger nuestro ordenador o servidor, podemos usar un software que nos proporciona Linux y es bastante potente llamado IpTables.


Para usar IpTables en Ubuntu debemos de crear un fichero dentro del directorio /etc/init.d/ al que podemos dar cualquier nombre, aunque os recomiendo poner algo descriptivo como “iptables.cf”. Dentro de este archivo tendremos todas las reglas que queremos aplicar darle una protección extra a nuestro Ubuntu.


Un ejemplo de un fichero de configuración de IpTables es el siguiente:



## Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F

## Establecemos politicas predeterminada
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

# Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT

# A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.2.1 -j ACCEPT

# A otra ip interna le permitimos todo
iptables -A INPUT -s 192.168.2.99 -j ACCEPT
iptables -A INPUT -s 192.168.2.100 -j ACCEPT

# Permitimos una conexion a ssh y telnet (22 y 23) desde un equipo
iptables -A INPUT -s 192.168.2.10 -p tcp --dport 22:23 -j ACCEPT

# A otro le permitimos acceso FTP
iptables -A INPUT -s 212.176.121.111 -p tcp --dport 20:21 -j ACCEPT

# El puerto 80 y 8080 (www) abierto, para un servidor web.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 22:23 -j DROP
iptables -A INPUT -p tcp --dport 6001 -j DROP

# Cerramos rango de los puertos privilegiados. Cuidado con este tipo de
# barreras, antes hay que abrir a los que si tienen acceso.
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP

# impedimos iniciar conexion los puertos altos
# (puede que ftp no funcione)
iptables -A INPUT -p tcp --syn --dport 1025:65535 -j DROP

# Cerramos otros puertos que estan abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP

Debemos asegurarnos que el fichero tenga permisos de ejecución, con el comando

chmod +x iptables.cf

Para arrancar el servicio no tenernos más que hacer


/etc/init.d/iptables.cf start

Si lo queremos parar


/etc/init.d/iptables.cf stop

Y si lo queremos reiniciar


/etc/init.d/iptables.cf restart

Podemos comprobar las reglas que se han aplicado con el comando


iptables -L

También os puede interesar:


Problema al iniciar IpTables: “no chain/target/match by that name”
Configuración de archivo para Logs de IpTables

Comentarios

  1. muy buen post brother....

    muy buenas reglas...sencillas pero efectivas

    dj dogus clb
    electronic life is my style

    ResponderEliminar
  2. Son dos subredes. Una con servidores 4. y la otra con clientes 2. Uno de los servidores se utiliza como interconexión.
    Buenas ¿Cómo podría crear un ubuntu server que se utilizara como interconexión (router/firewall) entre internet, red servidores y red estaciones cliente.??? Gracias por la ayuda...
    Dejo aquí mi email: antoniohdz892243@gmail.com

    ResponderEliminar
  3. En caso de hacer el ubuntu server y los demás con maquinas virtuales vmware, ¿habría que configurar o mirar algo por la terminal o de algún otro sitio?

    ResponderEliminar
  4. Hola ubuntu666,

    la verdad que desconozco el procedimiento exacto para hacer lo que dices, pero sí sé que la mayoría de firewalls y routers del mercado corren sobre Linux, por lo que seguro que se puede hacer y está documentado.

    Como experimento me parece muy buena iniciativa, pero si le quieres dar un uso real, te aconsejo que te compres un aparatito porque... teniendo en cuenta el espacio y consumo de energía, a la larga te saldrá más barato.

    ResponderEliminar
  5. /etc/init.d ----- Ruta correcta.

    ResponderEliminar
  6. Muy buen aporte :) ahora mismo lo corrijo (eso pasa por escaparse el dedo una vez y el resto hacer ctrl+c - ctrl+v)

    Un saludo

    ResponderEliminar
  7. ¿y no se puede hacer con maquinas virtuales?

    ResponderEliminar
  8. A qué te refieres con hacerlo con máquinas virtuales¿? A crear una máquina cuya única función sea de cortafuegos¿?

    ResponderEliminar
  9. HOLA. tengo poco conocimiento el linux y tengo que hacer un ejercicios, me pueden ayudar. ejercicios es:
    los host 100, 200, 210 de la red 200.40.80.0/24 son los unicos que podran hacer ping y alcanzar el servicio http, ademas de alcanzar de manera predeterminada ftp,el resto de la red 200.40.80.0 no alcanzara http ni ping la red 190.7.6.0 tiene permisos any any.
    seria de mucha ayuda algun tipo de aporte o ideas, gracias.


    ResponderEliminar
  10. Gracias Amigo funciona perfecto, puedes agregar que después de crear el archivo hay que darle permisos de ejecución, chmod +x iptables.cf, voy a tomarme el atrevimiento de publicarlo en mi blog claro respetando tu autoria

    ResponderEliminar
  11. Genial Ricardo Alonso Chicangana Vidal,

    muchas gracias por tu aportación, ahora mismo lo subo!!

    Te agradecería un Link en tu artículo así granamos todos!!

    Un saludo!

    ResponderEliminar
  12. mi situación es, tengo una red completamente local, y tengo un servidor en dicha red (ubuntu server 12.04), la red esta abierta (no tiene clave) cualquier persona puede conectarse, pero me gustaría que la persona conectada, al abrir el navegador lo redireccione a una pagina de bienvenida, he leído que los portales cautivos sirven para dar permiso a usuario acceder a internet, pero este no es el caso, puesto que no hay internet de promedio, solo quiero que los usuario que se conecten sean redirigidos a una pagina de bienvenida, es todo, crees que con iptables se puede hacer esto? saludos..

    ResponderEliminar
  13. Hola Amigo buen aporte, me gustaria saber como habilito un puerto especifico(escritorio remoto o VPN) y lo redirecciono a una pc local, y que tipo de configuracion tengo que hacer en Modem ya que se gran parte lo tengo que hacer el Iptablet. en el modem se hace algo?

    ResponderEliminar
  14. Hola Amigo buen aporte, me gustaria saber como habilito un puerto especifico(escritorio remoto o VPN) y lo redirecciono a una pc local, y que tipo de configuracion tengo que hacer en Modem ya que se gran parte lo tengo que hacer el Iptablet. en el modem se hace algo?

    ResponderEliminar
  15. Hola Alex,

    una cosa es el Firewall de tu servidor y otra es el modem, por lo que tal vez tenga que ir en otro artículo.

    De cualquier forma, creo que lo que quieres hacer es una redirección a nivel de puertos en tu modem (con funcionalidad de router). Depende del modelo y versión de tu modem tendrás que seguir unos pasos u otros, por lo que te aconsejo buscar en Internet

    ResponderEliminar
  16. Buenas a todos!!

    Estoy realizando practicas en una empresa y me gustaría saber la diferencia entre abrir/cerra un puerto específico en la interfaz del router, y abrirlo/cerrarlo con iptables, a nivel de servidor.

    Les sugerí implementar iptables, pero me respondieron que al tenerlo configurado ya en el router, no les interesa.

    ¿Alguien me puee explicar la diferencia?

    Graciassssssss

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Exportar archivo de configuración de WinSCP

S i estamos trabajando con WinSCP seguro que ya hemos guardado distintas sesiones para acceder a ellas directamente en futuras ocasiones y evitar volver a introducir todos los parámetro de configuración. Seguro que también muchos de vosotros habéis agrupado las sesiones en carpetas dependiendo de la naturaleza de las mismas. Este trabajo ocupa un valioso tiempo que no nos podemos permitir repetirlo para todos los equipos que tenemos, por lo que lo más lógico es configurar todas las sesiones y exportar su configuración al resto de equipos , teniendo una sola versión y evitarnos tener que volver a configurar todas las sesiones en cada uno. El problema es que WinSCP no nos muestra la opción de exportar de una forma sencilla, por lo que tendremos que buscarnos la vida. Lo primero que debemos hacer es abrir el programa y acceder a Preferencias -> Almacenamiento (o su equivalente al inglés) En esta pantalla deberemos indicar que almacene la configuración en un archivo

Asignar valores por defecto a input=”file” y a textarea

S eguro que muchos os habéis estado rompiendo la cabeza buscando la forma de dar un valor por defecto a el tipo de dato input=”file” . Pues que sepáis que no se puede!!! No se puede dar un valor por defecto a los campos de este tipo, ya que hacen referencia a una ruta física local y podrían surgir problemas de seguridad. Lo que se puede hacer, por ejemplo, es mostrar la imagen o el nombre del dato que tenemos almacenado y si el usuario desea modificarla, ofrecerle la opción de cargar una nueva. La etiqueta textarea , aunque pueda parecérnoslo, no se trata de un input y para darle valor por defecto simplemente debemos mostrar el texto que deseemos entre su marca de apertura y de cierre. Es decir, en caso de que lo que deseemos mostrar por defecto sea una variable, introduciremos el siguiente código: <textarea id="txtobservaciones" name="txtobservaciones" rows="2" cols="40" class="txt" ><?=$_POST["txtobservaciones"] ?&

Configuración de archivo de Logs para IpTables

I pTables se usa para configurar, mantener e inspeccionar las tablas de reglas de filtrado de IPs en el kernel de Linux, pero por defecto, su sistema de logs no es todo lo completo esperamos. Por defecto, la mayoría de los logs del sistema se guardan en el fichero /var/log/messages pero en este caso vamos a configurar un nuevo fichero para que almacene únicamente los logs que generaremos con algunas reglas en IpTables , creando así su propio archivo de bitácora . Lo primero que debemos hacer es configurar el archivo /etc/syslog.conf , que se trata de un archivo de configuración en el que se indica el modo en que los mensajes del sistema son bitacorizados a través de la utilidad syslogd que se instala y configura por defecto en todos los sistemas GNU/Linux . Debemos añadir al final del fichero la siguiente sentencia: kern.warning /var/log/iptables.log Con esto indicamos que se almacenen los mensajes provienen del kernel con prioridad 4 o superior ('warning' es el nivel de