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 allesterno
$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...