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
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.