Script para hacer NAT en Debian

script

En la entrada anterior, Proxmox – Configurar internet una sola interfaz de red, explicaba como desde el anfitrión se compartía internet hacia las VM mediante NAT. En algunos casos, es necesario redirigir puertos, o lo que llamamos en los routers abrir un puerto. Por ejemplo, el 443 para un servidor web. Con este script, lo que hago es automatizar un poco esto y ahorrarme tiempo cada vez que necesito abrir un puerto.

EL Script

Digo en Debian, porque yo es donde lo programé y donde lo he testeado. Estoy casi seguro que funcionaría en cualquier otra distribución con iptables.

#!/bin/bash
# ©millaredos.com
# version 1.0


# funciones definidas en el script

mainmenu () {
    clear
    echo "Listado de puertos actualmente abiertos:"
    iptables -t nat -v -L PREROUTING -n --line-number

    echo
    echo "Seleccione la opción del menú:"
    echo
    echo -e "1.- Abrir puerto \n2.- Borrar puerto abierto \n3.-Salir"
    read option
    case $option in

        1) menuad ;;
        2) menudel ;;
        3) exit ;;
        *) echo "Opción incorrecta"
           sleep 5
           mainmenu ;;
    esac
}

menuad () {
    echo -e "\n Indique el puerto externo a abrir"
    read ext
    echo "Indique el puerto interno al que redirigir"
    read int
    echo "Indique la IP a la que abrir el puerto"
    read ip
    echo "escriba tcp o udp según corresponda"
    read proto
    iptables -t nat -A PREROUTING -i eno1 -p $proto --dport $ext -j DNAT --to $ip:$int
    netfilter-persistent save
    iptables-save > /etc/iptables/rules.v4
    mainmenu
}

menudel () {
    echo "Del listado de puertos abiertos, teclee el número de línea a eliminar"
    read num
    iptables -t nat -D PREROUTING $num
    iptables-save > /etc/iptables/rules.v4
    mainmenu
}

# ejecutar el script. Comenzamos llamando a mainmenu

mainmenu

Creación del fichero

Esta parte es fácil. Con nano u otro editor, copiar el código de arriba, pegarlo en el fichero y guardarlo con extensión .sh.

nano puertos.sh

Ejecución del Script

Antes de ejecutarlo, hay que darle permisos de ejecución. Se hace con el siguiente comando.

 chmod +x puertos.sh

para ejecutarlo, simplemente escribimos la ruta del fichero. Si estamos en el directorio donde se ubica, sería de la siguiente forma.

./puertos.sh
puertos
Así es como se vería

Consideraciones finales

Hay que tener en cuenta el nombre que le da el sistema a la tarjeta de red, en mi caso eno1. Si tu tarjeta de red se llama diferente, debes modificarlo en el script. Se puede mirar el nombre de la tarjeta de red leyendo el fichero de la configuración de red.

cat /etc/network/interfaces

Espero que os sirva de ayuda.

5 comentarios

  1. Oca
    5 de febrero de 2024

    Buenas, genial muchas gracias, me ha servido de ayuda, lo único que en mi caso no se guarda la configuración, si se reinicia el servidor.

    Responder
    1. milla
      12 de febrero de 2024

      He revisado y actualizado el script, añadí una línea al menuad

      Esta en concreto: iptables-save > /etc/iptables/rules.v4

      Verifica que tienes el paquete iptables-persistent. Puedes hacer un «nano /etc/iptables/rules.v4»
      Si dice que el directorio no existe, tendrás que instalar un paquete.
      apt install iptables-persistent

      Te preguntará si deseas pasar los persistent al fichero rules.v4 dices que si y te guarda las reglas que ya tengas.

      menuad () {
      echo -e «\n Indique el puerto externo a abrir»
      read ext
      echo «Indique el puerto interno al que redirigir»
      read int
      echo «Indique la IP a la que abrir el puerto»
      read ip
      echo «escriba tcp o udp según corresponda»
      read proto
      iptables -t nat -A PREROUTING -i eno1 -p $proto –dport $ext -j DNAT –to $ip:$int
      netfilter-persistent save
      iptables-save > /etc/iptables/rules.v4
      mainmenu
      }

      Responder
  2. Oca
    5 de febrero de 2024

    Buenas, una duda, como haces para configurar el firewall de linux? en la maquina proxmox? Estoy probando algunas reglas pero parece que no doy con la tecla para que funcione la maquina de la red interna.

    Saludos

    Responder
    1. milla
      12 de febrero de 2024

      Hola,

      Gracias por tu comentario y disculpa la demora en responder, una semana complicada.

      Entiendo que lo quieres habilitar para la interfaz de red que tiene la IP pública, no para las VM.

      Tengo que revisar las notas de cómo lo configuré.

      Independientemente de habilitar el Firewall he habilitado doble factor para acceso por web y he modificado el puerto de SSH y deshabilitado inicio de sesión remoto de root.

      Responder
  3. carlos alberto cadabal x
    23 de febrero de 2024

    mcuhas gracias super tu scrip funciono correctamente

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: millaredos.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Volver arriba
Resumen de privacidad
Millaredos

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.

Cookies Publicitarias

Esta web utiliza las siguientes cookies adicionales:

Adsense