#!/bin/sh
# Ogni regola viene descritta####

####################INIZIO SCRIPT###############################
####### IMPOSTAZIONE KERNEL FLAGS ############
#Abilitano il sistema a svolgere alcune operazionia livello di kernel: aumenta la sicurezza del sistema

#ABILITAZIONE RIFIUTO RISPOSTA  AGLI ICMP###
# va messo a 0 (Disabilitato ) per abilitare e filtrare risposte a icmp (ad es. dalla rete INT)
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
# ABILITAZIONE RIFIUTO RISPOSTA agli icmp broadcast (anti smurf)###
/bin/echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# abilitazione protezione messaggi di errore#####
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# disabilitare pacchetti ip con source routing###
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
# disabilitare icmp redirects###
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
# abilitazione protezione antispoofing###
/bin/echo "1" >/proc/sys/net/ipv4/conf/all/rp_filter
# Abilitazione log pacchetti strani###
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

#########INPOSTAZIONE VARIABILI########
#Sono elementi della configurazione del firewall come indirizzi iIp o di network o interfacce che vengono ripetuti spesso.
#Identificandoli come variabili possono essere modificati gli script con grande rapidita' senza modificare le regole del firewall.

IPTABLES="/usr/sbin/iptables"
LAN_INT="eth1"
EXT_INT="eth0"
ADMIN='192.168.100.58'
IP_INT='192.168.100.58'
LAN="192.168.100.0/24"
DMZ_HOST="192.168.200.50"
EXT_IP= "ifconfig $EXT_INT| grep inet | cut -d : -f 2 | cut -d \  -f 1"
# porca troia perche la riga sopra non va e devo usare quella sotto ? #
#EXT_IP="21x.5x.22x.5x"
#CARICAMENTO MODULI FTP
#Carica i moduli per effettuare connessioni ftp attive
modprobe ip_nat_ftp
modprobe  ip_conntrack_ftp

#DEBUG
#Stampa a video i comandi inpartiti attraverso lo script: utile per identificare un errore in caso di esecuzione di script molto lunghi
set -x

######### SVUOTAMENTO CATENE ESISTENTI #############
#Ripulisce le catene, eliminando  precedenti regole presenti
/usr/sbin/iptables -F
/usr/sbin/iptables -X

########### CREAZIONE DELLE CATENE DI LOGDROP ###
#Per potere indirizzare i pacchetti droppati (negoziazioni) verso le catene dei log bisogna prima crearle
$IPTABLES -N LOGINDROP
$IPTABLES -A LOGINDROP -j LOG --log-level 5  --log-prefix '[IPTABLES INPUT DROP] :'
$IPTABLES -A LOGINDROP -j DROP
$IPTABLES -N LOGFWDROP
$IPTABLES -A LOGFWDROP -j LOG --log-level 5  --log-prefix '[IPTABLES FW DROP] :'
$IPTABLES -A LOGFWDROP -j DROP

######## INPUT (consentito solo per le connessioni generate dall'interno) ###
$IPTABLES -P INPUT DROP ##default per INPUT
$IPTABLES -A INPUT -s $LAN -m state --state ESTABLISHED,RELATED -j ACCEPT

#Accetto il traffico in ingresso del protocollo IDENT: questo protocollo utilizzato per l'autenticazione in rete, rende piu veloca le operazioni di connessione e scambio dati tra gli host posti dietro il firewall.

$IPTABLES -A INPUT -p tcp --sport 113 -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 113 -j ACCEPT

############# FORWARD (consentito per la rete interna) ########
#Accetta il FORWARD solo per le connessioni generate dall' interno (-s LAN) droppando qualsiasi tentativo di nuove connessioni attraverso il firewall provenienti dall' esterno (NEW=non SYN)

$IPTABLES -P FORWARD DROP  # default per forward
$IPTABLES -A FORWARD -s $LAN -j ACCEPT
#Abilitiamo il forward verso la macchina web in DMZ dall' esterno 
$IPTABLES -A FORWARD -p tcp -s 0/0 -d $DMZ_HOST --sport 80 -j ACCEPT
$IPTABLES -A FORWARD -p tcp -s 0/0 -d $DMZ_HOST --dport 80 -j ACCEPT

# Consente il ritorno (ATTRAVERSAMENTO) dei pacchetti per connessioni originate dall interno (non SYN=ESTABLISHED,RELATED)
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

################# NAT  (Network Address Traslation) ##########################
# Imposta il MASQUERADING solo per le connessioni generate dalla lan interna (-s $LAN): le connessioni verso l'esterno verranno effettuate con l' IUP associato con l'interfaccia esterna del firewall
$IPTABLES  -t nat -A POSTROUTING -s $LAN -j MASQUERADE
$IPTABLES  -t nat -A PREROUTING -p tcp -d $EXT_IP  --dport 80 -j DNAT --to-destination $DMZ_HOST:80

################# OUPUT (lasciato aperto) ############
#Consente di originare verso l'esterno della lan interna o mascherata o dal firewall una connessione su una porta qualsiasi .
$IPTABLES -P OUTPUT ACCEPT ## Deafult per ouput

########### amministrazione remota in ssh (ADMIN) da un host interno ADMIN###
$IPTABLES -A INPUT -i $LAN_INT -p TCP --dport 22 -s $ADMIN -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_INT -p TCP --sport 22 -d $ADMIN -j ACCEPT
# Accetto il traffico ICMP da trusted LAN: disabilitare il kernel icmp_echo_ignore_all=1
#Consente di rispondere ai pacchetti ICMP (ping) in e dalla rete LAN
$IPTABLES -A INPUT -p icmp -s $LAN -j ACCEPT
$IPTABLES -A OUTPUT -p icmp -s $LAN -j ACCEPT

################# LOG NEGAZIONI ########
#Impostazione di due regole di LOGDROP per tutto il traffico restante che viene negato in INPUT e in FORWARD
$IPTABLES -A INPUT -j LOGINDROP
$IPTABLES -A FORWARD -j LOGFWDROP

################## FINE SCRIPT ####################
