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.