Repository 32bit  Forum
Repository 64bit  Wiki

IPTABLES - Personal Firewall: differenze tra le versioni

Da Slacky.eu.
 
(34 revisioni intermedie di un utente non mostrate)
Riga 1: Riga 1:
[[Category:Networking]]
[[Category:Networking]]
'''WORK IN PROGRESS'''
'''WORK IN PROGRESS'''
 
=Introduzione=
=Introduzione=
Riga 17: Riga 16:
* regole specifiche per i singoli utenti.
* regole specifiche per i singoli utenti.
affinando sempre di più la tecnica per avere una configurazione da paranoici :P
affinando sempre di più la tecnica per avere una configurazione da paranoici :P
  +
{{slack|
  +
basta inserire lo script che abilita le regole in /etc/rc.d e rinominarlo rc.firewall, nei file di avvio è gia presente la stringa che avvia il firewall quindi non c'è bisogno di reinserire in rc.local nessuna stringa per abilitare rc.firewall}}
=Intestazione=
=Intestazione=
 
#! /bin/sh
#! /bin/sh
#
#
# FIREWALL
+
# rc.firewall
#
#
if [ $UID != 0 ]; then
if [ $UID != 0 ]; then
Riga 30: Riga 30:
fi
fi
### SOFTWARE ###
### SOFTWARE ###
IPTAB=/usr/iptables
+
IPTAB=`which iptables`
### VARIABILI STANDARD ###
### VARIABILI STANDARD ###
# Interfaccia pubblica #
# Interfaccia pubblica #
Riga 36: Riga 36:
# Interfaccia privata #
# Interfaccia privata #
INTIF="eth1"
INTIF="eth1"
VPN="ham0"
+
# Interfacce VPN #
  +
VPN="ham0"
# Host Custom #
# Host Custom #
PC="XXX.XXX.XXX.XXX"
PC="XXX.XXX.XXX.XXX"
Riga 52: Riga 52:
=Catene=
=Catene=
  +
Svuota le catene e cancella quelle custom
  +
flush_chain(){
  +
### FLUSHING CHAINS ###
  +
$IPTAB -F
  +
$IPTAB -X
  +
$IPTAB -Z
  +
}
Inizializza la [[IPTABLES#policy|policy]] di default delle catene
Inizializza la [[IPTABLES#policy|policy]] di default delle catene
set_policy(){
set_policy(){
### CATENA DI DEFAULT ###
### CATENA DI DEFAULT ###
$IPTAB -P INPUT DROP
+
$IPTAB -P INPUT $1
$IPTAB -P FORWARD DROP
+
$IPTAB -P FORWARD $1
$IPTAB -P OUTPUT DROP
+
$IPTAB -P OUTPUT $1
}
}
  +
  +
per utilizzare questa funzione:
  +
set_policy DROP
  +
set_policy ACCEPT
Crea le catene custom, nelle catene custom non può essere assegnata nessuna [[IPTABLES:policy|policy]].
+
Crea le catene custom
 
set_chain(){
set_chain(){
### CATENE RETI ###
### CATENE RETI ###
Riga 68: Riga 79:
$IPTAB -N VPN_OUT
$IPTAB -N VPN_OUT
### CATENE HOST ###
### CATENE HOST ###
$IPTAB -N trusted_in
+
$IPTAB -N TRUSTED_IN
$IPTAB -N trusted_out
+
$IPTAB -N TRUSTED_OUT
### CATENE SERVIZI ###
### CATENE SERVIZI ###
$IPTAB -N [[IPTABLES - Personal Firewall#SAMBA|SMB_IN]]
+
$IPTAB -N [[IPTABLES - Personal Firewall#Samba Server|SMB_IN]]
$IPTAB -N [[IPTABLES - Personal Firewall#Amule|AMULE_IN]]
$IPTAB -N [[IPTABLES - Personal Firewall#Amule|AMULE_IN]]
### CATENE SICUREZZA ###
### CATENE SICUREZZA ###
Riga 88: Riga 99:
set_loop(){
set_loop(){
$IPTAB -$1 INPUT -m comment --comment "Accetta connessione di LOOPBACK" -i lo -j ACCEPT
+
$IPTAB -$1 INPUT $text "Accetta connessione di LOOPBACK" -i lo -j ACCEPT
$IPTAB -$1 OUTPUT -m comment --comment "Accetta connessione di LOOPBACK" -o lo -j ACCEPT
+
$IPTAB -$1 OUTPUT $text "Accetta connessione di LOOPBACK" -o lo -j ACCEPT
}
}
Riga 101: Riga 112:
Con questo gruppo abiliteremo tutte le regole che fanno parte di catene custom, se in una catena custom c'è una regola nn sicura non compremetteremo il firewall in quanto per reindirizzare il flusso dei pacchetti nelle catene custom c'è bisogno di comandi espliciti(vedi set_global)
Con questo gruppo abiliteremo tutte le regole che fanno parte di catene custom, se in una catena custom c'è una regola nn sicura non compremetteremo il firewall in quanto per reindirizzare il flusso dei pacchetti nelle catene custom c'è bisogno di comandi espliciti(vedi set_global)
  +
set_custom_rules(){
set_custom_rules(){
set_internet A
+
set_internet $1
set_antispoof A
+
set_trusted_host $1
set_portscan A
+
set_antispoof $1
set_services A
+
set_portscan $1
  +
set_services $1
}
}
  +
==Regole Standard==
==Regole Reti==
+
===Regole Sicurezza===
con questa regola filtriamo tutto il traffico che arriva dalla scheda di rete collegata a internet:
+
====PortScan====
Abbiamo applicato i controlli di sicurezza
+
set_portscan(){
e successivamente abbiamo abilitato il traffico verso le porte che usa AMule, come si può notare non abbiamo reso accessibile il traffico verso il server SAMBA, decideremo di abilitare il traffico a questo servizio per altre interfacce di rete quali VPN o per IP specifici, ovviamente potrete decidere di inserire tale servizio per tutto il web se lo riterrete necessario.
+
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL NONE -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,ACK FIN -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,PSH PSH -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,URG URG -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
  +
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
  +
}
set_internet(){
+
====AntiSpoof====
$IPTAB -$1 ETH_IN $text "ANTISPOOF: " -j ANTISPOOF
+
set_antispoof(){
$IPTAB -$1 ETH_IN $text "PORTSCAN: " -j TCP_CHECKS
+
$IPTAB -$1 ANTISPOOF --in-interface ! lo --source $LOOPBACK -j DROP
$IPTAB -$1 ETH_IN $text "Servizio: Amule" -j AMULE_IN
+
$IPTAB -$1 ANTISPOOF --in-interface ! lo --destination $LOOPBACK -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_A -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_B -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_C -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_D_MULTICAT -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_E_RESERVED_NET -j DROP
  +
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $PC -j DROP
}
}
==Regole Host==
+
===Regole Servizi===
==Regole Servizi==
 
Inizio con i servizi che utilizzo, per poi cercare di creare un elenco completo dei servizi piu usati,
Inizio con i servizi che utilizzo, per poi cercare di creare un elenco completo dei servizi piu usati,
le regole che verranno scritte in questa sezione per il momento si riferiscono alla ricezione dei pacchetti dall'esterno (catena INPUT).
le regole che verranno scritte in questa sezione per il momento si riferiscono alla ricezione dei pacchetti dall'esterno (catena INPUT).
set_services(){
set_services(){
set_samba A
+
set_samba $1
set_amule A
+
set_amule $1
}
}
===Samba Server===
+
====Samba Server====
set_samba(){
set_samba(){
Riga 141: Riga 154:
}
}
===Amule===
+
====Amule====
Queste sono regole per attivare le porte dei programmi di file sharing della rete eDonkey e Kadmilia
Queste sono regole per attivare le porte dei programmi di file sharing della rete eDonkey e Kadmilia
Testato con Amule, Amuled e emule su wine.
Testato con Amule, Amuled e emule su wine.
====Configurazione per i pacchetti in ingresso====
 
set_amule(){
set_amule(){
AMULE_TCP="4662"
AMULE_TCP="4662"
Riga 154: Riga 166:
}
}
====voci correlate====
+
=====voci correlate=====
* [[AMule remote|Configurazione Amuled e Amuleweb]]
* [[AMule remote|Configurazione Amuled e Amuleweb]]
  +
  +
===Regole Client===
  +
Servizi da abilitare agli utenti che usano il PC.
  +
  +
====Risoluzione DNS====
  +
echo "- Client DNS"
  +
$IPTAB -$1 OUTPUT -p udp -m udp --dport domain -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p udp -m udp --sport domain -m state --state ESTABLISHED -j ACCEPT
  +
====HTTP Browser====
  +
echo "- Client HTTP"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport http -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport http -m state --state ESTABLISHED -j ACCEPT
  +
====Secure HTTP Browser====
  +
echo "- Client HTTPS"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport https -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport https -m state --state ESTABLISHED -j ACCEPT
  +
====Mail Client====
  +
echo "- Client MAIL"
  +
echo "--- POP"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport pop3 -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport pop3 -m state --state ESTABLISHED -j ACCEPT
  +
echo "--- SMTP"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport smtp -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport smtp -m state --state ESTABLISHED -j ACCEPT
  +
====ICQ Client====
  +
echo "- Client ICQ"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport aol -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport aol -m state --state ESTABLISHED -j ACCEPT
  +
====MSN Client====
  +
echo "- Client MSN"
  +
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp -m tcp --sport 1863 -m state --state ESTABLISHED -j ACCEPT
  +
====IRC Client====
  +
echo "- Client IRC"
  +
$IPTAB -$1 OUTPUT -p tcp --dport ircd -m state --state NEW,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 INPUT -p tcp --sport ircd -m state --state ESTABLISHED -j ACCEPT
  +
echo "--- DCC"
  +
$IPTAB -$1 INPUT -p tcp -m helper --helper irc -m state --state RELATED,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 OUTPUT -p tcp -m helper --helper irc -m state --state RELATED,ESTABLISHED -j ACCEPT
  +
====FTP Client====
  +
echo "- Client FTP"
  +
$IPTAB -$1 INPUT -p tcp --sport ftp -m state --state ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 OUTPUT -p tcp --dport ftp -m state --state NEW,ESTABLISHED -j ACCEPT
  +
echo "--- Active Mode"
  +
$IPTAB -$1 INPUT -p tcp -m helper --helper ftp --sport ftp-data -m state --state RELATED,ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 OUTPUT -p tcp -m helper --helper ftp --dport ftp-data -m state --state ESTABLISHED -j ACCEPT
  +
echo "--- Passive Mode"
  +
$IPTAB -$1 INPUT -p tcp -m helper --helper ftp -m state --state ESTABLISHED -j ACCEPT
  +
$IPTAB -$1 OUTPUT -p tcp -m helper --helper ftp -m state --state RELATED,ESTABLISHED -j ACCEPT
  +
  +
==Regole Reti==
  +
con questa regola filtriamo tutto il traffico che arriva dalla scheda di rete collegata a internet:
  +
Abbiamo applicato i controlli di sicurezza
  +
e successivamente abbiamo abilitato il traffico verso le porte che usa AMule, come si può notare non abbiamo reso accessibile il traffico verso il server SAMBA, decideremo di abilitare il traffico a questo servizio per altre interfacce di rete quali VPN o per IP specifici, ovviamente potrete decidere di inserire tale servizio per tutto il web se lo riterrete necessario.
  +
  +
set_internet(){
  +
$IPTAB -$1 ETH_IN $text "ANTISPOOF: " -j ANTISPOOF
  +
$IPTAB -$1 ETH_IN $text "PORTSCAN: " -j TCP_CHECKS
  +
$IPTAB -$1 ETH_IN $text "Servizio: Amule" -j AMULE_IN
  +
}
  +
  +
==Regole Host==
  +
Reindirizza il traffico, in base agli ip segnalati, in una nuova catena:
  +
set_trusted(){
  +
$IPTAB -$1 INPUT $text "INPUT $2" -s $2 -j TRUSTED_IN
  +
$IPTAB -$1 OUTPUT $text "OUTPUT $2" -d $2 -j TRUSTED_OUT
  +
}
  +
Per segnalare un ip sicuro, nello script, scrivere:
  +
set_trusted A <indirizzo.ip>
  +
  +
Adesso definiamo le regole di Input e Output che devono avere le comunicazioni con IP Sicuri.
  +
set_trusted_host(){
  +
$IPTAB -$1 TRUSTED_IN $text "Servizio: SAMBA" -j SMB_IN
  +
### Temporanea ###
  +
$IPTAB -$1 TRUSTED_OUT $text "Risposte: " -m state --state ESTABLISHED,RELATED -j ACCEPT
  +
}
  +
nelle comunicazioni con gli host sicuri inseriamo servizi che si vanno ad aggiungere a quelli che a cui la rete a cui appartengono questi host può accedere.
  +
  +
==Regole Utenti==
==Regole Utenti==
Riga 161: Riga 252:
Script generico che permette qualsiasi tipo di connessione esterna per gli utenti abilitati
Script generico che permette qualsiasi tipo di connessione esterna per gli utenti abilitati
set_user(){
set_user(){
$IPTAB -$1 INPUT $text "risposta: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT
+
$IPTAB -$1 INPUT $text "INPUT: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTAB -$1 OUTPUT $text "Connessioni: $2" -m state --state NEW,ESTABLISHED,RELATED -m owner $2 -j ACCEPT
+
$IPTAB -$1 OUTPUT $text "OUTPUT: $2" -m state --state NEW,ESTABLISHED,RELATED -m owner -uid-owner $2 -j ACCEPT
}
}
  +
Per Abilitare un utente:
  +
set_user A <nome_utente>
  +
oppure
  +
set_user A <user_id>
==Regole Sicurezza==
+
Si possono inserire altre funzioni che abilitano utenti e che hanno permessi o restrizioni diversificati, oppure si possono realizzare gruppi di regole che funzionino per i gruppi invece che per gli utenti singoli
===PortScan===
+
set_group(){
set_portscan(){
+
$IPTAB -$1 INPUT $text "INPUT: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL NONE -j DROP
+
$IPTAB -$1 OUTPUT $text "OUTPUT: $2" -m state --state NEW,ESTABLISHED,RELATED -m owner -gid-owner $2 -j ACCEPT
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,ACK FIN -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,PSH PSH -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,URG URG -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
 
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP
 
}
 
 
===AntiSpoof===
 
set_antispoof(){
 
$IPTAB -$1 ANTISPOOF --in-interface ! lo --source $LOOPBACK -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface ! lo --destination $LOOPBACK -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_A -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_B -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_C -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_D_MULTICAT -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_E_RESERVED_NET -j DROP
 
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $PC -j DROP
 
}
}
  +
Per Abilitare il gruppo:
  +
set_user A <nome_gruppo>
  +
oppure
  +
set_user A <group_id>
=Set Finali=
=Set Finali=
==Attiva Firewall (set_firewall)==
==Attiva Firewall (set_firewall)==
  +
set_firewall(){
set_firewall(){
set_loop A
+
flush_chain
set_trusted A
+
set_policy DROP
set_blacklist A
+
set_chain
set_eth A
+
set_loop A
set_VPN A
+
set_global A
set_LAN A
+
set_trusted A $PC_TRUSTED
}
+
set_user A batman
  +
set_user A robin
  +
set_log A
  +
set_custom_rules A
  +
}
==Disattiva Firewall (unset_firewall)==
==Disattiva Firewall (unset_firewall)==
Svuota tutte le catene e reimposta le [[IPTABLES:policy|policy]] a ACCEPT
Svuota tutte le catene e reimposta le [[IPTABLES:policy|policy]] a ACCEPT
unset_firewall() {
+
unset_firewall(){
$IPTAB -F
+
flush_chain
$IPTAB -P INPUT ACCEPT
+
set_policy ACCEPT
$IPTAB -P OUTPUT ACCEPT
 
$IPTAB -P FORWARD DROP
 
$IPTAB -t nat -F
 
$IPTAB -t mangle -F
 
$IPTAB -X
 
}
}
Riga 192: Riga 292:
# MAIN
# MAIN
case "$1" in
case "$1" in
start)
+
start)
echo "Starting iptables filtering..."
+
echo "Attiva Firewall..."
set_firewall
+
set_firewall
;;
+
;;
stop)
+
stop)
echo "Stopping iptables filtering..."
+
echo "Disattiva Firewall..."
unset_firewall
+
unset_firewall
;;
+
;;
restart)
+
restart)
echo "Restarting iptables filtering..."
+
echo "Riattiva Firewall..."
set_firewall
+
set_firewall
;;
+
;;
status)
+
status)
$IPTAB -L -v
+
$IPTAB -L -v
;;
+
;;
*)
+
block)
echo "Usage: $0 {start|stop|restart|status}"
+
echo "Blocca tutte le Connessioni..."
exit
+
set_policy DROP
;;
+
set_loop A
esac
+
;;
  +
*)
  +
echo "Utilizzo: $0 {start|stop|restart|status|block}"
  +
exit
  +
;;
  +
esac
exit 0
exit 0

Versione attuale delle 08:22, 11 ott 2006

WORK IN PROGRESS

Indice

[modifica] Introduzione

Questa guida ha come scopo la creazione di un firewall per pc desktop, sarà la base di partenza per scrivere una guida piu vasta all'utilizzo di IPTables. Lo script si propone di definire:

  • regole standard - utili per qualsiasi firewall
  • regole separate per ogni scheda di rete che il pc ha installata
    • rete esterna
    • rete VPN
    • rete LAN
  • regole per la comunicazione con eventuali Host sicuri
  • regole per restringere l'accesso a determinati Host pericolosi
  • regole per i vari servizi che offre la macchina
  • regole specifiche per i singoli utenti.

affinando sempre di più la tecnica per avere una configurazione da paranoici :P

Logoslack.png

NELLA DISTRIBUZIONE SLACKWARE:

basta inserire lo script che abilita le regole in /etc/rc.d e rinominarlo rc.firewall, nei file di avvio è gia presente la stringa che avvia il firewall quindi non c'è bisogno di reinserire in rc.local nessuna stringa per abilitare rc.firewall

[modifica] Intestazione

#! /bin/sh
#
# rc.firewall
#
if [ $UID != 0 ]; then
  echo -e "\aWARNING: only root can set iptables!"
  exit
fi 
### SOFTWARE ###
IPTAB=`which iptables`
### VARIABILI STANDARD ###
# Interfaccia pubblica #
EXTIF="eth0"
# Interfaccia privata #
INTIF="eth1"
# Interfacce VPN #
VPN="ham0" 
# Host Custom #
PC="XXX.XXX.XXX.XXX"
PC_TRUSTED="XXX.XXX.XXX.XXX"
PC_BLACKLISTED="XXX.XXX.XXX.XXX"
# CLASSI IP PRIVATI #
LOOPBACK="127.0.0.0/8"
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.0.0/12"
CLASS_C="192.168.0.0/16"
CLASS_D_MULTICAST="224.0.0.0/4"
CLASS_E_RESERVED_NET="240.0.0.0/5"
### MATCH ###
text="-m comment --comment"

[modifica] Catene

Svuota le catene e cancella quelle custom

flush_chain(){
### FLUSHING CHAINS ###
$IPTAB -F
$IPTAB -X
$IPTAB -Z
}

Inizializza la policy di default delle catene

set_policy(){
### CATENA DI DEFAULT ###
$IPTAB -P INPUT   $1
$IPTAB -P FORWARD $1
$IPTAB -P OUTPUT  $1
}

per utilizzare questa funzione:

set_policy DROP
set_policy ACCEPT

Crea le catene custom

set_chain(){ 
### CATENE RETI ###
$IPTAB -N ETH_IN
$IPTAB -N VPN_IN
$IPTAB -N ETH_OUT
$IPTAB -N VPN_OUT 
### CATENE HOST ###
$IPTAB -N TRUSTED_IN
$IPTAB -N TRUSTED_OUT
### CATENE SERVIZI ###
$IPTAB -N SMB_IN
$IPTAB -N AMULE_IN 
### CATENE SICUREZZA ###
$IPTAB -N TCP_CHECKS
$IPTAB -N ANTISPOOF 
}

[modifica] Regole

Inseriremo tutte le regole in piccoli blocchi raggruppati in funzioni. per attivare, nel firewall, un gruppo di regole inserire nello script

set_gruppo A

per disattivare la regola

set_gruppo D

alcune regole hanno anche parametri aggiuntivi che verranno spiegati di volta in volta.

[modifica] Regole Globali

set_loop(){
 $IPTAB -$1 INPUT  $text "Accetta connessione di LOOPBACK" -i lo -j ACCEPT 
 $IPTAB -$1 OUTPUT $text "Accetta connessione di LOOPBACK" -o lo -j ACCEPT  
}

Smista il traffico a seconda della provenienza o della destinazione delle interfacce di rete.

set_global(){
 $IPTAB -$1 INPUT  $text "Traffico Internet in entrata" -i $EXTIF -j ETH_IN 
 $IPTAB -$1 OUTPUT $text "Traffico Internet in uscita"  -o $EXTIF -j ETH_OUT
 $IPTAB -$1 INPUT  $text "Traffico VPN in entrata"      -i $VPN   -j VPN_IN 
 $IPTAB -$1 OUTPUT $text "Traffico VPN in uscita"       -o $VPN   -j VPN_OUT
}

Con questo gruppo abiliteremo tutte le regole che fanno parte di catene custom, se in una catena custom c'è una regola nn sicura non compremetteremo il firewall in quanto per reindirizzare il flusso dei pacchetti nelle catene custom c'è bisogno di comandi espliciti(vedi set_global)

set_custom_rules(){
set_internet     $1
set_trusted_host $1
set_antispoof    $1
set_portscan     $1
set_services     $1
}

[modifica] Regole Standard

[modifica] Regole Sicurezza

[modifica] PortScan

set_portscan(){
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL NONE        -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,ACK FIN     -j DROP  
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,PSH PSH     -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,URG URG     -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYN,RST SYN,RST -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags FIN,RST FIN,RST -j DROP   
$IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP 
}

[modifica] AntiSpoof

set_antispoof(){
$IPTAB -$1 ANTISPOOF --in-interface ! lo   --source      $LOOPBACK        -j DROP
$IPTAB -$1 ANTISPOOF --in-interface ! lo   --destination $LOOPBACK        -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_A              -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_B              -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_C              -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_D_MULTICAT     -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $CLASS_E_RESERVED_NET -j DROP
$IPTAB -$1 ANTISPOOF --in-interface $EXTIF --source $PC                   -j DROP
}

[modifica] Regole Servizi

Inizio con i servizi che utilizzo, per poi cercare di creare un elenco completo dei servizi piu usati, le regole che verranno scritte in questa sezione per il momento si riferiscono alla ricezione dei pacchetti dall'esterno (catena INPUT).

set_services(){
 set_samba $1
 set_amule $1
}

[modifica] Samba Server

set_samba(){ 
 SAMBA_UDP="137"
 SAMBA_UDP2="138"
 SAMBA_TCP="139"
 SAMBA_TCP2="445"
 $IPTAB -$1 SMB_IN $text "SAMBA:" -p UDP --dport $SAMBA_UDP  -j ACCEPT
 $IPTAB -$1 SMB_IN $text "SAMBA:" -p UDP --dport $SAMBA_UDP2 -j ACCEPT 
 $IPTAB -$1 SMB_IN $text "SAMBA:" -m state --state NEW -m tcp -p tcp --dport $SAMBA_TCP  -j ACCEPT
 $IPTAB -$1 SMB_IN $text "SAMBA:" -m state --state NEW -m tcp -p tcp --dport $SAMBA_TCP2 -j ACCEPT 
}

[modifica] Amule

Queste sono regole per attivare le porte dei programmi di file sharing della rete eDonkey e Kadmilia Testato con Amule, Amuled e emule su wine.

set_amule(){ 
 AMULE_TCP="4662"
 AMULE_UDP="4665"
 AMULE_UDP2="4672"
 $IPTAB -$1 AMULE_IN $text "AMULE: TCP"  -p TCP --dport $AMULE_TCP -j ACCEPT 
 $IPTAB -$1 AMULE_IN $text "AMULE: UDP"  -p UDP --dport $AMULE_UDP -j ACCEPT 
 $IPTAB -$1 AMULE_IN $text "AMULE: UDP2" -p UDP --dport $AMULE_UDP2 -j ACCEPT 
}
[modifica] voci correlate

[modifica] Regole Client

Servizi da abilitare agli utenti che usano il PC.

[modifica] Risoluzione DNS

echo "- Client DNS"
$IPTAB -$1 OUTPUT -p udp -m udp --dport domain -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p udp -m udp --sport domain -m state --state ESTABLISHED -j ACCEPT

[modifica] HTTP Browser

echo "- Client HTTP"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport http -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport http -m state --state ESTABLISHED -j ACCEPT

[modifica] Secure HTTP Browser

echo "- Client HTTPS"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport https -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport https -m state --state ESTABLISHED -j ACCEPT

[modifica] Mail Client

echo "- Client MAIL"
echo "--- POP"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport pop3 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport pop3 -m state --state ESTABLISHED -j ACCEPT
echo "--- SMTP"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport smtp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport smtp  -m state --state ESTABLISHED -j ACCEPT

[modifica] ICQ Client

echo "- Client ICQ"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport aol -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport aol -m state --state ESTABLISHED -j ACCEPT

[modifica] MSN Client

echo "- Client MSN"
$IPTAB -$1 OUTPUT -p tcp -m tcp --dport 1863 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp -m tcp --sport 1863 -m state --state ESTABLISHED -j ACCEPT

[modifica] IRC Client

echo "- Client IRC"
$IPTAB -$1 OUTPUT -p tcp --dport ircd -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTAB -$1 INPUT  -p tcp --sport ircd  -m state --state ESTABLISHED -j ACCEPT
echo "--- DCC"
$IPTAB -$1 INPUT  -p tcp -m helper --helper irc -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTAB -$1 OUTPUT -p tcp -m helper --helper irc -m state --state RELATED,ESTABLISHED -j ACCEPT

[modifica] FTP Client

echo "- Client FTP"
$IPTAB -$1 INPUT  -p tcp --sport ftp  -m state --state ESTABLISHED -j ACCEPT
$IPTAB -$1 OUTPUT -p tcp --dport ftp -m state --state NEW,ESTABLISHED -j ACCEPT
echo "--- Active Mode"
$IPTAB -$1 INPUT  -p tcp -m helper --helper ftp --sport ftp-data -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTAB -$1 OUTPUT -p tcp -m helper --helper ftp --dport ftp-data -m state --state ESTABLISHED -j ACCEPT 
echo "--- Passive Mode"
$IPTAB -$1 INPUT  -p tcp -m helper --helper ftp -m state --state ESTABLISHED -j ACCEPT
$IPTAB -$1 OUTPUT -p tcp -m helper --helper ftp -m state --state RELATED,ESTABLISHED -j ACCEPT

[modifica] Regole Reti

con questa regola filtriamo tutto il traffico che arriva dalla scheda di rete collegata a internet: Abbiamo applicato i controlli di sicurezza e successivamente abbiamo abilitato il traffico verso le porte che usa AMule, come si può notare non abbiamo reso accessibile il traffico verso il server SAMBA, decideremo di abilitare il traffico a questo servizio per altre interfacce di rete quali VPN o per IP specifici, ovviamente potrete decidere di inserire tale servizio per tutto il web se lo riterrete necessario.

set_internet(){
 $IPTAB -$1 ETH_IN  $text "ANTISPOOF: "     -j ANTISPOOF 
 $IPTAB -$1 ETH_IN  $text "PORTSCAN: "      -j TCP_CHECKS 
 $IPTAB -$1 ETH_IN  $text "Servizio: Amule" -j AMULE_IN 
}

[modifica] Regole Host

Reindirizza il traffico, in base agli ip segnalati, in una nuova catena:

set_trusted(){
 $IPTAB -$1 INPUT  $text "INPUT $2"   -s $2 -j  TRUSTED_IN
 $IPTAB -$1 OUTPUT $text "OUTPUT $2"  -d $2 -j  TRUSTED_OUT
}

Per segnalare un ip sicuro, nello script, scrivere:

set_trusted A <indirizzo.ip>

Adesso definiamo le regole di Input e Output che devono avere le comunicazioni con IP Sicuri.

set_trusted_host(){
 $IPTAB -$1 TRUSTED_IN  $text "Servizio: SAMBA" -j SMB_IN
 ### Temporanea ### 
 $IPTAB -$1 TRUSTED_OUT $text "Risposte: " -m state --state ESTABLISHED,RELATED -j ACCEPT
}

nelle comunicazioni con gli host sicuri inseriamo servizi che si vanno ad aggiungere a quelli che a cui la rete a cui appartengono questi host può accedere.


[modifica] Regole Utenti

Inseriamo le regole per permettere a un user locale di poter utilizzare liberamente internet come desktop user: Script generico che permette qualsiasi tipo di connessione esterna per gli utenti abilitati

set_user(){
$IPTAB -$1 INPUT $text "INPUT: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTAB -$1 OUTPUT $text "OUTPUT: $2" -m state --state NEW,ESTABLISHED,RELATED -m owner -uid-owner $2 -j ACCEPT
}

Per Abilitare un utente:

set_user A <nome_utente>

oppure

set_user A <user_id>

Si possono inserire altre funzioni che abilitano utenti e che hanno permessi o restrizioni diversificati, oppure si possono realizzare gruppi di regole che funzionino per i gruppi invece che per gli utenti singoli

set_group(){
$IPTAB -$1 INPUT $text "INPUT: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTAB -$1 OUTPUT $text "OUTPUT: $2" -m state --state NEW,ESTABLISHED,RELATED -m owner -gid-owner $2 -j ACCEPT
}

Per Abilitare il gruppo:

set_user A <nome_gruppo>

oppure

set_user A <group_id>

[modifica] Set Finali

[modifica] Attiva Firewall (set_firewall)

set_firewall(){
 flush_chain
 set_policy   DROP
 set_chain
 set_loop     A 
 set_global   A
 set_trusted  A $PC_TRUSTED
 set_user     A batman
 set_user     A robin
 set_log      A
 set_custom_rules A

}

[modifica] Disattiva Firewall (unset_firewall)

Svuota tutte le catene e reimposta le policy a ACCEPT

unset_firewall(){
 flush_chain
 set_policy   ACCEPT
}

[modifica] Main

# MAIN
case "$1" in
  start)
     echo "Attiva Firewall..."
     set_firewall
     ;;
  stop)
     echo "Disattiva Firewall..."
     unset_firewall
     ;;
  restart)
     echo "Riattiva Firewall..."
     set_firewall
     ;;
  status)
     $IPTAB -L -v
     ;;
  block)
     echo "Blocca tutte le Connessioni..."
     set_policy   DROP
     set_loop     A
     ;;
  *)
     echo "Utilizzo: $0 {start|stop|restart|status|block}"
     exit 
     ;;
 esac
exit 0
Strumenti personali
Namespace

Varianti