Ci sono ancora buchi da riempire nei post 2009-2010-2011. Prossima PR. Reviewed-on: #170
147 lines
4.5 KiB
Markdown
147 lines
4.5 KiB
Markdown
---
|
|
title: Transparent Firewall - parte 2 - Configurazione del bridge
|
|
author: goblin
|
|
type: post
|
|
date: 2008-03-11T08:49:45+00:00
|
|
slug: transparent-firewall-part2
|
|
image: Puffy-openbsd.gif
|
|
image_alt: "Logo OpenBSD"
|
|
image_caption: "Image credits: by [By Theo de Raadt, and other members or developers of the OpenBSD group](https://www.openbsd.org/art4.html 'Openbsd website')"
|
|
aliases:
|
|
- /2008/03/11/transparent-firewall-parte-2-configurazione-del-bridge/
|
|
categories:
|
|
- Documentazione
|
|
- Software
|
|
tags:
|
|
- bridge
|
|
- firewall
|
|
- OpenBSD
|
|
|
|
---
|
|
Parte seconda - dopo aver installato OpenBSD andremo ad impostare le schede di rete in modalità bridge e ad attivare un firewall sul traffico "passante".
|
|
|
|
situazione:
|
|
xl0 interfaccia collegata al mondo esterno (al router)
|
|
rl0 interfaccia collegata alla nostra rete lan (ad uno switch)
|
|
fxp0 interfaccia di gestione (può essere attaccata con un cross ad un pc oppure alla rete interna con un indirizzo ip appropriato)
|
|
|
|
Impostiamo il bridge:
|
|
|
|
> ifconfig xl0 delete
|
|
>
|
|
> echo 'up' > /etc/hostname.xl0
|
|
>
|
|
> ifconfig rl0 delete
|
|
>
|
|
> echo 'up' > /etc/hostname.rl0
|
|
|
|
Le schede sono impostate come "up" ma senza alcun indirizzo associato.
|
|
|
|
Creiamo il file di configurazione della nuova interfaccia bridge
|
|
|
|
> echo 'add xl0 add rl0 up' > /etc/bridgename.bridge0
|
|
|
|
Riavviamo e verifichiamo che sia attiva l'interfaccia con:
|
|
|
|
> ifconfig -a
|
|
|
|
che deve restituire qualcosa del tipo
|
|
|
|
> bridge0: flags=41 <UP,RUNNING> mtu 1500
|
|
|
|
Abilitare il firewall PF - modificare il file /etc/rc.conf perchè la riga
|
|
|
|
> pf=YES
|
|
|
|
sia decommentata (togliere eventuale "#" all'inizio della riga).
|
|
|
|
Modifichiamo il file /etc/pf.conf perchè sia così:
|
|
|
|
> ext_if = "xl0" # verso il router
|
|
> int_if = "rl0" # alla LAN interna
|
|
> pass in log all keep state
|
|
> pass out log all keep state
|
|
|
|
così passerà tutto ma almeno potremo vedere il traffico effettuato.
|
|
|
|
Facciamo leggere il file con le regole:
|
|
|
|
> pfctl -f /etc/pf.conf
|
|
|
|
e verifichiamo che le regole siano state caricate correttamente.
|
|
|
|
> pfctl -sr
|
|
|
|
Deve dare:
|
|
|
|
> pass in log all flags S/SA keep state
|
|
> pass out log all flags S/SA keep state
|
|
|
|
Ora controlliamo che l'interfaccia di log sia attiva:
|
|
|
|
> /sbin/ifconfig pflog0
|
|
|
|
Deve rispondere:
|
|
|
|
> pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33224
|
|
|
|
Ora lanciamo l'utility tcpdump per monitorare il traffico di rete:
|
|
|
|
> tcpdump -n -e -ttt -i pflog0
|
|
|
|
e vedremo il dettaglio dei pacchetti che entrano dalla interfaccia esterna verso la rete interna e viceversa escono dalla interna per internet
|
|
|
|
Se l'output è troppo lungo possiamo visualizzare solo parte del traffico ad esempio quello da e per l'host 192.168.1.90
|
|
|
|
> tcpdump -n -e -ttt -i pflog0 ip host 192.168.1.90
|
|
|
|
[maggiori info qui](https://www.tcpdump.org/manpages/tcpdump.1.html)
|
|
|
|
Supponiamo ora di voler bloccare il traffico http verso il server che ha indirizzo 193.204.255.20
|
|
Modifichiamo il file /etc/pc.conf in tale maniera
|
|
|
|
> ext_if = "xl0" # interfaccia esterna (verso il router)
|
|
> int_if = "rl0" # interfaccia verso la LAN interna
|
|
> block in log on $ext_if proto tcp from 193.204.255.20 to any
|
|
> pass out log on $int_if all keep state
|
|
|
|
e navighiamo sul sito www.unibg.it dal pc che ha ip 192.168.1.90
|
|
|
|
Vedremo che il log ottenuto dal comando:
|
|
|
|
> tcpdump -p -e -ttt -i pflog0 ip host 192.168.1.90
|
|
|
|
Sarà:
|
|
|
|
> rule 0/(match) block in on xl0: 193.204.255.20.80 > 192.168.1.90
|
|
|
|
che significa che abbiamo bloccato il traffico verso questo sito (che ha indirizzo ip 193.204.255.20).
|
|
|
|
Se invece volete bloccare tutto il traffico del protocollo tcp da questa macchina verso l'esterno potete usare questa regola:
|
|
|
|
> block in log on $ext_if proto tcp from any to 192.168.1.90
|
|
|
|
provate a navigare in internet dal suddetto pc e vedrete nei log i tentativi di connessione bloccati verso la porta 80 dei server web richiesti.
|
|
|
|
A dire il vero la prassi per costruire un firewall sicuro e esattamente l'opposto e cioè di default bloccare tutto e poi aprire solo il necessario - come nel seguente script
|
|
contenuto di /etc/pf.conf
|
|
|
|
> ext_if="xl0"
|
|
> int_if="rl0"
|
|
> block in log on $ext_if all
|
|
> block out log on $int_if all
|
|
|
|
Questo blocca tutto ma veramente tutto... un po' troppo imho.
|
|
Apriamo ora tutte le connessioni da e verso il nostro pc client che abbiamo usato per fare le prove:
|
|
|
|
> ext_if="xl0"
|
|
> int_if="rl0"
|
|
> pass in log from 10.255.10.187 to any
|
|
> pass out log from 10.255.10.187 to any
|
|
> block in log on $ext_if all
|
|
> block out log on $int_if all
|
|
|
|
Compito a casa: trovare la giusta via di mezzo (aiutati anche dalla visualizzazione dei log dei pacchetti permessi / bloccati)
|
|
|
|
Marco - Goblin - Morosini
|