Cisco Academy nuovo corso NDG Linux Essentials

Back to School Cisco Academy

Back to School Cisco Academy

Oggi vi segnalo il nuovo corso “NDG Linux Essentials” realizzato dal Programma Cisco Networking Academy e proposto da Linux Professional Institute (LPI).

NDG Linux Essentials
Un nuovo percorso formativo arricchisce il Programma Cisco Networking Academy, promosso dall’azienda in tutto il mondo per consentire di acquisire le competenze professionali ICT più richieste nel mercato del lavoro: si tratta di NDG Linux Essentials, dedicato alla conoscenza dei principi fondamentali del sistema operativo Linux.
Il corso NDG Linux Essentials è stato ideato dal gruppo di sviluppo della NDG (Network Development Group), è conforme alle linee guida proposte da Linux Professional Institute (LPI) ed insegna i fondamenti di un sistema la cui adozione è in costante crescita, generando una importante domanda di personale qualificato.

Il corso NDG Linux Essentials è disponibile in tutto il mondo sulla piattaforma Cisco NetSpace Learning, dedicata ai corsi del programma Cisco Networking Academy, ed è erogato secondo l’approccio pratico tipico del programma: si offre una piattaforma operativa che consente agli studenti una continua interazione con il materiale formativo a loro disposizione, aumentando il loro coinvolgimento e le loro conoscenze.

Il Cisco NetSpace Learning è una piattaforma cloud e questo costituisce un ulteriore valore aggiunto, perché l’integrazione al suo interno di un vero ambiente di laboratorio Linux consentirà a università, scuole, enti formativi di inserire l’istruzione open source nella propria offerta senza dovere sviluppare in proprio una struttura dedicata.

Per maggiori informazioni consultare la sezione dedicata a NDG Linux Essentials dal portale Cisco.

 

#CiscoAcademyCorsoLinuxEssentials

OSSEC host-based intrusion detection system

host-based intrusion detection system

OSSEC host-based intrusion detection system

Spesso, da sisteimsti, capita di dover tenere sotto controllo un grande numero di sistemi e di dover analizzare i log con una certa costanza per problemi di sicurezza. Ma amministrare molti sistemi e collegarcisi quotidianamente è un’operazione dispendiosa e anche noiosa.

Il problema può essere affrontato con l’aiuto di analizzatori di log, come ad esempio il noto Logwatch oppure con software di integrity checker come AIDE, oppure con rootkit control come Rkhunter. Ci sono molti di questi strumenti, ma la loro funzione è molto specifica, ed alla fine ci occorre installare diversi software per poter ottenere un controllo completo.

OSSEC è un “host-based intrusion detection system” (HIDS) opensource, ed e’ in grado di monitorare il funzionamento di un sistema “dal suo interno” anziché ricorrere all’uso delle interfacce di rete, come fanno invece i network-based intrusion detection system. Ossec e’ un sistema scalabile che possiede un potente motore di analisi e correlazione che può effettuare analisi dei log, file integrity checking, Windows registry monitoring (per scovare intrusioni non autorizzate), rootkit detection, real-time alerting e active response; inoltre Ossec è multipiattaforma e supporta la maggior parte dei sistemi operativi, come Linux, OpenBSD, MacOS, Solaris e Windows.

I software HIDS , si occupano di sorvegliare costantemente il comportamento del sistema oggetto d’esame e lo stato in cui sta operando. Mentre i NIDS ispezionano il contentuto di ogni singolo pacchetto dati in transito, un HIDS, qual è OSSEC, può stabilire a quali risorse tentano di accedere i programmi installati bloccando tempestivamente operazioni sospette. Per esempio, un word-processor non deve poter modificare le password di sistema o la configurazione di aree vitali, se lo fa significa che, con buona probabilità, sta eseguendo del codice maligno, collegato all’azione di un malware.
Un HIDS quindi controlla lo stato del sistema verificando le informazioni memorizzate, sia in RAM che sul file system, i file di log e così via, poiche’ l’obiettivo è quello di rilevare tempestivamente le anomalie.

In particolare, OSSEC si incarica di analizzare i log di sistema, verificare l’integrita dei file memorizzati su disco, controllare la presenza di rootkit e tenere traccia delle performance di ogni macchina collegata alla rete locale nella quale e installato.

CARATTERISTICHE:
Architettura: Ossec è costituito da più di un dispositivo, possiede un Manager centrale che monitorizza tutto e riceve informazioni da agents (sensori), syslog e databases.

  • Manager: Il manager è la parte centrale di Ossec e contiene i databases dei file integrity checking , dei logs e degli eventi. Contiene anche tutte le regole, i decoder e le configurazioni cosi da
    rendere più facile l’amministrazione di agents multipli.
  • Agent: L’agent è un piccolo programma installato nei sistemi che si desidera monitorare. Esso raccoglie informazioni e le spedisce al Manager per l’analisi. Sono progettati per utilizzare veramente poche risorse quindi non influenzano le prestazioni del sistema.
  • Agentless: Per i sistemi in cui non si possono installare agents, Ossec permette operazioni di file integrity monitoring . Alcuni esempi possono essere firewalls, routers o anche particolari sistemi Unix.
  • Sicurezza: Ossec offre svariate funzionalità nell’ambito della sicurezza:
    • Analisi dei log e correlazioni:
    • Regole flessibili basate su XML
    • Time Based Alerting
    • Libreria contenente molte regole già integrata
    • Integrity Checking
    • Root Kit detection
    • Active Response: Ossec permette di intervenire immediatamente sulla minaccia con vari metodi:
    • Disabilitare il servizio per un determinato intervallo di tempo (espresso in minuti)
    • Blacklists
    • Firewall-Drop: uno script che permette di comunicare universalmente con i firewall delle più comuni distribuzioni Unix/Linux Firewalls, Switch e Routers: Ossec può ricevere ed analizzare eventi di Syslog da una grande varietà di firewalls, switch e routers che supportano
      questa tecnologia.
  • Scansione dei processi nascosti: grazie all’utilizzo delle funzioni getsid() e kill() sicontrolla se esistono pid utilizzati. In caso positivo, se il comando permostrare i processi attivi (ps in Linux, tasklist in Windows) non `e in grado di rilevarli, significa che nel sistema `e presente un rootkit a livello kernel;
  • Scansione delle porte segrete: con la funzione bind() si controlla ogni porta TCP e UDP del sistema. Se il binding relativo a una porta fallisce (il che significa che tale porta `e attualmente utilizzata), ma netstat, il comando che permette di visualizzare le connessioni attive del computer, non `e in grado di rilevarla, `e probabile la presenza di un rootkit all’interno del sistema
  • Scansione delle interfacce di rete: se una o pi`u interfacce sono in modalit`a promiscua, e il comando ifconfig non lo evidenzia, `e probabile che un rootkit stia nascondendo la presenza di uno o pi`u dispositivi che intercettano tutti i pacchetti di rete

Un’altra interessante estensione del software permette di realizzare la disabilitazione distribuita delle memorie USB, per impedire ai dipendenti di appropriarsi in modo illecito dei contenuti del patrimonio informativo aziendale.


Funzionalita’
OSSEC ha un motore di analisi dei log in grado di correlare e analizzare i log da più dispositivi e formati. I seguenti sono quelli attualmente supportati:

  • Sistemi Unix:
    • Unix PAM
    • sshd
    • Telnetd Solaris
    • Samba
    • Su
    • Sudo
  • Server FTP:
    • ProFTPd
    • Pure FTPd
    • vsftpd
    • Microsoft FTP Server
    • Ftpd Solaris
  • I server di posta:
    • Imapd e pop3d
    • Postfix
    • Sendmail
    • Vpopmail
    • Microsoft Exchange Server
  • Basi di dati:
    • PostgreSQL
    • MySQL
  • Server Web:
    • Apache Server
    • Web server IIS
    • Log Zeus errori del server Web
  • Applicazioni Web:
    • Horde IMP
    • SquirrelMail
    • ModSecurity
  • Firewall:
    • Iptables firewall
    • Solaris IPFilter firewall
    • AIX IPsec/firewall
    • Netscreen firewall
    • Windows Firewall
    • Cisco PIX
    • Cisco FWSM
    • Cisco ASA
  • NIDS:
    • Modulo Cisco IOS IDS/IPS
    • Snort IDS
  • I tool di sicurezza:
    • Symantec AntiVirus
    • Nmap
    • Arpwatch
    • Cisco VPN Concentrator
  • Altri:
    • Detto
    • Proxy Squid
    • Zeus Traffic Manager eXtensible

 

INSTALLAZIONE
Partiamo installando i pre-requisiti di base con il seguente comando :

sudo apt-get install build-essential apache2 libapache2-mod-php5 apache2-utils

Adesso passiamo ad effettuare il download dei pacchetti che ci servono direttamente dal sito del produttore  DOWNLOAD

Server/Agent 2.8 – Linux/BSD  : ossec-hids-2.8.tar.gz
Web UI 0.8 : ossec-wui-0.8.tar.gz

tar xfz ossec-hids-2.8.tar.gz
cd ossec-hids-2.8/
sudo ./install.sh

Start OSSEC HIDS:

sudo /var/ossec/bin/ossec-control start

Installiamo OSSEC Web UI

tar xfz ossec-wui-0.8.tar.gz
sudo mv ossec-wui-0.8 /var/www/html/osssec-wui/
cd /var/www/html/osssec-wui/
sudo ./setup.sh

Restart apache:

sudo apache2ctl restart

Adesso apriamo il browser e facciamolo puntare all’url :  http://localhost/osssec-wui/

Una volta entrati con le credenziali impostate durante l’installazione non rimane che fare pratica delle configurazioni.
Nel prossimo articolo vedremo come affiancare ad Ossec un ottimo tool per la getione dei Log come l’ottimo Splunk.

Splunk è un tool che può essere integrato in OSSEC per trasformare i log in formato grafico con integrati alcuni report che permettono di controllare più facilmente i sistemi monitorati.

#OssecHIDS

DJ in mobilita’ con Openmix

Openmix DJ ovunque

Openmix DJ ovunque

La musica e’ da sempre una vera passione e poter ascoltare la propria musica ovunque e’ ormai una cosa alla portata di tutti grazie a software come Spotify e Deezer ecc… ;  ma se volessimo ascoltare piu’ canzoni insieme, prese dalle Playlist di altri amici e presenti sui loro Smartphone, magari per trasformare una festa privata in un party di successo…!!!

Bene ora in aiuto di ogni dj in erba e’ arrivato OPENMIX , un piccolo e pratico accessorio che permette di mixare i brani provenienti da due smartphone, tablet, pc, lettori MP3 o qualsiasi altro dispositivo in grado di riprodurre musica digitale.

Infatti Openmix e’ dotato di due spinotti laterali con cui collegare i dispositivi da cui estrarre le tracce musicali e, nella parte bassa sono disponibili ben due ingressi, uno in uscita, per poter collegare Openmix agli altoparlanti e l’altro per un terzo dispositivo con cui aggiungere effetti musicali per arricchire ancora di più la vostra esperienza.

Al seguente URL e’ possibile vedere un video di presentazione VIDEO

L’ingombro e’ assolutamente nullo, tanto che lo potete appendere al vostro porta chiavi od allo zaino ed il costo e’ davvero ottimo 30,85 € .

 

#openmixdjinmobilita

Virtualizzazione e provisioning senza sforzo

Vagrant Virtualization Box

Vagrant Virtualization Box

La virtualizzazione ha sicuramente cambiato il modo di lavorare e di pensare alla gestione dei sistemi informatici aziendali o dei service provider, ed il cloud ha aggiunto un’ulteriore strato, sia di liberta’, ma anche di complicazione in piu’, nella gestione dei nuovi sistemi ad alta affidabilita’ che devono essere in grado di scalare nel minor tempo possibile ecc….

Queste esigenze hanno portato alla nascita di innumerevoli sistemi di virtualizzazione, tra i piu’ conosciuti sicuramente ci sono Xen, Vmware, Kvm, Virtuozzo, Virtualbox, Openvz …..! che per certi versi si trasformano in un incubo per gli amministratori di sistema, costretti ad avere diversi ambienti di gestione delle VM su diversi sistemi e con molteplici file di configurazione da settare.

Infatti quando ci troviamo ad amministrare un ambiente cloud con molte macchine, il rischio di dover aggiungere una macchina in più e doverla successivamente configurare in poco tempo per il deploy e la messa in produzione insieme a tutte le altre è molto alto. In più, se siamo all’interno di un’architettura che deve scalare rapidamente per rispondere in modo agile alle esigenze degli utenti (e chiaramente dell’azienda), dover attendere l’installazione del sistema operativo e poi del software non è certamente divertente. Per tutte queste esigenze, Vagrant potrebbe risultare la giusta soluzione che può semplificarci la vita, permettendoci di aggirare tutte queste “rogne”

Vagrant è un gestore di macchine virtuali che può usare parecchi hypervisor tra cui VirtualBox, il predefinito, ma anche VMWare, Xen e KVM. Attraverso questo software infatti potremo basarci su una struttura di base comune a tutte le macchine, che contiene il sistema operativo (anche se poi vedremo come personalizzare questa alberatura), e mantenere degli step comuni nella configurazione delle nostre istanze virtuali, per poi dedicarci solo alle rifiniture, risparmiando tantissimo tempo grazie alle capacità di elaborazione dei datacenter che abbiamo in-house o magari in cloud.

Per inizializzare il nostro primo progetto Vagrant, abbiamo solo bisogno di spostarci in una directory vuota e dare il comando (avendo già installato il software):

Installazione Vagrant

### Verificare di aver installati i seguenti pacchetti : rubygems ruby1.9.1-dev virtualbox-4.2 (o superiori)
# sudo apt-get install vagrant
# vagrant plugin install vagrant-vbguest

Le Box di Vagrant
Il primo concetto fondamentale da fare nostro, per quanto riguarda Vagrant, è quello del concetto di Box. Una Box per quanto riguarda questo ambiente di virtualizzazione infatti è una vera e propria scatola che contiene il sistema operativo, e tutto quello di cui abbiamo bisogno come i software di base ed ogni loro configurazione di base. Al punto di partenza abbiamo delle Box rese disponibili dai server di Vagrant, ma possiamo tranquillamente aggiungerne altre: tutto quello di cui abbiamo bisogno è un po’ di fantasia coi nomi, e di conoscere l’URL remoto tramite il quale scaricare la Box (ne trovate parecchie già fatte su Vagrantbox.es oppure su Hasicorp), con questa sintassi da riga di comando.

# vagrant init
# vagrant box add name url

che, traducendolo con un esempio reale:

# vagrant box add precise32 http://files.vagrantup.com/precise32.box

Che non farà altro che aggiungere al nostro progetto Vagrant una Box Ubuntu 12.04 a 32 bit.

Il Vagrantfile
Una volta scaricata la nostra Box di partenza, possiamo cominciare a configurare il nostro progetto Vagrant tramite il Vagrantfile che abbiamo a disposizione e che si presenta essenzialmente come un file Ruby con vari namespace, ma niente paura, non è necessario conoscere direttamente Ruby per la configurazione (anche se può aiutare), ed è possibile fare riferimento alla documentazione per conoscere i vari prefissi e le possibilità che abbiamo a disposizione. Ogni volta che eseguiamo un comando Vagrant, il Vagrantfile viene cercato in tutte le directory di livello superiore nell’albero.

Il file può avere grossomodo un aspetto del genere:

Esempio di un cluster di 7 Boxes. Preso da:
### https://github.com/patrickdlee/vagrant-examples

domain   = 'example.com'
 
nodes = [
  { :hostname => 'ex7proxy',   :ip => '192.168.0.42', :box => 'precise32' },
  { :hostname => 'ex7db',      :ip => '192.168.0.43', :box => 'precise32' },
  { :hostname => 'ex7web1',    :ip => '192.168.0.44', :box => 'precise32' },
  { :hostname => 'ex7web2',    :ip => '192.168.0.45', :box => 'precise32' },
  { :hostname => 'ex7static1', :ip => '192.168.0.46', :box => 'precise32' },
  { :hostname => 'ex7static2', :ip => '192.168.0.47', :box => 'precise32' },
  { :hostname => 'ex7cache',   :ip => '192.168.0.48', :box => 'precise32' },
]
 
Vagrant::Config.run do |config|
  nodes.each do |node|
    config.vm.define node[:hostname] do |node_config|
      node_config.vm.box = node[:box]
      node_config.vm.host_name = node[:hostname] + '.' + domain
      node_config.vm.network :hostonly, node[:ip]
 
      memory = node[:ram] ? node[:ram] : 256;
      node_config.vm.customize [
        'modifyvm', :id,
        '--name', node[:hostname],
        '--memory', memory.to_s
      ]
    end
  end
 
  config.vm.provision :puppet do |puppet|
    puppet.manifests_path = 'puppet/manifests'
    puppet.manifest_file = 'site.pp'
    puppet.module_path = 'puppet/modules'
  end
end

Prima di arrivare a questo livello tuttavia, è necessario cominciare dalle basi: il primo file di configurazione di Vagrant che andremo a scrivere conterrà ben poche specifiche, e si baserà esclusivamente sulla Box che abbiamo scelto per la nostra prima macchina virtuale.

# Una singola Box.
#
Vagrant.configure(“2”) do |config|
config.vm.box = “precise32”
end

Esempio per una singola Box.

Vagrant.configure("2") do |config|
config.vm.box = "precise32"
end

Inoltre il Vagrantfile deve essere soggetto a version control (tramite git ad esempio) per tenere traccia di ogni modifica e rendere il tutto facilmente riportabile in una nuova architettura

Avviamo la Box

# sudo vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Mounting shared folders...
[default] -- /vagrant

Adesso che abbiamo il nostro progetto funzionante, basterà dare

# vagrant ssh
Last login: Fri Apr 15 05:43:58 2011 from 10.0.2.2
[vagrant@localhost ~]$

per collegarci ed esserne subito operativi all’interno della nostra box.

Provisioning
Vagrant non è solo un sistema per avviare velocemente delle macchine virtuali, infatti ci permette anche di controllarle, e di controllarne le impostazioni nel tempo, insieme al software installato. Possiamo quindi gestire la configurazione automatica secondo le nostre esigenze delle varie Box che abbiamo, attraverso una struttura di provisioning abbastanza flessibile che supporta normali shell script (Bash), il buon vecchio Puppet, ma anche Chef e Ansible.

Tramite questa infrastruttura possiamo modificare il Vagrantfile per eseguire quindi qualsiasi istruzione, che sia configurata per script Puppet oppure attraverso Bash. Ad esempio, possiamo utilizzare la piccola struttura riportata di seguito, che proviene direttamente dalla documentazione di Vagrant e che mostra come sia facile scriversi uno script di configurazione da mandare poi in pasto alla propria Box.

$script = <<SCRIPT
echo I am provisioning...
date > /etc/vagrant_provisioned_at
SCRIPT
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: $script
end

Non solo VirtualBox

Una volta imparato a usare Vagrant, avremo comunque basato tutto il nostro lavoro su VirtualBox. Tuttavia, potremmo anche avere qualcosa in contrario sull’uso di VirtualBox, e voler usare altri provider che ci permettano un’amministrazione più efficace o semplicemente il riciclo di competenze che già abbiamo. Ad esempio, Vagrant supporta tramite plugin anche l’integrazione con VMWare o con Xen; questi plugin sono installabili attraverso il gestore integrato nel software, semplicemente tramite un singolo comando, esattamente come in un classico gestore di pacchetti:

# vagrant plugin install vagrant-vmware-fusion

Oppure se invece di VMWare Fusion usate la variante Workstation:

# vagrant plugin install vagrant-vmware-workstation

Una volta installato il plugin, ed ovviamente il software di providing delle macchine virtuali che vogliamo testare, ci bastera’ modificare il Vagrantfile, con istruzioni come queste nell’ esempio:

Esempio tratto da [ http://puppetlabs.com/blog/new-vmware-provider-gives-vagrant-a-boost ]

config.vm.provider :vmware_workstation do |v|
v.vmx["memsize"] = "2048"
end

Vagrant può ovviamente essere configurato per essere alla base di una complessa configurazione in ambiente cloud, o della propria infrastruttura più modesta.

Se questo primo articolo vi ha incuriositi, la documentazione ufficiale, passo passo, vi sta aspettando : VAGRANT DOC

Nel prossimo articolo vedremo come sfruttare le potenzialita’ di Vagrant + Docker.

#VagrantVirtualizzazioneeProvisioning

Trasferire grandi quantita’ di file alla max velocita’

Spostare molti files velocemente

Netcat per spostare grandi files

NETCAT

Con questo articolo iniziamo a presentare un ottimo tool che, almeno personalmente, e’ stato davvero utile in mille attivita’ sistemistiche, netcat.

Utilita’ 1
Vi è mai capitato di dover trasferire delle directory contenenti elevati quantitativi di files da un server Linux ad un altro ? In caso affermativo avrete sicuramente notato come, anche se il trasferimento avveniva in LAN, comunque la durata dell’operazione aumentava esponenzialmente con l’aumentare dei files da trasferire. Si tratta di un normale fenomeno di overhead dovuto al fatto che ogni singolo trasferimento di file avviene su un differente stream di dati, ed il numero di stream gestibili in contemporanea da un server è di solito piuttosto limitato.

Spesso si cerca di ovviare al problema creando prima un unico archivio .tar contenente i files da trasferire e quindi procedendo con un unico trasferimento. In questro caso si risolve egregiamente il problema di overhead di rete ma la cosa potrebbe diventare comunque problematica nel caso in cui ad esempio lo spazio su disco fosse limitato al punto da non poter consentire la creazione del tar temporaneo.
Se però il comando tar viene utilizzato in maniera intelligente assieme all’utility netcat, abbiamo la possibilità di effettuare comunque un traferimento super-veloce su un unico stream di dati senza la necessità di dover creare degli archivi temporanei. Ecco come possiamo procedere:
Sul server di destinazione (quello verso cui trasferiremo i nostri files), lanciamo il comando:

nc -l -p 888 | tar zxvPp   # il server di destinazione e' in ascolto sulla porta 888 pronto per decomprimere

Sul server master (quello da cui traferiamo i files), lanciamo il comando:

tar czvOPp --same-owner /<source_dir> | netcat -w 5 <ip_macchina_destinazione> 888

Queste due operazioni, effettuate in sequenza, fanno si che i files contenuti nella directory “/source/dir” del server master, vengano compressi in un tar che verrà inviato immediatamente (grazie alla pipe gestita con netcat) verso la porta 888 del server di destinazione. Quest’ultimo da parte sua è configurato per rimanere in ascolto sulla porta 888 e per redirezionare il flusso di dati ricevuto in ingresso direttamente al comando tar lanciato in modo da effettuare una decompressione nella directory “/target/dir” che avrete preventivamente creato ed in cui vi sarete spostati per ricevere il flusso di dati.

Gli usi di netcat sono davvero innumerevoli, tra cui aprire shell remote per lanciare comandi, scansioni di rete fin’anche alla clonazione di intere partizioni o addirittura di un’intera linux-box.
Tutto cio’ lo vedremo nei prossimi articoli su netcat.

#netcattoolmultiuso