Siccome tanta gente spesso posta topic in cerca di una configurazione per il loro firewall casalingo, questo penso possa fare al caso loro...
[AGGIORNATO 01/05/2007]
Changelog:
- Lo script di init non contiene più regole preimpostate ma si appoggia esclusivamente ad uno script esterno per le regole da caricare
- Lo script di esempio per le regole è ora un po' più interattivo e contiene alcuni parametri da riga di comando con cui chiamare più set di regole. Date un'occhiata allo script ma è abbastanza intuitivo.
- La directory di default per lo script è ora /etc/firewall e non più /etc/conf.d in quanto ritengo sia più appropriata
Va copiato il /etc/init.d/ con il nome che preferite (io l'ho chiamato "muro_di_fuoco") e aggiunto al runlevel che volete
poi dategli i permessi giusti con
Code: Select all
chmod 755 /etc/init.d/muro_di_fuoco
chown root:root /etc/init.d/muro_di_fuocoIn ogni caso basta lanciare
Code: Select all
/etc/init.d/muro_di_fuoco showoptionsCreate anche una cartella /etc/firewall
Code: Select all
mkdir /etc/firewall
chmod 700 /etc/firewallin /etc/firewall/muro_di_fuoco potete scrivere le vostre regole personalizzate (sotto forma di script eseguibile... ) che verranno caricate all'avvio dello script
In questo stesso post trovate un esempio di file di configurazione.
In pratica in questo modo avete un modo veloce e "user friendly" per caricare le vostre regole del firewall (con la possibilità di fare start, stop, restart, block_all, status etc... )
Code: Select all
#!/sbin/runscript
#Defininco la posizione degli eseguibili di iptables
IPTABLES=/sbin/iptables
IPTABLESSAVE=/sbin/iptables-save
IPTABLESRESTORE=/sbin/iptables-restore
#file di configurazione del firewall
#deve essere uno script eseguibile con una sintassi bash
FIREWALL=/etc/firewall/muro_di_fuoco
FIREWALL_SAVE=/etc/firewall/firewall.rules
#Interfacce
IFACE=eth0 #Interfaccia esterna (internet)
LFACE=eth1 #Interfaccia interna (lan)
opts="${opts} showstatus block_all save restore showoptions"
depend() {
need net
}
start() {
ebegin "Caricamento regole del firewall"
if [ -e "${FIREWALL}" ]; then
$FIREWALL
eend $?
else
eend 1 "${FIREWALL} non esiste"
return 1
fi
}
stop() {
ebegin "Arresto del firewall (tutte le regole su ACCEPT)"
#Clear all chains in all tables
$IPTABLES -F
$IPTABLES -F -t mangle
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -X -t mangle
$IPTABLES -X -t nat
#Set Defaults to ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
eend $?
}
showstatus() {
ebegin "Status"
$IPTABLES -L -n -v --line-numbers
einfo "NAT status"
$IPTABLES -L -n -v --line-numbers -t nat
eend $?
}
block_all() {
ebegin "Impostazione delle regole di BLOCCO TOTALE in entrata e in uscita"
#Clear all chains and accept packets only from localhost
$IPTABLES -F
$IPTABLES -F -t mangle
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -X -t mangle
$IPTABLES -X -t nat
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
eend $?
}
save() {
ebegin "Salvataggio delle regole del firewall"
$IPTABLESSAVE > $FIREWALL_SAVE
eend $?
}
restore() {
ebegin "Ripristino delle regole del firewall"
$IPTABLESRESTORE < $FIREWALL_SAVE
eend $?
}
restart() {
svc_stop; svc_start
}
showoptions() {
echo "Usage: $0 {start|save|restore|block_all|stop|restart|showstatus}"
echo "start) Avvia le regole impostate in ${FIREWALL}"
echo "stop) Cancella le regole e imposta tutto su ACCEPT"
echo "restart) Arresta e riavia il firewall"
echo "save) Salva le regole in ${FIREWALL_SAVE}"
echo "restore) Ripristina le regole da ${FIREWALL_SAVE}"
echo "showstatus) Mostra lo status del firewall"
echo "block_all) Blocca tutti i pacchetti (accetta solo pacchetti da localhost)"
}
Questo che segue è un esempio di regole personalizzate da aggiungere in /etc/firewall/muro_di_fuoco (ricordatevi di rendelo eseguibile con un chmod 700)
Se volete potete anche aggiungerlo al $PATH e chiamarlo da terminale come un qualsiasi programma. In questo caso la cosa migliore è aggiungere questo link
Code: Select all
ln -s /etc/firewall/muro_di_fuoco /usr/local/sbin/muro_di_fuocoVengono definite diverse catene sia in entrata che in uscita (potete applicarle o meno a vostro piacimento... di default ne sono applicate ben poche) e vengono lasciati uscire anche i pacchetti INVALID (in modo da consentirvi di effettuare dei portscan
Vi consiglio di cambiare la porta di ssh e di spostarla da quella di default (22) verso una più alta (che so.... > 1024 e < 65535 sicuramente) che è molto più sicuro...
Per aggiungere le catene al firewall modificate o aggiungete le funzioni nella sezione #FUNZIONI. In alternativa potete direttamente modificare la parte finale dello script ma non ve lo consiglio
Se avete bisogno di aiuto per definire le regole contattatemi pure via pm (non ne abusate però!
[EDIT]AGGIORNAMENTO 01/05/2007:
Ho Modificato leggermente questo script in modo da renderlo un po' più interattivo. Adesso accetta paramentri da riga di comando (se non specificati carica un set di regole di default). E' possibile creare, nell'apposita sezione, delle funzioni contenenti le chiamate alle catene opportune da abilitare; in questo modo si può ignorare quanto riportato nella parte finale dello script e leggere solamente le prime cento righe.
E' solo un aggiornamento estetico; le funzionalità rimangono inalterate.
[/EDIT]
Code: Select all
#!/bin/sh
#Defininco la posizione degli eseguibili di iptables
IPTABLES=/sbin/iptables
#Interfacce
IFACE=eth1 #Interfaccia esterna
LFACE=eth0 #Interfaccia interna
#Nameservers
NAMESERVER_1=208.67.222.222
NAMESERVER_2=208.67.220.220
#Default gateway
GATEWAY=192.168.0.1
#Definizioni delle porte
SSH_PORT=22
P_PORTS=0:1023
UP_PORTS=1024:65535
ML_BITTORRENT=6882
BITTORRENT_PORTS=6881:6889
BITTORRENT_TRACKER_PORT=6969
MLDONKEY_PORT_tcp=4662
MLDONKEY_PORT_udp=4666
KAD_PORT=20299
OVERNET_PORT=14006
GNUTELLA_PORT=6346
GNUTELLA2_PORT=6347
FASTTRACK_PORTS=1214
AMULE_PORT=4672
ICQ_PORT=5190
JABBER_PORT=5222
GNUNET_PORT=2086
FREENET_PORT=19577
SKYPE_PORT=2424
EKIGA_PORTS=5000:5100
##########################################################################
#FUNZIONI
#Definisco i set di regole da caricare
##########################################################################
#Queste regole sono definite come funzioni da chiamare al momento di
#applicare le catene. Ogni funzione definisce le funzioni input, output e
#forward da applicare rispettivamente a INPUT, OUTPUT e FORWARD.
#A seconda dei parametri passati da riga di comando posso chiamare diversi
#set di regole. Se non specifico niente chiama il set di default.
#Ricordarsi sempre di aggiornare la lista dei parametri accettati.
#Le funzioni devono avere lo stesso nome dei parametri corrispondenti.
LISTA_PARAMETRI="default block server forward"
#Lista catene (solo per comodita'):
# bittorrent_in connessioni_avviate dns_query fasttrack_in ftp_in gnutella2_in
# http_out icmp_in icmp_out ml_bittorrent_in mldonkey_gui mldonkey_in portscan
# rsync_in samba_in smtp_in ssh_in ssh_out syn_flood telnet_in
default() {
input() {
$IPTABLES -A INPUT -j ssh_in
}
output() {
sleep 0
}
forward() {
sleep 0
}
}
server() {
input() {
echo "Carico set di regole 'server'"
$IPTABLES -A INPUT -j ssh_in
$IPTABLES -A INPUT -j rsync_in
$IPTABLES -A INPUT -j samba_in
$IPTABLES -A INPUT -j mldonkey_in
$IPTABLES -A INPUT -j mldonkey_gui
}
output() {
sleep 0
}
forward() {
sleep 0
}
}
forward() {
input() {
$IPTABLES -A INPUT -j ssh_in
}
output() {
sleep 0
}
forward() {
echo "Forwarding dalla porta $LFACE a $GATEWAY"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o $LFACE -j SNAT --to $GATEWAY
}
}
#Definisco quanto specificato da parametro.
if [ ${#@} -gt 0 ]; then
for i in $@; do
if [ `echo $LISTA_PARAMETRI|grep -e $i|wc -l` -gt 0 ]; then
[ $i != block ] && $i
else
echo "parametro '$i' sconosciuto"
echo "Lista dei parametri accettati:"
echo $LISTA_PARAMETRI
exit 0
fi
done
else
default
fi
##########################################################################
#Pulisco tutte le regole e ripristino quelle di default (ACCEPT)
##########################################################################
$IPTABLES -F
$IPTABLES -F -t mangle
$IPTABLES -F -t nat
$IPTABLES -X
$IPTABLES -X -t mangle
$IPTABLES -X -t nat
#Se ho specificato il parametro "block" blocca tutto il traffico in e out
BLOCK=`echo $@|grep block |wc -l`
if [ $BLOCK -gt 0 ]; then
echo "blocking all network trafic 'in' and 'out'"
$IPTABLES -P FORWARD DROP
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
exit 0
fi
#Set Defaults to ACCEPT
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
##########################################################################
#Definisco la policy di default
##########################################################################
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
##########################################################################
#Definisco le catene per i vari tipi di paccehtti
##########################################################################
#Catena per le connessioni già avviate (da mettere in fondo alle regole)
$IPTABLES -N connessioni_avviate
$IPTABLES -F connessioni_avviate
$IPTABLES -A connessioni_avviate -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A connessioni_avviate -i $IFACE -m limit -j LOG --log-prefix "FW:Bad packet from ${IFACE}:"
$IPTABLES -A connessioni_avviate -j DROP
#Catena per il traffico ICMP in entrata
#ICMP (in entrata) Solo se fanno parte di connessioni preesistenti, cioè si tratta di una risposta ad un
#pacchetto inviato dalla nostra rete
$IPTABLES -N icmp_in
$IPTABLES -F icmp_in
$IPTABLES -A icmp_in -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp_in -p icmp --icmp-type destination-unreachable -j ACCEPT
#protezione dai PING-FLOOD
$IPTABLES -A icmp_in -p icmp --icmp-type ping -m limit --limit 1/s -j ACCEPT
$IPTABLES -A icmp_in -p icmp -j LOG --log-prefix "FW:Bad ICMP traffic:"
#Protezione dai SYN-FLOOD
# $IPTABLES -N syn_flood
# $IPTABLES -F syn_flood
# $IPTABLES -A syn_flood -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT
# $IPTABLES -A syn_flood -p tcp --syn -j DROP
#Catena per il traffico ICMP in uscita
#ICMP (in uscita) Tutti gli icmp
$IPTABLES -N icmp_out
$IPTABLES -F icmp_out
$IPTABLES -A icmp_out -o $IFACE -p icmp -j ACCEPT
#Catena per il DNS query
#DNS (client -> server) Vengono abilitate le query in uscita ai DNS servers
$IPTABLES -N dns_query
$IPTABLES -F dns_query
$IPTABLES -A dns_query -o $IFACE -p udp -s $NAMESERVER_1 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A dns_query -o $IFACE -p udp -s $NAMESERVER_2 --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per SSH in entrata
#SSH (in entrata) In entrata abilitato il traffico per la porta $SSH_PORT
#Limtati i pacchetti RST FIN e SYN a 1/second
$IPTABLES -N ssh_in
$IPTABLES -F ssh_in
$IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport $SSH_PORT -j ACCEPT
$IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport $SSH_PORT -j ACCEPT
$IPTABLES -A ssh_in -i $IFACE -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport $SSH_PORT -j ACCEPT
$IPTABLES -A ssh_in -i $IFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per SSH in uscita abilita le connessioni ssh alla porta $SSH_PORT e a quella di default (22)
$IPTABLES -N ssh_out
$IPTABLES -F ssh_out
$IPTABLES -A ssh_out -o $IFACE -p tcp --dport $SSH_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A ssh_out -o $IFACE -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per il traffico HTTP e HTTPS in uscita
$IPTABLES -N http_out
$IPTABLES -F http_out
$IPTABLES -A http_out -o $IFACE -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A http_out -o $IFACE -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per SAMBA in entrata
$IPTABLES -N samba_in
$IPTABLES -F samba_in
$IPTABLES -A samba_in -i $IFACE -p udp --dport 137 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A samba_in -i $IFACE -p udp --dport 138 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A samba_in -i $IFACE -p tcp --dport 139 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A samba_in -i $IFACE -p tcp --dport 445 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per FTP in entrata
#FTP (in uscita)
$IPTABLES -N ftp_in
$IPTABLES -F ftp_in
$IPTABLES -A ftp_in -i $IFACE -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per RSYNC in entrata
$IPTABLES -N rsync_in
$IPTABLES -F rsync_in
$IPTABLES -A rsync_in -i $IFACE -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per TELNET in entrata
$IPTABLES -N telnet_in
$IPTABLES -F telnet_in
$IPTABLES -A telnet_in -i $IFACE -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per SMTP in entrata
$IPTABLES -N smtp_in
$IPTABLES -F smtp_in
$IPTABLES -A smtp_in -i $IFACE -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per BITTORRENT in entrata
$IPTABLES -N bittorrent_in
$IPTABLES -F bittorrent_in
$IPTABLES -A bittorrent_in -i $IFACE -p tcp --dport $BITTORRENT_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per il bittorrent integrato in mldonkey in entrata:
$IPTABLES -N ml_bittorrent_in
$IPTABLES -F ml_bittorrent_in
$IPTABLES -A ml_bittorrent_in -i $IFACE -p tcp --dport $ML_BITTORRENT -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per MLDONKEY in entrata
$IPTABLES -N mldonkey_in
$IPTABLES -F mldonkey_in
$IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $MLDONKEY_PORT_tcp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $MLDONKEY_PORT_udp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $KAD_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $KAD_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_in -i $IFACE -p tcp --dport $OVERNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_in -i $IFACE -p udp --dport $OVERNET_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per la GUI di MLDONKEY in entrata
$IPTABLES -N mldonkey_gui
$IPTABLES -F mldonkey_gui
$IPTABLES -A mldonkey_gui -i $IFACE -p tcp --dport 4080 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A mldonkey_gui -i $IFACE -p tcp --dport 4001 -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per GNUTELLA2 in entrata
$IPTABLES -N gnutella2_in
$IPTABLES -F gnutella2_in
$IPTABLES -A gnutella2_in -i $IFACE -p tcp --dport $GNUTELLA2_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A gnutella2_in -i $IFACE -p udp --dport $GNUTELLA2_PORT -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per FASTTRACK in entrata
$IPTABLES -N fasttrack_in
$IPTABLES -F fasttrack_in
$IPTABLES -A fasttrack_in -i $IFACE -p tcp --dport $FASTTRACK_PORTS -m state --state NEW,ESTABLISHED -j ACCEPT
#Catena per bloccare ACROREAD in uscita
# $IPTABLES -N no_acroread
# $IPTABLES -F no_acroread
# $IPTABLES -A no_acroread -m owner --cmd-owner acroread -j DROP
##########################################################################
#Definisco la catene per intercettare i portscan
##########################################################################
#Catena per loggare i portscan
$IPTABLES -N portscan
$IPTABLES -F portscan
#NMAP-XMAS
$IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -m limit --limit 5/minute -j LOG --log-level alert --log-prefix "FW:SCAN:NMAP-XMAS:"
$IPTABLES -A portscan -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
#XMAS
$IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS:"
$IPTABLES -A portscan -p tcp --tcp-flags ALL ALL -j DROP
#XMAS-PSH
$IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:XMAS-PSH:"
$IPTABLES -A portscan -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
#NULL_SCAN
$IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "FW:SCAN:NULL_SCAN:"
$IPTABLES -A portscan -p tcp --tcp-flags ALL NONE -j DROP
#SYN/RST
$IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/RST:"
$IPTABLES -A portscan -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
#SYN/FIN
$IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/minute -j LOG --log-level 5 --log-prefix "FW:SCAN:SYN/FIN:"
$IPTABLES -A portscan -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
##########################################################################
#Variabili SYS-CTL
##########################################################################
#Abilita o disabilita l'IP FORWARDING
#echo "1" > /proc/sys/net/ipv4/ip_forward
/bin/echo "0" > /proc/sys/net/ipv4/ip_forward
#DYNAMIC ADDRESSING (utile per il forwarding)
#/bin/echo "1" > /proc/sys/net/ipv4/ip_dynaddr
#Disabilita l'IP Spoofing
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
#Non rispondere ai PING
#/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
#Non rispondere agli ICMP BROADCAST (attacchi smurf)
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#Disabilita l'accettazione dei REDIRECT
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects
#Protezione verso i messaggi di errore ICMP malformati
/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#Disabilita i pacchetti source routed (previene dal guardare attraverso il NAT)
/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
#Abilita LOG_MARTIANS (effettua il log dei pacchetti strani)
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
#Abilita il REVERSE PATH FILTERING
for i in /proc/sys/net/ipv4/conf/*; do
/bin/echo "1" > $i/rp_filter
done
##########################################################################
#Applico le catene a INPUT, OUTPUT e FORWARD
#Scarto i pacchetti INVALID
##########################################################################
#Applico le catene a INPUT
$IPTABLES -A INPUT -j portscan
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A INPUT -j icmp_in
$IPTABLES -A INPUT -i lo -j ACCEPT
input
$IPTABLES -A INPUT -j connessioni_avviate
#Applico le catene a OUTPUT
# $IPTABLES -A OUTPUT -m state --state INVALID -j DROP
# $IPTABLES -A OUTPUT -j no_acroread
output
#Applico le catene a FORWARD
$IPTABLES -A FORWARD -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -o lo -j ACCEPT
forward
$IPTABLES -A FORWARD -j connessioni_avviate
Code: Select all
FW:
FW:SCAN:Code: Select all
source kernsrc { file("/proc/kmsg"); };Code: Select all
destination firewall { file("/var/log/firewall.log"); };
filter f_firewall { match ("FW:"); };
log { source(kernsrc); filter(f_firewall); destination(firewall); };Per trovare i portscan basta cercare con grep la stringa "SCAN"
Se avete definito diversamente la sorgente degli eventi del kernel (la prima riga) allora aggiorate le righe che vi ho posto per puntare alla giusta source (in realtà dovete cambiare solo l'ultima riga)







