martedì 30 ottobre 2012

pillole linux: un semplice firewall

Cos'e' un firewall ?


Un firewall in ambito informatico è un meccanismo che filtra in una rete le operazioni e comunicazioni ammesse o negate, in pratica cosa può passare o cosa deve fermarsi e non andare oltre.... le possibilità e le esigenze sono infinite, noi prenderemo un caso più che semplice come esempio, senza scendere in dettagli o configurazioni professionali.

Generalmente, o per uso domestico non ne abbiamo particolare bisogno, a meno che non abbiamo un pc collegato in rete con un indirizzo ip pubblico.

Cos'e' un indirizzo ip pubblico ?
vedete il discorso fatto in un post precedente : http://tecnocchio.blogspot.it/2012/03/il-mio-server-internet-personale-perte.html

Il nostro firewall che filtra per funzionare bene deve avere diverse interfacce di rete, una collegata ad una rete, tipo alla nostra rete dei pc e l'altra scheda che va verso internet. In lunux le interfacce di rete ethernet in genere si chiamano eth ed un numero, noi cominciamo ad immaginare che eth0 è la nostra rete interna ed eth1 e la scheda che guarda verso la rete esterna, e che vogliamo proteggerci da ogni eventuale  accesso dall'esterno non autorizzato.
Per il nostro scopo suggerisco una distribuzione linux minimale in cui non installiamo l'interfaccia grafica tipo ubuntu-server.
Innanzi tutto andiamo a definire quelli che sono gli indirizzi che hanno le nostre reti:
sudo nano -w /etc/network/interfaces

dovrebbe avere una configurazione simile, ma ovviamente con gli indirizzi adatti alle vostre esigenze

auto lo
iface lo inet loopback

# rete INTERNA

auto eth0
iface eth0 inet static
address 192.168.0.254
netmask 255.255.255.0

# rete ESTERNA 

auto eth1
iface eth1 inet static

# indirizzo ip casomai pubblico
address 200.153.19.59
netmask 255.255.255.248
gateway 200.153.19.57


# dopo aver configurato la rete lancia questo script :
post-up /etc/regole_firewall.sh


a questo punto dovremo solo configurare le regole di firewall

sudo nano -w /etc/regole_firewall.sh

#!/bin/bash


#    PER INIZIARE CANCELLIAMO TUTTE LE REGOLE ESISTENTI


for table in nat mangle filter
do
    /sbin/iptables -t $table -F
    /sbin/iptables -t $table -X
    /sbin/iptables -t $table -Z
done

#
# DOPO DI CHE CHIUDIAMO TUTTO
#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

#
# ABILITIAMO QUINDI L' IP Forwarding PER PERMETTERE CHE I DATI ATTRAVERSINO LE RETI
#
echo 1 > /proc/sys/net/ipv4/ip_forward

#
# IGNORA I PING DI BROADCAST
#
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

#
# ABILITA rp_filter PER EVITARE IP SPOOFING
#
for a in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo 1 > $a
done

# ACCETTA LE COMUNICAZIONE CHE SONO DELLE RISPOSTE A CONNESSIONI STABILITE

#

/sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# QUESTA RIGA PERMETTE DI FARE IL NAT TRA LE DUE RETI, IL NAT È QUELLO CHE IN GENERE FA IL ROUTER, Nat sta per network addres translation
#
/sbin/iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# PERMESSI IN INGRESSO:


# ABILITIAMO L'ACCESSO SSH DALLA RETE INTERNA


/sbin/iptables -t filter -A INPUT -i eth0 -p tcp --dport ssh -j ACCEPT

# PERMESSI IN USCITA :


# QUESTA RIGA PERMETTE AI COMPUTER DELLA RETE INTERNA DI USCIRE PER AGGIORNARE L'ORA
/sbin/iptables -t filter -A OUTPUT -o eth0  -p udp --dport ntp -j ACCEPT

# QUESTA RIGA PERMETTE AI COMPUTER DELLA RETE INTERNA DI ANDARE SULLA RETE ESTERNA SUI DNS DI GOOGLE PER RISOLVCERE I NOMI
/sbin/iptables -t filter -A OUTPUT -o eth1 -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A OUTPUT -o eth1 -d 8.8.4.4 -p udp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -d 8.8.8.8 -p udp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1 -d 8.8.4.4 -p udp --dport 53 -j ACCEPT

# QUESTE RIGHE PERMETTONO AI PC DELLA RETE INTERNA DI ANDARE SULLE PORTE PIÙ COMUNI DELLA RETE ESTERNA, COME IL WEB, LA POSTA...

 
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 443 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 21 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 22 -j ACCEPT

/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 465 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 993 -j ACCEPT /sbin/iptables -t filter -A FORWARD -i eth0 -o eth1  -p tcp --dport 995 -j ACCEPT


sudo chmod +x /etc/regole_firewall.sh

Ora è sufficente riavviare e collegare le reti.

Nessun commento:

Posta un commento