Como Criar e Remover VPNs no StrongSwan com um Script Shell

O StrongSwan é uma solução robusta para configuração de VPNs IPsec, amplamente utilizada para garantir segurança em conexões remotas. Neste artigo, vamos apresentar um script shell que permite criar e remover VPNs automaticamente, tornando o gerenciamento mais eficiente.

📌 O que este script faz?

Este script permite:

✅ Criar uma nova VPN no StrongSwan informando parâmetros como gateway remoto, criptografia, PSK, redes locais e remotas.

✅ Remover uma VPN específica informando o remote gateway ou a rede remota, garantindo que outras configurações permaneçam intactas.

🛠️ O Script

Crie um arquivo chamado vpn_manager.sh e copie o seguinte código:

#!/bin/bash

CONFIG_FILE="/etc/ipsec.conf"
SECRETS_FILE="/etc/ipsec.secrets"
STRONGSWAN_SERVICE="strongswan"

usage() {
    echo "Uso: $0 -remotegateway <gateway_remoto> -localgateway <gateway_local> -cripto <cifra> -psk <chave> -localnetwork <rede_local> -remotenetwork <rede_remota>"
    echo "     $0 -remove -remotegateway <gateway_remoto> OU -remove -remotenetwork <rede_remota>"
    exit 1
}

REMOVE=0
REMOTEGATEWAY=""
LOCALGATEWAY="%defaultroute"
CRIPTO="aes256-sha256-modp2048"
PSK=""
LOCALNET=""
REMOTENET=""

while [[ "$#" -gt 0 ]]; do
    case "$1" in
        -remotegateway) REMOTEGATEWAY="$2"; shift 2;;
        -localgateway) LOCALGATEWAY="$2"; shift 2;;
        -cripto) CRIPTO="$2"; shift 2;;
        -psk) PSK="$2"; shift 2;;
        -localnetwork) LOCALNET="$2"; shift 2;;
        -remotenetwork) REMOTENET="$2"; shift 2;;
        -remove) REMOVE=1; shift;;
        *) usage;;
    esac
done

if [[ "$REMOVE" -eq 1 ]]; then
    if [[ -n "$REMOTEGATEWAY" ]]; then
        sed -i "/conn $REMOTEGATEWAY/,/}/d" "$CONFIG_FILE"
        sed -i "/$REMOTEGATEWAY/d" "$SECRETS_FILE"
        echo "VPN com gateway remoto $REMOTEGATEWAY removida."
    elif [[ -n "$REMOTENET" ]]; then
        sed -i "/leftsubnet=$REMOTENET/d" "$CONFIG_FILE"
        echo "VPN com rede remota $REMOTENET removida."
    else
        usage
    fi
    systemctl restart "$STRONGSWAN_SERVICE"
    exit 0
fi

if [[ -z "$REMOTEGATEWAY" || -z "$PSK" || -z "$LOCALNET" || -z "$REMOTENET" ]]; then
    usage
fi

cat <<EOF >> "$CONFIG_FILE"
conn $REMOTEGATEWAY
    auto=start
    left=$LOCALGATEWAY
    leftsubnet=$LOCALNET
    right=$REMOTEGATEWAY
    rightsubnet=$REMOTENET
    ike=$CRIPTO
    esp=$CRIPTO
    keyexchange=ikev2
    authby=secret
EOF

echo "$REMOTEGATEWAY : PSK \"$PSK\"" >> "$SECRETS_FILE"

systemctl restart "$STRONGSWAN_SERVICE"
echo "VPN com gateway remoto $REMOTEGATEWAY configurada e ativa."

🚀 Como Usar o Script

Dê permissão de execução ao script:

chmod +x vpn_manager.sh

Criar uma VPN

./vpn_manager.sh -remotegateway 192.168.1.1 -localgateway 10.10.10.1 -cripto aes256-sha256-modp2048 -psk "minhaSenhaSecreta" -localnetwork 10.0.0.0/24 -remotenetwork 192.168.2.0/24

Remover uma VPN pelo Gateway Remoto

./vpn_manager.sh -remove -remotegateway 192.168.1.1

Remover uma VPN pela Rede Remota

./vpn_manager.sh -remove -remotenetwork 192.168.2.0/24

🎯 Conclusão

Este script simplifica o gerenciamento de VPNs no StrongSwan, tornando mais rápido o processo de criação e remoção de conexões. Se você precisa gerenciar diversas VPNs, essa solução pode poupar tempo e reduzir erros.

Referências: https://github.com/junovanfantin/automator-config-strongswan/

CATEGORIES:

Software Livre

Comments are closed