iso udf

Transcript

iso udf
Linux - Introduzione
UNIX - Architettura
•
•
•
•
•
•
Un sistema operativo UNIX è composto da:
Il nucleo (Kernel): gestisce le risorse del calcolatore:
• Gestisce Processi, Utenti, Memoria
• Driver: colloquio con le periferiche (schermo, tastiera, mouse,
dischi, interfacce di rete, scanner, stampanti...)
• File system: l’insieme dei meccanismi base per l'organizzazione
dei supporti di memoria di massa in file.
• Funzionalità di Rete
Librerie di sistema: software per realizzare funzionalità di uso comune
(shared libraries)
UNIX Tools: una collezione di programmi con interfaccia testuale
presente su quasi tutte le versioni di unix.
La Shell: è il ‘Command line interpreter’ cioè interpreta i comandi
dell’utente e li traduce in azioni da parte dei vari programmi di utilità
(che usano il kernel). Rappresenta l’interfaccia fra utente e sistema.
Applicativi specializzati
Linux
•
•
•
•
Linux è un kernel di sistema operativo
è una forma di unix, un membro di una complessa famiglia
di sistemi operativi che nasce nel 1969
è software libero, rilasciato sotto la licenza GPL
•
il codice sorgente è pubblico
•
tutti hanno il diritto di leggerlo, modificarlo, distribuire le
versioni modificate (open source – scelta tecnica)
•
le versioni ridistribuite ricadono sotto la stessa licenza
(Copyleft – scelta politica)
gran parte del software di base che viene usato insieme a
linux è prodotto dal progetto GNU, con lo scopo “politico” di
realizzare un sistema operativo completamente libero.
•
Licenza GPL
•
Per questo un sistema operativo nel suo complesso è
(dovrbbe essere) chiamato GNU/Linux.
dal kernel al CD di installazione:
le Distribuzioni
Linux è solo un kernel, per creare un ambiente di lavoro funzionante
servono molti altri componenti
Si attinge principalmente (ma non solo) dal patrimonio di software
libero.
Ogni programma è sviluppato indipendentemente, tipicamente
distribuito come sorgenti c.
Una distribuzione linux è costituita da:
●
kernel
●
utilità di base (librerie, tools, ...)
●
Applicativi
●
Il tutto compilato (per i386, sparc…)
●
un sistema di gestione dei pacchetti
●
programmi di installazione e configurazione
Anche sotto questo aspetto, linux is about choice:
Fedora, Mandrivia, Debian, Ubuntu, RedHat, SuSe
Knoppix, dynebolic (live CD)
Il Kernel Linux
●
●
●
●
Il kernel Linux è Modulare, ovvero ha la capacità di
caricare/scaricare parti di codice (moduli) secondo necessità e
richieste.
modprobe nomemodulo carica un modulo e quelli necesari
rmmod nomemodulo
scarica un modulo (se possibile)
In fase di compilazione è possibile decidere se ciascuna funzionalità
deve essere inclusa nel kernel, compilata come modulo o omessa
del tutto
Ogni distribuzione fornisce un kenel precompilato, ma è sempre
possibile (talvolta necessario) compilarne uno su misura
Leggere il Version Number del kernel Linux (es: 2.6.12):
– 2 - Il major number
– 6 - Il minor number
Pari: kernel stable e pronto per sistemi in produzione;
Dispari: kernel in development, da usare con cautela
– 12 – patch level
Documentazione
comando -h|--help help in linea
man <comando>
(dovrebbe esistere per tutti i programmi)
info <command> (programmi GNU)
/usr/share/doc/<pacchetto>
/usr/doc/<pacchetto>
Le directory dove risiedono le
documentazioni per programmi specifici in diversi formati
(txt,html,pdf etc..)
internet (google is your friend)
Utenti
•
•
•
•
•
•
Unix è un sistema operativo multi-utente.
Ogni utilizzo del sistema operativo è associato ad un
particolare utente (processi, file).
Ciascun utente ha un nome testuale (username) ed un numero
(UID), che viene utilizzato internamente al sistema operativo.
Esiste un “super-user” (“root”), preposto all’amministrazione
e alla supervisione del sistema.
• Potere <-> Responsabilità
• (rischio di perdita di dati o di produttività, privacy)
L'accesso al sistema (login) si esegue tipicamente digitando
user name e password.
Ad ogni utente del sistema viene assegnata una directory di
sua proprietà (HOME DIRECTORY). All’interno l’utente potrà
creare tutti i files (e sottodirectory) che desidera.
File
●
In unix, gli oggetti del sistema operativo sono rappresentati
dalla metafora omogenea del file:
–
Archivio di dati su disco
–
Connessione di rete
–
Canale di comunicazione (tastiera / schermo, stampante,
scanner)
–
Dispositivo (tastiera, disco, partizione, bus,…)
Processi
●
●
●
●
●
Ciascun programma viene eseguito in una struttura del
sistema operativo chiamata processo, caratterizzata da:
–
Spazio di memoria (codice, stack, heap)
–
File aperti (filedescriptors)
–
utente che ha lanciato il processo
–
priorità
PID: identificativo numerico del processo
per generare un processo, un altro processo deve usare
fork (crea copia di un processo) ed
exec (esegui un programma)
I processi “discendono” tutti da init, che ha PID 1 e rimane
sempre in esecuzione
PPID: PID del processo padre
Stati di un processo
●
●
In un dato istante, è fisicamente in esecuzione un solo
processo (per processore)
Lo stato di un processo può essere:
–
R - running, il processo è in esecuzione;
–
S - sleeping, il processo è in attesa
(input dell'utente, conclusione di altri processi, CPU
libera ecc..)
–
Z - zombie, il processo è morto ed aspetta che il parent
chieda un codice d'uscita.
–
T – stoppato (ad esempio con ctrl-z, o da strace)
FileDescriptors
Ogni programma lanciato ha per default 3 descrittori di file aperti:
●
standard input (stdin - file descriptor 0), è il canale attraverso il
quale il programma riceve i dati di ingresso (generalmente la
tastiera).
●
standard output (stdout - file descriptor 1), è il canale di uscita
del risultato dell'elaborazione del programma, di solito il video.
●
standard error (stderr - file descriptor 2), è dove il programma
stampa eventuali errori durante l'esecuzione, di solito il video.
gestione dei processi
ps [opzioni]
visualizza la lista dei processi attualmente presenti sul sistema
top [opzioni] visualizza la lista dei processi presenti sul
sistema, in costante aggiornamento
kill -[signal] pid
invia un segnale ad un processo, principalmente utilizzato per
"uccidere“, o meglio terminare, (SIGKILL) un processo
nohup <command>
esegue un programma rendendolo
immune da segnali, e anche alla chiusura del terminale
nice <priority> <command> modifica la priorità di un
processo (numeri + bassi = priorità maggiore).
solo root può assegnare priorità < 0
Terminale
• Un terminale è un canale per interagire con il sistema
operativo in modalità testuale. Questa è la modalità più
comune e più potente di utilizzo di un sistema unix.
• Diverse forme di terminale
• Seriale (terminale seriale, o altro calcolatore con emulatore,
connesso a porta seriale)
raramente usato, salvo sistemi embedded
(e apparati di rete)
• virtuale (TTY): tipicamente 6 terminali virtuali sulla console
di un sistema linux (ALT-n: n-esimo TTY)
• grafico: in ambiente grafico all'interno di un emulatore di
terminale (xterm, rxvt, gnome-terminal...)
• remoto: accesso remoto ad un sistema (con telnet o ssh)
• Un terminale può avere capacità grafiche più o meno ricche
• solo linea di comando/applicazioni a pieno schermo
• In un terminale viene tipicamente eseguita una shell...
La shell
●
●
●
●
●
●
La shell o interprete dei comandi è un programma che serve ad
impartire comandi al sistema operativo.
Linux is about choice: Bash, [t]csh, ….
I comandi sono righe di testo inserite al prompt ($), che
vengono interpretate eseguite quando si preme invio.
La shell supporta variabili di ambiente
VAR=valore
assegnamento
echo $VAR
lettura
Funzionalità ergonomiche:
● auto completion (TAB) su comandi, nomi di file, di variabli
● history dei comandi (freccia su, ctrl-r per cercare nell'history)
job control:
● mandare un programma in background (&)
● Arrestare l’esecuzione di un programma (sospendere) (ctrl-z)
● jobs
lista dei programmi sospesi
● bg
manda un programma in background
● fg
riporta un programma in foreground
Redirezione
●
●
●
●
●
●
E' possibile redirezionare stdin, stout e sterr su un file
tramite gli operatori di redirezionamento:
> redirige lo standard output di un comando su un file o
dispositivo
>> redirige l'output di un comando su un file o dispositivo,
ma se il file esiste già i dati vengono aggiunti alla fine del
file. Se il file non esiste viene creato
< redirige lo standard input da un file o dispositivo
2> redirige lo standard error di un comando su un file o
dispositivo
| operatore pipe, concatena standard output e standard
input di due programmi
File System
●
●
E' il componente del sistema operativo che si occupa di
organizzare i dati sui dispositivi di archiviazione
Due livelli di astrazione:
–
Dal dispositivo a blocchi alla collezione di archivi di
dimensioni arbitrarie
–
Spazio dei nomi gerarchico
●
Permessi e attributi
●
Choice: diversi tipi di filesystem
●
–
Disco: ext2, ext3, reiserfs, xfs, vfat, ntfs, iso, udf,…
–
Virtuali: proc, sys, dev, tmpfs
–
Di rete: nfs, coda, smb/cifs
Tutti i dispositivi in un unico albero di nomi
–
mount: collega lo spazio di nomi di un dispositivo
Gestire Directory & File
●
ls [opzioni] [path]
Elenca contenuto di una directory o file
●
cd directory
●
cp [opzioni] sorgente destinazione
Copia file o directory
●
mv [opzioni] sorgente destinazione
Sposta (rinomina) file o directory
●
rm [opzioni] file
●
mkdir [opzioni] directory
Crea una directory
●
rmdir [opzioni] directory
Elimina una directory
Cambia la directory corrente
Rimuovi file o directory
Visualizzare File
Visualizza il contenuto di un file
●
cat [opzioni] [file]
●
less [file]
Visualizza il contenuto di un file, pagina per pagina.
●
tail [opzioni] file Visualizza l'ultima parte di un file
●
head [opzioni] file Visualizza la prima parte di un file
●
file [opzioni] file Visualizza il tipo di un file
●
grep [opzioni] PATTERN [file]
Elenca righe di un file che contengono il PATTERN specificato
●
wc [opzioni] [file]
Visualizza numero di byte, parole e righe in un file
Struttura File System
Radice (root)
●
/
●
/root Home dell'utente root
●
●
●
●
●
/boot Contiene tutte le immagini del kernel e file indispensabili
al bootstrap
/etc Contiene i file di configurazione del sistema e dei
programmi installati
/home Contiene le home degli utenti tranne quella di root
/usr Contiene binari, documentazione, librerie e sorgenti della
maggior parte dei programmi (e i sorgenti del kernel)
/var Conitiene tutti file che contengono informazioni
dinamiche come log, pid file, directory di spool.
Struttura File System (2)
●
●
●
●
●
/proc File system virtuale. Contiene, come se fossero file e
directory, dati dinamici sul sistema e sui processi
/dev Contiene i file per la gestione dei dispositivi sia a blocchi
(hdd) che a carattere (tty) oltre a file speciali (/dev/null)
/sbin Contiene comandi e programmi riservati a root ( altri
comandi sono in /usr/sbin/ )
/bin Contiene comandi e programmi base per tutti gli utenti
(altri comandi sono in /usr/bin/ )
/usr/local
Contiene programmi installati localmente
(senza usare gli strumenti della distribuzione)
Gestione dei File System
●
Molteplici dispositivi, ognuno con un filesystem (di diversi tipi).
●
Un unico albero di directory per trovare i file.
mount -t [tipo fs] [opzioni] device dir
Monta un file system su una directory
umount [ opzioni ] device
Smonta un dispositivo (necessario prima di estrarre un dispositivo
rimuovibile)
df [opzioni][file]
Verifica lo spazio libero su ciascun filesystem
du [opzioni][file]
Visualizza lo spazio occupato da file e directory
fsck [opzioni] dispositivo
Verifica l'integrità e ripara il Filesystem
mkfs [opzioni] dispositivo
Crea un Filesystem (formattazione)
Attributi E Permessi
●
●
Ogni file è di proprietà di un utente.
Permessi:
read|write|execute per user|group|others
es: -rw-r-----:
il proprietario legge e scrive, il gruppo legge, gli altri nessun
accesso
chown [-R][utente] file
Assegna un nuovo proprietario
chgrp [-R][gruppo] file Assegna un nuovo gruppo
chmod [-R] [modo] file
Modifica i permessi sul file.
Ricerca e Confronto
●
find [path][expression]
Ricerca di file o directory in tutto il file system in base a un
certo numero di criteri, come il nome, la data di creazione e
la dimensione...
●
locate filename
Ricerca file o directory tramite il db costruito da Updatedb
●
sort [opzioni] [file] Ordina le righe di un file
●
diff nomefile1 nomefile2
confronto fra il contenuto di due file di testo.
Utilizzato per creare una patch dei sorgenti.
●
md5sum nomefile
calcola un checksum standard, utile per verificare l'integrità
e confrontare file di qualsiasi natura
Archiviazione
tar [opzioni] filearchivio files
crea/scompatta un file archivio tar
gzip [num] [opzioni] filename
comprime file (ed archivi) in formato gz
gunzip [opzioni] filename.gz
inverso di gzip
bzip2 [opzioni] filename
comprime file (ed archivi) in formato bz2, con rapporto di
compressione maggiore di gz
bunzip2 [opzioni] filename.bz2 inverso di gzip
zip [opzioni] filename Comprime file e archivi, è
basato sull'algoritmo standard per PC pkzip, raramente si
utilizza questo formato in ambiente linux e unix
unzip [opzioni] filename.zip
Comando inverso di unzip
Tool testuali
echo [args]
dalla riga di comando allo standard output
uniq
elimina le righe duplicate
cut
seleziona solo alcune “colonne”
sed
elaborazione testuale delle righe
awk
elaborazione testuale delle righe
xargs
dallo standard output alla riga di comando
●
Tutti questi strumenti sono predisposti per lavorare in una
pipeline: leggere dati in input dallo standard input e scrivere
l’output sullo standard output
●
Per farlo si utilizza il carattere |, chiamato pipe.
es: cat pippo.txt|grep paperino
shell scripting
●
●
●
la shell definisce un linguaggio di
programmazione
● strutture di controllo
● espressioni aritmetiche
● array
Una lista di comandi può essere salvata in un
file per essere rieseguita (shell script)
Usato per automatizzare compiti semplici, per
la configurazione del sistema operativo
Un package manager: RPM
Scopo: aiutare nella gestione dei pacchetti installati e degli
aggiornamenti
●
Formato di archiviazione di pacchetti per distribuzione (programmi
precompilati)
●
Script di installazione/disinstallazione
●
Gestisce le dipendenze tra pacchetti installati
●
Database dei pacchetti installati
●
Usato da un gran numero di distribuzioni, derivate da RedHat
(Mandrake, Mandrivia, Fedora), SuSe...
alternative: apt (debian), tgz (solo archivi senza metadati –
Slackware)
rpm -i [opzioni] [pacchetti] Installa pacchetti RPM
rpm -U [opzioni] [pacchetti] Aggiorna pacchetti RPM
rpm -e [opzioni] [pacchetti] Disinstalla pacchetti RPM
rpm -q [opzioni] [pacchetti] Interroga pacchetti RPM
rpm -V [pacchetto]
Verifica pacchetto RPM
●
Installare una applicazione
●
●
se è esiste, usare la versione nella distribuzione installata
(ma potrebbe essere la versione sbagliata, o mancare
qualche opzione di compilazione...)
installare dai sorgenti
– scaricare il sorgente (tipicamente, un archivio .tgz)
– scompattarlo: tar -zxvf package.tar.gz
– cd package/, leggere file README, INSTALL e
seguire le istruzioni. tipicamente:
– configurarlo per la propria piattaforma: ./configure
● potrebbero esserci opzioni da impostare:
./configure --help
● potrebbe essere necessario installare altri pacchetti
– compilare: make
– installare: make install
debugging
●
leggere il manuale (era meglio farlo prima!)
●
leggere i log di sistema (in /var/log)
●
eseguire il programma in modalità debug (log sul terminale)
●
cercare su internet i messaggi di errore
●
●
●
strace comando
traccia le chiamate di sistema e i
segnali del programma specificato mentre lo esegue.
ldd comando Stampa l'elenco delle librerie condivise
utilizzate dal comando specificato
lsof [opzioni] Elenca i file aperti.
file normali, directory, file speciale a blocchi o caratteri,
librerie, socket Internet, socket Unix domain...
Configurazione rete
●
●
●
●
●
devono esistere ed essere configurati i driver per i dispositivi
hardware usati per accedere a una rete (tipicamente moduli
del kernel)
per ciascun dispositivo di rete disponibile, il sistema
operativo crea una interfaccia, ad esempio:
– eth0, eth1, ...: ethernet
– ppp0, ppp1, ... : PPP (connessioni via modem, alcune
configurazioni ADSL, linee seriali)
a ciascuna interfaccia può essere assegnato uno o più
indirizzi IP
per ciascuna interfaccia configurata viene creata
automaticamente una rotta (route) verso la relativa sottorete
defalut route (verso il default gateway)
Configurare le interfacce
●
due sintassi alternative
●
ifconfig <interface> up|down
ip link set dev <interface> up|down
abilita o disabilita una interfaccia
●
ifconfig <interface> <address>
ip address add <interface> <address>
associa un indirizzo IP ad una interfaccia
●
route add -net default gw <address>
ip route add default via <address>
imposta la default route
●
route add -net <network> gw <address>
ip route add <network> via <address>
imposta una route specifica
configurare il DNS
Risoluzione da nomi simbolici (www.uninsubria.it)
in indirizzi IP (193.206.179.145)
●
in /etc/resolv.conf:
nameserver 10.0.0.150 ; IP del DNS server primario
nameserver 192.168.1.10 ; IP del DNS server secondario
domain dominio.it ; Nome del dominio dove si trova l'host
●
configurare le interfacce con dhcp
●
●
●
●
dhcp assegna automaticamente la configurazione ad una
interfaccia chiedendola ad un apposito server
il server deve essere attivo e raggiungibile
occorre usare un client dhcp – ne esistono diversi:
dhclient|pump|dhcpcd <interface>
viene assegnato l'indirizzo IP, il default gw, il dns...
diagnostica di rete
verifica se un host è raggiungibile (usa ICMP)
●
ping <host>
●
traceroute <host> visualizza il percorso verso un host
●
host, dig
●
netstat
, lsof -i
(vedere le diverse opzioni)
●
tcpdump, ethereal (wireshark)
analizzatori del traffico di rete (sniffer)
normalmente richiedono i permessi di root
richiedono di mettere l'interfaccia in modo promiscuo
non tutte le religioni lo permettono
possono essere usati anche per visualizzare un file di pacchetti
catturati in precedenza
effettuano query DNS
visualizza le connessioni attive
Terminale remoto sicuro: SSH
●
●
●
Scopo: aprire un terminale per eseguire una shell o un’altra
applicazione su un altro host connesso via rete
Lo strumento classico è telnet
– Comunicazione in chiaro, insicuro
Oggi viene preferito ssh
– Comunicazione cifrata (protegge le password e i dati)
– Verifica l’autenticità del server
ssh [user@]<host>
●
●
Funziona solo con applicazioni ad interfaccia testuale
Permette di trasportare applicazioni X con un tunnel
Ambiente grafico
componenti
●
Sever X: interazione con la scheda video
–
●
●
●
●
●
offre primitive di basso livello: rettangoli, testo
Client X: applicazione che vuole visualizare finestre e
ricevere input dall'utente
Window manger: è un particolare client X, che permette di
far convivere diverse applicazioni, ciascun in una o più
finestre
Desktop Environment (gnome, KDE): ambiente integrato
con pannelli, icone, temi grafici...
Display Manager: esegue il login grafico
Toolkit grafico (gtk, qt): librerie di primitive grafiche di livello
più alto (controlli: tasti, menu, caselle di testo...)
iptables - firewall con linux
●
●
●
●
●
●
linux contiene strumenti avanzati di packet filter, che si
amministrano con iptables
un host linux può essere usato come router (inoltrare
pacchetti tra diverse interfacce).
per abilitare questa funzione:
echo 1 > /proc/sys/net/ipv4/ip_forward
tabella filter
– INPUT: pacchetti in ingresso verso l'host
– OUTPUT: pacchetti in uscita dall'host
– FORWARD: pacchetti in transito
tabella nat (POSTROUTING, PREROUTING, OUTPUT)
tabella mangle (altre modifiche ai pacchetti) (INPUT,
OUTPUT, FORWARD, POSTROUTING, PREROUTING)
priorità e traffic shaping: tc
iptables – percorso dei
pacchetti
pacchetti
dalla rete
pacchetti
verso la rete
iptables
●
●
ciascuna catena è una ACL: una sequenza di regole tipo
condizione/azione (TARGET). La catena viene attraversata
fino a quando una condizione non è verificata
opzioni di iptables:
-A catena regola
Aggiunge una o più regole alla fine
-D catena regola Cancella una o più regole
-F [catena]
Cancella tutte le regole o solo quelle della
catena indicata
-L [catena]
Elenca tutte le regole
-v con contatori
-P catena target
Definisce il target di default per la
catena indicata (policy della catena)
-N catena
Crea una nuova catena definita dall'utente
iptables - condizioni
-i [!] interfaccia[+] I pacchetti ricevuti in
entrata sull'interfaccia definita. Il + è una wildcard
(es: eth+ per tutte le ethernet)
-o [!] interfaccia[+] Tutti i pacchetti in
uscita sull'interfaccia specificata.
-p [!] protocollo
I pacchetti che corrispono
al protocollo definito: tcp, udp, icmp, all (default)
-s [!] indirizzo[/mask] I pacchetti che hanno
l'IP sorgente specificato.
-d [!] indirizzo[/mask]
I pacchetti che
hanno l'IP e/o la porta di destinazione specificati.
-m tcp|udp –sport
porta sorgente del
protocollo tcp|udp
-m tcp|udp –dport
porta destinazione tcp|udp
and many more...
iptables - targets
-j TARGET Salta al TARGET indicato o ad una catena
definita dell'utente.
TARGET può essere:
●
ACCEPT
accetta il pacchetto
●
DROP
scarta il pacchetto
●
LOG
pacchetto
Registra tramite syslog il matching del
●
●
REJECT
Elimina il pacchetto e, eventualmente,
restituisce un messaggio ICMP (icmp-*-unreachable)
configurabile.
SNAT|DNAT Modifica l'IP sorgente|destinazione (nella
catena POSTROUTING|PREROUTING della tabella nat)
and many more...
NAT
●
Nelle configurazioni di rete in cui interviene il NAT, è utile
considerare il mondo diviso in due parti dal router NAT
rete esterna
rete interna
●
●
●
●
●
connettività parziale (solo via
NAT)
nascosta dall'esterno
(“general internet”)
tipicamente indirizzi IP privati
●
●
●
connettività completa
visibile dall'esterno
(“general internet”)
tipicamente indirizzi IP
pubblici
i casi reali possono essere anche molto più complessi (es:
livelli multipli di NAT)
con iptables, il NAT è configurato nella tabella nat (-t nat)
iptables – Connection tracking
●
●
●
NAT usa il connection tracking per ricordarsi le traduzioni
effettuate e tradurre di conseguenza anche i pacchetti di
risposta (modulo ip_conntrack)
La tabella delle connessioni TCP e UDP è leggibile dallo
pseudo-file
/proc/net/ip_conntrack
Alcuni protocolli applicativi trasmettono indirizzi IP e numeri
di porta nel payload del pacchetto. Per farli funzionare con
NAT sono necessarie estensioni del connection tracking per
analizzare i pacchetti ed intercettare/modificare queste
informazioni (ip_conntrack_ftp,
ip_conntrack_irc, ip_conntrack_tftp,
ip_conntrack_amanda).
iptables – Source NAT
●
Source NAT: si modifica l'indirizzo sorgente del pacchetto
●
si agisce dopo il processo di routing: -A POSTROUTING
●
●
●
●
target: -j SNAT opzioni:
--to-source ipaddr[-ipaddr][:port-port]
esempio: i pacchetti che provengono da 192.168.10.1
vengono modificati in modo da uscire con l'IP 192.168.20.1
iptables -t nat -A POSTROUTING
-s 192.168.10.1
-j SNAT --to-source 192.168.20.1
La corrispondenza tra indirizzi IP funziona solo per le
connessioni “uscenti” (in questo caso, provenienti da
192.168.10.1)
iptables – Source NAT (2)
●
●
esempio (2): i pacchetti che provengono dalla rete
192.168.10.0/24 vengono modificati in modo da uscire con
gli IP 192.168.20.1-10
–
iptables -t nat -A POSTROUTING
-s 192.168.10.0/24 -j SNAT
--to-source 192.168.20.1-192.168.20.10
–
254 indirizzi IP vengono tradotti con 10 indirizzi IP: due
host della rete 192.168.10.0/24 potrebbero venir
presentati con lo stesso indirizzo della rete 192.168.20
–
IP Overloading: i pacchetti di diverse connessioni
vengono distinti sulla base dei numeri di porta TCP/UDP
Il codice NAT modifica meno possibile il pacchetto, quindi se
possibile preserva i numeri di porta. Questi vengono riscritti
solo in caso di necessità.
iptables – Masquerading
●
●
●
●
●
●
●
Il Masquerading è una forma di Source NAT, in cui non
viene specificato l'indirizzo con cui mascherare le
connessioni.
Utile per connessioni dial-up o con IP “pubblico” dinamico.
viene usato l'indirizzo dell'interfaccia usata per far uscire i
pacchetti
esempio: i pacchetti che provengono dalla rete
192.168.10.0/24 ed escono dall'interfaccia ppp0
vengono modificati in modo da uscire con l'IP dell'interfaccia
iptables -t nat -A POSTROUTING
-s 192.168.10.0/24 -o ppp0 -j MASQUERADE
anche questo è un caso di IP Overloading
questa configurazione è quella tipicamente usata per router
ADSL SOHO
iptables – Destination NAT
●
●
●
●
Destination NAT: si modifica l'indirizzo destinazione del
pacchetto
applicazioni:
–
rendere accessibili dall'esterno alcuni host in una rete
privata (port forwarding)
–
“imbrogliare” le applicazioni (routing incompleto, server
non configurabili)
si agisce prima del processo di routing.
–
per un router che inoltra i pacchetti di altri host: -A
PREROUTING
–
per un host che vuole modificare i pacchetti generati
dalle applicazioni locali: -A OUTPUT
target: -j DNAT opzioni:
--to-destination ipaddr[-ipaddr][:port-port]
Bridge software
●
●
●
Consente di mettere più interfacce nella stessa rete
Configurato con brctl
– Brctl addbr <bridge> crea un bridge
– Brctl delbr <bridge> elimina un bridge
– Brctl addif <bridge> <device> aggiungi una
interfaccia ad un bridge
– Brctl show mostra la lista dei bridge configurati
– Brctl showmacs <bridge> mostra la tabella di
inoltro del bridge
Il bridge creato è a sua volta una interfaccia, cui si può
assegnare un indirizzo, regole iptables…