bglug.it/content/posts/2008/2008-03-11-transparent-firewall-parte-2-configurazione-del-bridge/index.it.md

147 lines
4.5 KiB
Markdown
Raw Normal View History

2024-04-09 20:10:09 +00:00
---
title: Transparent Firewall - parte 2 - Configurazione del bridge
2024-04-09 20:10:09 +00:00
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/
2024-04-09 20:10:09 +00:00
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)
2024-04-09 20:10:09 +00:00
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:
2024-04-09 20:10:09 +00:00
> ifconfig xl0 delete
>
> echo 'up' > /etc/hostname.xl0
>
> ifconfig rl0 delete
>
> echo 'up' > /etc/hostname.rl0
2024-04-09 20:10:09 +00:00
Le schede sono impostate come "up" ma senza alcun indirizzo associato.
2024-04-09 20:10:09 +00:00
Creiamo il file di configurazione della nuova interfaccia bridge
2024-04-09 20:10:09 +00:00
> echo 'add xl0 add rl0 up' > /etc/bridgename.bridge0
2024-04-09 20:10:09 +00:00
Riavviamo e verifichiamo che sia attiva l'interfaccia con:
2024-04-09 20:10:09 +00:00
> ifconfig -a
2024-04-09 20:10:09 +00:00
che deve restituire qualcosa del tipo
> bridge0: flags=41 <UP,RUNNING> mtu 1500
2024-04-09 20:10:09 +00:00
Abilitare il firewall PF - modificare il file /etc/rc.conf perchè la riga
2024-04-09 20:10:09 +00:00
> pf=YES
2024-04-09 20:10:09 +00:00
sia decommentata (togliere eventuale "#" all'inizio della riga).
2024-04-09 20:10:09 +00:00
Modifichiamo il file /etc/pf.conf perchè sia così:
2024-04-09 20:10:09 +00:00
> ext_if = "xl0" # verso il router
> int_if = "rl0" # alla LAN interna
> pass in log all keep state
> pass out log all keep state
2024-04-09 20:10:09 +00:00
così passerà tutto ma almeno potremo vedere il traffico effettuato.
2024-04-09 20:10:09 +00:00
Facciamo leggere il file con le regole:
2024-04-09 20:10:09 +00:00
> pfctl -f /etc/pf.conf
2024-04-09 20:10:09 +00:00
e verifichiamo che le regole siano state caricate correttamente.
2024-04-09 20:10:09 +00:00
> pfctl -sr
2024-04-09 20:10:09 +00:00
Deve dare:
2024-04-09 20:10:09 +00:00
> pass in log all flags S/SA keep state
> pass out log all flags S/SA keep state
2024-04-09 20:10:09 +00:00
Ora controlliamo che l'interfaccia di log sia attiva:
2024-04-09 20:10:09 +00:00
> /sbin/ifconfig pflog0
2024-04-09 20:10:09 +00:00
Deve rispondere:
2024-04-09 20:10:09 +00:00
> pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33224
2024-04-09 20:10:09 +00:00
Ora lanciamo l'utility tcpdump per monitorare il traffico di rete:
2024-04-09 20:10:09 +00:00
> tcpdump -n -e -ttt -i pflog0
2024-04-09 20:10:09 +00:00
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
2024-04-09 20:10:09 +00:00
> tcpdump -n -e -ttt -i pflog0 ip host 192.168.1.90
2024-04-09 20:10:09 +00:00
[maggiori info qui](https://www.tcpdump.org/manpages/tcpdump.1.html)
2024-04-09 20:10:09 +00:00
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
2024-04-09 20:10:09 +00:00
> 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
2024-04-09 20:10:09 +00:00
e navighiamo sul sito www.unibg.it dal pc che ha ip 192.168.1.90
Vedremo che il log ottenuto dal comando:
2024-04-09 20:10:09 +00:00
> tcpdump -p -e -ttt -i pflog0 ip host 192.168.1.90
2024-04-09 20:10:09 +00:00
Sarà:
2024-04-09 20:10:09 +00:00
> rule 0/(match) block in on xl0: 193.204.255.20.80 > 192.168.1.90
2024-04-09 20:10:09 +00:00
che significa che abbiamo bloccato il traffico verso questo sito (che ha indirizzo ip 193.204.255.20).
2024-04-09 20:10:09 +00:00
Se invece volete bloccare tutto il traffico del protocollo tcp da questa macchina verso l'esterno potete usare questa regola:
2024-04-09 20:10:09 +00:00
> block in log on $ext_if proto tcp from any to 192.168.1.90
2024-04-09 20:10:09 +00:00
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.
2024-04-09 20:10:09 +00:00
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
2024-04-09 20:10:09 +00:00
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
2024-04-09 20:10:09 +00:00
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:
2024-04-09 20:10:09 +00:00
> 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
2024-04-09 20:10:09 +00:00
Compito a casa: trovare la giusta via di mezzo (aiutati anche dalla visualizzazione dei log dei pacchetti permessi / bloccati)
2024-04-09 20:10:09 +00:00
Marco - Goblin - Morosini