IPTABLES Notes

Ovvero appunti di IPtables.

Per inserire una acl in una determinata riga :


root@ns:~# iptables -L --line-number
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     all  --  10.150.2.0/24        anywhere
4    ACCEPT     all  --  anywhere             anywhere             source IP range 10.203.12.207-10.203.12.210

Chain FORWARD (policy DROP)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Che permette di visualizzare tutti i dettagli ed i numeri riga
e quindi andiamo a metterne una prima della riga 3


iptables -I INPUT 3 -i eth0 -p udp -m udp --dport 53 -j ACCEPT

ed avremo


root@ns:~# iptables -L --line-number
Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
4    ACCEPT     all  --  10.150.2.0/24        anywhere
5    ACCEPT     all  --  anywhere             anywhere             source IP range 10.203.12.207-10.203.12.210

Chain FORWARD (policy DROP)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Cloud che ?? che vuoi tu ?

Che pallllleeeee, ogni volta che comincio a sentire termini alla sfanculo la mia gastrite bussa violentemente al mio esofago e m’incazzo ancora di piu’ .
Tempo fa mi ricordo che andava di moda il il “Web 2.0″ che non vuol dire un cazzo, che e’ un termine inventato da qualche tecnoprofeta del cazzo per dire nientaltro che il mondo va avanti, ovvero che tendiamo ad evolverci .
Ora e’ tempo di “CLOUD” ma che cavolo e’ il cloud ??
Cioe’ una societa’ mette i propri servizi in una “nuvola” ed aspetta che qualcuno ne usufruisca ? Cioe’ una societa’ butta nel cesso i suoi Server e si rivolge a qualcun’altro che ci ha la nuvola pensante ? Oppure qualcuno decide che detto servizio e’ meglio metterlo in outsurcing da quelli che gli offrono il portatile piu’ performante ? Oppure vuol dire che la produttivita’ aziendale deve essere reperibile ovunque nel cielo di Internet ?
Cioe’ qualcuno riesce a definire la tipologia strutturale del “CLOUD” oppure c’e’ un freco di casino e qualcuno ha pensato di chiamarlo “CLOUD” ?
Oramai quasi tutti i fornitori software ti dicono che ti mettono a disposizione il CLOUD (“noi stiamo avanti”). Forse non e’ che sto cavolo di CLOUD e’ sempre esistito e prima si chiamava “risorse in rete” opure “interfaccia WEB” ?
Io che ho un server FTP dal 1999 raggiungibile da dovunque nel mondo con un client presente in tutti i sistemi operativi ho il “CLOUD” da 14 anni ?
Spiegatemelo Voi che io proprio non capisco, non capisco se creando un sistema di “virtualizzazione” centralizzato raggiungibile da tutti i nodi di una rete ho fatto un “CLOUD” oppure se ho creato un sistema al passo coi tempi .
Non capisco se, dicendo ad un cliente che gli conviene far girare l’applicazione XY su di un Server hostato da un ISP, ho fatto un “CLOUD” oppure se gli ho fatto risparmiare dei soldi nell’acquisto in banda Internet . Ste cose le faccio da diversi anni, da prima che venisse fuori sta parola, devo pensare che ho inventato il “CLOUD” ?
No, perche’ se e’ cosi’ qualcuno mi deve qualcosa…..

Ritrovare apparati di rete dispersi

Nel senso che su reti anche di modeste dimensioni puo’ capitare (e capita), che non si riesca a ritrovare l’IP di una determinata macchina a cui dobbiamo aggiornargli il firmware o cambiargli configurazione o qualsiasi altra cosa. Le bestemmie in afrocubano antico si sprecano visto anche che il Server DHCP non e’ di nostra gestione e magari la subnet su cui stiamo lavorando e’ una bella /21 quasi tutta occupata…
Per risparmiare qualche caramella di maloox io uso il Sacro “nmap” e grep . Affinche’ il giochino funzioni dobbiamo avere il MAC dell’apparato disperso, cosa che non dovrebbe essere difficile visto che e’ stampigliato sull’etichetta, e digitare :

sudo nmap -sP 192.168.1.0/24 | grep -B1 C0:84

Dove C0:84 sono gli ultimi due ottetti del MAC.

Configurare tunnel GRE tra IOS e Router serie SRP con IP dinamico

E’ successo che una azienda con numerose sedi ha deciso di traslocarne una e mi hanno avvisato della cosa soltanto una settimana prima. Facendo presente che anche se avevano gia’ fatto richiesta alla telecom per una fiammante linea ADSL, non ci avrebbero fatto nulla visto che le sedi sono collegate in MPLS con altro Provider, li informavo che bisognava fare richiesta per una nuova linea a carico del Provider succitato.
Nella questione e’ passato quasi inosservato il fatto che con molta probabilita’ gli omini telecom non sarebbero venuti in tempo a stendere il nuovo e funzionale cavetto per la data del trasloco e quindi vai di “networking creativo” .
Ovviamente era stata data prontamente disdetta per la linea ADSL quindi nessuna linea di appoggio seppur temporanea. Pensa che ti ripensa ho spolverato un router Cisco Small Business SRP con la possibilita’ di collegarsi tramite chiavetta USB HDSPA e, fiducioso, mi sono messo a configurare una VPN IPSEC L2L tra questo router ed il loro centro stella.
No, troppo facile perche’ il centro stella s’incazza visto che ha gia’ su Server VPN client, crypto map e quant’altro e non gli piace un’ altro tunnel IPSEC.
Ho subito pensato che vista la temporaneita’ della questione si poteva andare di semplice tunnel GRE…solo che il tunnel GRE vuole tutti IP fissi, cosa che una chiavetta HDSPA non prevede…come faccio ?
Semplice : m’invento uno script TCL che risolve ogni tot. un dominio dinamico di dyndns configurato sul router SRP.
Diciamo che molto aiuta l’efficenza di dyndns che aggiorna i record DNS in maniera pressoche’ immediata…mi sono sempre stupito di questa velocita’ , tanto di cappello al loro sistema.

Router Centro stella :

ip name-server 8.8.8.8
!
interface Tunnel1
 ip unnumbered GigabitEthernet0/0
 tunnel source 11.11.11.11
 tunnel destination nuovasede.dyndns.org
!
interface GigabitEthernet0/0
 description WAN
 ip address 11.11.11.11 255.255.255.248
!
interface GigabitEthernet0/1
 description LAN
 ip address 192.168.0.1 255.255.255.0
!
ip route 192.168.15.0 255.255.255.0 Tunnel1
!
kron occurrence tunnel_gre in 1 recurring
 policy-list tun_up
!
kron policy-list tun_up
 cli tclsh tun_gre.tcl

Ovviamente la parte sotto il tunnel1 “tunnel destination nuovasede.dyndns.org” e’ la parte che c’interessa in quanto anche se ci mettiamo un hostname, il router semplicemete fara’ una query DNS ( okkio ad aver configurato “ip name-server ……” altrimenti non funziona na cippa ) e sostituira’ il nome host con l’IP risultante dalla query stessa. E’ ovvio che se la chiavetta HDSPA perde la connessione e si riconette e’ praticamente sicuro che cambiera’ IP. Per far funzionare il tutto possiamo collegarci al centro stella ogni volta che ci chiamano dicendoci “Non funziona nienteeeee” e digitare :

interface Tunnel1
tunnel destination nuovasede.dyndns.org

che e’ un po’ scomodo oppure, come dicevo, usiamo TCL mettendo nella flash del router un file che chiameremo tun_gre.tcl che contenga cio’ :

ios_config "interface tunnel1" "tunnel destination nuovasede.dyndns.org"

che a sua volta verra’ richiamato da “kron” ogni minuto ( cosi’ come configurato sul router centro stella )
La schermata WEB della configurazione del router SRP che sono 4 cose in croce…

Ovvimente “ip route 192.168.15.0 255.255.255.0 Tunnel1″ e’ la rotta per la LAN del router SRP che , in questo caso e’ una 192.168.15.0/24 .
Facendo delle prove il tempo medio di “convergenza” si aggira intorno al minuto e mezzo…piu’ che soddisfacente direi.
Inutile sottolineare che questa configurazione lascia molto a desiderare sotto il profilo della sicurezza, in ambiente di produzione sul tunnel1 c’e’ una ACL molto restrittiva, che fa passare solo servizi che prevedono autenticazione.

N.B.
Fate molta attenzione perche’ TCL e’ scripting che a sua volta e’ tanto potente quanto pericoloso.

Esportare da Roundcube tramite MySQL rubrica in .vcf

Il proprietario di un Server Webmail con Roundcube voleva una rubrica condivisa tra tutti gli utenti (centinaia).
Ok, il problema non si pone basta usare il plugin apposito per roundcube, modificare il config/main.inc.php e vivere felici e contenti ( okkio che se l’accrocchio va giu’ e tail -f /var/www/logs/errors vi riporta PHP Fatal error: Class ‘rcube’ not found….. date un’ okkiata qui ).
Ma non era cosi’ facile…infatti voleva anche che tutte le rubriche personali create fino a quel momento convergessero su questa “rubrica Globale” .
Pensa che ti pensa, l’esportazione (che pure e’ presente in Roundcube) richiesta ad ogni utente non mi sembrava una cosa snella ne’ veloce, cosi’ mi sono messo a giocherellare con il database…ed ho tirato fuori questa query :

mysql -u root -p -e "SELECT vcard FROM roundcubemail.contacts" > rubrica.vcf

Dove roundcubemail e’ il nome del vostro database.
La query di sopra restituisce un file sporco in quanto ci siamo tirati dietro il “newline” ( \n ) che e’ presente nel record del campo vcard della tabella contacts. Per ripulirlo io uso geany e con un semplice trova e sostituisci tolgo tutti i “\n” presenti nel file (si, lo so che sarebbe stato meglio inventarmi uno script che estragga la rubrica e ripulisca il file…ma se ci riuscite voi a togliere il “newline” con sed, awk o tr che siano, vi pago una birra…con vi o nano sono buono anch’io…).
A questo punto posso tranquillamente importare il file “rubrica.vcf” appena creato e pulito tramite l’interfaccia Web e con un qualunque utente che ha accesso al sistema (ovviamente selezionando la rubrica “Indirizzi Globali”).

P.S. se volessi estrarre la rubrica di un utente in particolare :
Prima di tutto verificare la user_id ad esso associata con un

mysql -u root -p -e "SELECT user_id FROM roundcubemail.users WHERE username = 'nomeutente@dominio'"
+---------+
| user_id |
+---------+
|      7  |
+---------+

e poi estraendo solo la sua rubrica con un

mysql -u root -p -e "SELECT vcard FROM roundcubemail.contacts WHERE user_id = '7'" > nomeutente@dominio.vcf

Editiamo il file come sopra.

Installare IgSuite su Debian

Installate i pacchetti di seguito se non li avete già sul vostro server :

apt-get install apache2 mysql-server perl make gcc ssh

scaricare il pacchetto di igsuite da sourceforge N.B. la soluzione più semplice per metterlo sulla vostra macchina linux è usare wget. Per segnare il link che sourceforge fornisce in modo dinamico, si può scaricarlo da un qualsiasi browser e “copiare” il collegamento al download, dopodichè :

cd /var/www
rm index.html
wget "link che avete copiato"
tar -zxf igsuite-5.0.0.tar.gz
cd igsuite-5.0.0
perl  install_modules.pl

a sto punto rispondete sempre si…armandovi di pazienza che la cosa è lunghetta…dopodichè :

perl install.pl

Questo script vi chiederà diversi parametri , leggete con attenzione, in particolare quando chiede l’utente che può creare il database che di default su Debian è “root” e la pasword che è quella che avete scritto quando avete installato mysql-server . I parametri che potrebbero essere più rognosi sono :

CGI Directory []: /usr/lib/cgi-bin/
....
Web User []: www-data
....
Directory dei dati [/srv/www/htdocs]: /var/www/

diamo una pulita :

cd /var/www
rm  igsuite-5.0.0.tar.gz
rm -r  igsuite-5.0.0/

adesso basta puntare il browser su http://ip.server.igsuite ed il gioco è fatto

N.B. il tutto si riferisce ad un’installazione dove su apache ci girerà solo igsuite, se volete metterci anche altri siti web, ovviamente, al parametro “Directory dei dati [/srv/www/htdocs]:” metteteci /var/www/igsuite e lanciate con http://ip.server.igsuite/igsuite

CPAN Writing Makefile NOT OK

se CPAN vi da errore del tipo :

Writing Makefile for DBD::mysql  -- NOT OK
Running make test
  Can't test without successful make
Running make install
  make had returned bad status, install seems impossible

bisogna configurare il path di make :

which make
/usr/bin/make

segnatevi il path e riandate su cpan :

cpan
o conf make /usr/bin/make
o conf commit

Installare VMware Tools su Debian

E’ utile (a volte fondamentale) installare i VMware Tools su Server che girano su ESX(i) anche per installazioni senza interfaccia grafica. Per farlo su Debian servono un paio di accorgimenti, come installare un compilatore , nonche’ i sorgenti del Kernel in uso.
Per prima cosa e’ necessario caricare il file che contine i Tools sulla macchina Guest, per farlo basta andare con il tasto destro sulla macchina virtuale e poi “Configuration -> Install/Update VMware Tools” .
A sto punto, da root :

apt-get install build-essential linux-headers-$(uname -r)
mount /dev/cdrom /media/cdrom
cp /media/cdrom/VMwareTools-8.6.5-621624.tar.gz VMwareTools-8.6.5-621624.tar.gz
tar -zxf VMwareTools-8.6.5-621624.tar.gz
cd vmware-tools-distrib
./vmware-install.pl

invio,invio,invio….fino alla fine…dopodiche’ se siete gente “pulita” :

apt-get --purge remove build-essential
apt-get autoremove
rm VMwareTools-8.6.5-621624.tar.gz
rm -r vmware-tools-distrib/

Ovviamente la versione VMwareTools-8.6.5-621624.tar.gz puo’ essere diversa…non bisognava segnalarlo…no ?
Se aggiornate il kernel dovete reinstallare gli “headers” e i Tools.

Batch Backup TAPE Windows con invio log su email

Tempo fa preparai uno scrippetino che mi effettuasse il backup di determinate directory su tape e, cosa fondamentale, m’inviasse i log tramite email. Mi sono fatto aiutare da “sleep.exe” che serve per temporizzare le procedure all’interno dello script e da “blat.exe” che serve per inviare la mail .
Ovviamente provate che il comando rsm.exe ( per windows 7 / 2008 e successivi procuratevelo qua ) punti al giusto Tape .
Buttate un occhio alla riga in cui lancio NTbackup ed osservate che gli passo il percorso di una selezione fatta direttamente dal programma stesso (SF.bks). In questo modo se voglio aggiungere/togliere qualcosa al Backup, mi bastera’ andare a selezionare/deselezionare direttamente dall’interfaccia di NTbackup.
Ultima cosa, fate attenzione alle autorizzazioni rispetto all’utente a cui farete lanciare il batch e quello che effettua le selezioni di NTbackup (se diversi).
Ovviamente puo’ essere adattato a qualsiasi esigenza…ovviamente tutti quei “@set” sono delle variabili che potete definire e richiamare come vi pare.

@rsm.exe refresh /LF"Hewlett Packard DDS4 USB drive"
@echo Aggiornamento database RMS
@C:\bkpTools\sleep.exe 30
@set server=server
@set supporto=DDS4-%server%
@set set=giornaliero
@set tipo=database
@set sender=server@dominio.it
@set subject=log backup %tipo% %server%
@set smtp=smtp.server.it
@set receiver=destinatario@dominio.it
@set folder=Documents and Settings\server\Impostazioni locali\Dati applicazioni\Microsoft\Windows NT\NTBackup\data
@for /f "Tokens=1-4 Delims=/ " %%i in ('date /t') do  @set dt=%%i-%%j-%%k-%%l
@for /f "Tokens=1" %%i in ('time /t') do @set tm=%%i
@set tm=%tm::=-%
@set dtt=%dt%%tm%
@echo Eseguo backup %set% del %dtt%.
@echo Attendere Prego...
@C:\WINDOWS\system32\ntbackup.exe backup "@C:\Documents and Settings\server\Impostazioni locali\Dati applicazioni\Microsoft\Windows NT\NTBackup\data\SF.bks" /n "%supporto%-%dtt%" /d "%set%-%dtt%" /v:yes /r:no /rs:no /hc:off /m normal /j "%tipo%-%server%-%dtt%" /l:f /p "4mm DDS" /UM
@C:\bkpTools\sleep.exe 10
@echo F | xcopy /y /d "%folder%\*.log" "%temp%\backup.log"
@echo ----------------------
@type %temp%\backup.log
@echo Invio email rapporto a %receiver%
@C:\bkpTools\blat.exe "%temp%\backup.log" -f %sender% -to %receiver% -server %smtp% -subject "%subject%"
@rsm.exe eject /PF"%supporo%-%dtt% - 1" /astart
@echo Procedura eseguita...

Si, lo so da Windows 2008 hanno tolto NTbackup ma sono sicuro che il vostro ditino e’ funzionante…..

Virtualbox : Convertire HD .vdi in dinamico risparmiando spazio

Un Trucchetto al volo di una cosa che altrimenti ogni volta ci perdo 10 minuti…..
Scenario :
Ho una macchina virtuale che gira su VirtualBox ( quindi HD .vdi ), anche se ho creato l’hd virtuale dinamico, con installazioni e disinstallazioni varie, il file dell HD è diventato di 35 GB mentre il sistema operativo virtuale ne occupa solamente 15…ovvero sto sprecando 20 GB, che su di un portatile di ultima generazione saranno pure pochi, ma io uso un Thinkpad X32 di 8 anni fa con HD da 120GB e quindi 20 GB sono abbastanza.
Vabbè andiamo al sodo :
Accendere la macchina virtuale, disabilitare il file di paging sull ‘HD che vogliamo ridimensionare, riavviamo, deframmentiamo l’HD in questione, scarichiamo http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx e lanciamolo con l’opzione -z

sdelete -z

attendiamo che finisca…non vi preoccupate di cancellare qualcosa, è un’operazione sicura…anche se parliamo di robba microzozz.
Terminato il filling dello spazio non usato, spegnamo la macchina virtuale, posizioniamoci nella directory dove è contenuto il file dell’HD che vogliamo ridimensionare e diamo :

VBoxManage clonehd [old-VDI] [new-VDI] --variant Standard

E magicamente avremo un file che occupa esclusivamente lo spazio che occupa il sistema virtuale.

N.B. Controllate di avere abbastanza spazio nella directory di destinazione.