Home
Repository 32bit  Forum
Repository 64bit  Wiki

Modifiche

IPTABLES - Personal Firewall

6 264 byte aggiunti, 07:22, 11 ott 2006
nessun oggetto della modifica
[[Category:Networking]]
'''WORK IN PROGRESS'''
 
=Introduzione=
* regole specifiche per i singoli utenti.
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=
 
#! /bin/sh
#
# FIREWALLrc.firewall
#
if [ $UID != 0 ]; then
fi
### SOFTWARE ###
IPTAB=/usr/`which iptables`
### VARIABILI STANDARD ###
# Interfaccia pubblica #
# Interfaccia privata #
INTIF="eth1"
# Interfacce VPN #
VPN="ham0"
# Host Custom #
PC="XXX.XXX.XXX.XXX"
=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
set_policy(){
### CATENA DI DEFAULT ###
$IPTAB -P INPUT DROP $1 $IPTAB -P FORWARD DROP$1 $IPTAB -P OUTPUT DROP $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]].  set_chain(){
### CATENE RETI ###
$IPTAB -N eth_inETH_IN $IPTAB -N eth_outVPN_IN $IPTAB -N ETH_OUT $IPTAB -N VPN_OUT
### CATENE HOST ###
$IPTAB -N trusted_inTRUSTED_IN $IPTAB -N trusted_outTRUSTED_OUT ### CATENE SERVIZI ### $IPTAB -N [[IPTABLES - Personal Firewall#Samba Server|SMB_IN]] $IPTAB -N [[IPTABLES - Personal Firewall#Amule|AMULE_IN]] ### CATENE SICUREZZA ### $IPTAB -N [[IPTABLES - Personal Firewall#PortScan|TCP_CHECKS]] $IPTAB -N [[IPTABLES - Personal Firewall#AntiSpoof|ANTISPOOF]]
}
set_loop(){
$IPTAB -$1 INPUT -m comment --comment $text "Accetta connessione di LOOPBACK" -i lo -j ACCEPT $IPTAB -$1 OUTPUT -m comment --comment $text "Accetta connessione di LOOPBACK" -o lo -j ACCEPT
}
set_custom_rulesSmista il traffico a seconda della provenienza o della destinazione delle interfacce di rete. set_global(){ set_antispoof A $IPTAB -$1 INPUT $text "Traffico Internet in entrata" -i $EXTIF -j ETH_IN set_portscan $IPTAB -$1 OUTPUT $text "Traffico Internet in uscita" A-o $EXTIF -j ETH_OUT set_services $IPTAB -$1 INPUT A$text "Traffico VPN in entrata" -i $VPN -j VPN_IN $IPTAB -$1 OUTPUT $text "Traffico VPN in uscita" -o $VPN -j VPN_OUT
}
==Regole Reti==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 }==Regole HostStandard== ===Regole Sicurezza=======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 } ====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 } ===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 A$1 set_amule A$1
}
====Samba Server====
set_samba(){
}
====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"
}
=====voci correlate=====
* [[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==
Script generico che permette qualsiasi tipo di connessione esterna per gli utenti abilitati
set_user(){
$IPTAB -$1 INPUT $text "rispostaINPUT: $2" -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTAB -$1 OUTPUT $text "ConnessioniOUTPUT: $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=====PortScan===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_portscanset_group(){ $IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ALL NONE -j DROP INPUT $IPTAB -text "INPUT: $1 TCP_CHECKS 2" -p tcp m state --tcp-flags FINstate ESTABLISHED,ACK FIN RELATED -j DROP ACCEPT $IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags ACK,PSH PSH -j DROP OUTPUT $IPTAB -text "OUTPUT: $1 TCP_CHECKS 2" -p tcp m state --tcp-flags ACKstate NEW,URG URG -j DROP $IPTAB -$1 TCP_CHECKS -p tcp --tcp-flags SYNESTABLISHED,FIN SYN,FIN RELATED -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 m owner -gid-source owner $PC 2 -j DROPACCEPT
}
Per Abilitare il gruppo:
set_user A <nome_gruppo>
oppure
set_user A <group_id>
=Set Finali=
==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_blacklist set_user Abatman set_eth set_user Arobin set_VPN set_log A set_LAN set_custom_rules A }
==Disattiva Firewall (unset_firewall)==
Svuota tutte le catene e reimposta le [[IPTABLES:policy|policy]] a ACCEPT
unset_firewall() { $IPTAB -F flush_chain $IPTAB -P INPUT set_policy ACCEPT $IPTAB -P OUTPUT ACCEPT $IPTAB -P FORWARD DROP $IPTAB -t nat -F $IPTAB -t mangle -F $IPTAB -X
}
# MAIN
case "$1" in
start) echo "Starting iptables filteringAttiva Firewall..." set_firewall ;; stop) echo "Stopping iptables filteringDisattiva Firewall..." unset_firewall ;; restart) echo "Restarting iptables filteringRiattiva Firewall..." set_firewall ;; status) $IPTAB -L -v ;; block) echo "Blocca tutte le Connessioni..." set_policy DROP set_loop A ;; *) echo "UsageUtilizzo: $0 {start|stop|restart|status|block}" exit ;; esac
exit 0
293
contributi