Mysql Caching Status Report

Le funzionalità del caching di Mysql sono state trattate tempo fa, questo è solo un semplice script per ottenere informazioni sullo stato del caching senza dover accedere ad una console mysql. I risultati verranno scritti sul file query_cache.html in formato HTML, nel file bash_history comparirà ovviamente la password di root di mysql.

echo "SHOW STATUS LIKE 'qcache_%'" |  \
mysql -H -u root --password=lamiapwd > \
/var/www/query_cache.html
Posted in Bash, Mysql at October 11th, 2006. No Comments.

Top rbl email blacklist graph

Qmail section:

Per visualizzare un elenco del tipo

763 list.dsbl.org:
97 bl.spamcop.net:
26 relays.ordb.org:

utilizzare il comando

grep rblsmtpd /var/log/mail.log |  awk '{ print $11}'| sort |uniq -c | sort -r

Postfix section :

Il comando è molto simile al precedente, per rendermi la vita più difficile ho modificato la struttura dei campi del maillog, precedentemente nel campo n° 19 veniva scritta l’url della lista nera, dopo le mie modifiche al n° 20, quindi li devo analizzare entrambi, fino al prossimo logrotate.

grep "blocked using" /var/log/maillog |  awk '{if ($20 ~ /^[a-z./]+..*..*;$/) print $20; if ($19 ~ /^[a-z./]+..*..*;$/) print $19;  }' | sort |uniq -c | sort -r

Il risultato è

9396 cbl.abuseat.org;
3137 dul.dnsbl.sorbs.net;
1620 list.dsbl.org;
1368 dnsbl.njabl.org;
825 korea.services.net;
485 combined.njabl.org;
27 sbl.spamhaus.org;
13 dnsbl.antispam.or.id;
5 relays.ordb.org;
1 spamsources.fabel.dk;

Come potete vedere questo sito è un museo della grafica, dallo sfondo ai menù per arrivare alle decine di animazioni Flash. Per rendere ancora più artistico il sito ho pensato di provare PHP4: JpGraph

Necessita delle GD e di una semplice modifica per funzionare sotto Debian.

$vi /path/jpgraph/jpg-config.inc

DEFINE("TTF_DIR","/usr/share/fonts/truetype/msttcorefonts/");

Questo tool serve a creare grafici tramite l’ausilio di classi e estensioni delle stesse.

Un ottimo tool per monitorare il funzionamento delle RBL potrebbe essere:

Salvare i risultati del comando grep+awk in un database quotidianamente.
Generare un grafico giornaliero , settimanale e mensile con tempi di aggiornamento proporzionali e salvarli sul filesystem, creare un form web per ottenere via DB i valori di un determinato range temporale.
Ma come esempio basta soffermarsi sui valori ottenuti precedentemente. Per comodità visiva raccolgo il seguente insieme di elementi in “Altro”

sbl.spamhaus.org; dnsbl.antispam.or.id;relays.ordb.org;spamsources.fabel.dk;
per un totale di 46 elementi

Genero il grafico a “torta” con l’opzine 3D (guarda il sorgente php)
http://enrico.tenivella.it/rblgraph.php

Posted in Bash, Php, Qmail-Postfix at September 29th, 2006. No Comments.

APACHE Script monitor hits/day

#  Script per conteggiare le richieste di un singolo ip all’interno del access log
#+ e monitorare attivita’ di richieste sospette.

#check utente ROOT
ROOT_UID=0

#codice errore se nn root
E_NONROOT=67

if [ "$UID" -ne "$ROOT_UID" ]
then
echo “Devi essere root….”
exit $E_NONROOT
fi

if [ ! "$(echo $1 | grep '[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}’)” ]
then
echo “Uso: `basename $0` indirizzo_IP numero_giorni”
exit 1
fi

IP=$1

echo “—————————–”
if [ -n "$2" ]
then
for i in $(seq 0 $2); do
DATA_PER_ACCESSLOG=$(date –date=”$i day ago” ‘+%d/%b’)
TOT=`grep -c $IP.*$DATA_PER_ACCESSLOG /var/www/htdocs/web/logs/web-access.log`
echo $DATA_PER_ACCESSLOG “  ” $IP “  ” $TOT
# echo $i
done
else
#date –date=’2 day ago’ ‘+%s’
DATA_PER_ACCESSLOG=`date +’%d/%b’`
TOT=`grep -c $IP.*$DATA_PER_ACCESSLOG /var/www/htdocs/web/logs/web-access.log`
echo $DATA_PER_ACCESSLOG “  ” $IP “  ” $TOT
fi
echo “—————————–”

exit 0

Posted in Apache, Bash, Linux at August 23rd, 2006. No Comments.

Ram script grep awk

#ram
echo “RAM:” `free -m | grep Mem:  | awk ‘{print $4}’`

#swap
echo “SWAP:” `free -m | grep Swap:  | awk ‘{print $3}’`

Posted in Bash at August 23rd, 2006. No Comments.

script Load AVG carico ultimo minuto

awk '{print "Load:"$1}' /proc/loadavg

Posted in Bash at August 23rd, 2006. No Comments.

APACHE Script monitor hits per ip in un arco di N minuti

#!/bin/bash
# Script per monitorare il numero di hits per ip in un arco di N minuti, solo utente root

#default minuti
DEFAULTMIN=1440

#check utente ROOT
ROOT_UID=0

#codice errore se nn root
E_NONROOT=67

if [ "$UID" -ne "$ROOT_UID" ]
then
echo “Devi essere root….”
exit $E_NONROOT
fi

if [ -n "$1" ]
then
NUMERO=$1
else
NUMERO=$DEFAULTMIN
echo “Uso: `basename $0` numero_minuti [DEFAULT 1440]”
fi

#Linea per far puntare la variabile ACCESSLOGTMPFILE al file access.log originale
ACCESSLOGTMPFILE=’/var/www/htdocs/web/logs/web-access.log’

LIMITE=$NUMERO
for ((i=1; i <= LIMITE; i++))
do
CONFRONTO=`date –date=”$i minutes ago” +”%d/%b/%Y:%R”`
printf $CONFRONTO
printf “\t”
grep $CONFRONTO $ACCESSLOGTMPFILE |wc -l
done

exit 0

Posted in Apache, Bash, Linux at August 23rd, 2006. No Comments.

Guida VI avanzata

Il VI è l’editor *nix per eccellenza, comprende un set di comandi sterminato.

http://www.lagmonster.org/docs/vi2.html

Nella pagina di lagmonster c’è una guida completa e di facile lettura per avere una facile panoramica delle sue potenzialità.

I comandi che spesso si usano all’interno dell’editor li riassumo:

ZZ or :wq Saves and exits VI
:q! Quits VI and without saving
i Insert before cursor
o Open a new line after current line
r Replace one character
^ Moves to the first non-blank character in the current line
$ Move to the end of the line
1G Move to the first line of the file
G Move to the last line of the file
:n Move to nth line of the file
x Delete character to the right of cursor
dd or :d Delete current line
yy Yank the current line
p Put after the position or after the line
/string Search forward for string
?string Search back for string
u Undo last change (Note: u in combination with . can allow multiple levels of undo in some versions)
Posted in Bash, Linux at August 1st, 2006. No Comments.

Lista dei domini gestiti da BIND

Script per elencare i domini del file named.conf.local in BIND

awk '{
if ($0 ~ /^zone/)
{  split($0,A,"\""); print A[2] } }'
/etc/bind/named.conf.local |sort

Supponendo una configurazione simile

zone "texilee.it" {
type master;
file "/foo/texilee.it";
};
Posted in Bash, Linux, Tips at July 25th, 2006. No Comments.

Advanced Bash Apache IDS part1

Esistono innumerevoli sistemi IDS, molti a pagamento, molti con funzionalità totalmente inutili, alcuni troppo “permissivi” e proporzionalmente altri troppo “aggressivi”.
In questo articolo, primo di una lunga serie tempo permettendo, cerco di mostrarvi le tecniche per costruirsi le basi per mettere in piedi un IDS casalingo utilizzando gli strumenti che bash ci offre.

Potrebbe essere un ottimo esercizio mirato ad affinare le tecniche di scripting bash, vi ricordo che potet raggiungere lo stesso obiettivo con altri linguaggi stile php / perl ma quasi sicuramente otterrete a parità di risultati un utilizzo più massiccii in termini di cpu.

Iniziamo con il postprocessing dell’analisi del file access.log di apache con l’opzione “combined”

Lo scopo è avere a portata di mano una utility che ci permetta al volo di capire quali determinati IP hanno effettuato richieste verso il nostro sito.

awk '{print $1}' /var/log/apache/access.log

Possiamo contare il numero di hits totale

awk '{print $1}' /var/log/apache/access.log|wc -l

e passare a qualcosa di più utile: ordinamento e conteggio

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort

Sono bastati un paio di comandi per fare qualcosa che via php/perl (senza usare CPAN!) vi sarebbe costato qualche ciclo… ora togliamo anche le “” virgolette che contornano l’indirizzo IP

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort|sed s/\"//g

Se volessimo sapere quante sono in tutto le richieste e ip unici aggiungiamo un awk

awk '{print $1}' /var/log/apache/access.log|
sort|uniq -c|sort|sed s/\"//g|
awk '{print $0;tot+=1;sum+=$1}
END {print "HITS: "sum "|IP: " tot}'

Lo script è “corto” quanto basta per essere ancora scritto a video e richiamato via history e relativo !ID_CMD. Ovviamente ha le sue limitazioni in quanto la funzionalità è relativa ai settaggi del vostro logrotate. Nel prossimo articolo inserirò il metodo per potere parsare solo gli ultimi X minuti del file access.log e rendere lo script più performante nella sintassi

./hits ARG1

Posted in Apache, Bash, Linux at July 21st, 2006. No Comments.