Filtrado de puertos con Iptables

23 febrero, 2013
admin

Lo mas habitual es crear un script con las reglas, y ejecutarlo luego.

Para crearlo abrir un terminal y escribir:

touch iptables-script.sh

Le damos de extensión .sh

Ahora le cambiamos los permisos al archivo que hemos creado:

chmod 755 iptables-script.sh

Ahora lo abrimos con cualquier editor de texto, por ejemplo nano:

nano iptables-script.sh

Añadimos esta linea arriba del todo:

#!/bin/bash

Y añadimos las reglas que queramos.
Una vez listas todas las reglas, guardaríamos el archivo, y para ejecutarlo escribiríamos en el terminal ./ seguido del nombre del archivo:

./iptables-script.sh

Sintaxis de las reglas:

iptables -A INPUT -o eth0 -p tcp –dport 80 -j ACCEPT

La opción -A añade, si fuera -D quitaria.
La opción INPUT especifica que es para una regla de entrada, seria OUTPUT si fuera de salida.
La opción -o eth0 especifica la tarjeta de red. (Si solo se tiene una tarjeta de red no es necesario ponerlo)
La opción -p especifica el protocolo, podria ser tambien -udp, o -icmp
La opción–dport especifica el puerto.
La opción -j especifica la accion. Puede ser ACCEPT, DROP o REJECT

Ejemplos:

Añadir una regla para abrir el puerto 20 y 21 para nuestra tarjeta de red eth0:

iptables -A INPUT -o eth0 -p tcp –dport 20:21 -j ACCEPT

Quitar la regla antes añadida:

iptables -D INPUT -o eth0 -p tcp –dport 20:21 -j ACCEPT

Darle permiso para todo a nuestra ip:

iptables -A INPUT -s 195.65.34.234 -j ACCEPT

Permitir los puertos 20 y 21 solo a una ip determinada:

iptables -A INPUT -s 231.45.134.23 -p tcp –dport 20:21 -j ACCEPT

Ejemplo de un script:

#!/bin/bash
 
#Primero borramos las reglas:
iptables -F
 
#Ahora añadimos las reglas.
 
#Por ejemplo, si tenemos un servidor web:
iptables -A INPUT -o eth0 -p tcp –dport 80 -j ACCEPT
 
#Si ademas nuestro servidor web es un servidor seguro:
iptables -A INPUT -o eth0 -p tcp –dport 443 -j ACCEPT
 
#Si tenemos un servidor FTP: 
iptables -A INPUT -o eth0 -p tcp –dport 20:21 -j ACCEPT 


#Ahora que acepte todas las respuestas de una conexión ya establecida:
iptables -A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT 


#Y cualquier respuesta entrante ya establecida: 
iptables -A INPUT -m state –state RELATED,ESTABLISHED 


#Impedir que hagan ping a nuestra ip: 
iptables -A INPUT -o eth0 -p icmp -j DROP 


#Ahora cerramos todos los puertos importantes, desde el 1 hasta el 1024:
iptables -A INPUT -o eth0 -p tcp -dport 1:1024 -j DROP 

iptables -A INPUT -o eth0 -p udp -dport 1:1024 -j DROP

Si necesitas algo mas de ayuda:

Esto es un programa sencillo creado por mi que te permite listar las reglas y borrarlas con un solo botón, añadir reglas de entrada y salida, donde te pedirá un puerto o un rango de puertos y si lo quieres en ACCEPT o DROP.
Además, crea un log propio de los cambios realizados.

Puedes copiar y pegarlo en un fichero de texto con extension .sh

#!/bin/bash


#Creado por Fernando Vte. Pla 
clear
echo ” “
echo “##############################################################”
echo ”    Bienvenido `logname` al iptables configurable”
echo “##############################################################”
echo ” “
echo ”                (c) UtilizaLINUX “
echo ” “
echo “————————————————————–“
echo ” Debes iniciar el programa como root”
echo ” Si no lo has hecho así, sal y loguea como root”
echo ” Para ello escribe: sudo su”
echo ” Pon la contraseña de root y vuelve a iniciar el programa”
echo “————————————————————–“
echo ” “
echo “Iniciar programa [Y,N]?”
echo ” “


FECHA=(`date +”%d/%m/%Y”`)
HORAR=(`date +”%r”`)
touch /var/log/iptables-cambios.log


read RESPUESTAA


case “$RESPUESTAA” in


y|Y) 
echo “Iniciando programa…”



while true
do

clear
echo ” “
echo “————————————-“
echo “|  Las opciones que tienes son:     |”
echo “|                                   |”
echo “|  Listar las reglas existentes: L  |”
echo “|  Borrar las reglas existentes: B  |”
echo “|  Introducir reglas de entrada: I  |”
echo “|  Introducir reglas de salirda: O  |”
echo “|  Ver log de iptables:          G  |”
echo “|  Salir de la aplicación:       X  |”
echo “————————————-“
echo ” “


read RESPUESTA2

case “$RESPUESTA2″ in

l|L)
echo ” “
echo “Para ver el listado de forma estandar:           E”
echo “Para ver el listado de forma verbosa:            V”
echo “Para ver el listado de forma numerica:           N”
echo “Para ver el listado de forma verbosa y numerica: A”
echo ” “
read LISTADO

case “$LISTADO” in

e|E)
echo “Listado estandar:”
echo ” “
iptables -L
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


v|V)
echo “Listado verboso:”
echo ” “
iptables -L -v
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


n|N)
echo “Listado numerico:”
echo ” “
iptables -L -n
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;




a|A)
echo “Listado verboso y numerico:”
echo ” “
iptables -L -vn
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;
esac
;;




b|B)
echo ” “
echo “Borrando las reglas ya existentes…”
iptables -F
echo ” $FECHA $HORAR Reglas Borradas” >> /var/log/iptables-cambios.log
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


i|I)
echo ” “
echo “-Reglas de entrada-“
echo ” “
echo “Dime un puerto”
echo ” “
read PUERTOI
echo ” “
echo “Para abrir el puerto dime   A”
echo “Para cerrar el puerto dime  C”
echo ” “
read RESPUESTAAOC

case “$RESPUESTAAOC” in

a|A)
echo ” “
echo “Creando regla de entrada…”
echo ” “
iptables -A INPUT -p tcp –dport $PUERTOI -j ACCEPT
echo ” $FECHA $HORAR Reglas de entrada ACCEPT en el puerto $PUERTOI” >> /var/log/iptables-cambios.log
echo “Se ha creado la regla de entrada correctamente”
echo ” “
echo “El puerto de entrada $PUERTOI ha sido puesto en ACCEPT”
echo ” “
echo ” “
echo “pulsa Enter para continuar”
echo ” “
read ESPERAR
;;

c|C)
echo ” “
echo “Creando regla de entrada…”
echo ” “
iptables -A INPUT -p tcp –dport $PUERTOI -j DROP
echo ” $FECHA $HORAR Reglas de entrada DROP en el puerto $PUERTOI” >> /var/log/iptables-cambios.log
echo “Se ha creado la regla de entrada correctamente”
echo ” “
echo “El puerto de entrada $PUERTOI ha sido puesto en DROP”
echo ” “
echo ” “
echo “pulsa Enter para continuar”
echo ” “
read ESPERAR
;;


*)
echo “Opción no computable”
echo “Debes decirme [A,C]”
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


esac
;;


o|O)
echo ” “
echo “-Reglas de salida-“
echo ” “
echo “Dime un puerto”
echo ” “
read PUERTOO
echo ” ”
echo “Para abrir el puerto dime   A”
echo “Para cerrar el puerto dime  C”
echo ” “
read RESPUESTAAOCO

case “$RESPUESTAAOCO” in

a|A)
echo ” “
echo “Creando regla de salida…”
echo ” “
iptables -A OUTPUT -p tcp –dport $PUERTOO -j ACCEPT
echo ” $FECHA $HORAR Reglas de salida ACCEPT en el puerto $PUERTOO” >> /var/log/iptables-cambios.log
echo “Se ha creado la regla de salida correctamente”
echo ” “
echo “El puerto de salida $PUERTOO ha sido puesto en ACCEPT”
echo ” ”
echo ” “
echo “pulsa Enter para continuar”
echo ” “
read ESPERAR
;;

c|C)
echo ” “
echo “Creando regla de entrada…”
echo ” “
iptables -A OUTPUT -p tcp –dport $PUERTOO -j DROP
echo ” $FECHA $HORAR Reglas de salida DROP en el puerto $PUERTOO” >> /var/log/iptables-cambios.log
echo “Se ha creado la regla de salida correctamente”
echo ” “
echo “El puerto de salida $PUERTOO ha sido puesto en DROP”
echo ” ”
echo ” “
echo “pulsa Enter para continuar”
echo ” “
read ESPERAR
;;


*)
echo “Opción no computable”
echo “Debes decirme [A,C]”
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


esac
;;



g|G)
echo ” “
echo “Este log lo crea el programa y solo muestra los cambios realizados con el programa.”
echo ” “
cat /var/log/iptables-cambios.log
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;


x|X)
echo ” “
echo “¿Estas seguro de que deseas salir [Y,N]?”
echo ” “
read SALIRSALIRR
case “$SALIRSALIRR” in

y|Y)
clear
exit
;;


n|N)
;;


*)
echo “Dime solo [Y,N]”
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR


esac
;;


*)
echo “Opción no computable, ciñete a las opciones del menú”
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;
esac
done
;;


n|N)
echo ” “
echo “¿Estas seguro de que deseas salir [Y,N]?”
echo ” “
read SALIRSALIR
case “$SALIRSALIR” in

y|Y)
clear
exit
;;


n|N)
;;


*)
echo “Dime solo [Y,N]”


esac
;;


*)
echo “Dime [Y,N] No acepto otra opcion”
echo ” “
echo “pulsa Enter para continuar”
read ESPERAR
;;
esac

Sin comentarios

You must be logged in to post a comment.
CONTENIDO PATROCINADO POR

FPla Informatica

Diseño web y Marketing digital
Disponga de una página web o un comercio electrónico de alta calidad a precios muy competitivos.
ACCEDER A FPLA INFORMATICA
close-link