Some checks failed
Vulnerability Scan / Daily Vulnerability Scan (push) Failing after 20s
fix #39 Reviewed-on: #111 Co-authored-by: paspo <paolo@asperti.com> Co-committed-by: paspo <paolo@asperti.com>
145 lines
4.4 KiB
Markdown
145 lines
4.4 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
|
|
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".
|
|
<!--more-->
|
|
|
|
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
|