All checks were successful
Container Build / build-image (push) Successful in 40s
145 lines
4.4 KiB
Markdown
145 lines
4.4 KiB
Markdown
---
|
||
title: Transparent Firewall – parte 2 – Configurazione del bridge
|
||
author: goblin
|
||
type: post
|
||
draft: true
|
||
date: 2008-03-11T08:49:45+00:00
|
||
url: /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
|
||
|
||
<a href="http://www.tcpdump.org/tcpdump_man.html" title="Maggiori info qui" target="_blank">maggiori info qui </a>
|
||
|
||
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 |