Queste informazioni sono il contributo di Francois Bayart per aiutare gli
utenti ad impostare un bridge/firewall Linux con il kernel 2.4.x ed
iptables. L'unico requisito necessario è la patch per il bridge
firewall disponibile presso la pagine web di
Sourceforge.
Ad esempio, se state usando il kernel 2.4.18, per prima cosa installate il
pacchetto sorgente del kernel, quindi scaricate la patch
e applicatela, come mostrato nell'esempio:
Zipowz:/usr/src# apt-get install kernel-source-2.4.18
Zipowz:/usr/src# cd kernel-source-2.4.18
Zipowz:/usr/src/kernel-source-2.4.18# patch -p1 < ../bridge-nf-0.0.6-against-2.4.18.diff
patching file include/linux/netfilter.h
patching file include/linux/netfilter_ipv4.h
patching file include/linux/skbuff.h
patching file net/bridge/br.c
patching file net/bridge/br_forward.c
patching file net/bridge/br_input.c
patching file net/bridge/br_netfilter.c
patching file net/bridge/br_private.h
patching file net/bridge/Makefile
patching file net/Config.in
patching file net/core/netfilter.c
patching file net/core/skbuff.c
patching file net/ipv4/ip_output.c
patching file net/ipv4/netfilter/ip_tables.c
patching file net/ipv4/netfilter/ipt_LOG.c
Ora configurate il kernel (cioè: make menuconfig, make xconfig). Nella sezione Networking options, abilitate le seguenti opzioni:
[*] Network packet filtering (replaces ipchains)
[ ] Network packet filtering debugging (NEW)
<*> 802.1d Ethernet Bridging
[*] netfilter (firewalling) support (NEW)
Attenzione: dovete disabilitare questa opzione se volete applicare delle regole
di firewall altrimenti iptables non funzionerà.
[ ] Network packet filtering debugging (NEW)
Dopodiché, aggiungete le opzioni corrette nella sezione IP: Netfilter
Configuration. Quindi, compilate ed installate il kernel. Se volete
farlo alla maniera Debian, installate kernel-package e
lanciate make-kpkg per creare un pacchetto del kernel Debian
personalizzato installabile sul server utilizzando dpkg. Una volta che il
nuovo kernel è compilato ed installato, installate il pacchetto
bridge-utils.
Una volta completati questi passaggi, potete completare la configurazione del vostro bridge. La sezione successiva mostra due diverse possibili configurazioni per il bridge, ognuna con un ipotetica mappa di rete e i comandi necessari.
La prima configurazione utilizza il bridge come un firewall con traduzione degli indirizzi di rete (NAT) che protegge un server ed i clients della LAN interna. Un diagramma della configurazione di rete è mostrato qui sotto:
Internet ---- router ( 62.3.3.25 ) ---- bridge (62.3.3.26 gw 62.3.3.25 / 192.168.0.1)
|
|
|---- WWW Server (62.3.3.27 gw 62.3.3.25)
|
|
LAN --- Zipowz (192.168.0.2 gw 192.168.0.1)
I seguenti comandi mostrano come il bridge può essere configurato:
# Crea l'interfaccia br0
/usr/sbin/brctl addbr br0
# Aggiunge l'interfaccia Ethernet da utilizzare con il bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Lancia l'interfaccia Ethernet
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
# Configurare il bridge ethernet.
# Il bridge sarà corretto ed invisibile (firewall trasparente).
# Non figura in un traceroute e conserva il vero gateway sugli altri
# computer. Ora se volete potete configurare un gateway sul bridge e
# sceglierlo come nuovo gateway per altri computer.
/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32
# Ho aggiunto questo IP interno per creare il nostro NAT
ip addr add 192.168.0.1/24 dev br0
/sbin/route add default gw 62.3.3.25
Una seconda configurazione possibile è un sistema configurato come un firewall trasparente per una LAN con spazio di indirizzi IP pubblici.
Internet ---- router (62.3.3.25) ---- bridge (62.3.3.26)
|
|
|---- WWW Server (62.3.3.28 gw 62.3.3.25)
|
|
|---- Mail Server (62.3.3.27 gw 62.3.3.25)
Le seguenti istruzioni mostrano come sia possibile configurare questo bridge.
# Crea l'interfaccia br0
/usr/sbin/brctl addbr br0
# Aggiunge l'interfaccia Ethernet da utilizzare con il bridge
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 eth1
# Inizializza l'interfaccia Ethernet
/sbin/ifconfig eth0 0.0.0.0
/sbin/ifconfig eth1 0.0.0.0
# Configurazione del bridge Ethernet.
# Il bridge sarà invisibile e impostato correttamente (firewall trasparente).
# Non figura in un traceroute e mantiene il vostro vero gateway sugli altri
# computer. Ora, se vorrete, potrete configurare un gateway sul vostro bridge
# a sceglierlo come il nuovo gateway per gli altri computer.
/sbin/ifconfig br0 62.3.3.26 netmask 255.255.255.248 broadcast 62.3.3.32
Se eseguite un traceroute verso il Linux Mail Server, non vedrete il bridge.
Se volete accedere al bridge con ssh, dovete avere un gateway,
altrimenti dovreste prima connettervi a un altro server, come il "Mail
Server" e in seguito connettervi al bridge tramite la scheda di rete
interna.
Questo è un esempio delle regole base che si potrebbero usare per queste due configurazioni indistintamente.
iptables -F FORWARD
iptables -P FORWARD DROP
iptables -A FORWARD -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Alcune regole interessanti ma non presenti in una configurazione
# classica di Iptables...
# Limit ICMP
# iptables -A FORWARD -p icmp -m limit --limit 4/s -j ACCEPT
# Confronta la stringa, un buon metodo, semplice, per bloccare molto
# velocemente alcuni VIRUS
# iptables -I FORWARD -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
# Blocca tutte le connessioni di MySQL tanto per essere sicuri
iptables -A FORWARD -p tcp -s 0/0 -d 62.3.3.0/24 --dport 3306 -j DROP
# Regole per Linux Mail Server
# Autorizza FTP-DATA ( 20 ) , FTP ( 21 ) , SSH ( 22 )
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.27/32 --dport 20:22 -j ACCEPT
# Autorizza il Mail Server a connettersi con l'esterno
# Da notare: ciò *non* è necessario per le connessioni precedenti
# (ricorda: stateful filtering) e quindi può essere rimosso.
iptables -A FORWARD -p tcp -s 62.3.3.27/32 -d 0/0 -j ACCEPT
# WWW Server Rules
# Autorizza connessioni HTTP ( 80 ) con il server WWW
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 80 -j ACCEPT
# Autorizza connessioni HTTPS ( 443 ) con il server WWW
iptables -A FORWARD -p tcp -s 0.0.0.0/0 -d 62.3.3.28/32 --dport 443 -j ACCEPT
# Autorizza il server WWW a connettersi con l'esterno
# Da notare: ciò *non* è necessario per le connessioni precedenti
# (ricorda: stateful filtering) e quindi può essere rimosso.
iptables -A FORWARD -p tcp -s 62.3.3.28/32 -d 0/0 -j ACCEPT
Securing Debian Manual
Version: 2.97, Mon, 16 May 2005 21:28:06 +0200jfs@debian.org