6th Agosto 2007

Firestarter, personalizzazione delle regole

Come al solito le problematiche al lavoro sono le più disparate, oggi mi sono dovuto occupare del tuning di un firewall che utilizzo sul lavoro.

Nello specifico per ragioni di comodità e facilità d’uso (purtroppo non sono l’unico a utilizzarei server e devo badare anche a questo aspetto), utilizzo firestarter.

Si tratta di un firewall molto semplice da utilizzare anche ai “non addetti ai lavori“, in quanto non si tratta altro che di un semplice front end grafico per iptables, assai più ostico da utilizzare per i principianti.

Questo breve documento non si occuperà pertanto di configurare il firewall (discretamene semplice anche senza documentazione) ma semplicemente spiegherà come apportare direttamente delle modifiche tramite iptables che sono escluse dalle casistiche previste dal frontend.

Il firewall l’ho configurato in un modo molto semplice, ho messo come policy di default tutto in drop, ed ho aggiunto le eccezioni per i servizi che mi interessavano.

Pertanto la mia situazione di partenza era che qualunque pacchetto inviato da e verso la macchina veniva scartato ad eccezione di: webserver, dns e posta.

Ora il problema che mi si era posto era il seguente: avevo dei simpatici “amici” che non avevano nulla da fare e ogni tanto senza preavviso iniziavano a dossare una macchina, e l’unica soluzione possibile senza dover intervenire sulla dorsale (di cui ovviamente non ho il minimo controllo) era di fare in modo che venissero scartate le connessioni di quella specifica rete.

La soluzione è stata molto semplice, con firestarter basta editare il file

[root@localhost ~]# nano /etc/firestarter/user-pre

e a questo punto aggiungere i comandi di iptables che ci interessavano, ad esempio

iptables -A INPUT -d 195.54.0.0/20 -j DROP
iptables -A INPUT -s 195.54.0.0/20 -j DROP
iptables -A OUTPUT -d 195.54.0.0/20 -j DROP
iptables -A OUTPUT -s 195.54.0.0/20 -j DROP
iptables -A FORWARD -d 195.54.0.0/20 -j DROP
iptables -A FORWARD -s 195.54.0.0/20 -j DROP

In tal modo vengono droppate tutte le connessioni che entrano, escono o solamente transitano su questa classe di ip.

Una volta aggiunte le righe che ci interessano basta dare un semplice

[root@localhost ~]# /etc/init.d/firestarter restart

ed ecco fatto, il nostro piccolo firewall personalizzato ;)

Ovviamente con questo metodo si possono creare tutte le policy che ci interessano tramite i comandi di iptables.

posted in fedora, firestarter, hosting, iptables, linux, networking, reti, server, sicurezza | 0 Comments

19th Luglio 2007

SSH: Autenticazione senza password

In questo breve articolo descriverò brevemente come configurare l’accesso ad una shell senza dover digitare ogni volta la password, tramite scambio di chiavi RSA sfruttando il protocollo OpenSSH.

Mi è tornata utile tale funzione per gestire un backup incrementale remoto tramite rsync (magari un giorno scrivo due righe anche su questo così magari qualcuno mi da qualche consiglio), appoggiandomi sul protocollo criptato fornito dal servizio OpenSSH.

Ipotizziamo di operare in una LAN nella sottorete 192.168.0.0/24 e che la macchina da cui vogliamo effettuare l’accesso senza password sia la 192.168.0.2, mentra quella su cui vogliamo loggarci senza password sia la 192.168.0.3.

Dalla macchina dalla quale ci si vuole connettere senza digitare la password (192.168.0.2), digitiamo il seguente comando per generare la chiave RSA

[root@192.168.0.2 ]# ssh-keygen -b 2048 -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:
f7:ec:0d:c8:f4:df:7a:6c:2b:1d:a1:59:ee:c7:ae:a0
root@192.168.0.2

Ora copiamo la chiave che abbiamo generato nella macchina di destinazione

[root@192.168.0.2 ]# scp /root/.ssh/id_rsa.pub root@192.168.0.3:.

Logghiamoci ora nella macchina alla quale ci si vuole connettere senza utilizzare la password e digitiamo il seguente comando

[root@192.168.0.3 ]#cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

Finito, adesso dalla macchina 192.168.0.2 potremo loggarci sulla 192.168.0.3 senza digitare alcunapassword, ma non viceversa.

Questa tecnica può essere usata per gestire le connessioni tramite rsync appoggiandosi al protocollo OpenSSH.

[root@192.168.0.2 ~]# ssh root@192.168.0.3
Last login: Thu Jul 19 15:20:29 2007 from 192.168.0.2
[root@192.168.0.3 ~]#

posted in IPv4, OpenSSH, RSA, SSH, Uncategorized, linux, networking, reti, rsync, server, servizi, sicurezza | 0 Comments

26th Giugno 2007

Slackware 12

Ebbene siamo giunti ormai alla slackware 12.

Siamo giunti alla versione 12, da giorni circolavano in reti articoli riguardanti la versione in versione Relase Candidate ma ora se provate ad aggiornare i vostri server/desktop alla versione current vi ritroverete con l’ultima versione ;)

Fra le novità più importanti:

- kernel 2.6

- pacchettizzazione di X.Org 7.2 con supporto a XGL e Compiz (viva il 3d!!)

- GCC 4.1.2

e finalmente…

- apache 2  e php 5

vi linko l’output che ho già sul mio server (aggiornato a current) all’esecuzione del seguente comando

XXX@insidia:~$ cat /etc/slackware-version
Slackware 12.0.0
XXX@insidia:~$

Ci voleva questo aggiornamento finalmente ;)

posted in linux, networking, reti, sicurezza, slackware | 4 Comments

20th Giugno 2007

Configurazione snmp

Questa breve guida spiega (o almeno ci prova) come configurare il servizio di snmp su un server linux, per il monitoraggio delle risorse. Provvede poi a integrare i dati raccolti tramite grafici generati con Mrtg.

Questa guida è stata sviluppata su sistemi Fedora Core 5, ma è facilmente adattabile (se non addirittura direttamente applicabile) anche ad altri sistemi (Debian, Slackware con piccole modifiche inereti al sistema di pacchettizzazione).

1. Installazione e configurazione Snmpd

Per prima cosa provvediamo a installare il servizio snmpd tramite i pacchetti disponibili della nostra distribuzione:
[root@localhost ~] yum install net-snmp-utils net-snmp

per Debian i pacchetti si installano con il seguente comando

[root@localhost ~] apt-get install snmpd snmp

A questo punto controllate se il demone snmpd è stato lanciato
[root@localhost ~] ps -aux | grep snmpd

dovreste visualizzare qualcosa tipo

root 5512 0.0 2.3 5872 3012 pts/0 S 22:04 0:00 /usr/sbin/snmpd

Se il demone non è in esecuzione provare a lanciarlo a mano con il seguente comando

[root@localhost ~] /etc/init.d/snmpd restart

e ricontrollate il suo stato.

Per aggiungere lo script all’avvio della macchina basta eseguire
[root@localhost ~] chkconfig –level 345 snmpd on

Ora il demone snmpd è correttamente in esecuzione, proviamo a controllarne il corretto funzionamento tramite una semplice query sulle interfacce di rete:

[root@ns9 ~]# snmpwalk -v 1 -c public localhost IP-MIB::ipAdEntIfIndexIP-MIB::ipAdEntIfIndex.81.208.101.XXX = INTEGER: 2IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.192.168.0.XXX = INTEGER: 3
[root@ns9 ~]#

Se tutto funziona correttamente, allora il demone è correttamente configurato, se doveste avere qualche problema, è meglio controllare il file di configurazione /etc/snmp/snmpd.conf

All’interno di questo file modifichiamo questa linea
com2sec notConfigUser default public

e sostituiamola con quella di seguito adattando ovviamente le subnet come preferite.

com2sec local localhost public
com2sec mynetwork 192.168.0.0/24 public

Scendendo ancora nel file cercate la stringa

group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser

e sostituitela con

group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 mynetwork
group MyROGroup v2c mynetwork
group MyROGroup usm mynetwork

Cerchiamo ora la stringa seguente

view systemview included system

e sostituiamola con

view all included .1 80

Abbiamo quasi finito… cercate la stringa

access notConfigGroup “” any noauth exact systemview none none

e sostituitela con

access MyROGroup “” any noauth exact all none none
access MyRWGroup “” any noauth exact all all none

Ed ora l’ultima stringa da modificare
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root root@localhost (configure /etc/snmp/snmp.local.conf)

queste stringhe sono delle brevi stringhe descrittive per l’identificazione del vostro sistema, fondamentalmente potete scriverci cosa volete io ho messo questo

syslocation Linux (FEDORA_FC5), localhost
syscontact matteo@temporini.net

Bene ora se tutto è andato per il verso giusto, riavviate il demone snmp (/etc/init.d/snmpd restart) e provate a fare nuovamente la query (snmpwalk -v 1 -c public localhost IP-MIB::ipAdEntIfIndex) che a questo punto non dovrebbe darvi problemi.

2. Installazione e configurazione MRTG

Installiamo mrtg con il comando

[root@localhost ~]# yum install mrtg

analogamente per debian

[root@localhost ~]# apt-get install mrtg

A questo punto presuppongo che abbiate un webserver correttamente funzionante (io uso Apache ma non vi sono problemi a utilizzarne altri come ISS o Lighthttpd).

Presupponiamo che la root di apache stia in /var/www/html/ andiamo a creare la cartella che conterrà i nostri dati

[root@localhost ~]# mkdir -p /var/www/html/mymrtg/

ora eseguiamo il seguente comando per generare automaticamente il file di configurazione di mrtg

[root@localhost ~]# cfgmaker –global ‘WorkDir: /var/www/html/mymrtg’ –output /etc/mrtg/mymrtg.cfg public@localhost

e creiamo l’index.html del nostro sistema di monitoraggio

[root@localhost ~]# indexmaker –output=/var/www/html/mymrtg/index.html /etc/mrtg/mymrtg.cfg

(N.B.= — sono due trattini (-) vicini ma sembrano una linea unica se fate il cut & paste fate attenzione)

Ora è tutto pronto non ci resta che eseguie mrtg indicandogli il file di configurazione da utilizzare

[root@localhost ~]# env LANG=C /usr/bin/mrtg /etc/mrtg/mymrtg.cfg –logging /var/log/mrtg.log

In ambiente fedora è necessaria la stringa env LANG=C, su altri sistemi probabilmente questa variabile di ambiente è già settata in questo modo per cui potrebbe bastare solamente

[root@localhost ~]# /usr/bin/mrtg /etc/mrtg/mymrtg.cfg –logging /var/log/mrtg.log

A questo punto non rimane che vedere il risultato di tutto il nostro lavoro andando al seguente indirizzo http://www.your.com/mymrtg/ o http://localhost/mymrtg/

L’ultimo step da seguire consiste nel mettere in crontab l’esecuzione dello script di aggiornamento di mrtg, il modo più semplice per farlo è con il comando

[root@localhost ~]# crontab -e

Vi si aprirà una finestra e qui inseriteci

*/5 * * * * env LANG=C /usr/bin/mrtg /etc/mrtg/mymrtg.cfg –logging /var/log/mrtg.log

lo script verrà lanciato ogni 5 minuti, in tal modo i campionamenti verranno aggiornati sui nostri grafici in ogni 5 minuti. Qualora voleste avere stime più precise potete diminuire il tempo di campionamento ad 1 minuto ad esempio ottenendo così risultati più accurati.

3. Ulteriori risorse da monitorare

Quanto sino ad ora visto, permette di creare un piccolo sistema di monitoraggio per la banda utilizzata dai vari dispositivi di rete, in un tempo realtivamente ristretto e con una buona accuratezza (questo dipende ovviamente dall’intervallo di campionamento che si sceglie).

La domanda a questo punto che uno potrebbe porsi è “ma posso monitorare solo la banda o anche altre risorse?”.

Ovviamente la risposta è si, è possibile monitorare altri risorse di sistema, cosa che si è resa molto utile per identificare anomalie nei sitemi e risolverle (es.: utilizzi intensivi della cpu da parte di particolari processi in determinate ore della giornata).

Riporterò ora delle piccole porzioni di codice da aggiungere al file /etc/mrtg/myrtgc.cfg per aggiungere queste funzionalità.

3.1 Monitoraggio dell’utilizzo di CPU

#
# CPU Monitoring
# (Scaled so that the sum of all three values doesn’t exceed 100)
#

Target[server.cpu]:ssCpuRawUser.0&ssCpuRawUser.0:public@localhost + ssCpuRawSystem.0&ssCpuRawSystem.0:public@localhost + ssCpuRawNice.0&ssCpuRawNice.0:public@localhost
Title[server.cpu]: Server CPU Load
PageTop[server.cpu]: <H1>CPU Load - System, User and Nice Processes</H1>
MaxBytes[server.cpu]: 100
ShortLegend[server.cpu]: %
YLegend[server.cpu]: CPU Utilization
Legend1[server.cpu]: Current CPU percentage load
LegendI[server.cpu]: Used
LegendO[server.cpu]:
Options[server.cpu]: growright,nopercent
Unscaled[server.cpu]: ymwd

3.2 Monitoraggio dell’utilizzo della memoria totale rispetto a quella disponibile

#
# Memory Monitoring (Total Versus Available Memory)
#

Target[server.memory]: memAvailReal.0&memTotalReal.0:public@localhost
Title[server.memory]: Free Memory
PageTop[server.memory]: <H1>Free Memory</H1>
MaxBytes[server.memory]: 100000000000
ShortLegend[server.memory]: B
YLegend[server.memory]: Bytes
LegendI[server.memory]: Free
LegendO[server.memory]: Total
Legend1[server.memory]: Free memory, not including swap, in bytes
Legend2[server.memory]: Total memory
Options[server.memory]: gauge,growright,nopercent
kMG[server.memory]: k,M,G,T,P,X

3.3 Percentuale di utilizzo della Memoria

#
# Memory Monitoring (Percentage usage)
#
Title[server.mempercent]: Percentage Free Memory
PageTop[server.mempercent]: <H1>Percentage Free Memory</H1>
Target[server.mempercent]: ( memAvailReal.0&memAvailReal.0:public@localhost ) * 100 / ( memTotalReal.0&memTotalReal.0:public@localhost )
options[server.mempercent]: growright,gauge,transparent,nopercent
Unscaled[server.mempercent]: ymwd
MaxBytes[server.mempercent]: 100
YLegend[server.mempercent]: Memory %
ShortLegend[server.mempercent]: Percent
LegendI[server.mempercent]: Free
LegendO[server.mempercent]: Free
Legend1[server.mempercent]: Percentage Free Memory
Legend2[server.mempercent]: Percentage Free Memory

3.4. Nuove connessioni TCP

#
# New TCP Connection Monitoring (per minute)
#

Target[server.newconns]: tcpPassiveOpens.0&tcpActiveOpens.0:public@localhost
Title[server.newconns]: Newly Created TCP Connections
PageTop[server.newconns]: <H1>New TCP Connections</H1>
MaxBytes[server.newconns]: 10000000000
ShortLegend[server.newconns]: c/s
YLegend[server.newconns]: Conns / Min
LegendI[server.newconns]: In
LegendO[server.newconns]: Out
Legend1[server.newconns]: New inbound connections
Legend2[server.newconns]: New outbound connections
Options[server.newconns]: growright,nopercent,perminute

3.5 Connessioni TCP stabilite

#
# Established TCP Connections
#

Target[server.estabcons]: tcpCurrEstab.0&tcpCurrEstab.0:public@localhost
Title[server.estabcons]: Currently Established TCP Connections
PageTop[server.estabcons]: <H1>Established TCP Connections</H1>
MaxBytes[server.estabcons]: 10000000000
ShortLegend[server.estabcons]:
YLegend[server.estabcons]: Connections
LegendI[server.estabcons]: In
LegendO[server.estabcons]:
Legend1[server.estabcons]: Established connections
Legend2[server.estabcons]:
Options[server.estabcons]: growright,nopercent,gauge

3.6 Utilizzo del disco

L’utilizzo di questo parametro di monitoraggio richiede l’inserimento nel file /etc/snmp/snmpd.conf del seguente codice

disk /

con conseguente riavvio del demone snmpd
#
# Disk Usage Monitoring
#

Target[server.disk]: dskPercent.1&dskPercent.1:public@localhost
Title[server.disk]: Disk Partition Usage
PageTop[server.disk]: <H1>Spazio su disco utilizzato</H1>
MaxBytes[server.disk]: 100
ShortLegend[server.disk]: %
YLegend[server.disk]: Utilization
LegendI[server.disk]: Partizione /
Options[server.disk]: gauge,growright,nopercent
Unscaled[server.disk]: ymwd

3.7 Carichi della CPU

#
# Load Average
#

Target[server.loadavg]: laLoadInt.2&laLoadInt.3:public@localhost
MaxBytes[server.loadavg]: 5000
Title[server.loadavg]: Load Average * 100
PageTop[server.loadavg]:<h1>Load Average * 100</h1>
YLegend[server.loadavg]: Load Average
ShortLegend[server.loadavg]:
Legend1[server.loadavg]: Load average 5 min
Legend2[server.loadavg]: Load average 15 min
LegendI[server.loadavg]: 5min load avg
LegendO[server.loadavg]: 15min load avg
Options[server.loadavg]: nopercent,growright,noinfo,gauge

4. Monitoraggio del traffico email di Postfix

Un discorso a parte va fatto per quanto riguarda il monitoraggio sull’invio e la ricezione di email tramite postfix.

Grazie alla documentazione trovata in rete mi è stato possibile implmentare un sistema che permette di contare il numero di email inviate e ricevute dal server di posa, nell’arco di tempo dell’intervallo di campionamento (i famosi 5 minuti). Questo viene realizzato tramite il richiamo, da parte di mrtg, di alcuni script esterni che fanno quanto richiesto, una volta raccolti i dati vengono processati da mrtg per la generazione dei grafici.

Questi script che bisogna utilizzaresono scritti in perl per cui dovete installare alcuni moduli in perl tramite cpan, prima di fare questo installate ncftp che viene utilizzato da perl per scaricare i file, questo semplicemente usando il comando

[root@localhost ~]# yum install ncftp

analogamente per debian

[root@localhost ~]# apt-get install ncftp

a questo punto lanciate il comando cpan e dopo aver risposto a un po’ di domande, che vi chiederà lui per la corretta configurazione di della shell del perl (solitamente basta dare invio a tutte prendendo i parametri di default), eseguite il comando

[root@localhost ~]# cpan
Terminal does not support AddHistory.

cpan shell — CPAN exploration and modules installation (v1.7602)
ReadLine support available (try ‘install Bundle::CPAN’)

cpan> install File::Tail

una volta finita l’installazione di questo moduletto possiamo caricare i file in perl, son tre semplici file che dovete mettere in /usr/local/bin con i permessi di esecuzione

mrtg-mailstats.pl
mailstats.pl
update-mailstats.pl

A questo punto non ci rimane che lanciare il processo update-mailstats.pl (script che si occupa di tenere costantemente monitorato il traffico del mailserver) con il comando

[root@localhost ~]# /usr/local/bin/update-mailstats.pl &

con il comando mailstats.pl è possibile vedere le statistiche in tempo reale sul numero totale di messaggi inviati e ricevuti come nel seguente esempio

[root@localhost ~]# mailstats.pl
RECEIVED:smtp 98057
SENT:local 235
SENT:smtp 54423
SENT:virtual 42947
[root@localhost ~]#

Aggiungiamo nel file /etc/mrtg/mymrtg.cfg il seguente codice

#—————————————————————#
# MRTG mail cfg: Postfix mailstats plotting with MRTG #
#—————————————————————#
Target[postfix]: `/usr/local/bin/mrtg-mailstats.pl`
Options[postfix]: gauge, growright
Title[postfix]: Postfix Statistics
PageTop[postfix]: <H1>Postfix Statistics</H1>
MaxBytes[postfix]: 1000000
WithPeak[postfix]: dwmy
YLegend[postfix]: No. of messages
ShortLegend[postfix]: messages
LegendI[postfix]: Incoming:
LegendO[postfix]: Outgoing:
#—————————————————————#

rigeneriamo l’index di mrtg con il comando

[root@localhost ~]# indexmaker –output=/var/www/html/mymrtg/index.html /etc/mrtg/mymrtg.cfg

e abbiamo finito ;)

Ora dovreste vedere, man mano che i valori vengono campionati, i grafici anche sulle mail in ingresso e in uscita di postfix. Una tecnica simile penso sia molto semplice da utilizzare anche per altri programmi e risorse.

Se avete suggerimenti, scritiche miglioramenti, script o teniche per il monitoraggio di altre risorse di sistema, contattatemi.

posted in CPU, Debian, Memoria, Perl, Postfix, RAM, Snmp, Swap, TCP, demoni, email, fedora, file system, linux, mail, monitor risorse, mrtg, ncftp, networking, server, servizi | 1 Comment

19th Giugno 2007

Fedora… ma quante versioni!

Purtroppo per esigenze legate al mio lavoro sono stato obbligato a usare Fedora core 5 (l’alternativa era Red Hat ma per questioni economiche è stata scartata).

Da quanto ne so Fedora nasce come una branca di Red Hat in versione free e fin qua nessun problema, solo che mi chiedo come può rilasciare una versione nuova nel giro di pochissimi mesi?

Nel mio caso ho iniziato ad utilizzare Fedora dal core 5, pochi mesi dopo è uscita la versione 6 (un flop incredibile è durata un mese scarso se non ricordo male) e adesso siamo alla versione 7… e per novembre sarà pronta la 8!!!

La domanda che mi pongo è molto semplice, ma tutte queste versioni (ricordo che Fedora core 3, 4, 5 sono ancora mantenute) per quanto tempo dureranno? Contando che tutte le possibilità di upgrade da una versione all’altra sono altamente sconsigliate uno cosa deve fare (da una versione all’altra cambiano i nomi dei pacchetti e non hanno previsto alcun tipo di risoluzione a questo problema)? Migrare i dati su nuovi server ogni 2-3 mesi?

Conosco parecchie aziende che la utilizzano per fini commerciali, ma sto sinceramente iniziando a pensare che non sia il massimo dell’affidabilità per quanto concerne un utilizzo commerciale.

Per quanto riguarda il suo funzionamento sinceramente non posso lamentarmi, in un anno di utilizzo non ho mai avuto mezzo problema negli aggiornamenti, a parte qualche errore di permessi sistemato in pochi minuti, però il giorno che diranno “da oggi fedora core 5 non la manteniamo più” oppure “entro il prossimo anno saremo a fedora 12″ cosa farà tutta la gente che utilizza questa ditribuzione?

A detta degli sviluppatori Fedora 7 (ndr.: questa si chiama Fedora 7 e non Fedora CORE 7) è stata definita come “Fedora 7 è stata fatta allo scopo di migliorare il modo in cui le future versioni di Fedora saranno fatte“, e questo mi fa pensare che si tratti solo di una specie di relase di test o di transito del sistema, su cui faranno degli esperimenti per future versioni.

posted in Red Hat, fedora, linux, networking, reti, sicurezza | 6 Comments

10th Giugno 2007

Tesi: Analisi di una rete basata su protocollo IPv6

A distanza di un anno dalla laurea, pubblico su questo sito la mia tesi dal titolo”Analisi di una rete basta su protocollo IPv6“.

posted in Formazione, IPv4, IPv6, linux, networking, reti | 0 Comments

  • Pubblicità

  • Statistiche

  • Adsense