Passa ai contenuti principali

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.

Commenti

Post popolari in questo blog

linux : software raid con mdadm

Software raid di linux. Fake raid e le bizarrie del mondo moderno. Ovvero la storia di come tenere i propri dati al sicuro usando più dischi. Preambolo (potrebbe essere noioso...): Il bios di un server allo startUp mi fa vedere un controller raid, ed io come uno sciocco ci credo, tanto da pensare di usarlo per mettere i dati al sicuro. In effetti un raid di livello 1 permette di scrivere contemporaneamente su 2 dischi, quindi se uno cede, l'altro continua a funzionare, dandoti il tempo ed il modo di intervenire e permettendoti di non perdere i tuoi preziosi dati. ci sono altri livelli di raid ma si possono approfondire ovunque. Dicevamo, il server ha un controller raid ed io lo voglio usare, quindi accedo al controller con f8 configuro 2 drive logici, di cui il secondo è formato da 2 dischi, per un totale di 3 dischi fisici e 2 logici. Parte linux e vedo sempre i 3 dischi ... sda, sdb ed sdc... e qui vado in crisi...  Per fortuna c'ho un amico che mi illumina, si tr...

Eclipse e Subversion come funziona ?

Eclipse è uno splendido strumento di programmazione, ma un programmatore è un pò come lo scrittore di un libro, ha i suoi raptus di programmazione e vuole scrivere codice dal letto, dalla scrivania o addirittura consultarlo sul tablet mentre è concentrato comodamente sul bagno. Insomma il lampo di genio non va mai sprecato, quindi se abbiamo il nostro server internet con tanto di subversion, possiamo prendere le nostre installazioni di eclipse ( non lavoriamo sempre e solo da 1 pc ) e: dal menù " Help " scelgo la voce : Install new software aggiungo http://download.eclipse.org/technology/subversive/1.0/update-site/     seleziono tutto e procedo, mi viene chiesto di riavviare eclipse, una volta riavviato mi viene proposto un elenco di moduli svn, scelgo l'svn kit che mi sta più simpatico (la versione + recente) e procedo. Vecchio modo: http://subclipse.tigris.org/update_1.4.x   ( se volete sapere quale è l'ultima versione disponibile andate qui h tt...

simple port forwarding example

Immaginiamo di avere un firewall linux  e voler pubblicare un servizio di un server interno sulla rete, quindi vogliamo che ogni accesso al nostro indirizzo ip pubblico che riguarda la porta in oggetto sia rediretto sul nostro server interno. in pratica esponiamo un servizio sulla rete pubblica recuperandolo da una rete privata. Tutto questo si traduce in effetti in pochissime righe per iptables. Dati di partenza :  indirizzo ip del server interno esempio :     192.168.1.150 porta del servizio del server interno esempio : 8080 porta pubblica del servizio che vogliamo esporre : 80 creo un file in /root/forward.sh con la confgurazione di iptables #!/bin/sh echo 1 > /proc/sys/net/ipv4/ip_forward /sbin/iptables -A PREROUTING -t nat -p tcp  --dport 80 -j DNAT --to 192.168.1.150:8080 /sbin/iptables -A FORWARD  -d 192.168.1.150 -p tcp --dport 80 -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE volendo aggiungo al crontab @reb...