Home

Published

- 4 min read

Save-Openvpn

img of Save-Openvpn

Este script Bash es un asistente para gestionar la conexión y desconexión de una VPN utilizando OpenVPN, además de aplicar algunas reglas de firewall (iptables) para filtrar el tráfico de red. Aquí está el desglose de lo que hace:

Opciones del menú:

Opción 1: Conectar VPN Verifica si el usuario es root: Si no es root, solicita la contraseña y ejecuta el comando openvpn con permisos de sudo para conectarse a la VPN usando un archivo de configuración .ovpn. Si es root, simplemente ejecuta el comando openvpn directamente.

Aplica un conjunto de reglas iptables para controlar el tráfico de red de entrada y salida a través de la interfaz tun0 (la interfaz de red de la VPN). Estas reglas: Aceptan solicitudes y respuestas ICMP (ping) desde la IP proporcionada y bloquean cualquier otro tráfico ICMP. Permiten tráfico TCP y UDP desde y hacia la IP proporcionada. Bloquean cualquier otro tráfico no permitido por las reglas anteriores. Muestra un mensaje confirmando que la VPN está conectada y las reglas de iptables han sido aplicadas.

Opción 2: Desconectar VPN Finaliza el proceso de openvpn con killall y pkill. Limpia las reglas de iptables y ip6tables. Muestra un mensaje indicando que la VPN ha sido desconectada. Opción 3: Salir Simplemente imprime “Saliendo del script.” y finaliza el bucle, cerrando el programa.

Gestión de opciones inválidas: Si el usuario selecciona una opción diferente a 1, 2 o 3, se muestra un mensaje indicando que la opción es inválida y pide que se seleccione una opción válida.

Opción 3: Salir

Simplemente imprime “Saliendo del script.” y finaliza el bucle, cerrando el programa.

   #!/bin/bash

# Códigos de color ANSI
GREEN='\033[1;32m' # Verde brillante
RED='\033[1;32m'   # verde brillante
CYAN='\033[1;32m'  # verde brillante
NC='\033[1;32m'    # verde color

# Mensaje del autor con efecto visual
echo -e "${CYAN}╔══════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}║           Script by GalileoQ                     ║${NC}"
echo -e "${CYAN}║      Unlocking the Secrets of the Universe!      ║${NC}"
echo -e "${CYAN}╚══════════════════════════════════════════════════╝${NC}"

while true; do
    echo -e "${GREEN}Selecciona una opción:${NC}"
    echo -e "${GREEN}1. Conectar VPN${NC}"
    echo -e "${GREEN}2. Desconectar VPN${NC}"
    echo -e "${GREEN}3. Salir${NC}"
    read -p "Ingresa el número de la opción: " choice

    case $choice in
        1)
            # Verificar si el usuario es root
            if [[ $EUID -ne 0 ]]; then
                # Si no es root, solicitar contraseña y ejecutar en la terminal
                read -s -p "Introduce tu contraseña: " password
                (echo $password | sudo -S openvpn /media/sf_VM/galileoquevedo.ovpn) &
                sleep 3
            else
                # Si es root, simplemente ejecutar el comando en la terminal
                sudo openvpn /media/sf_VM/galileoquevedo.ovpn &
                sleep 3
            fi

            # Esperar un momento para permitir la inicialización completa
            sleep 1

            # Limpiar la terminal
            clear

            # Solicitar entrada de la IP
            read -p "Ingresa la IP: " ip_address && zsh -i -c "settarget $ip_address"

            # Aplicar reglas de iptables con la IP ingresada
            iptables -P INPUT ACCEPT
            iptables -P FORWARD ACCEPT
            iptables -P OUTPUT ACCEPT
            iptables -t nat -F
            iptables -t mangle -F
            iptables -F
            iptables -X
            iptables -Z

            ip6tables -P INPUT DROP
            ip6tables -P FORWARD DROP
            ip6tables -P OUTPUT DROP
            ip6tables -t nat -F
            ip6tables -t mangle -F
            ip6tables -F
            ip6tables -X
            ip6tables -Z
            iptables -A INPUT -p icmp -i tun0 -s $ip_address --icmp-type echo-request -j ACCEPT
            iptables -A INPUT -p icmp -i tun0 -s $ip_address --icmp-type echo-reply -j ACCEPT
            iptables -A INPUT -p icmp -i tun0 --icmp-type echo-request -j DROP  
            iptables -A INPUT -p icmp -i tun0 --icmp-type echo-reply -j DROP
            iptables -A OUTPUT -p icmp -o tun0 -d $ip_address --icmp-type echo-reply -j ACCEPT
            iptables -A OUTPUT -p icmp -o tun0 -d $ip_address --icmp-type echo-request -j ACCEPT
            iptables -A OUTPUT -p icmp -o tun0 --icmp-type echo-request -j DROP
            iptables -A OUTPUT -p icmp -o tun0 --icmp-type echo-reply -j DROP

            iptables -A INPUT -i tun0 -p tcp -s $ip_address -j ACCEPT
            iptables -A OUTPUT -o tun0 -p tcp -d $ip_address -j ACCEPT
            iptables -A INPUT -i tun0 -p udp -s $ip_address -j ACCEPT
            iptables -A OUTPUT -o tun0 -p udp -d $ip_address -j ACCEPT
            iptables -A INPUT -i tun0 -j DROP
            iptables -A OUTPUT -o tun0 -j DROP

            echo "VPN conectada: Reglas de ip estables aplicadas para la IP: $ip_address"
            exit 0
            ;;
        2)
            # Desconectar VPN usando pkill
            sudo killall openvpn && sudo pkill openvpn && sudo iptables -F && sudo ip6tables -F
            zsh -i -c "settarget"

            echo "VPN desconectada."
            exit 0
            ;;
        3)
            echo "Saliendo del script."
            exit 0
            ;;
        *)
            echo "Opción inválida. Por favor, selecciona 1, 2 o 3."
            ;;
    esac
done

Related Posts

There are no related posts yet. 😢