Firewall Builder
ATTENZIONE Questa guida dev'essere controllata e integrata con le altre della Categoria:Firewall riguardanti iptables , come da task di Revisione Wiki #23.
|
#!/bin/bash ## clear ## #################### VERSION="2003.06.11" #################### ## ## Interfaccia interna fidata 'settare la propria' IIF="eth0" # IIF="eth1" ## ## Interfaccia esterna da proteggere 'settare la propria' ## in genere l'interfaccia esterna è configurata da un DHCP quindi ha indirizzo dinamico. EIF="ppp0" # EIF="eth0" # EIF="eth1" ## Se l'interfaccia esterna ha un IP statico, dichiararlo # EIP="xx.xx.xx.xx" ## ## Indirizzo macchina router (si presume che il firewall giri sulla macchina router ## in caso contrario correggere manualmente questo indirizzo) ## ## Se preferite utilizzare un indirizzo statico, decommentate la linea che indica un IP ## altrimenti se utilizzate un DHCP o non conoscete l'indirizzo ## usate il riconoscimento tramite ifconfig ## controllare comunque che lo script riconosca l'indirizzo IP (potrebbe non andare su macchine che ## utilizzano shell particolari o che formattano ifconfig diversamente. ## SERVER=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1` # SERVER="192.168.10.2" ## ## Indirizzo macchina client da inserire a mano, se il server condivide la connessione ## internet, questa macchina sarà autorizzata ad accedere al firewall via eth0 ## al posto di un singolo host è possibile utilizzare una rete intera usando ## la notazione RETE/NETMASK ## attenzione alla banda disponibile perché una rete genera parecchio traffico..;) CLIENT="10.22.115.11" # CLIENT"192.168.10.0/24" ## ## Loopback LOCALHOST="127.0.0.1" ## ## Rete interna ## controllare che gli script ottengano i valori corretti ## o sostituire con valori statici. net=` ifconfig $IIF | grep inet | cut -d : -f2 | cut -d ' ' -f1 | cut -d . -f1,2,3` mask=` ifconfig $IIF | grep inet | cut -d : -f4 | cut -d ' ' -f1` LOCALNET="$net.0/$mask" ## ## Broadcast BROADCAST=` ifconfig $IIF | grep inet | cut -d : -f3 | cut -d ' ' -f1` ## ## Provider1 DNS 'inserire i propri DNS' # DNS1="212.216.172.62" DNS1="195.130.224.18" ## ## Provider2 DNS #DNS2="195.130.224.18" DNS2="192.160.10.31" ## ## Local DNS DNS3="212.245.255.2" ## questo potrebbe essere il DNS locale, in seguito sarà prevista la configurazione ## per il funzionamento di un DNS locale. ## ## Per qualunque problema...;) EMAIL="m.m.asciutti@email.it" ## ## PATH di iptables 'adattare alla propria macchina, se necessario' IPT=` which iptables` ## ## NOTA: ## Dopo aver modificato i parametri base per adattare lo ## script alle proprie esigenze, salvarlo e renderlo eseguibile ## in particolare adattare l'indirizzo del client o della rete che ## verrà nattata ## verificare inoltre che lo script che preleva ## l'indirizzo IP da ifconfig sia funzionante ## sul proprio sistema. ## ## Decommentare se si desidera aggiungere lo script al PATH di sistema # export PATH=$PATH:$NPATH ## ## Nome dello script e Posizione assoluta NFILE="firewall" NPATH="/etc/rc.d" ## ## NOTA: ## il percorso predefinito è "/etc/rc.d/" ed ## il nome predefinito è "firewall" ## ma è possibile utilizzare qualsiasi nome / percorso ## avendo cura di modificare le variabili NFILE e NPATH' ## ## Setto permessi e proprietario chown root $NPATH/$NFILE chmod 700 $NPATH/$NFILE ## ## NOTA: ## questa funzione viene richiamata solo con ## l'opzione stop e serve a rimuovere i moduli ## caricati dal firewall ## #ANSI COLOR MAGENTA='\e[35m' GREEN='\e[32m' YELLOW='\e[33m' WHITE='\e[37m' BLUE='\e[34m' CYAN='\e[36m' RED='\e[31m' NULL='\e[0m' COLOR=$BLUE ## case "$1" in #**************************************************************START start) clear COLOR=$RED msg=" Attivo il firewall ..." echo -e "$COLOR$msg$NULL\n" ## ## Politica INPUT chain="DROP" ## ## Politica OUTPUT outchain="ACCEPT" ## ## Routing fw="ACCEPT" CF="1" ## ## Opzioni diverse dalle standard ## ## Politica OUTPUT ## 'se si attiva, decommentare le regole relative all'uscita dei pacchetti' ## outchain="DROP" ## ## Non funziona da router # fw="DROP" # CF="0" ## ## Opzioni kernel SC="1" ER="1" DE="1" TW="1" SR="0" DR="0" ASR="0" ISR="1" SAV="1" LOG="1" DSR="1" ## ## Solo cosmetico SET="Abilito" MSET="Abilito" function netfilter() { exit 0 } ;; #*******************************************************************STOP stop) clear COLOR=$GREEN msg=" Disattivo il firewall ..." echo -e "$COLOR$msg$NULL\n" ## ## Politica INPUT chain="ACCEPT" ## ## Politica OUTPUT outchain="ACCEPT" ## ## Non funziona da router fw="DROP" CF="0" ## ## Opzioni kernel SC="0" ER="0" DE="0" TW="0" SR="1" DR="1" ASR="1" ISR="0" SAV="0" LOG="0" DSR="0" ## ## Solo cosmetico SET="Disabilito" MSET="Disabilito" ## function netfilter() { if [ -f /lib/modules/`uname -r`/kernel/net/ipv4/netfilter/ip_tables.o ]; then ( rmmod ip_contrackt \ ip_contrack_ftp \ ip_nat_ftp \ ip_queue \ ip_tables \ ipt_LOG \ ipt_MARK \ ipt_MASQUERADE \ ipt_MIRROR \ ipt_REDIRECT \ ipt_TCPMSS \ ipt_TOS \ ipt_limit \ ipt_mac \ ipt_mark \ ipt_multiport \ ipt_owner \ ipt_state \ ipt_tcpmss \ ipt_tos \ ipt_unclean \ iptable_filter \ iptable_mangle \ iptable_net ) > /dev/null 2> /dev/null ( rmmod ipfwadm; rmmod ipchains; modprobe ip_tables ) > /dev/null 2> /dev/null fi exit 0 } ;; #*************************************************************ROUTER router) clear COLOR=$YELLOW msg=" Attenzione, disattivo il firewall ed attivo il forwarding..." echo -e "$COLOR$msg$NULL\n" ## ## Politica INPUT chain="ACCEPT" ## ## Politica OUTPUT outchain="ACCEPT" ## ## Funziona da router fw="ACCEPT" CF="1" ## ## Opzioni kernel SC="0" ER="0" DE="0" TW="0" SR="1" DR="1" ASR="1" ISR="0" SAV="0" LOG="0" DSR="0" ## ## Solo cosmetico SET="Disabilito" MSET="Abilito" function netfilter() { exit 0 } ;; #**************************************************************HELP help) clear COLOR=$CYAN msg=" Help..." echo -e "$COLOR$msg" echo "" echo "$NFILE start " echo " Setta il firewall secondo le opzioni" echo " indicate, è possibile modificare " echo " gran parte dei parametri predefiniti" echo " per utilizzare lo script secondo le" echo " proprie esigenze." echo "" echo "$NFILE stop" echo " Resetta il firewall, permette il passaggio" echo " di tutti i pacchetti in ingresso su ogni " echo " interfaccia disabilitando l'utilizzo " echo " del PC come router;" echo " navigate usando questa modalità il meno possibile." echo "" echo "$NFILE router" echo " Abilita il transito dei pacchetti" echo " tra $IIF e $EIF senza nessun firewall" echo " utilizzare esclusivamente per testare la rete" echo " o usare un secondo firewall tra router e rete" echo " molti settaggi del kernel non sono pensati per la sicurezza" echo " ma solo per testare la rete senza perdita di nessun tipo di pacchetti," echo " è PERICOLOSO. " echo "" echo "$NFILE info" echo " Mostra il settaggio attuale dei parametri base" echo " per controllare le personalizzazioni sullo script." echo "" echo "$NFILE policy" echo " Mostra le politiche impostate con start" echo " e le statistiche relative al funzionamento del firewall" echo " i pacchetti ricevuti, droppati, loggati ecc." echo "" echo "$NFILE vsf" echo " Verifica se il server è in presenza di " echo " attacco Syn Flood." echo " È possibile settare alcuni parametri per diminuire " echo " la vulnerabilità all'attacco (indicati nel corpo dello script)." echo " I tentativi di attacco sono comunque tutti loggati." echo "" echo "$NFILE help" echo " Visualizza questo messaggio" echo -e "$NULL\n" echo "Per ogni suggerimento:$EMAIL" echo "" exit 0 ;; #***************************************************************INFO info) clear COLOR=$MAGENTA msg=" Info ..." echo -e "$COLOR$msg" echo "" ## echo "" echo " il PATH di questo script è $NPATH/$NFILE" echo " il PATH di iptables è $IPT" echo " l'interfaccia interna è la $IIF" echo " l'interfaccia esterna è la $EIF" echo " l'indirizzo IP del pc server/router è $SERVER " echo " l'indirizzo IP del pc client fidato è $CLIENT" echo " la rete locale è $LOCALNET" echo " l'indirizzo broadcast è $BROADCAST" echo " il DNS primario è $DNS1" echo " il DNS secondario è $DNS2" echo "" echo -e "$NULL\n" exit 0 ;; #***************************************************************INFO policy) clear COLOR=$WHITE msg=" Politiche ..." echo -e "$COLOR$msg" $IPT -nvL ## ## espande la politica di netfilter ## visualizzando le catene e informazioni sulle echo -e "$NULL\n" ## exit 0 ;; #*********************************************************Verifica Syn Flood vsf) clear COLOR=$YELLOW msg=" Syn Flood ..." echo -e "$COLOR$msg" echo "" echo " Verifico se siamo in presenza di Syn Flood" echo "" echo " Oltre 20-30 tentativi di connessione da uno stesso" echo " indirizzo, indicano un tentativo di flood, verificare comunque i Log" echo " prima di attivare le contromisure" ## netstat -npla | grep SYN_RECV ## echo -e "$NULL\n" exit 0 ;; #****************************************************************USO *) ## clear COLOR=$BLUE msg="Firewall ver. $VERSION - Utilizzo: $NFILE {start|stop|router|info|policy|vsf|help}" echo -e "$COLOR$msg$NULL\n" ## exit 0 ;; ## esac ## #*******************************************************BLOCCO COMUNE ## echo -e "$COLOR" ## Caricamento dei moduli necessari nel kernel ## ## Il vostro kernel potrebbe non avere ## tutti questi moduli, è sufficiente ricompilare se le funzionalità ## sono necessarie. ## ## NOTA: I seguenti moduli sono elencati solo per informazione ## Non è necessario inserirli manualmente nel kernel ## a meno di casi particolari. ## # echo "Caricamento moduli..." ## # modulo base modprobe ip_tables ## # modulo necessario alla stateful connection tracking modprobe ip_conntrack ## # modulo filter, permette di droppare rifiutare o loggare i pacchetti modprobe iptable_filter ## # modulo mangle # modprobe iptable_mangle ## # modulo nat modprobe iptable_nat ## # modulo LOG, permette di registrare i pacchetti bloccati in base alle catene modprobe ipt_LOG ## # modulo utilizzato per limitare il numero di pacchetti per sec/min/hr ## modprobe ipt_limit ## # modulo masquerade modprobe ipt_MASQUERADE ## # modulo owner # modprobe ipt_owner ## # REJECT respinge il pacchetto restituendo una risposta ICMP # configurabile, il default è "connection refused". # modprobe ipt_REJECT ## # modulo mark, permette di marcare pacchetti sulla catena mangle # modprobe ipt_mark ## # questo modulo permette di modificare il TCP MSS ## modprobe ipt_tcpmss ## # questo modulo permette di indicare porte multiple # modprobe multiport ## # questo modulo consente controlli sui flags TCP # modprobe ipt_state ## # controlli su flags invalidi # modprobe ipt_unclean ## # supporto ftp non-PASV # modprobe ip_nat_ftp ## # modulo per full ftp connection tracking # modprobe ip_conntrack_ftp ## # modulo per full irc connection tracking # modprobe ip_conntrack_irc ## ################# ## area kernel ## ################# ## echo "$SET forwarding... " echo "$CF" >/proc/sys/net/ipv4/ip_forward ## echo "$SET syn-cookies (protezione syn-flood attacks)..." echo "$SC" >/proc/sys/net/ipv4/tcp_syncookies ## echo "Riduco il numero di possibili SYN Floods..." echo "1024" >/proc/sys/net/ipv4/tcp_max_syn_backlog ## ## echo "$SET ICMP echo-request su indirizzi broadcast (Smurf amplifier)..." # Questi parametri servono ad ignorare ogni ICMP echo requests # inviato da indirizzi broadcast. Servono a prevenire # un gran numero di attacchi smurfs e DoS. echo "$ER" >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ## # Contromisure contro attacchi DoS # echo "Disabilito ICMP echo-request (usare solo se si è sotto attacco Dos)" # echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all # #sotto attacco syn incrementare il valore di tcp_max_syn_backlog e decrementare # #il valore dei timeout_* # echo "100" > /proc/sys/net/ipv4/vs/timeout_synack # echo "10" > /proc/sys/net/ipv4/vs/timeout_synrecv # echo "128" > /proc/sys/net/ipv4/tcp_max_syn_backlog ## echo "$SET protezione defrag error... " echo "$DE" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ## echo "$SET time-wait assassination hazards in tcp (RFC 1337)..." #echo "$TW" >/proc/sys/net/ipv4/tcp_rfc1337 ## echo "$SET sourcerouting and spoofing protection..." for i in /proc/sys/net/ipv4/conf/*; do ## echo "$SET politica per source-routed packets..." # Questa politica è usata per accettare o rifiutare pacchetti # di tipo 'source routed'. È attiva di default, ma è considerata # un rischio per la sicurezza. echo "$SR" >$i/accept_source_route ## echo "$SET politica per ICMP Redirect accept/send..." # Questa opzione disabilita la redirezione dei pacchetti ICMP. # È generalmente considerato un rischio per la sicurezza. echo "$DR" >$i/accept_redirects # Per questo motivo, è preferibile accettare ICMP solo # dal gateway di default (opzione secure_redirects). echo "$ASR" >$i/send_redirects echo "$SET secure ICMP redirects..." echo "$ISR" >$i/secure_redirects ## # echo "Disabilito Proxy ARP ..." # # È un'opzione utilizzata per la realizzazione di DMZ; # # è disabilitata in quanto non rientra negli scopi di questo script. # # per maggiorni info: http://www.sjdjweis.com/linux/proxyarp/ # echo "0" >$i/proxy_arp ## echo "$SET source-address verification (prevent spoofing)..." # Abilita i controlli previsti nel RFC1812. # è raccomandato per sistemi basati su interfacce singole # Disattivare se si hanno interfacce multiple collegate alla stessa rete. # Questo controllo blocca i pacchetti che si presentano ad una interfaccia esterna # con indirizzo forgiato per sembrare provenienti da interfaccia interna; # il controllo è comunque ripetuto in seguito. echo "$SAV" >$i/rp_filter ## done ## echo "Applico settaggi controllo ..." if [ -f /proc/sys/net/ipv4/icmp_destunreach_rate ]; then echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate fi if [ -f /proc/sys/net/ipv4/icmp_echoreply_rate ]; then echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate fi if [ -f /proc/sys/net/ipv4/icmp_paramprob_rate ]; then echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate fi if [ -f /proc/sys/net/ipv4/icmp_timeexceed_rate ]; then echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate fi ## echo "$SET il Log su spoofed, source routed e redirect packets..." # Questa opzione serve a loggare i pacchetti provenienti da indirizzi impossibili. echo "$LOG" >/proc/sys/net/ipv4/conf/all/log_martians ## echo "$SET dynamic socket address rewriting..." # Utile se si utilizza un indirizzo dinamico assegnato da DHCP. echo "$DSR" > /proc/sys/net/ipv4/ip_dynaddr ## echo "Setto porte locali ..." echo "56000:65096" > /proc/sys/net/ipv4/ip_local_port_range ## ## ################################# ## inizio competenza iptables ## ################################# ## echo "Azzero le chain..." ## for y in filter nat mangle ; do $IPT -t $y -F $IPT -t $y -X done ## ## politica per la tabella filter $IPT -P INPUT $chain $IPT -P OUTPUT $outchain $IPT -P FORWARD DROP #NOTA: FORWARD è su DROP in quanto il controllo è lasciato ad altre regole ## ## politica per la tabella mangle for m in PREROUTING OUTPUT ; do $IPT -t mangle -P $m ACCEPT done ## echo "Genero catene utente ..." $IPT -N chain-log $IPT -A chain-log -j LOG --log-level info # NOTA: Senza --log-level "info", si ha la scrittura dei log in ogni # vty. È un po' troppo ... $IPT -A chain-log -j $chain ## # # Dynamic Address # # La richiesta di assegnazione dell'indirizzo è di tipo broadcast # # la risposta potrebbe non essere accettata # # questa dichiarazione abilita il DHCP # $IPT -A INPUT -p UDP --source-port 67 --destination-port 68 -j ACCEPT # # DHCPd - abilitare in presenza di DHCP interno # #$IPT -A INPUT -i $IIF -p tcp --sport 68 --dport 67 -j ACCEPT # #$IPT -A INPUT -i $IIF -p udp --sport 68 --dport 67 -j ACCEPT ## ## echo "Accetto connessioni da $LOCALHOST , $SERVER , $CLIENT ..." $IPT -A INPUT -i lo -j ACCEPT $IPT -A INPUT -i $IIF -s $CLIENT -j ACCEPT $IPT -A INPUT -i $IIF -s $SERVER -j ACCEPT # $IPT -A INPUT -i $IIF -s $LOCALNET -j ACCEPT # $IPT -A OUTPUT -o lo -s $LOCALHOST -j ACCEPT # $IPT -A OUTPUT -o lo -s $SERVER -j ACCEPT ## echo "Controllo di integrità dei pacchetti sulla tabella nat-PREROUTING..." $IPT -t nat -A PREROUTING -i $EIF -s $LOCALNET -j $chain $IPT -t nat -A PREROUTING -i $EIF -s $LOCALHOST -j $chain $IPT -t nat -A PREROUTING -i $EIF -s $CLIENT -j $chain $IPT -t nat -A PREROUTING -i $EIF -s $SERVER -j $chain # # È anche possibile bloccare e loggare tutti i pacchetti # # provenienti da indirizzi privati (chiaramente forgiati per # # tentare un'intrusione) e non solo quelli relativi a $LOCALNET # # per una lista completa: # # http://www.iana.org/assignments/ipv4-address-space ## # # echo "Rifiuto pacchetti provenienti da indirizzi privati, multicast o riservati..." ## # # NOTA - le variabili A_r,B_r,C_r,D_r devono essere dimensionate # # leggendo le liste degli indirizzi da rifiutare (file esterno) # # il metodo è riportato , ma non è implementato nessun controllo, # # i pacchetti in ingresso sono comunque tutti droppati. # # questo controllo potrebbe essere comunque comodo, ma non è # # nelle finalità di questo script. # # non # for CL in A_r B_r C_r D_mc E_r ; do # $IPT -A INPUT -i $EIF -s $CL -j chain-log # done ## # TCP & UDP # Le porte standard sono elencate su: # http://www.chebucto.ns.ca/~rakerman/port-table.html # http://www.iana.org/assignments/port-numbers ## echo "Accetto connessioni RELATED/ESTABLISHED..." #in input $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo "Accetto ICMP type 0,3,11..." ## codici ICMP - RFC 792 ## 0 Echo Reply ## 3 Destination Unreachable, il router non ha trovato la destinazione del pacchetto. ## 4 Source Quench ## 5 Redirect, il router informa l'host di aver inoltrato il pacchetto ad un diverso router ## 8 Echo, messaggio utile per sapere se un host è presente oppure no (utilizzato in Ping) ## 11 Time Exceeded ## 12 Parameter Problem, campo dell'header non valido ## 13 Timestamp ## 14 Timestamp Reply ## 15 Information Request ## 16 Information Reply # Visitare: http://www.ee.siue.edu/~rwalden/networking/icmp.html # per altre informazioni relative ai tipi ICMP. for ic in 0 3 11 ; do $IPT -A INPUT -i $EIF -p icmp --icmp-type $ic -j ACCEPT done ## # Decommentare se si desidera che il proprio sistema risponda ai ping $IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j $chain # $IPT -A INPUT -i $EIF -p ICMP --icmp-type 8 -j ACCEPT ## echo "Accetto ICMP dalla rete locale..." $IPT -A INPUT -i $IIF -s $LOCALNET -p icmp -j ACCEPT ## echo "Accetto DNS replies" $IPT -A INPUT -i $EIF -p udp -s $DNS1 --sport 53 -j ACCEPT $IPT -A INPUT -i $EIF -p udp -s $DNS2 --sport 53 -j ACCEPT # $IPT -A INPUT -i IIF -p tcp -s $DNS3 --sport 53 -j ACCEPT $IPT -A INPUT -p udp --sport 53 -j ACCEPT # il DNS 3 si intende come locale, per questo si accettano le connessioni tcp # $IPT -A INPUT -i $EIF -p tcp -s $DNS1 --sport 53 -j ACCEPT # $IPT -A INPUT -i $EIF -p tcp -s $DNS2 --sport 53 -j ACCEPT ## echo "Blocco ogni pacchetto broadcast" $IPT -A INPUT -p ALL -d 255.255.255.255 -j $chain # $IPT -A INPUT -s 10.128.0.0/255.255.0.0 -j DROP ## echo "Attivo SYN-FLOODING protection..." $IPT -N SYN-FLOOD $IPT -A INPUT -p tcp --syn -j SYN-FLOOD $IPT -t filter -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j chain-log ## # echo "Sperimentale..." # #NOTA - è disattivato in quanto potrebbe generare molti falsi positivi. # $IPT -t nat -A PREROUTING -i $EIF -m unclean -j chain-log ## echo "Blocco le scansioni Xmas tree, i pacchetti senza flag, i flag irregolari, le scansioni..." ##Blocco le scansioni Xmas tree $IPT -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j chain-log $IPT -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK -j chain-log ## ##Blocco i pacchetti senza flags $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j chain-log ## ##Blocco i pacchetti SYN+RST e SYN+FIN $IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j chain-log $IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j chain-log ## ##Blocco le scansioni FIN $IPT -A INPUT -p tcp --tcp-flags FIN FIN -j chain-log ## ##Elimino pacchetti broadcast netbios $IPT -A INPUT -p udp --dport 135:139 -j $chain ## echo "Dirotto pacchetti NEW e INVALID verso CHAIN..." $IPT -A INPUT -i $EIF -m state --state NEW,INVALID -j chain-log $IPT -A INPUT -i $IIF -m state --state NEW,INVALID -j chain-log ## ## ################################################################## ## Servizi aperti all'esterno 'decommentare i servizi desiderati, attenzione!!' ## ################################################################## ## # echo "Accetto connessioni su shell criptate dall'esterno..." # $IPT -A INPUT -p tcp --dport 22 -j ACCEPT ## # echo "Accetto connessioni sendmail dall'esterno [pericoloso!!!]..." # $IPT -A INPUT -p tcp --dport smtp -j ACCEPT ## # echo "Accetto http e https dall'esterno [pericoloso!!]... " # $IPT -A INPUT -p tcp -m multiport --destination-port 80,443 -j ACCEPT ## # echo "Accetto POP3 dall'esterno [pericoloso!]..." # $IPT -A INPUT -p tcp --sport 110 -j ACCEPT ## # Questo esempio serve per usare il transparent proxy # $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 80 -j RETURN # $IPT -t nat -A PREROUTING -p tcp -s $LOCALNET --destination-port 443 -j RETURN # Redirezione HTTP # $IPT -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 3128 # Redirezione HTTPS # $IPT -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 3128 ## ####################### ## regole in uscita ## ####################### ## ## abilita servizio DNS per protocolli UDP ## (attivare per policy drop su output) # $IPT -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT ## ## abilita la navigazione WEB ed il traffico HTTPS ## (attivare per policy drop su output) # $IPT -t filter -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT ## ## abilita il traffico FTP ## (attivare per policy drop su output) # $IPT -t filter -A OUTPUT -o $EIF -p tcp --dport ftp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT ## ## abilita le connessioni SMTP e POP3 in uscita ## (attivare per policy drop su output) # $IPT -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT # $IPT -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT ## ## abilita connessioni SSH (SecureShell) con attivazione Log ## (attivare per policy drop su output) # $IPT -t filter -A OUTPUT -p tcp --syn --dport 22 -m state --state NEW -j LOG --log-level info --log-prefix "---SSH from $EIF---" # $IPT -t filter -A OUTPUT -p tcp --dport 22 -j ACCEPT ## # echo "Impedisco l'uscita di pacchetti netbios..." # il traffico di questi pacchetti potrebbe attivare # eventuali connessioni 'dial on demand' a internet. # $IPT -A OUTPUT -p udp --destination-port 135:139 -j DROP ## ## #################### ## regole particolari ## ################### ## ## ## # echo "Imposto le regole sulla tabella MANGLE..." # # Setto il TTL su tutti i pacchetti in uscita a 128. # # per nascondere la propria rete dietro al router, # # convertire i pacchetti uscenti dalla LAN ad un TTL # # uguale a quello dei pacchetti generati dal router. # # TTL non è inserito nelle versioni comunemente # # distribuite (senza patch-o-matic) # $IPT -t mangle -A FORWARD -o $EIF -j TTL --ttl-inc 1 ## echo "Risolvo il blocco derivante da ICMP fragmentation" # Il target TCPMSS risolve i problemi di connessione derivanti da server # che bloccano i pacchetti ICMP Fragmentation Needed. # Tale blocco spesso blocca il trasferimento dati anche in presenza di connessioni stabilite. $IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu ## ############################# ## regole su FORWARD e nat ## ############################# ## ## ## $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -i $EIF -m state --state NEW,INVALID -j $chain $IPT -A FORWARD -o $EIF -j ACCEPT echo "$MSET SNAT (MASQUERADE) su $EIF" ## #usare su indirizzi dinamici (esempio connessioni dial-up) $IPT -t nat -A POSTROUTING -o $EIF -j MASQUERADE #usare solo su indirizzi statici # $IPT -t nat -A POSTROUTING -o $EIF -j SNAT --to $EIP ## ## ############### ## fine del FW ## ############### ## ## echo "" echo "Da ora la politica per INPUT è $chain" echo "la politica per OUTPUT è $outchain" echo "IP forwarding è settato su $fw " echo "" echo -e "$NULL\n" ## netfilter ## ##The End..
Guida scritta da: TheNoise | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |