- Home
- Categorie
- Gaming, Hardware e Software
- Software (Windows - Linux - Apple) & Applicazioni
- Script Firewall automatico per PC desktop e server
-
Script Firewall automatico per PC desktop e server
Analizza il sistema per individuare la scheda di rete connessa ad INTERNET, eventuale scheda connessa alla LAN e chiede conferma degli indirizzi IP e maschere di rete ed indirizzo del Router trovati.
Visualizza le regole attuali delle catene di iptables e forma le nuove catene per configurare il FIREWALL
Lo script seguente, chiamato firewall_Ubuntu81.sh, dovra' avere i permessi di esecuzione dati in una shell con il comando:
chmod +x /percorso del file/firewall_Ubuntu81.sh
dopodiche' si potra' mandarlo in esecuzione.
Per verificare il buon funzionamento del Firewall andare sul sito di pcflank da dove potrete verificare:
Stealth test
Trojans test
Advanced port scanner
Exploits test
e constatare cosi' il grado di sicurezza raggiunto.#!/bin/bash # Script firewall_Ubuntu81.sh # creato venerdì-28-novembre-2008 da xymaster con ZIDE1.sh #------------ Descrizione Script------------------ # Analizza il sistema per individuare la scheda di rete connessa ad INTERNET, eventuale scheda connessa alla LAN # e chiede conferma degli indirizzi IP e maschere di rete ed indirizzo del Router trovati. # Visualizza le regole attuali delle catene di iptables e forma le nuove catene per configurare il FIREWALL #------------------variabili globali--------------- IPTABLES=`which iptables` LOOPBACK="lo" INTERNET="Assente" LAN="Assente" NET="Assente" MASK="Assente" IP_INTERNET="Assente" IP_LAN="Assente" pass="" conf="" #-----------------funzioni------------------------- function domanda () { #chiamare con testo domanda #restituisce finestra con testo domanda con bottoni Ok per rispondere si o annulla per rifiutare zenity --question --text "$1" } function avviso () { con testo messaggio tipo messaggio zenity --info --text="$1" } function errore () { con testo messaggio tipo messaggio zenity --error --text="$1" } function attenzione () { con testo messaggio tipo messaggio zenity --warning --text="$1" } gest_err (){ if [ $? != 0 ] then gdialog --title "Visualizza Errori" --textbox /tmp/prv.$$ 22 72 elif [ $# = 1 ];then avviso "$1 OK" fi rm -rf /tmp/prv.$$ 2> /dev/null } function get_password () { local utente_attivo=$(whoami) pass=`zenity --entry --hide-text --text="immetti la password di $utente_attivo:"` #azzera il timestamp di sudo (quello che vi consente di non digitare la password se ripetete sudo entro tot tempo) sudo -k #cancella completamente il timestamp sudo -K #verifica validita' password echo "$pass" | sudo -S ls > /dev/null if [ $? != 0 ];then errore "Password errata. Termino lo script" exit 1 fi } if [ $EUID -ne 0 -a "x$1" != "x--" ] then attenzione "Lo script richiede l'esecuzione con i permessi di root. Riparto come ROOT" get_password echo "$pass" | sudo -S $0 "--">|/tmp/prv.$$ 2>&1;gest_err exit 0 fi #-------Inizio Script------------------------- #analizzo /etc/resolv.conf gw=`cat /etc/resolv.conf` #trovo IP router IP_GW=`echo ${gw##*nameserver} | cut -d ' ' -f1` #prelevo primi 3 ottetti IP eth=`echo $IP_GW | cut -d . -f1,2,3` #scansiono tutte le schede di rete ... ifconfig -a | cut -d ' ' -f1 | tr '\n' ' ' > /tmp/prv.$$ for scheda in $(sed -e '/^$/d' /tmp/prv.$$); do ipaddr=`ifconfig "$scheda" | grep inet | cut -d: -f2 | cut -d ' ' -f1` if [ "$ipaddr" != "" -a "$scheda" != "lo" ];then #se indirizzo IP scheda di rete ha i primi 3 ottetti uguali a quelli dell'IP del router if [ `echo $ipaddr | cut -d . -f1,2,3` = $eth ];then INTERNET="$scheda" IP_INTERNET="$ipaddr" MASK=`ifconfig "$scheda" | grep inet` MASK=`echo ${MASK##*Mask:} | cut -d ' ' -f1` else LAN="$scheda" IP_LAN="$ipaddr" NET="`echo $ipaddr | cut -d . -f1,2,3`.0/24" fi fi done rm -f /tmp/prv.$$ if ! domanda "---Configurazione Internet-----\nScheda $INTERNET - IP $IP_INTERNET\nMask $MASK IP router $IP_GW\n\n---Configurazione LAN---\nScheda $LAN - IP $IP_LAN\n - Rete $NET\n\nConfermi?";then exit else conf=`$IPTABLES -L` avviso "---IPTABLES senza FIREWALL---\n$conf" fi # puliamo tutto prima di applicare le nuove regole $IPTABLES -F $IPTABLES -t nat -F $IPTABLES -t mangle -F # impostiamo la policy per i pacchetti in ingresso # bloccando il traffico $IPTABLES -P INPUT DROP # impostiamo la policy per i pacchetti in transito # tra le interfacce bloccando il traffico $IPTABLES -P FORWARD DROP # impostiamo la policy per i pacchetti in uscita # abilitando il traffico $IPTABLES -P OUTPUT ACCEPT # poi facciamo in modo di accettare i pacchetti in entrata # che appartengono ad una connessione già esistente # o che sono correlati a connessioni preesistenti $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT if [ "$NET" != "Assente" ];then # abilitiamo il transito di pacchetti provenienti # dalla rete interna (ad es. 192.168.0.*) $IPTABLES -A FORWARD -s $NET -j ACCEPT fi # abilitiamo il transito di pacchetti che appartengono # ad una connessione già esistente o che siano correlati # a connessioni preesistenti $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT if [ "$LAN" != "Assente" ];then $IPTABLES -A INPUT -i $LAN -m state --state NEW -p tcp -j ACCEPT fi $IPTABLES -A INPUT -i $INTERNET -m state --state NEW -j ACCEPT $IPTABLES -A INPUT -i $LOOPBACK -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT # abilitiamo i pacchetti icmp (il ping) per l'interfaccia # di loopback $IPTABLES -A INPUT -i $LOOPBACK -p icmp -j ACCEPT # abilitiamo i pacchetti icmp per la scheda di rete $IPTABLES -A INPUT -i $INTERNET -p icmp -j ACCEPT if [ "$NET" != "Assente" ];then # ora abilitiamo i pc della rete interna alla navigazione # in internet utilizzando la funzione NAT per un modem # condiviso con indirizzo ip dinamico assegnato dal # provider $IPTABLES -t nat -A POSTROUTING -s $NET -o $LAN -j MASQUERADE fi modprobe ip_nat_ftp modprobe ip_conntrack_ftp # e infine abilitiamo l'attraversamento dei pacchetti # tra un'interfaccia e l'altra echo 1 > /proc/sys/net/ipv4/ip_forward conf=`$IPTABLES -L` avviso "---IPTABLES con FIREWALL---\n$conf" # FINE SCRIPT #