script_polling.sh
unknown
sh
a year ago
6.2 kB
21
Indexable
#!/bin/bash # Configurazione SSH_CONFIG="/etc/ssh/sshd_config" TUNNEL_IFACE="tap0" TUNNEL_IP="10.0.0.1" TUNNEL_NETMASK="255.255.255.0" REMOTE_USER="root" REMOTE_IP="162.19.143.53" # Indirizzo pubblico del firewall di green PROXY_ARP_FILE="/proc/sys/net/ipv4/conf/$TUNNEL_IFACE/proxy_arp" # Rilevamento automatico dell'interfaccia di rete NETWORK_INTERFACE=$(ip -o link show | awk -F': ' '{print $2}' | grep -E '^(ens160|eth0)$') if [ -z "$NETWORK_INTERFACE" ]; then echo "Nessuna interfaccia ens160 o eth0 trovata." exit 1 fi # Aggiornamento delle regole NAT con la variabile NETWORK_INTERFACE NAT_RULE1="-A FORWARD -i $TUNNEL_IFACE -o $NETWORK_INTERFACE -j ACCEPT" NAT_RULE2="-A FORWARD -i $NETWORK_INTERFACE -o $TUNNEL_IFACE -j ACCEPT" MASQUERADE_RULE="-t nat -A POSTROUTING -o $NETWORK_INTERFACE -j MASQUERADE" # Funzione per aggiornare sshd_config e riavviare il servizio SSH se necessario update_sshd_config() { echo -e "\n\n\n\n\nVerifico la configurazione SSH..." local updated=0 grep -q "^PermitTunnel yes" $SSH_CONFIG || { sed -i '/^#PermitTunnel yes/c\PermitTunnel yes' $SSH_CONFIG; updated=1; } grep -q "^PermitRootLogin yes" $SSH_CONFIG || { sed -i '/^#PermitRootLogin yes/c\PermitRootLogin yes' $SSH_CONFIG; updated=1; } if [ $updated -eq 1 ]; then echo "Aggiornamento della configurazione SSH necessario. Riavvio il servizio..." systemctl restart sshd echo "Servizio SSH riavviato." else echo "La configurazione SSH è già corretta." fi } # Funzione per configurare l'interfaccia tap configure_tap_interface() { echo "Verifico l'interfaccia $TUNNEL_IFACE..." if ! ip addr show $TUNNEL_IFACE &>/dev/null; then echo "Creazione dell'interfaccia $TUNNEL_IFACE..." tunctl -t $TUNNEL_IFACE ifconfig $TUNNEL_IFACE $TUNNEL_IP netmask $TUNNEL_NETMASK up echo "Interfaccia $TUNNEL_IFACE creata." else echo "L'interfaccia $TUNNEL_IFACE è già configurata." fi } # Funzione per stabilire la VPN layer 2 se non è già attiva :' establish_vpn() { echo "Verifico la connessione VPN..." if ! ip link show $TUNNEL_IFACE | grep -q "state UP"; then echo "Stabilisco la connessione VPN..." # Legge la password da password.txt PASSWORD=$(</root/password.txt) # Utilizza expect per passare la password a SSH expect -c " set timeout -1 spawn ssh -o Tunnel=ethernet -w 0:0 $REMOTE_USER@$REMOTE_IP true expect \"*?assword:*\" { send -- \"$PASSWORD\r\" } expect eof " & sleep 4 # Verifica se la connessione è stata stabilita if ip link show $TUNNEL_IFACE | grep -q "state UP"; then echo "Connessione VPN stabilita." else echo "Errore nella stabilizzazione della connessione VPN." exit 1 fi else echo "La connessione VPN è già attiva." fi echo -e "La connessione VPN è attiva. Monitoraggio in corso...\n\n\n" while ip link show $TUNNEL_IFACE | grep -q "state UP"; do sleep 5 # Controlla ogni 5 secondi se la connessione è ancora attiva done echo -e "\n\n\n\n\nERRORE!\nLa connessione VPN è stata interrotta!\n\n\n\n" exit 1 } ' establish_vpn() { echo "Verifico la connessione VPN..." if ip link show $TUNNEL_IFACE | grep -q "state UP"; then echo "La connessione VPN è già attiva." return 0 fi echo "Stabilisco la connessione VPN..." PASSWORD=$(</root/password.txt) expect -c " set timeout -1 spawn ssh -o Tunnel=ethernet -w 0:1 $REMOTE_USER@$REMOTE_IP true expect \"*?assword:*\" { send -- \"$PASSWORD\r\" } expect eof " sleep 4 if ip link show $TUNNEL_IFACE | grep -q "state UP"; then echo "Connessione VPN stabilita." else echo "Errore nella stabilizzazione della connessione VPN." exit 1 fi } # Funzione per verificare lo stato dell'interfaccia tap check_tap_interface() { echo "Controllo lo stato dell'interfaccia $TUNNEL_IFACE..." if ! ip link show $TUNNEL_IFACE | grep -q "state UP"; then echo "Errore: L'interfaccia $TUNNEL_IFACE non è su stato UP." else echo "L'interfaccia $TUNNEL_IFACE è attiva e su stato UP." fi } # Funzione per configurare le regole NAT configure_nat_rules() { echo "Verifico le regole di NAT..." if ! iptables -C FORWARD -i $TUNNEL_IFACE -o $NETWORK_INTERFACE -j ACCEPT 2>/dev/null; then echo "Inserisco la regola di NAT per il traffico da $TUNNEL_IFACE a $NETWORK_INTERFACE..." iptables $NAT_RULE1 echo "Regola di NAT inserita." else echo "La regola di NAT per il traffico da $TUNNEL_IFACE a $NETWORK_INTERFACE è già presente." fi if ! iptables -C FORWARD -i $NETWORK_INTERFACE -o $TUNNEL_IFACE -j ACCEPT 2>/dev/null; then echo "Inserisco la regola di NAT per il traffico da $NETWORK_INTERFACE a $TUNNEL_IFACE..." iptables $NAT_RULE2 echo "Regola di NAT inserita." else echo "La regola di NAT per il traffico da $NETWORK_INTERFACE a $TUNNEL_IFACE è già presente." fi if ! iptables -t nat -C POSTROUTING -o $NETWORK_INTERFACE -j MASQUERADE 2>/dev/null; then echo "Inserisco la regola di masquerading per il traffico in uscita su $NETWORK_INTERFACE..." iptables $MASQUERADE_RULE echo "Regola di masquerading inserita." else echo "La regola di masquerading per il traffico in uscita su $NETWORK_INTERFACE è già presente." fi } # Funzione per abilitare il proxy ARP enable_proxy_arp() { echo "Abilito il proxy ARP per l'interfaccia $TUNNEL_IFACE..." echo 1 > $PROXY_ARP_FILE echo "Proxy ARP abilitato." } # Esecuzione delle funzioni update_sshd_config configure_tap_interface check_tap_interface configure_nat_rules enable_proxy_arp establish_vpn # Fine dello script echo "Script completato."
Editor is loading...