Autenticazione ssh senza password

Fonte: http://www.linuxproblem.org/art_9.html

Se vogliamo connetterci ad un server ssh e autenticarci senza bisogno di inserire la password, possiamo utilizzare l’autenticazione tramite chiavi. Questo sistema è particolarmente utile quando vogliamo che la connessione ssh sia gestita da uno script bash, magari con attivazione schedulata tramite cronjob.

Abbiamo due host:
– client locale “PC-cons1″ con utente root (può essere qualsiasi utente)
– server openssh con nome pc-test-8 con utente luca

Logghiamoci nel client locale come utente root e generiamo la coppia di chiavi di autenticazione. Quando ci verrà chiesta la passphrase non inseriamo nulla, altrimenti vanifichiamo la possibilità di autenticarci senza password:

root@PC-cons1:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
45:05:70:62:63:16:77:20:51:74:1b:9d:67:bd:a4:51 root@PC-cons1
The key's randomart image is:
+--[ RSA 2048]----+
...
...
...
...
...
+-----------------+

Ora connettiamoci via ssh all’host pc-test-8 come utente luca e creiamo in esso la directory .ssh nella home di luca:

root@PC-cons1:~# ssh luca@pc-test-8 mkdir -p .ssh
The authenticity of host 'pc-test-8 (192.168.201.198)' can't be established.
ECDSA key fingerprint is df:13:36:93:8f:27:61:69:f3:97:15:8c:43:35:9a:1f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc-test-8' (ECDSA) to the list of known hosts.
luca@pc-test-8's password:

Ora appendiamo la nuova chiave pubblica dell’utente root nel file .ssh/authorized_keys nella home dell’utente luca nell’host pc-test-8 e inseriamo la password di luca per l’ultima volta:

root@PC-cons1:~# cat .ssh/id_rsa.pub | ssh luca@pc-test-8 'cat >> .ssh/authorized_keys'
luca@pc-test-8's password:

Da ora possiamo loggarci in pc-test-8 come utente luca dall’host PC-cons-1 senza password:

root@PC-cons1:~# ssh luca@pc-test-8
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-24-generic x86_64)

* Documentation: https://help.ubuntu.com/

Last login: Tue Jan 27 07:09:41 2015
luca@pc-test-8:~$

 

Script rsync

Il seguente script bash è implementato in una coppia di mailserver linux in cluster.
Non avendo uno storage condiviso, è stato necessario creare questo script che
allinea tramite il potente programma rsync i dati degli utenti. L’allineamento è one-way: dal server primario in produzione al secondario in stand-by.

Rsync comunica tramite canale cifrato ssh. Per funzionare in automatico senza richiedere la password (ed attivarsi ad esempio tramite cronjob) occorrerà implementare l’autenticazione tramite chiavi ( vedi articolo).

Script: ScriptSincDatiUsers.sh

#!/bin/bash
## sincronizzazione home utenti
echo .....Sincronizzo le home degli utenti...................................
rsync -avz --delete root@<ip_remote_server>:/home/ /home/
echo .....Sincronizzazione home effettuata...................................
sleep 2
## sincronizzazione srv/mails
echo .....Sincronizzo dati secondari ....................
rsync -avz --delete root@<ip_remote_server>:/var/spool/srv/mails/ /var/spool/srv/mails/
echo .....Sincronizzazione dati secondari effettuata.....................
sleep 2
## sincronizzazione mail
echo .....Sincronizzo le mail degli utenti, i filtri e altre configurazioni...
rsync -avz --delete root@<ip_remote_server>:/var/spool/ /var/spool/
rsync -avz --delete root@<ip_remote_server>:/var/mail/ /var/mail/
echo .......Sincronizzazione mail e altre configurazioni effettuata...........
sleep 2
echo ....Allineamento dati utenti effettuata.......
sleep 1
echo ....I due server sono allineati
## invio log a syslog
logger allineamento dati utente effettuato
sleep 2
exit

Script ftp: salvataggio schedulato file di log

L’obiettivo degli script è quello di salvare via ftp in un log-server i file di log prodotti dal sistema locale, con operazione schedulata tramite job crontab.
Nel mio caso si trattava di salvare i file di log di un mail server postfix.
Modificando il logrotate del sistema ho ottenuto il salvataggio quotidiano del file mail.log del giorno precedente nella directory /var/log/ToUpload.
La modifica del logrotate ha riguardato il file di configurazione /etc/logrotate.d/rsyslog e ha implicato l’aggiunta della seguente sezione alla fine del file:

...
/var/log/mail.log
{
 rotate 30
 daily
 missingok
 notifempty
 delaycompress
 compress
 postrotate
 cp /var/log/mail.log.1 /var/log/ToUpload/mail.log_$(date +%F.txt); invoke-rc.d rsyslog reload > /dev/null
 endscript
}

Come si intuisce facilmente, il file /var/log/mail.log viene copiato in /var/log/ToUpload/ e rinominato con timestamp. L’operazione avviene dopo la rotazione del file (come si evince dall’istruzione “postrotate”).
Successivamente questo file viene inviato via ftp al LOG SERVER e cancellato localmente solo se l’invio è andato a buon fine.

I file e gli script risiedono nella medesima directory (in /var/log/ToUpload nel mio caso).

Il file UploadAndDelete.sh richiamerà Upload.sh e poi Delete.sh.

Script UploadAndDelete.sh:

#!/bin/bash
echo inizio upload dei file di log sul LOG SERVER
./Upload.sh
echo file uplodati e lista uploaded.list creata
sleep 2
echo ora cancello i file uplodati con successo
./Delete.sh
exit

Script Upload.sh:

#!/bin/bash
HOST=<ip_server_ftp> # Indirizzo dell'ftp server FTP server (LOG SERVER)
USER=<username> # userid utente ftp 
PASS=<password> # password utente ftp
# ci spostiamo sulla directory che contiene i file da uplodare e lo script stesso
cd /var/log/ToUpload/
# inizio sessione ftp
ftp -inv $HOST << EOF 
user $USER $PASS
mput *.txt
ls /*.txt /var/log/ToUpload/uploaded.list
bye 
EOF

Script delete.sh

#!/bin/bash
# utilizzando la lista dei file già uplodati 
# cancelliamo i corrispondenti file locali
# in pratica procediamo alla cancellazione solo se 
# siamo certi che l'upload abbia avuto esito positivo
echo cancello i file locali correttamente caricati sul LOG SERVER
# confronto uploaded e e file locali in /var/log/toupload
# se uploaded contiene il file contenuto anche in /var/log/toupload
# allora lo cancello da /var/log/toupload
cd /var/log/ToUpload/
for i in $(cat uploaded.list | awk '{ print $9 }'); do
if [ -f $i ];
then
echo rimuovo $i
rm $i
echo done
else
echo file $i precedentemente cancellato
fi
done
echo file locali cancellati
sleep 1
echo fatto! esco
exit 0

Montare condivisioni Windows da Linux

Montare condivisioni Windows da Linux

CIFS (formalmente conosciuto come SMB) è il protocollo di default delle condivisioni Windows.
Da una macchina Linux è facile connettersi ad una condivisione Windows, sia utilizzando la GUI che la CLI.

Occorre innanzitutto installare i seguenti pacchetti:
(in RHEL/CentOS/Fedora)

# yum install samba-client samba-common cifs-utils

CONNETTERSI TRAMITE GUI:

E’ la soluzione sicuramente più comoda perchè permette di gestire i file remoti tramite interfaccia grafica come se fossero locali. Ovviamente non è affatto adatta agli script.
A seconda del sistema Linux e del server grafico, la procedura può variare.
Dal browser Nautilus, ad esempio, basta inserire nella barra di navigazione l’indirizzo del server Windows nella forma:
smb://<server>/<share>
Una volta dato l’invio, verranno chieste le credenziali per l’accesso alla condivisione.
Nelle ultime versioni di Ubuntu in Nautilus troviamo la comoda opzione “Connetti al server” che apre una finestra di dialogo dove inserire smb://<server>/<share>.

CONNETTERSI TRAMITE CLI
Utilizzando il comando smbclient è possibile accedere alla condivisione Windows tramite linea di comando, in una modalità assai simile a quella ftp. E’ questa la soluzione migliore per l’utilizzo tramite script.
Per visualizzare le condivisioni remote disponibili:

# smbclient -L <server> -U <user>

Dopo aver fornito la corretta password, il comando visualizzerà le condivisioni in forma di tabella a 3 campi: sharename, type, comment.
Per connettersi ad una particolare condivisione:

# smbclient //<server>/<share> -U <user>

Dopo aver fornito la password corretta apparirà il prompt “smb:\>” che riconoscerà svariati comandi “FTP-like” come: ls, cd, lcd, get, put, mget, mput etc

UTILIZZO DEL COMANDO MOUNT
In alternativa alle due precedenti soluzioni possiamo usare il comando “mount”, particolarmente adatto se abbiamo bisogno di un accesso persistente alla condivisione. In tal modo la condivisione apparirà come una cartella locale e sarà possibile utilizzare comandi come “cp” o “rm” per gestire i file remoti.
Potrebbe essere necessario installare alcuni pacchetti come cifs-utils e smbfs, dipende dalla distribuzione e dalla versione.
La sintassi per montare la condivisione è la seguente:

# mount -t cifs -o user=<user> //<server>/<share> /win_share

“win_share” è il punto di mount della condivisione remota nel sistema locale. Di fatto è una cartella locale dentro alla quale appariranno gli oggetti della condivisione. Se non esiste va creata con “mkdir /win_share”.

Per smontare:

# umount /win_share

Se vogliamo che la condivisione venga montata all’avvio, potremo editare il file /etc/fstab ed aggiungere la riga seguente:

//servername/sharename /win_share cifs username=msusername,password=mspassword,iocharset=utf8,sec=ntlm 0 0

RETI – Fondamenti (Cisco based)

RETI – Fondamenti (Cisco based)

Switch e switching
Vlan
Router e routing
WAN
ACL
NAT
Enterprise Network Documentation
Lezioni di Italiano a Monaco di Baviera

Ports/applications

0-1023: well-known ports;
1024-49151: registered ports;
49152-65535: private ports.

20 tcp ftp-data
21 tcp ftp-control
23 tcp telnet
25 tcp smtp
53 tcp/udp dns
67 udp dhcp v4 client
68 udp dhcp v4 server
69 udp tftp
80 tcp http
110 tcp pop3
137 tcp/udp nbns
143 tcp imap4
161 udp snmp
443 tcp https
546 udp dhcp client
547 udp dhcp server

Pila iso/osi

7 application
6 presentation
5 session
4 transport
3 network
2 data link
1 physical

Pila tcp/ip

4 application
3 transport
2 internetwork
1 physical

Wireless – protocol

IEEE 802.11a – 5Ghz – max data rate 54 Mbps – non compatibile con i 2.4 Ghz
IEEE 802.11b – 2.4 Ghz – max data rate 11 Mbps – 46m indoor; 96 outdoor
IEEE 802.11c – 2.4 Ghz – max data rate b54 Mbps – compatibile con 802.11b
IEEE 802.11n – 2.4/5 Ghz – totalmente retrocompatibile – ancora in fase di sviluppo/ultimazione

Wireless – security

 

Lezioni di Italiano a Monaco di Baviera?

http://francescaromano.eu

 

Autenticazione:
open authentication = nessuna autenticazione richiesta
PSK (preshared keys) = ap e client con uguale chiave di criptazione dati
EAP (extensible authentication protocol) = autenticazione che si appoggia ad un server RADIUS
Criptazione dati
WEP (wired equivalency protocol) = chiave a 64, 128, raramente a 256 bits condivisa tra AP e tutte le STAs
WPA (wi-fi protected access) = chiave da 64 a 256 bits dinamica, ovvero generata a nuovo ogni volta che un client stabilisce connessione

Connessioni

dial-up = 56 Kbps
DSL = 512 Kbps e oltre
Cable modem = 5 Mbps – 10 Mbps
Satellite = 128-512 Kbps

Dedicated bandwidth options

medium size business:
T1 = 1.544 Mbps
E1 = 2.048 Mbps

large business:
T3 = 45 Mbps
E3 = 34.368 Mbps

large business with branch in the same city:
Metro Ethernet = 10 Gbps

Planning a network upgrade

Network requirements documentation (inventario dell’esistente):
device name; date of purchase; warranty information; location; brand and model; OS’s; logical addressing information; connection information; security informations.
1. requirements gathering
2. selection and design
3. implementation
4. operation
5. review and evaluation

IDF = intermediate distribution facility MDF = main distribution facility

Classificazione indirizzi IP (RFC1918: address allocation for private internets)

classe A 1-127 /8            privati: 10.0.0.0 – 10.255.255.255 /8
classe B 128-191 /16     privati: 172.16.0.0 – 172.31.0.0
classe C 192-223 /24     privati: 192.168.0.0 – 192.168.255.255
classe D 224-239 multicast
classe E 240-255 experimental use

127.0.0.0 loopback address (privato)
169.254.0.1 – 169.254.255.254 /16 riservato APIPA (automatic private ip addressing)

IPv4 address: 32 bits
IPv6 address: 128 bits (hex)

Negoziazione DHCP

dhcp discover – offer – request – acknoledgement

SWITCH CISCO e SWITCHING in generale

 

 

CAM: content addressable memory → high-speed memory che contiene la MAC address table
Aging time: tempo trascorso il quale lo switch cancella le entry non utilizzate dalla mac address table
Durante una sessione lo switch crea una virtual circuit tra le porte che stanno comunicando.
ASIC: caratteristica harware (e quindi anche software) dei multilayer switch.

Metodi di switching:

Store-and-forward (oggi più comune) → lo switch legge, controlla e stora ogni frame. Controlla il checksum (CRC), e se tutto è ok inoltra il frame.
Cut-through switching → tutto viene switchato in automatico, senza alcun controllo.
Può essere fastforward (il metodo più veloce, che non controlla nulla) oppure fragment-free (quando legge i primi 64 bytes del frame, che sono la misura minima di un frame ethernet – i più piccoli sono generalmente frutto di collisioni, e vengono scartati).
I moderni switch usano la forma mista detta adaptive cut-through switching: iniziano a forwardare i frame con il fast-forward ma controllando eventuali errori. Se gli errori superano un certo numero prestabilito, passano in Store-and-forward switching.

STP (Spanning Tree Protocol):

Si avvia di default sugli switch; è un open standard protocol. Disabilita alcune porte di link ridondati per evitare loops. Si riconfigura dinamicamente al variare della rete di switches.
Il root bridge è il “focal point”, quello switch che manda a tutti gli altri i BPDU (bridge protocol data units) ogni 2 secondi in multicast, che contengono informazioni sulla topologia della rete.
Nella negoziazione ogni porta passa vari stati:
1. blocking →20 sec circa → riceve solo i BPDU ma scarta tutti i frame contenenti altri dati → led steady amber
2. listening → 15 sec circa → calcola quali rotte possono essere usate senza creare loops → non forwarda nulla → led: flash amber
3. learning → 15 sec circa → riceve e processa tutto, impara i mac ma non forwarda nulla → led: flash amber
4. forwarding → processa BPDU e data frames, impara mac-addresses e inoltra i data frames attraverso la rete. → led steady green
Lo stato disabled corrisponde ad un “administratively down”.
Tempo di convergenza: circa 50 sec. → Non è grave solo se la rete è stabile e non sono previsti cambiamenti frequenti.
Implementazioni proprietarie Cisco minimizzano i tempi di convergenza:
PortFast → le access port vanno subito in forwarding state, senza aspettare la convergenza
UplinkFast → accelera la scelta della nuova root-port
BackboneFast → permette velocissima convergenza quando cambia qualcosa nella topologia dello spanning-tree; viene utilizzato nel distribution e nel core layer.

RSTP (Rapid Spanning Tree Protocol)

Open protocol. Permette la riconfigurazione in meno di 1 secondo. Le porte sono o in discarding state (che riassume i primi tre stati dello STP), o in forward state. Introduce il concetto di active topology.

Vari show:

C#show spanning-tree → display root ID, bridge ID, and port states
C#show spanning-tree summary → sommario delle porte
C#show spanning-tree root → status and information about the root bridge
C#show spanning-tree detail → information on the spanning-tree ports
C#show spanning-tree blockedports → view any port that are currently blocked by STP

S# show port security → mostra tutte le porte dove è attivo il port-security
S# show mac-address-table → mostra tutti i mac che lo switch ha imparato e le vlan associate alle porte.

 

Bridge-ID (BID) → identificativo dello switch, composto dal valore di bridge-priority (default 32.768) + mac-address più basso delle sue porte. Viene eletto root lo switch con il BID più basso.
Per variare la bridge-priority (e quindi forzare o meno l’elezione a root-bridge):
S(config)# spanning-tree vlan VLAN-ID priority <0-61440> → N.B. Di default è 32.768.

VLAN

 

Le ACCESS PORTS non creano loops perchè non sono connesse ad altri switches, sono connesse ad hosts terminali all’interno di una singola vlan.
Le TRUNKING PORTS possono connettersi ad altri switches e trasportano dati di varie vlans, quindi potenzialmente possono creare loops.

Vlan statiche

L’amministratore configura manualmente su ogni switch le vlan e le relative porte.
Vlan dinamiche
Appartenere ad una vlan dinamica significa avere un VLAN management policy server (VMPS), che contiene un database che mappa i mac address con le relative vlan di appartenenza. Quando un dispositivo si collega allo switch, il VMPS legge il mac e lo associa ad una certa vlan.

Creare una vlan:

S(config)#vlan <vlan_number> → assegno un numero alla vlan
S(config-vlan)#name <vlan_name> → assegno un nome alla vlan (è una best practice)
S(config)#exit
Assegnare una porta alla vlan:
S(config)#interface fa#/#
S(config-if)#switchport access vlan <vlan_number>
S(config)#exit
Assegnare un range di porte alla vlan:
S(config)#interface range fa#/start_of_range – end_of_range
S(config-if)#switchport mode access
S(config-if)#switchport access vlan <vlan_number>
S(config)#exit
Vari show:
S#show vlan → resoconto dettagliato delle vlan (possibile anche show vlan ID o show vlan NAME)
S#show vlan brief → resoconto più essenziale

IEEE 802.1Q (sintetizzato: dot1q)→ è lo standard per il frame tagging, grazie al quale il frame viene taggato con un campo di 4 byte che identifica la vlan di appartenenza e quindi permette il trunking (il passaggio dei frame da una vlan ad un’altra, quasi come fosse un routing).
Col protocollo 8201q il traffico non taggato diviene appartenente alla vlan nativa (VLAN1 di default).
Porte: access (interne ad una vlan, connesse a devices finali) o trunk (traffico inter-vlan, connesse ad altri switch, standard dot1q – dai Catalyst 6500 series viene supportato anche lo standard Cisco ISL).

Configurare porta trunk:

S(config)#interface fa#/#
S(config-if)#switchport mode trunk
S(config)#switchport trunk encapsulation <dot1q | isl | negotiate> (negotiate negozia l’encaps. di default)
Gli ultimi switch permettono anche il modo dynamic <desirable | auto> → in molti Cisco dot1q è già di default, quindi non occorre configurare quest’ultima parte del protocollo dot1q

Cambiare la vlan nativa (dalla 1 che è quella di default):

In ognuna delle porte trunk :
S(config-if)#Switchport trunk native vlan <vlan_ID>
Quando si cambia la vlan nativa è anche necessario configurare la subinterfaccia del router relativa alla vlan nativa, con:
R(config-subif)# encapsulation dot1q <native_vlan_id> native
Configurazione sotto-interfacce router:
Nella parte di confine, generalmente siamo connessi ad una interfaccia fastethernet del router, che riceve il link trunk dallo switch, e che funge da gateway per le vlan. Su quel link viaggeranno frame provenienti da vlan diverse, quindi con ip diversi. Per questo motivo configurerò varie sottointerfacce logiche di una stessa interfaccia fisica, a cui assegnerò ip address ed encapsulation dot1q. Ecco un esempio:
S(config)#interface fa0/2
S(config-if)#switchport mode trunk
S(config)#switchport trunk encapsulation dot1q
Poi sul router:
R(config)#interface fa 0/1
R(config-if)#no ip address
R(config-if)#no shutdown

R(config)#interface fa 0/10 → numero sottointerfaccia (0/10)
R(config-subif)#encapsulation dot1q 10 → tipo incapsulazione e numero vlan (10)
R(config-subif)#ip address 192.168.10.1 255.255.255.0 – indirizzo rete assegnata alla vlan 10.

Configurare la vlan per il management:

S(config)# interface vlan1 → è la management di default
S(config-if)#ip address <ip address> <subnet mask>
S(config-if)#no shutdown
S(config-if)#exit
S(config)#ip default-gateway <gateway ip address> → setta il default gateway
S(config)#end

Sicurezza: disabilitare funzione http server e shuttare tutte le porte non utilizzate:
S(config)#no ip http server

S(config)#interface range fastethernet 0/2 – 5 , fastethernet 0/11 – 24
S(config-if-range)#shutdown
S(config-if-range)#end

MAC ADDRESS STATICO

S(config)#mac-address-table static <mac address> vlan 1 interface fastethernet <n. porta, es 0/4> → configura il mac collegato all’interfaccia dello switch

STATIC SWITCH PORT SECURITY

S(config)# interface <type> <number>
S(config-if)# switchport mode access
S(config-if)# switchport port-security mac-address <mac address abilitato ad usare interfaccia>
S(config-if)# end

DYNAMIC SWITCH PORT SECURITY

S(config)# interface <type> <number>
S(config-if)# switchport mode access
S(config-if)# switchport port-security maximum <max num di mac che memorizzerà>
S(config-if)# switchport port-security → legge e stora il primo mac che si collega.
S(config-if)# end

STICKY SWITCH PORT SECURITY

S(config)# interface <type> <number>
S(config-if)# switchport mode access
S(config-if)# switchport port-security
S(config-if)# switchport port-security maximum <max num di mac che memorizzerà>
S(config-if)# switchport port-security mac-address sticky
S(config-if)# end → legge e stora i primi mac che si collegheranno e li stora nella startup-config

NB: per verificare la configurazione:
S# show port-security interface <type> <number> → impostazioni interf. specifica
S# show port-security → impostazioni generali della port-security
S# show port-security address → mostra tutti i mac memorizzati e quindi considerati sicuri

VTP (Vlan Trunking Protocol)

Permette la distribuzione e il management del database delle vlan da uno switch (o 2) che funge da server. Agisce all’interno di un dominio che ha nome univoco. Esiste la versione 1 (default) e la 2. La 1 non è compatibile con la 2.
Switches mode: VTP Server Mode (salva le vlan configuration information nella NVRAM e le invia attraverso le trunk port); VTP Client Mode (prende informazioni dal server e aggiorna le sue tabelle, se il numero di revisione dell’advertisement è superiore al proprio; inoltra poi i messaggi attaverso le trunk); VTP Transparent Mode (ignora tutte le informazioni ricevute pur inoltrandole sulle trunk; non manda aggiornamenti o richieste in seguito a variazioni nella propria vlan; è una sorta di “ripetitore”). Di default gli switches sono in server mode.
VTP Revision Number: per non incorrere in grossi problemi occorre azzerare il numero di revisione di uno switch prima di inserirlo in un dominio VTP → inserendolo in transparent mode e poi in client o server, oppure cambiando il nome di dominio vtp e poi rimettendo quello appropriato.
Tipi di messaggio VTP:
Summary advertisements: ogni 5 minuti o ogni volta che varia qualcosa nel dominio vtp; contengono nome di dominio vtp e il numero di revisione, che viene incrementato ad ogni variazione nel dominio vtp; gli switch che ricevono il summmary e si accorgono che il numero di revisione è più alto del proprio, lanciano un advertisement request.
Advertisemente requests: richiesta di informazioni sulla vlan.
Subset Advertisements: fornisce informazioni sulle vlan, permettendo agli switches di aggiornarsi.

VTP – Configurare lo switch server:

S1(config)# vtp domain <domain_name>
S1(config)# vtp mode server
S1(config)#vtp password <password> → facoltativo, è una best practice
S1(config)# end

VTP – Configurare lo switch client:

Dopo aver configurato le varie vlan, le porte access e quelle trunk:
S2(config)#vtp domain <domain_name>
S2(config)#vtp password <password> → facoltativo, è una best practice
S2(config)#vtp mode client

Aggiungere un nuovo switch al dominio VTP:

E’ buona prassi inserirlo dapprima il transparent mode, oppure con un altro nome di dominio, per azzerare i contatori del numero di revisione. Poi inserire i dati giusti.
S(config)# vtp domain <domain_name>
S(config)#vtp mode <server | client | transparent>
S(config)#vtp password <password>
S(config)#end
S#wr
S#show vtp status → per vedere il numero di revision number
S#show vlan → per vedere se ha preso le informazioni sulle vlan dal server (o se sono ben impostate)
S#show vtp password → per vedere la password
S#show vtp counters → per vedere i contatori dei messaggi vtp
S#reload → per rebootare lo switch

ROUTER CISCO e ROUTING in generale

 

Bootup process:

– POST: testa l’hardware e avvia il BOOTSTRAP
– Viene localizzato (nella flash memory come di default, ma anche in un tftp server o altrove, come indicato nella startup-config) , avviato e caricato l’IOS software nella ram.
– Viene localizzato ed eseguito lo startup configuration file (nella NVRAM) oppure, se questo non è trovato, entra in setup mode.
Tutte le variazioni sono inserite nella running-config (volatile: nella RAM)

R> show version → tutte le informazioni relative al software e all’hardware del dispositivo. C’è anche il configuration register che indica come deve bootare il dispositivo (es 0x2102: boot da flash in NVRAM)

Se non si avvia il router entra in rom-monitor dove è possibile dare i comandi:
dir flash → localizza l’IOS image, in modo da poter poi dare (ad esempio):
rommon1 > boot flash:c2600-is-mz.121-5

R#reload → riavvio del software de router

Troubleshooting se router non si avvia:

R> show version → controllo il configuration register
R> show startup-config → controllo se ci sono indicazioni di cercare l’IOS da qualche altra parte (cerco in boot system…)

Tipi di encapsulation:

HDLC (Hight-level data link control)
FRAME RELAY → percorso logico: quello fisico è shared fra + utenti
PPP (point to point protocol) → +costosa connessione diretta sempre attiva

Configurazione:

– in user exec mode (R>) posso dare vari show, ping, traceroute
– in privileged exec mode (R#) posso configurare tutti i parametri.
R> enable → entro in privileged exec mode (o semplicemente en)
R# configuration terminal (o conf t) → entro in modalità configurazione globale

Nominare il dispositivo
R(config)# hostname <hostname>

N.B. Al termine della configurazione salvare dalla RAM al disco:
R#copy running-config startup-config (oppure semplicemente wr)

Interfacce:
R(config)# interface <type> <number> → entro nella configurazione dell’interfaccia
R(config-if)#ip address <ip address> <subnet mask> → configuro indirizzo logico
R(config-if)#no shutdown → alzo l’interfaccia
R(config-if)#description <description> → permette di inserire descrizione (label) dell’interfaccia
Nel caso siano interfacce seriali vanno configurati anche l’encapsulation (hdlc, frame relay o ppp) e il clock (nella DCE (femmina); generalmente 56000 o 64000):
R(config-if)#encapsulation <encapsulation type>
R(config-if)#clock rate <clock rate>

R# show ip interface brief → vedi configurazioni logiche interfacce
R#show history → vedo ultimi 10 comandi della CLI
R#terminal history size → imposto quanti comandi deve tenere nella history
Vari show:
running-config –
interfaces (a livello 1 e 2) –
ip interfaces brief (a livello 3) –
arp –
ip route –
protocols (protocolli interfacce) –
ip protocols (protocolli di routing) –
version –
cdp neighbors (mostra i vicini) –
cdp neighbors detail (mostra tutti i dati dei vicini) –
session (mostra sessione telnet) –
ssh (mostra connessioni ssh)

R(config)#banner motd #x..y..z..# → setta messaggio da visualizzare al login del router
R(config)#banner login #x..y..z..# → simile a quello sopra

R(config)#logging synchronous →toglie messaggi non voluti dalla CLI
R(config)#no ip domain-lookup → impedisce al router di cercare di risolvere i nomi a lui sconosciuti collegandosi ad un dns server (fa perdere un sacco di tempo)

Password e security:

Passwords:
R(config)#enable password <password> → configura password di enable in chiaro
R(config)#enable secret <password> → configura password di enable criptata

R(config)#line console 0
R(config-line)#password <password>
R(config-line)#login → imposta password per la console

R(config)#line vty 0 4
R(config-line)#password <password>
R(config-line)#login

R(config)# service password-encryption → cripta tutte le password

Rotte:

Configurazione rotta default
R(config)# ip route 0.0.0.0 0.0.0.0 <GATEWAY(ip oppure interfaccia)>
Configurazione rotta statica
R(config)# ip route <IP> <MASK> <GATEWAY (ip next hop oppure interfaccia)>
Configurazione di una floating static routes (rotta statica di backup)
R(config)# ip route <IP> <MASK> <GATEWAY (ip oppure interfaccia)> 200 → 200=AD

DHCP

R(config)# ip dhcp pool <pool name or number (label)>
R(dhcp-config)# network <network address> <subnetmask>
R(config)#ip dhcp excluded-address <from ip addr> <to ip addr>
R(dhcp-config)# domain name <name>
R(dhcp-config)# dns-server <primary dns ip addr> <secondary dns server ip addr>
R(dhcp-config)# default-router <default gateway ip address> → default gateway dei clients
R(dhcp-config)# lease <days><hours><min> | <infinite>
R(dhcp-config)# end (or exit)

R# show ip dhcp binding → vedi indirizzi assegnati (utile per toubleshooting)
R# show ip dhcp conflict → visualizza eventuali conflitti nell’assegnazione indirizzi dhcp
Quando il dhcp server si trova in una subnet diversa da quella degli host, bisogna utilizzare in comando “ip helper-address <ip address>” sull’interfaccia gateway della lan degli host. In tal modo le richieste dhcp vengono forwardate al server dhcp e gli ip assegnati dal server stesso vengono anch’essi regolarmente forwardate verso gli host.
R(config-if)# ip helper-address <ip address>

BACK UP CONFIGURAZIONE SU TFTP SERVER I

R# copy startup-config tftp → vengono poi chiesti i parametri del server tftp

RESTORE LA CONFIGURAZIONE DA TFTP SERVER

R# copy tftp running-config

 

DEBUG

Per abilitare la modalità di debug (registra e visualizza il passaggio di pacchetti icmp, come i ping):
debug ip icmp
oppure genericamente
debug ip <protocollo (rip, icmp…)>

PROTOCOLLI DI ROUTING: RIP

AD:120
(Routing Information Protocol) – cat. “distance vector”, max 15 hops, small business-multiple routers
Updates su 224.0.0.9 (UDP port 520) con intera tabella di routing, ogni 5 secondi + triggered update. Summarizza di default.
Implementare RIP:
R( config)# router rip
R( config-router)# version 2
R( config-router)# network <prima rete da pubblicare>
R( config-router)# network <seconda rete da pubblicare> → etc. etc.
R( config-router)# end
Scelta di tipo di update (da configurazione interfaccia):
R( config-if)# ip rip send version <1 | 2 | 1 2>
R( config-if)# ip rip receive version <1 | 2 | 1 2>
R#debug ip rip → mostra in tempo reale tutti gli update inviati e ricevuti
Inserire rotta di default negli update:
R(config-router)# default-information originate
Inserire rotte statiche negli update:
R(config-router)# redistribute static
Impedire ad una interfaccia di inviare-ricevere update di routing:
R(config-router)# passive-interface <type> <number>
Vedere rotte conosciute dal protocollo rip:
R(config)# show ip rip database
Vede gli update in tempo reale:
R(config)# debug ip rip

PROTOCOLLI DI ROUTING: EIGRP

AD:90
Proprietario Cisco. cat. “distance vector”. Supporta VLSM and classless routing; MAX 224 HOPS;
La metrica è composta ed utilizza bandwidth, delay, reliability and load.
Usa il logaritmo DUAL per prevenire loop; veloce convergenza grazie agli bounded updates; mantiene tavole multiple; forma le aidacenze con i vicini; mantiene le rotte successor e feasible successor; fa il load balancing; usa vari tipi di pacchetti per una veloce convergenza; usa l’RTP (Reliable transport protocol) per il supporto a qualsiasi protocollo di Leyer 4. Summarizza di default.
– Ogni router manda periodicamente degli Hello Packets (multicast ogni 5 o 60 secondi) ai vicini per stabilire con loro l’adiacenza. Manda poi sempre ai vicini i Bounded Updates (multicast 224.0.0.10, vedi più sotto): degli aggiornamenti solo relativi ai cambiamenti nelle reti di sua pertinenza. I vicini aggiornano la loro table e inoltrano a loro volta i cambiamenti ai loro vicini.
Ogni route ha tre table:
1. neighbor table: con le informazioni dei router direttamente connessi e relative interfacce e indirizzi ip → show ip eigrp neighbors details
2. topology table: con informazioni su tutte le rotte imparate da ogni vicino. DUAL calcola le rotte con minore costo, dette successor. Tra le successor (con costo uguale o anche diverso) fa il load balancing. Calcola anche le feasible successor, rotte di backup che vengono inserite nella route table, se la rotta primaria fallisce. N.B. Passive = rotta in funzione; Active = durante il ricalcolo di DUAL. Tra parentesi tonde troviamo (feasible distance/Advertised, o reported distance).
→ show ip eigrp topology
3. routing table: mostra solo le rotte “migliori”, le successor routes. Tra le quadre troviamo AD/feasible distance)

EIGRP updates nel dettaglio:
a. Acknowledgement: unicast, corrisponde ad un “ok, ricevuto!”
b. Update: info su cambiamento rete; se si forma nuova adiacenza sono in unicast, altrimenti multicast
c. query: inviato ai vicini de una rotta cade. Aiuta DUAL a calcolare la nuova successsor; uni o multicast
d. Reply: unicast, risposta ad una query.
Implementare EIGRP:
E’ necessario dare a EIGRP il numero di AS:
R( config)# router eigrp <AS_number> → <AS_number> da 1 a 65535
R( config-router)# network <prima rete da pubblicare>
R( config-router)# network <seconda rete da pubblicare> → etc. etc.
R( config-router)# exit
disabilita auto summarizzazione:
R(config-router)# no auto-summary
Summarizzazione manuale:
R(config)#interface <type> <number>
R(config-if)#ip summary-address eigrp <AS_number> <rotta sammarizzata> <subnetmask>
Criptazione degli updates, con md5:
Da impostare su tutti i router che partecipano ad eigrp
R(config)#key chain <keychain> → imposta il portachiavi
R(config-keychain)#key 1 → entro in configurazione chiave (o password)
R(config-keychain-key)# key-string <key_string> → imposto la key-string (o password)
R(config-keychain-key)#end
R(config)# interface <type> <number>
R(config-if)# ip authentication mode eigrp <AS_number> md5 → configuro metodo criptazione sul link
R(config-if)# ip authentication key-chain eigrp <AS_number> <keychain> → applico la password al link

PROTOCOLLI DI ROUTING: OSPF

AD:110

Link-state protocol. Divide il network in aree (ogni area: max 50 routers). Tutte le aree costituiscono l’OSPF autonomous system. Manda update solo quando si verificano dei cambiamenti nella rete. Un full-update è previsto solo ogni 30 minuti. Ogni router genera una mappa completa di tutta la rete, vista dal suo punto di vista. NON summarizza automaticamente. La metrica è basata sulla bandwidth. Più alta è la bandwidth e più basso è il costo.

Fastethernet and faster costo: 1
ethernet costo: 10
E1 costo: 48
T1 costo:64
512 kbps costo: 195
256 kbps costo: 390
128 kbps costo: 781
64 kbps costo: 1562
56 kbps costo: 1785

Ogni router manda ai suoi vicini gli LSA (link-state advertisements) con informazioni sullo stato dei suoi links. Quando un router riceve le indormazioni su tutti i link dell’area, utilizza l’SPF algorithm (Dijkstra’s alg.) per generare un topological tree, a map of the network. Ogni router vede se stesso come root di quell’albero. Il topology database stora le informazioni del SPF tree. Le rotte con minore costo vengono inserite nella routing table.
La convergenza avviene quando:
1. tutti i router ricevono informazioni su ogni destinazione della network
2. SPF alg. ha processato tutte queste informazioni
3. tutte le routing tables sono state aggiornate.
Gli update sono inviati solo quando avvengono dei cambiamenti nella rete.
Ogni router stringe con i vicini una adiacenza, che è full quando hanno sincronizzato pienamente i loro database e tutti i settings matchano.
L’adiacenza inizia con un hello packet (multicast 224.0.0.5 – ogni 10 secondi in ethernet, ogni 30 secondi per link non broadcast).
In un ambiente broadcast, per diminuire la quantità di traffico, OSPF nomina un designated router (DR) e un backup designated router (BDR). DR e BDR ricevono da tutti gli update (sul multicast 224.0.0.6) e poi li diffondono a tutti (al multicast 224.0.0.5). Gli altri router sono detti DROther.
Viene eletto DR il router con il router-ID più alto. Il secondo viene eletto BDR.
Il router ID è un indirizzo ip che viene determinato:
1. manualmente con il comando router-id
2. se non viene settato un router id, viene preso l’indirizzo più alto delle loopback
3. se non ci sono loopback alzate, viene preso l’indirizzo più alto delle interfacce fisiche SIA CHE PARTECIPINO ALL’AREA OSPF, SIA CHE NON PARTECIPINO.
Per forzare l’elezione di DR e BDR, si può usare il comando ip ospf priority number (da 0=non verrà mail eletto a 255=elezione sicura).
Reti identificate da OSPF:
1. Broadcast multiacces networks (Ethernet): vengono eletti DR e BDR
2. Point to point networks (serial, T1/E1): non vengono eletti DR e BDR
3. NBMA – Nonbroadcast multiaccess networks (Frame Relay, ATM): due possibilità per OSPF:
a. Simulated broadcast environment: viene simulato un enrironment broadcast, con elezione di DR e BDR. I neighbors devono essere definiti staticamente.
b. Point-to-point environment: niente elezione di DR e BDR. I neighbors devono essere definiti staticamente.
Implementare OSPF:
E’ necessario dare a OSPF un numero di processo (con valore solo locale), e alla rete il numero di area:
R( config)# router ospf <processo_id> → <processo_id> da 1 a 65535
R( config-router)# network <network_address> <wildcard-mask> area <area_id>
R( config-router)# exit
Autenticazione criptata con md5 (esempio)
R(config)# interface serial 0/0/0
R(config-if)# ip address 10.1.1.1 255.255.255.0
R(config-if)# ip ospf message-digest-key 10 md5 areapassword
R(config)# router ospf 18
R(config-router)# network 10.1.1.0 0.0.0.255 area 0
R(config-router)# area 0 authentication message-digest

R(config)# interface serial 0/0/0
R(config-if)# ip address 10.1.1.2 255.255.255.0
R(config-if)# ip ospf message-digest-key 10 md5 areapassword
R(config)# router ospf 25
R(config-router)# network 10.1.1.0 0.0.0.255 area 0
R(config-router)#area 0 authentication message-digest

Configurare l’interface priority:
R(config)#interface <type> <number>
R(config-if)# ip ospf priority <priority_number> → da 0 a 255 (0=mai bridge 255=sicuramente bridge)
Configurare il router id:
R(config)# router ospf 1
R(config-router)# router-id 10.1.1.1
N.B. Dopo aver variato il router id o la priority di un’interfaccia, è necessario dare un clear ip ospf process perchè i cambiamenti abbiano effetto.
Configurare l’OSPF cost:
R(config)#interface <type> <number>
R(config-if)#bandwidth <56 | 64 | 256 |…>
Configurare l’OSPF bandwidth:
R(config)#interface <type> <number>
R(config-if)#ip ospf cost <cost-number>
Inserire rotta di default negli update:
R(config-router)# default-information originate
Summarizzare le rotte OSPF sull’ASBR (esempio):
R(config-router)#area 0 range 192.168.0.0 255.255.252.0
Debug:
R#debug ip ospf events
Alcuni show:
R#show ip ospf neighbor
R#show ip ospf
R#show ip ospf interface

DISTRIBUIRE LE ROTTE OSPF SU RIP

Sul router su cui gira sia RIP che OSPF
R(config)#ruoter rip
R(config-router)#version 2
R(config-router)#redistribute ospf <ospf_process_number> metric <1-16 =metrica con la quale rip leggerà le rotte importate da ospf>

WAN

 


DCE: data commun. equipment – DTE: data terminal equipment → physical layer protocol: X.21/V.35 …
physical layer protocol:
– EIA/TIA-232: up to 64 kbps – 25-pin D connector
– EIA/TIA-449-530: up to 2 Mbps – 36-pin D connector
– EIA/TIA-612-613: up to 52 Mbps – 60-pin D connector
– V.35: up to 48 kbps – 34-pin rectangular connector
– X.21: standard for synchronous digital communications – 15-pin connector

Link speed: DS0: standard a 64 kbps – DS1: T1 a 1544 Mbps – DS3: T3 a 44736 Mbps
E1 = 32 DS0s up to 2048 Mbps
E3 = 16 E1s up to 34064 Mbps

La bandwidth di un link non dedicato viene divisa dall’ISP in più DS0s per i vari customers. La suddivisione avviene in base a slot di tempo:

- TDM (time-division multiplexing) → vede slot di tempo pre-assegnati; spesso è causa di sprechi di banda

- STDM (statistical time-division multiplexing) → slot di tempo assegnati al “bisogno”: una intelligent device tiene traccia delle conversazioni e determina se una conversazione ha bisogno di più o meno banda.

Tipi di connessioni:

Dedicated leased line: point to point serial link between two routers
Circuit switching: simile alla telefonata tradizionale, viene stabilito un circuito dedicato al momento della chiamata che resta su fino al suo termine. Costo in base alla distanza e al tempo di chiamata. Ottimo livello di sicurezza.
Packet switching (es. Frame Relay): I dati sono fragmentati in pacchetti sui quali vengono inseriti gli identificativi che identificano la rotta che devono seguire. Il processo è simile al routing e ai relativi protocolli. I circuiti a volte sono preconfigurati, ma sono condivisi fra più organizzazioni, non sono mai esclusivi.
Cell Switching (es. ATM): le celle sono pacchetti di piccoli di dimensioni sempre uguali (53 byte: 48 data+5 header), quindi vengono switchati velocemente, ma producono overload per i dispositivi che devono analizzare molti più pacchetti.

Nel packet switching:
SVC (Switched virtual circuit): circuito stabilito dinamicamente al momento della richiesta di trasmissione. Connessione tirata su al momento della richiesta e tirata giù al termine. Porta delay nella network.
PVC (Permanent virtual circuit): il path è permanente. E’ migliore dell’SVC, più diffuso, generalmente utilizzato dal Frame Relay.

Layer 2 serial line encapsulation:

— HDLC: synchronous serial, bit-oriented data link, usa acknowledgement e windowing scheme. Ogni frame usa lo stesso formato: flag, address, control, information, FCS, flag. Lo standard non contiene un campo per il tipo di protocollo. Per questo non può trasportare protocolli multipli sullo stesso link. Il proprietario CISCO HDLS ( di default sui router Cisco) aggiunge invece un campo con l’indicazione del tipo di protocollo (campo “type”: protocol code) che quindi abilita multipli network layer protocols a condividere lo stesso link. Per questa differenza non è possibile abilitare HDLS su ambienti multi vendor (Cisco ed altri).

— PPP: funziona su interfacce Asynchronous/Synchronous serial, HSSI, ISDN.
Ha due subprotocolli:
– a. LCP (Link Control protocol) che stabilisce, mantiene, testa, temina il link ppp, oltre a negoziare e configurare le opzioni di controllo del link wan. La negoziazione prevede le fasi: authentication (PAP, CHAP), Callback, Compression, Multilink
– b. NCP (Network Control Protocol) che incapsula i dati permettendo multipli network layer protocols. Ogni protocollo richiede un diverso NCP.
Fasi di una sessione ppp:
Link-establishment phase: prima negoziazione di LCP; alla fine un acknowledgement dà l’ok
Authentication phase: (opzionale) NCP attua l’autenticazione
NCP negotiating phase: quando LCP ha stabilito che la qualità del collegamento è abbastanza buona per trasportare dati di livello 3 e l’autenticazione opzionale ha avuto esito positivo, ppp invia i pacchetti NCP per configurare uno o più protocolli di rete.
Configurazione di ppp:
R(config-if)# encapsulation ppp
R(config-if)# compress <predictor | stac> → stacker= + cpu – memoria ; predictor= + memoria – cpu
R(config-if)# ppp multilink

vari show:

R# show interfaces serial → incapsulazione e stato di LCP
R# show controllers → stato canali delle interfacce, DCE/DTE protocollo relativo, clock rate…

Autenticazione ppp:
PAP Password Authentication protocol: two way handshake, password circola in chiaro
CHAP Challenge Handshake Authentication protocol: la password non viene trasmessa in rete. Viene trasmessa solo una stringa testo random che viene criptata con la password impostata dall’utente e che deve essere uguale per i due router. Autenticazione ripetuta più volte in breve spazio di tempo.
Fasi:
challenge → viene inviata stringa testo random
response → risposta: stringa criptata con password condivisa
Accept/Reject → se il primo router verifica la giustessa della criptazione acceta, altrimenti rifiuta e cade link

Configurare l’autenticazione ppp:
R(config)# username <name> password <password> → hostname del vicino + password comune
R(config-if)# ppp authentication <chap | chap pap | pap chap | pap>
→ fine configurazione chap o pap
Solo nel pap dall’IOS Cisco Release 11.1:
R(config)# ppp pap sent-username <name> password <password>

Vari debug: debug ppp <authentication|packet|negotiating|error|chap>

— FRAME RELAY: la frame relay è una NBMA. Usa packet switching, STDM per ottimizzazione della banda disponibile, PVC che il provider preconfigura. Per funzionare deve avere un modo per associare il VC con un indirizzo di livello 3. Questo avviene con l’INVERSE ARP.
Inverse Arp: associa un DLCI (identificativo di un certo VC, ma con valore solamente locale, presente in ogni frame inviato) con un certo ip address remoto.
LMI (Local Management Interface): gestisce e mantiene lo stato di una connessione tra il DTE e un Frame Relay switch (DCE), quindi del VC. La connessione del VC può essere in:
active state → tutto ok
Inactive state → connessione locale al DCE è ok, ma non quella della connessione remota, sempre al DCE
Deleted state → nessun LMI ricevuti dal farme relay switch, o non c’e servizio tra la DTE e la DCE.
Parametri negoziati con l’ISP:
CIR – Committed information rate: minimum bandwidth rate guaranteed
Tc – Committed time: calculated time inrval
Bc – Committed burst: number of comitted bits within the Tc
EIR – excess information rate: rate massimo (superiore al normale) che il VC può supportare in caso di no congestion. Questi extra bits sono detti Be – excess burst (“scatti extra”). I frame inviati “extra” sono detti DE – descard eligible. Se ci sono congestioni i frame sono droppati.

FECN – forward explicit congestion notification: campo ad 1 bit settato da uno switch. Indica che una DTE è congestionato
BECN – backward explicit notification: simile al FECN, indica che la entwork è congestionata nella direzione opposta.
FECN e BECN permettono al livello applicazione di agire intelligentemente di conseguenza.

Configurazione del Frame Relay (limitatamente ai routers cpe):
Entro nell’interfaccia, do “no ip address” e imposto l’encapsulation frame-relay. Poi creo la subinterfaccia impostandola come point to point oppure multipoint, configuro l’ip address, e imposto il numero di dlci. Es:
R(config)# int se0/0/0
R(config-if)# no ip address
R(config-if)# ensapsulation frame-relay
R(config-if)# end
R(config)# int se0/0/0.101 point-to-point (oppure multipoint)
R(config-subif)# frame-relay interface-dlci 20
R(config-subif)# end

ACL

 


Guidelines:
Configurare solo una ACL per protocollo, per direzione
Standard 1-99 1300-1399 → vicino alla destinazione
Extended 100-199 2000-2699 → vicino alla sorgente
Named → va indicato se sono standard o extended
Determinare correttamente se inbound o outbound, dal punto di vista dell’interno del router
Gli statements sono letti dal primo all’ultimo e alla fine c’è un implicito deny any any
Inserisci gli statements dal più specifico al più generale
Ciò che proviene dall’interno del router non è processato dalle ACL

Realizzare l’ACL:
St. → R(config)# access-list <ACL_number> <deny | permit> <source address> <source_wildcard> <log>
Ext → R(config)#access-list <ACL_number> <deny | permit> <protocol-type> <source address> → cont: <source_wildcard> <host | any> <dest_address> <dest_wildcard> <eq | gt | lt | range> <appl_protocol_type>
Named → R(config)# ip access-list <standard | extended> <named_name> → poi di seguito inserire gli statements senza ripetere ogni volta la dicitura iniziale.

Nelle nuove IOS è possibile cambiare una sola o più righe degli statements, senza dover riscrivere tutta l’ACL. Il comando è:
R(config)# ip access list → dare poi il comando no line number <xy> e riscrivere la riga usando il numeRo della riga cancellata.
Per inserire una riga nuova:
basta dare l’input con il numero di riga intermedio rispetto alla riga precedente e successiva.
es. 20 permit ip 192.,168.1.77 any

Configurare una label (remark):
R(config)# access-list <ACL_number> remark <remark_text>

Applicazione dell’ACL all’interfaccia:
R(config-if)# ip access-group <ACL_number> <in | out>
Applicazione dell’ACL all’interfaccia vty:
R(config-line)#access-class <ACL_number> <in | out>

wildcard mask 0.0.0.0 = host → indicano un host specifico
wildcard mask 255.255.255.255 = any → tutti gli host di quella rete
0.0.0.0 255.255.255.255 = any → tutti gli host di tutte le reti

Established traffic:
Permette solo il traffico che è risposta ad una richiesta proveniente dall’interno della rete:
esempio: R(config)# access-list 101 permit tcp any any established

Per vedere tutte le access list:
R# show access-list

I log creati dalle ACL quando alla fine dello statement viene inserito il comando log, per il syslog sono di tipo informational.
Nelle Cisco IOS sono possibili altre ACL oltre le standard e le extended (e le named). Queste sono le:
Dynamic ACL: dette anche “lock and key”, richiedono all’utente che si collega via telnet di loggarsi (autenticarsi)
Reflexive ACL: simili alle extended “established” ma ispezionano non solo il traffico tcp ma anche quello UDP e ICMP
Time-based ACL: permettono o negano il traffico basandosi sull’ora e sul giornodella settimana.

CDP (Cisco Discovery protocol)

Tool (presente e attivo di default) per avere info su altri dispositivi direttamente connessi
R# show cdp neighbors → da info su dispositivi, interfacce, raggiungibilità
R# show cdp neighbors detail → da tutte le informazioni possibili anche sul software, ind. Logici…)
R# no cdp run → disabilita cdp
R(conf-if)# no cdp enable → disabilita cdp solo per l’interfaccia dove ci si trova
R# cdp run ->avvia cdp
R(conf-if)#cdp run enable –>avvia cdp su quell’interfaccia

NAT

 


inside local address – inside global address / outside local address – outside global address
static nat: 1 indirizzo privato viene traslato in 1 indirizzo pubblico
dynamic nat: un host della rete interna riceve un indirizzo pubblico tra un pool di indirizzi pubblici disponibili al router.
Nat overload or pat (port-based address translation): più hosts della rete interna ricevono lo stesso indirizzo pubblico, che è l’indirizzo dell’interfaccia verso l’esterno della rete → è il più comunemente utilizzato

Nat Statico (1 indirizzo interno nattato in 1 indirizzo pubblico)
R(config)# interface <type> <number> → entro nella configurazione dell’inside interface
R(config-if)# ip address <ip address> <subnet mask>-> configuro ind. logico (se non già fatto)
R(config-if)# ip nat inside
R(config-if)# exit

R(config)# interface <type> <number> → entro nella configurazione dell’outside interface
R(config-if)# ip address <ip address> <subnet mask> → configuro ind. logico (se non già fatto)
R(config-if)# ip nat outside
R(config-if)# exit

R(config)# ip nat inside source static <inside address> <outside address>
N.B. Per verificare le translazioni NAT: R# show ip nat translations

Nat dinamico (1 indirizzo interno ne riceve uno pubblico da un pool di indirizzi pubblici)
R(config)# Access-list 1 permit <indirizzo rete> <wildcard>
R(config)# ip nat pool NAT-1 <primo ind. NAT disponibile> <ultimo ind. NAT disponibile> netmask <netmask>
R(config)# ip nat inside source list 1 pool NAT-1 overload
R(config)# interface <type> <number>
R(config-if)# ip nat inside
R(config)#interface <type> <number>
R(config-if)#ip nat outside

Nat dinamico – PAT (al pool di indirizzi interni viene assegnato l’indirizzo dell’interfaccia esterna)
(config)# Access-list 1 permit <indirizzo rete> <wildcard>
R(config)# ip nat inside source list 1 interface <type> <number> overload
R(config)# interface <type> <number>
R(config-if)# ip nat inside
R(config)#interface <type> <number>
R(config-if)#ip nat outside

R# show ip nat translations
R# clear ip nat translation → cancella le translazioni in atto
Intranet: rete privata utilizzata per fornire accesso a dipendenti da locale e da remoto, via LAN e vi WAN. Contiene dati anche molto riservati ed è disegnata quindi per i dipendenti dell’azienda.
Extranet: rete privata pensata per fornitori e clienti esterni all’azienda. I dati in essa contenuti sono generalmente meno confidenziali. Ci si connette tramite WAN, con login da remoto o tramite VPN. Non è una public network.

Enterprise network documentation

 


Physical topology
Logical topology
Control Plane: describes failure domains and interfaces where different network technology intersect.

Business Continuity Plan (BCP): cosa fare per evitare che, in caso di disastro, il business non si interrompa. Backup remoto, centri di controllo alternativi, ridondanza delle comunicazioni.
Business Security Plan (BSP): applicazione policy di sicurezza, previene accessi non autorizzati.
Autenticazione, Software ammesso, accesso remoto, monitoraggio intrusioni…
Network Maintenance Plan (NMP): Manutenzione per mantenere sicuro e stabile il sistema. Definisce:
timing della manutenzione, schedulazione dei downtime, responsabilità dello staff, dispositivi e software da manutenere, monitoraggio delle performance della rete
Service-Level Agreement (SLA): contratto con l’ISP. Prevede: velocità e banda, network uptime, monitoraggio delle performance della rete, tempi di risposta per risoluzione dei problemi, responsabilità.

Comandi e script utili – FIND

Cerca tutti i file con estensione “.xyz” al cui interno sia presente la stringa “pippo”
find / -name "*.xyz" -exec grep -l pippo {} \;
Cerca tutti i file con estensione “.xyz”al cui interno sia presente la stringa “pippo” e scrivi la lista in “/tmp/xyzLIST.txt”
find / -name "*.xyz" -exec grep -l pippo {} \; > /tmp/xyzLIST.txt
Cerca tutti i file con estensione “.xyz” ed esegui un “ls -l” per ognuno scrivendone l’output in “/tmp/xyz-List-All.txt”
--------------------------------------------------------------------------
#!/bin/bash
find / -name "*.xyz" > /tmp/xyzLIST.txt
for i in $(cat /tmp/xyzLIST.txt); do
 ls -l $i >> /tmp/xyz-List-All.txt
 done
exit 0
--------------------------------------------------------------------------
Cerca i files modificati oggi, nella directory corrente (-maxdepth 1):
find -maxdepth 1 -type f -mtime -1
Cerca le directory modificate oggi, nella directory corrente (-maxdepth 1):
find -maxdepth 1 -type d -mtime -1
Cerca i files modificati oggi, in modo ricorsivo fino a 3 livelli sottola directorycorrente (-maxdepth 3):
find -maxdepth 3 -type f -mtime -1

 

 

 

Ubuntu, Debian: script all’avvio

Per poter creare uno script che venga automaticamente lanciato ad ogni avvio di Ubuntu, dobbiamo creare un file .sh nella cartella /etc/init.d/.
Quindi:

sudo vim /etc/init.d/nomescript.sh

Scriviamo all’interno del file lo script che vogliamo sia lanciato, diamo i permessi di esecuzione:

sudo chmod a+x /etc/init.d/nomescript.sh

ed infine lo lanciamo:

sudo update-rc.d nomescript.sh defaults

Ora lo script verrà eseguito ad ogni avvio della macchina.

Failsafe System – Cluster Linux con Heartbeat

Heartbeat consente di configurare facilmente un cluster Linux, ovvero un sistema che incrementa l’affidabilità assicurando che in caso di malfunzionamento/spegnimento di un server, i servizi vengano automaticamente presi in carico ed erogati da uno dei servers “secondari”, con un downtime del servizio quasi impercettibile.

In pratica Heartbeat si occupa di spostare l’erogazione del servizio (nell’esempio di seguito il servizio http) da un server ad un altro al verificarsi di particolari condizioni configurabili. Per far ciò ovviamente non gestisce solamente il servizio, ma anche l’indirizzo ip secondario virtuale, qui definito VIP, attraverso il quale il servizio stesso viene erogato.

1. SCENARIO

2 X OS Ubuntu 12.04 server 64bit LAMP, full updated, root enable.
Both servers are configured as web-servers (apache2), up and running:
web-1: eth0 192.168.252.129/24 gw 192.168.252.2 (note: hostname must be web-1, check using the command “hostname”) -> NODE 1
web-2: eth0 192.168.252.130/24 gw 192.168.252.2 (note: hostname must be web-2) -> NODE 2
During configuration we need to check which server replies to our request (or which server is working as “master”). For this reason we configure differently two /var/www/index.html page:
/var/www/index.html page on web-1 contains : “Ciao, sono WEB-1 WEB-1 WEB-1”
/var/www/index.html page on web-2 contains : “Ciao, sono WEB-2 WEB-2 WEB-2”

At the end of this procedure node 1 (configured as default “master”) will have the subinterface eth0:0 (VIP) with ip address 192.168.252.135/24 and provide web services. In the event of node 1 failure, node 2 (configured as default “slave”) will become “master” and it will start to provide web services from subinterface eth0:0 with same ip address 192.168.252.135/24. If the fault is fixed web-1 become master again (failback).

2. NETWORK CONFIGURATION

2.1 check hostname and name resolving of two nodes (very important for heartbeat)
# NODE 1
# check the hostname:
root@web-1:~# hostname
web-1 # -> OK

Edit file hosts:

# NODE 1
# Edit hosts file:
root@web-1:~# vim /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web-1 
192.168.252.129 web-1
192.168.252.130 web-2
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# NODE 2
# check the hostname:
root@web-2:~# hostname
web-2 -> OK
# NODE 2
# Edit file hosts
root@web-2:~# vim /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web-2
192.168.252.130 web-2
192.168.252.129 web-1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

From each node check if you can successfully ping the hostname of the other node:

root@web-1:~# ping web-2
PING web-2 (192.168.252.130) 56(84) bytes of data.
64 bytes from web-2 (192.168.252.130): icmp_req=1 ttl=64 time=0.940 ms
64 bytes from web-2 (192.168.252.130): icmp_req=2 ttl=64 time=0.271 ms

And viceversa:

root@web-2:~# ping web-1
PING web-1 (192.168.252.129) 56(84) bytes of data.
64 bytes from web-1 (192.168.252.129): icmp_req=1 ttl=64 time=0.314 ms
64 bytes from web-1 (192.168.252.129): icmp_req=2 ttl=64 time=0.246 ms
2.2 add a NIC heartbeat dedicated

Now we add a dedicated NIC to heartbeat, so the connection will be more reliable.
Two NICs may be connected between web-1 and web-2 with a cross cable.
This is network configuration:

NODE 1
root@web-1:~# cat /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface INTERFACE FOR COSTUMER SERVICES
auto eth0
iface eth0 inet static
 address 192.168.252.129
 netmask 255.255.255.0
 network 192.168.252.0
 broadcast 192.168.252.255
 gateway 192.168.252.2
auto eth1
iface eth1 inet static
 address 10.10.50.90
 netmask 255.255.255.0
 network 10.10.50.0
 broadcast 10.10.50.255
NODE 2
root@web-2:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface INTERFACE FOR COSTUMER SERVICES
auto eth0
iface eth0 inet static
 address 192.168.252.130
 netmask 255.255.255.0
 network 192.168.252.0
 broadcast 192.168.252.255
 gateway 192.168.252.2
auto eth1
iface eth1 inet static
 address 10.10.50.91
 netmask 255.255.255.0
 network 10.10.50.0
 broadcast 10.10.50.255

On web-1 we have the NIC eth1 with ip 10.10.50.90
On web-2 we have the NIC eth1 with ip 10.10.50.91
Connect with a cross cable the two NICs and check connectivity pinging the new NIC from a node to the other.

3. HEARTBEAT INSTALLATION AND CONFIGURATION

# NODE 1
# Execute:
root@web-1:/etc/ha.d# apt-get install heartbeat
# Go to the heartbeat configuration directory:
root@web-1:/etc/ha.d# cd /etc/ha.d
# Create and edit file “authkeys” for authentication key:
root@web-1:/etc/ha.d# vim authkeys
auth 1 ### use key 1:
1 sha1 zoobe1234! ### key 1 has the sha1 encryption key “zoobe1234!”

# NB This file must be readable only by root:
root@web-1:# chmod 0600 /etc/ha.d/authkeys
# NODE 1
# Create and edit “ha.cf” config file :
root@web-1:/etc/ha.d# vim ha.cf
logfacility daemon ### facility to use for logging
keepalive 1 #### heartbeat packets frequency
deadtime 5 ### after 5 lost packets the other server became "master"
warntime 3 ### after 3 lost packets a warn log appears
initdead 60 ### after a reboot heartbeat wait 60 sec to start running
ping 192.168.252.2 ### ping the default gateway to check if all the network is dead
#ucast eth1 10.10.50.130 ### heartbeat keepalive destination
udpport 694 ### listening port for heartbeat broadcast
bcast eth1 ### broadcast outgoing interface
auto_failback on ### failback is active
node web-1 ### node-1 hostname
node web-2 ### node-2 hostname
# NODE 1
# Create and edit resurces file “haresources”:
root@web-1:/etc/ha.d# vim haresources
web-1 IPaddr::192.168.252.135/24/eth0 apache2 
## web-1 is the "master",
## 192.168.252.135/24 on eth0 is the "VIP"
## apache2 is the clustered service
# NODE 2
# Execute
root@web-2:# apt-get install heartbeat
# Go to heartbeat configuration directory:
root@web-2:# cd /etc/ha.d
# Create and edit file “authkeys” for authentication key:
root@web-2:/etc/ha.d# vim authkeys
auth 1 ### use key 1
1 sha1 zoobe1234! ### key 1 has the sha1 encryption key “zoobe1234!”
# This file must be readable only by root:
root@web-2:# chmod 0600 /etc/ha.d/authkeys
# NODE 2
# Create and edit “ha.cf” config file :
root@web-2:/etc/ha.d# vim ha.cf
logfacility daemon ### facility to use for logging
keepalive 1 #### heartbeat packets frequency
deadtime 5 ### after 5 lost packets the other server became "master"
warntime 3 ### after 3 lost packets a warn log appears
initdead 60 ### after a reboot heartbeat wait 60 sec to start running
ping 192.168.252.2 ### ping he default gateway to check if all the network is dead
#ucast eth1 10.10.50.129 ### heartbeat keepalive destination
udpport 694 ### listening port for heartbeat broadcast
bcast eth1 ### broadcats outgoing interface
auto_failback on ### failback is active
node web-1 ### node-1 hostname
node web-2 ### node-2 hostname
# NODE 2
# Create and edit resurces file “haresources”:
root@web-2:/etc/ha.d# vim haresources
web-1 IPaddr::192.168.252.135/24/eth0 apache2 ## web-1 is the "master",
## 192.168.252.135/24 on eth0 is the "VIP"
## apache2 is the clustered service

4. HEARTBEAT STARTS

Start heartbeat on both servers:

/etc/init.d/heartbeat start

4. CLUSTER AND FAILOVER TEST

From a browser: http://192.168.252.135. You display the page “Ciao, sono WEB-1 WEB-1 WEB-1” (web-1 is replying to your requests) -> OK, web-1 is now “master”;
If you try http://192.168.252.130 you don’t display anything: apache2 on web-2 is down -> OK
From a client in the network try to permanent ping (ping –t) 192.168.252.135.
Shutdown web-1.
After few seconds you loose only one packet and then the ip starts again to respond correctly: VIP is switched from web-1 to web-2.
From a browser: http://192.168.252.135. You display the page “Ciao, sono WEB-2 WEB-2 WEB-2” (web-2 is replying to your requests) -> OK, web-2 is now “master”;
Power on web-1. After few seconds web-1 become “master” again: failover feature works correctly.

Disinfettare Windows con Linux e non solo

bomberUltimamente capita spesso di dover intervenire su sistemi Windows attaccati dai virus più diversi con effetti più o meno palesi, invasivi e distruttivi.

E’ anche comune che un cliente/amico ci chieda di fare qualcosa: “… non riesco più a navigare!”, indipendentemente dal browser si aprono automaticamente decine di finestre che impediscono completamente la navigazione o nel migliore dei casi la rendono molto difficoltosa.

Se consideriamo quante cose facciamo con il nostro PC, ci rendiamo conto che un problema del genere non deve essere sottovalutato: se il nostro sistema è infetto significa che è stato violato e che occorre intervenire il prima possibile. Il rischio maggiore che si corre è il furto di identità: l’attaccante, magari dall’altra parte del globo, riesce nel tempo a collezionare tutti i dati che gli servono – credenziali varie, immagini di documenti, recapiti, collegamenti etc – per poter dichiarare e dimostrare di essere voi stessi e per svolgere alcune operazioni come l’apertura di un nuovo conto corrente on-line, l’apertura di una linea di credito, l’ordine di bonifici, l’acquisto di beni e servizi… con le conseguenze che potete facilmente immaginare. Egli riesce a collezionare questi dati grazie a poche righe di codice nascosto in qualche file del vostro sistema operativo che gli invia periodicamente le informazioni desiderate. E’ solo questione di tempo e il gioco è fatto.

PREVENZIONE

Un buon antivirus è sicuramente importante ai fini della prevenzione. Per mia esperienza il migliore in circolazione è ESET NOD32 Antivirus, estremamente sicuro e, visto l’eccellente lavoro che svolge, poco vorace di risorse.

Sicuramente anche un buon firewall sarebbe importante, ad esempio per bloccare le connessioni verso internet non volute, ma la configurazione di un firewall esula dallo scopo di questa guida e generalmente non è gestione dell’utente comune.

Sempre in termini di prevenzione, occorre fare molta attenzione quando si scaricano e installano software di terze parti (specie se gratuiti): nella procedura di scaricamento e installazione quasi sempre di default sono flaggate opzioni di installazione di nuove barre strumenti e altri software addizionali che generalmente sono parecchio invasivi, difficili da rimuovere e che potenzialmente aprono falle di sicurezza.

In generale vale la regola (“quasi” sempre) che un software malevolo per installarsi ha bisogno di una qualche azione dell’utente, solitamente il click ad un link di una mail insolita, l’apertura di un allegato, il click su un “OK” in una finestra aperta dal sistema. Vale la regola: nel dubbio non cliccare su nulla se non sai quello che stai facendo.

Un ultimo aspetto è quello legato alle utenze del sistema. In qualche caso una buona soluzione con gli utenti meno “attenti” e forse recidivi, è stata quella di assegnare loro un’ utenza non amministrativa, ben distinta da quella equivalente ad Administrator. In tal modo si limitano i danni delle infezioni, perché il codice malevolo che dovesse attaccare il sistema difficilmente riuscirebbe ad acquisire i privilegi necessari per svolgere azioni altamente dannose.

CURA

Di seguito riporto le operazioni che generalmente svolgo quando devo sistemare un pc infetto o sospetto tale. Se riesco ad avviare il sistema nativo, innanzitutto:

1. Backup su disco esterno dei dati che devo conservare e successiva scansione antivirus con antivirus su macchina non compromessa.

2. Pulizia dei plugins Chrome, Firefox, IE. Disabilitiamoli/disinstalliamoli tutti.

3. Pulizia di tutti i file temporanei, coockies, cronologia navigazione di tutti i browser.

4. Disinstallazione dal sistema tutti i programmi indesiderati o presunti tali, antivirus compreso (è compromesso o comunque non ha funzionato).

5. Scansione antivirus a freddo: Avvio il sistema da Live Ubuntu 14.04. Una volta che il sistema è partito, apro il terminale, installo l’antivirus di Linux ClamAV, aggiorno le definizioni dei virus con freshclam e creo una directory dove posizionare i virus trovati:

# installo ClamAV
 sudo apt-get install ClamTk
 # aggiorno le definizioni dei virus
 sudo freshclam
 # creo una dir temporanea per i virus trovati
 sudo mkdir /tmp/virus

A questo punto monto la partizione di sistema di Windows (nell’esempio sarà in /mnt/windows-partition) e lancio la scansione:

sudo clamscan -r --move=/tmp/virus /mnt/windows-partition

Con l’opzione “-i” visualizziamo solo i virus trovati, che vengono rimossi e spostati in /tmp/virus

Al termine avviamo il sistema operativo sotto osservazione e rimuoviamo la live

6. Pulizia Sistema e Registro (ADWcleaner + Combofix)

A sistema avviato, scaricare ADWcleaner e Combofix. Installare ed avviare i due programmi in successione, seguendo le chiare indicazioni a schermo. Essi eseguono una straordinaria pulizia del sistema, agendo anche sulle chiavi di registro, dove spesso si annidano buona parte dei problemi.

Attenzione: i due software sono soggetti a continui aggiornamenti, possono richiedere la rete per avviarsi e se non superano il check degli aggiornamenti forzano al download della nuova versione. Sarà mia cura cercare di tenere aggiornate le versioni scaricabili, ma, se non ci dovessi riuscire, dovrete seguire le indicazioni a schermo e scaricare le ultime versioni. Fate attenzione a ciò che scaricate. E’ buona norma cercare in rete se le soluzioni proposte dal produttore del software sono affidabili. In alcuni casi i software ti fanno perdere un sacco di tempo per la scansione, ti avvisano poi che hai una serie di problemi e, dulcis in fundo, se vuoi correggere i problemi devi pagare! Se trovate altri tool o versioni più aggiornate di ADWcleaner e Combofix fatemi sapere da dove li scaricate, così li metto a disposizione anche da soluzionilinux.com.

Riavvio del PC.

7. Installazione di tutti gli aggiornamenti di sistema tramite Windows Update. E’ di fondamentale importanza che il sistema sia aggiornato. Spesso gli aggiornamenti correggono falle di sicurezza, o per lo meno dovrebbero farlo…

8. Installazione nuovo antivirus. Se devo usare una versione free generalmente utilizzo Avast, altrimenti, come già detto, consiglio ESET NOD32 Antivirus.

9. Aggiornamento di tutti gli applicativi installati: check degli aggiornamenti, software per software.

10. Al momento della riconsegna del pc pulito, cercare di convincere l’utente di installare solo ed esclusivamente gli applicativi necessari e di utilizzare per l’uso quotidiano, una utenza non amministrativa.

Non mi è mai successo di fallire la disinfezione avendo seguito tutti gli steps qui indicati.

Ad ogni modo, se dovesse capitare, consiglio di togliere il disco di sistema dal pc, inserirlo in un case usb e farlo scansionare da un buon antivirus, come disco esterno. Qualora anche questo fallisse, resta solo da “piallare” completamente il disco (anche l’MBR e tutte le partizioni – consiglio gparted da live Linux) e reinstallare a nuovo il sistema operativo per poi ripristinare i dati salvati nello step 1.

Fatemi avere vostri suggerimenti, esperienze e integrazioni, in modo da creare una guida davvero completa alla disinfezione di Windows.