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

Refrescar página web automáticamente con PHP

Cuando necesitamos refrescar nuestra página web automáticamente cada cierto tiempo, lo primero que se nos ocurre es utilizar una función en JavaScript, pero debemos saber que también lo podemos hacer con código PHP.La función de refresco de página en PHP es muy sencilla, por lo que pasamos a verla directamente:$self = $_SERVER['PHP_SELF']; //Obtenemos la página en la que nos encontramos
header("refresh:300; url=$self"); //Refrescamos cada 300 segundos Nota: 300 segundos = 5 minutos (para que los veáis más claramente).

Imagen de fondo que se ajusta al ancho con CSS3

Para conseguir que una imagen de fondo se adapte al tamaño de la caja contenedora podemos usar una de las nuevas propiedades que CSS3 nos proporciona.Si tenemos el siguiente código en nuestro archivo .html: <div id="contianer"&gt...</div&gt Los estilos a aplicar en el archivo .css para que la imagen de fondo se ajuste al ancho de la caja son los siguientes #container { -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-image: url("iamge.jpg"); background-size: cover; height: 400px; width: 90%; margin: 0 auto; } En realidad, el código que nos interesa son solo los 5 primeros atributos, que son los que afectan a la imagen y nos facilitan su adaptación.Como podéis comprobar, CSS3 es una herramienta indispensable a la hora de crear nuestras webs.

Montar USB en Ubuntu (Server) modo consola

Si nuestro Linux no es capaz de reconocer nuestro pendrive o nuestro SO no dispone de entorno gráfico, como puede ser en el caso de que utilizemos un Server, nos vemos obligados a montar el USB de forma manual, en este caso con Ubuntu.
Dado que los pendrives son montados como unidades de almacenamiento masivo y como si se tratasen de unidades scsi, el usb será nombrado con la tipología "sdxX" donde x (puede ser a,b,c,d) será el canal donde está conectado y X (1,2,3,4,5....) será el numero de dispositivo, cabe destacar que en algunas distribuciones no es necesario el uso del numero de dispositivo X como en slackware (y slamd64).
Podemos ver las unidades disponibles con:
$ ls /dev/sd*
Aunque tal vez sea más conveniente ejecutar el comando:
$ls -l /dev/sd*
Para ver qué dispositivos se encuentran actualmente en uso
nos mostrará las unidades que se encuentran disponibles. Ahora debemos crear una carpeta para montar el usb:
#mkdir /media/usb
y ejecutamos la siguiente instrucción para mont…