inizio << . >> . indice
BLindoLinux ver. 1.0.1 --- Ruggero T.

 

3. ipchains

Il compito di questa guida è quello di fornire gli strumenti basilari per poter configurare ipchains o iptables senza spiegarne alla perfezione le sue opzioni, per quello vi rimandiamo a : "IPCHAINS: Firewall a livello rete in Linux" dei Linux Knights e "Appunti Linux: Firewall secondo la gestione del kernel Linux 2.2.*" di Daniele Giacomini. Prenderemo quindi in esame due script: uno per isolare dall'esterno un sistema stand-alone ed uno per condividere la connessione ad internet da una lan. Le modifiche vanno fatte allo script caricato all’avvio del sistema per il firewalling (es: etc/rc.d/rc.firewall nelle distro Linux-Mandrake e Red Hat).

Questo script isola il nostro pc dall'esterno e ci permette di navigare in internet:


#-----------------------------
# (C) Lance Spitzner 2000
#-----------------------------
#!/bin/sh
#
:input DENY
:forward ACCEPT
:output ACCEPT
-A input -s 0.0.0.0/255.255.255.255 -d 0.0.0.0/0.0.0.0 -j DENY
-A input -s 0.0.0.0/0.0.0.0 -d 255.255.255.255/255.255.255.255 -j DENY
-A input -s 0.0.0.0/0.0.0.0 -d 224.0.0.0/255.0.0.0 -j DENY
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 6 -j ACCEPT ! -y
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 17 -j ACCEPT -l
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 1 -j ACCEPT -l
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -j DENY -l 

 

 

Questo invece è un po' più complesso, permette un maggiore controllo sui servizi e le porte più delicate, l'accesso a servizi come icq e ftp, permette anche l'accesso alla nostra macchina dalla rete locale alla quale siamo collegati.

Lo script è commentato in modo da permettere una facile configurazione on-the-road.


#!/bin/sh
# ------------------valtellinux.it--2-0-0-1----------
#
# CopyLeft valtellinux.it
#------------------ D-i-s-c-l-a-i-m-e-r ------------------------------
#
#  Questo script è fornito come esempio di base per lo sviluppo di un
#  firewall basato su ipchains. E’ distribuito senza garanzia alcuna, 
#  implicita od esplicita, riguardo qualsiasi situazione derivante dal
#  suo utilizzo. 
#
#---------------------------e-n-d---o-f---d-i-s-c-l-a-i-m-e-r---------
#
# RICORDA questo script logga in /etc/log/messages - /etc/log/syslog
#
# Le variabili in MAIUSCOLO vanno adeguate alla tua rete
#
DAINTERNO="eth0"
RETEINTERNA="192.168.1.0/24"
IPQUESTOBOX="192.168.1.1"	
LOOPBACK="lo"
BCAST_S="0.0.0.0"
BCAST_D="255.255.255.255"	
DAESTERNO="ppp0"
RETEESTERNA="0.0.0.0/0"
IPESTERNO="0.0.0.0"
#
# Localizza ipchains
IPCHAINS="/sbin/ipchains"
#
# ----------------------------------------S-T-A-R-T-------------
## Annulla tutte le regole precedenti.
#
$IPCHAINS -F 
## Blocca tutti i transiti
$IPCHAINS -P imput DENY
$IPCHAINS -P output REJECT
$IPCHAINS -P forward REJECT
#------------------------------altre-opzioni-e-fix------------v-t-x-

  # Abilita IP Forwarding, se non è già stato fatto
    echo 1 > /proc/sys/net/ipv4/ip_forward
  # Abilita la protezione da TCP SYN Cookie 
    echo 1 > /proc/sys/net/ipv4/tcp_syncookies
  # Abilita la protezione per il defragging
    echo 1 > /proc/sys/net/ipv4/ip_always_defrag
  # Abilita la protezione per broadcast echo  
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
## Cosi il sistema non risponde al ping
    echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  # Abilita la protezione per bad error message  
    echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
  # Abilita la protezione per IP spoofing
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
        echo 1 > $f
    done
  # Disabilita accettazione ICMP Redirect 
    for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
        echo 0 > $f
    done
    for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
        echo 0 > $f
    done
  # Disabilita i pacchetti Source Routed
    for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
        echo 0 > $f
    done
  # Logga o pacchetti Spoofed, Source Routed e Redirect 
    for f in /proc/sys/net/ipv4/conf/*/log_martians; do
        echo 1 > $f
    done
  # Moduli necessari per mascherare i relativi servizi
/sbin/modprobe ip_masq_ftp
# /sbin/modprobe ip_masq_vdolive.o
# /sbin/modprobe ip_masq_quake.o
# ------------------------------------fine-altre-opzioni-------------
#
## Permette le connessioni ad interfaccia LOOPBACK
#
$IPCHAINS -A input -i $LOOPBACK -j ACCEPT
#
$IPCHAINS -A output -i $LOOPBACK -j ACCEPT		
#
## Abilita connessioni rete interna - firewall
#
ipchains -A input  -i $DAINTERNO -s $RETEINTERNA -j ACCEPT
ipchains -A output  -i $DAINTERNO -d $RETEINTERNA -j ACCEPT
#
## IP MASQUERADING ################
#
## Maschera tutti gli IP interni che vanno all’esterno
$IPCHAINS -A forward -i $DAESTERNO -s $RETEINTERNA -j MASQ
#		
##
# Rifiuta pacchatti 'spoofed' che pretendono di essere esterni
ipchains -A input -i $DAESTERNO -s $IPQUESTOBOX -j DENY -l
#
## Qui si specificano le porte da bloccare
## gli eventuali pacchetti bloccati sono loggati 
## NetBEUI									
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 139 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 139 -l -j DENY
## MS-SQL
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 1433 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 1433 -l -j DENY
## NFS
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 2049 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 2049 -l -j DENY	
## postgresSQL										
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 5432 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 5432 -l -j DENY	
## Blocca le connessioni X11disp:0-:2- 
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 5999:6003 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 5999:6003 -l -j DENY
## SOCKS
$IPCHAINS -A input -i $DAESTERNO -p tcp -s 0/0 -d 0/0 1080 -l -j DENY
$IPCHAINS -A input -i $DAESTERNO -p udp -s 0/0 -d 0/0 1080 -l -j DENY
## Blocca Traceroute in entrata
$IPCHAINS -A input -i $DAESTERNO -p udp \
-s 32769:65535 -d 33434:33523 -l -j DENY
## Apre Porte non privilegiate
#
$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 1023:65535 -j ACCEPT
$IPCHAINS -A input -p udp -s 0/0 -d 0/0 1023:65535 -j ACCEPT
#
#
## SERVIZI DI BASE 
# Se hai specificato i servizi in /etc/services puoi usare quelli 
# senza specificare il numero della porta.
# ftp
$IPCHAINS -A output -p tcp -s 0/0 -d 0/0 21 -j ACCEPT
# ssh
$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 22 -j DENY
# telnet 
#$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 23 -j ACCEPT
# smtp
$IPCHAINS -A output -p tcp -s 0/0 -d 0/0 25 -j ACCEPT
# DNS
$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 53 -j ACCEPT
$IPCHAINS -A input -p udp -s 0/0 -d 0/0 53 -j ACCEPT
# http
$IPCHAINS -A output -p tcp -s 0/0 -d 0/0 80 -j ACCEPT
# POP-3
$IPCHAINS -A output -p tcp -s 0/0 -d 0/0 110 -j ACCEPT
# indentd
#$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 113 -j ACCEPT
# https
#$IPCHAINS -A input -p tcp -s 0/0 -d 0/0 443 -j ACCEPT
#
# IRC
# 
$IPCHAINS -A input -i $DAESTERNO -p tcp ! -y -s 0/0 6667 \
 -d $IPQUESTOBOX 1024:65535 -j ACCEPT
$IPCHAINS -A output -i $DAESTERNO -p tcp -s $IPQUESTOBOX 1024:65535 \
  -d $ANYWHERE 6667 -j ACCEPT
## ICMP---------------------------------------------------------
#
#
# Abilita ICMP in entrata
$IPCHAINS -A input -i $DAESTERNO -p icmp -s 0/0 -d 0/0 -j ACCEPT
$IPCHAINS -A input -i $DAINTERNO -p icmp -s 0/0 -d 0/0 -j ACCEPT
# Abilita ICMP in uscita
$IPCHAINS -A output -i $DAESTERNO -p icmp -s 0/0 -d 0/0 -j ACCEPT
$IPCHAINS -A output -i $DAINTERNO -p icmp -s 0/0 -d 0/0 -j ACCEPT
#
################### REGOLE DI DEFAULT
# Se un pacchetto è sfuggito alle regole di sopra, 
# viene filtrato dalle seguenti
## 
$IPCHAINS -A input -j DENY
$IPCHAINS -A output -j ACCEPT
$IPCHAINS -A forward -j DENY

 

 

Questo script, rielaborato partendo da altri proposti sul web, dovrebbe rappresentare un buon modello di partenza per "mettere in sicurezza" la propria rete. Se avete bisogno di un ulteriore aiuto per configurare ipchains, su http://www.linux-firewall-tools.com/linux/ potrete creare on-line lo script che meglio si adatta alla vostra rete. Mr.Shark propone nel suo QuickConfigHowTo uno script per ipchains molto interessante e commentato in italiano, dategli un’occhiata su http://mrshark.sourceforge.net/qechowto/firewall.html.
Qui potete trovare uno script creato da Kurd che permette di configurare iptables su si un sistema linux standard.
Se avete suggerimenti per migliorare gli script e/o aggiungere nuove features scrivete, i commenti e le critiche sono ben accetti.

P.S. Ricordatevi di dare i permessi di esecuzione allo script /etc/rc.d/rc.firewall...

 

inizio << . >> . indice
BLindoLinux è pubblicato sotto licenza GNU FDL
 
Commenti o suggerimenti su questa pagina vanno inviati a: ruggero@valtellinux.it