Inizio questo 2022 testando CrowdSec in vista di rifare un server importante up da anni ed ormai non più coperto da aggiornamenti LTS. Attualmente ci uso csf/lfd e prima di scegliere se riusarlo nel nuovo volevo provare qualcosa di più fresco, che non fosse fail2ban.
La configurazione in formato yaml è molto intuitiva e semplice, durante l’installazione da repository si autoconfigura in base ai log che trova e funziona out-of-the-box subito, tranne il bouncer che di default non è attivato… motivo per cui scrivo questo post, ovvero appuntarmi che il bouncer va attivato come servizio, sennò non blocca nessuno:
systemctl enable crowdsec-firewall-bouncer
E se durante i test vi fate bloccare bisogna sapere che utilizza ipset (che non conoscevo ancora) e per sbloccarvi dovete lanciare:
ipset del crowdsec-blacklists IP.xxx.yyy.xxx
la cui lista troverete già popolata da un bel po’ di IP mascarati, che non siciliano non vuol dire nattati col masquerade ma bensì poco raccomandabili.
Mi piace il concept implementativo di questa applicazione, anche se out-of-the-box non ha notifiche email per le azioni (anche se ha svariati plugin) ed a differenza di csf non imposta alcuna impalcatura firewall atta a rilevare e bannare i port scanners (che per alcuni server rompono i coglioni più che i brute force login): la policy di firewall dovete integrarla voi.
Non so ancora se userò di nuovo csf o CrowdSec, manca qualche feature a cui ero abituato ma comunque mi sta piacendo, lo seguo e se continuerò a smanettarci scriverò cosa sono riuscito a farci!
In questo post voglio raccontarvi la mia personale esperienza con Zabbix negli ultimi 5 anni circa, ovvero da quando lavoro al NOC di un provider locale in costante crescita. Conoscevo Zabbix da tempo ma lo avevo usato in ambiti dove non c’erano da monitorare più di 30 dispositivi e quindi le risorse hardware necessarie non erano particolareggiate, una VM Debian con MySQL su 4GB di RAM, 64GB di disco ed un paio di vCPU mi era sempre bastata, ed infatti per i primi due anni queste stesse risorse sono bastate tranquillamente a far girare Zabbix 3.2 dentro una VM e monitorarci i primi pezzi di infrastruttura ed i primi clienti.
Poi MySQL ha iniziato ad ingolfarsi ed ho deciso di lasciare zabbix-server sulla vm e spostare MySQL bare metal su un HP Microserver Gen8 con 16GB di RAM, Debian/ZFS con due dischi meccanici RAID 1 più due dischi SSD per cache e ZIL. Si è ripreso alla grande ed è andato avanti per altri due anni, fino a quando ha raggiunto il limite. Con 1200+ dispositivi SNMP da monitorare e 600+ VPS (Valori Per Secondo di Zabbix) il DB era arrivato a 120GB e le slow query erano troppe, rallentavano l’operatività del server e generavano troppi falsi positivi.
Ho provato allora il partitioning MySQL che ha funzionato facendo tirare la baracca ancora qualche mese per poi ricominciare con le slow query, ingolfamenti e falsi positivi. Iniziavo a valutare alternative perché stare col dubbio che si tratta di un falso positivo che rientrerà in non-sai-quanti-minuti appena completate le slow query o stare col dubbio che un cliente, magari pure importante, o un apparato è realmente down è davvero snervante. Ho dunque iniziato a documentarmi sulle nuove versioni di Zabbix e le nuove funzionalità, ho anche provato a tenere la configurazione ed svuotare lo storico convinto che fossero eventuali record orfani a fare ingolfare 4 anni di MySQL… durava una settimana poi si ingolfava di nuovo, avevo capito che ero incappato in una legge di Murphy:
Una volta aperta una scatola di vermi, l’unico modo di rimetterli in scatola è usarne una più grande.
Prima legge di Zymurgy sulla dinamica dei sistemi in evoluzione
Non avendo mai prima scalato Zabbix su così tanti dispositivi non avevo abbastanza esperienza, ho alzato bandierina bianca e chiesto aiuto a dei consulenti certificati che mi hanno rassicurato che con TimescaleDB non avrei avuto problemi e sarebbe bastata anche una sola VM un po’ più grossa delle precedenti e nemmeno un proxy! Non ci credevo ma non avevo altro da fare che fidarmi e farmi seguire nell’aggiornamento a Zabbix 5.0.
Abbiamo dunque messo su Zabbix 5.0 su una VM con 16GB di RAM, 4 vCPU e 512GB di disco, importato la configurazione di host, gruppi e templates e fatto macinare il tutto… solo che per una svista durante la procedura non abbiamo attivato l’estensione TimescaleDB di PostgreSQL. Questo è stato un errore che mi è servito parecchio a rendermi conto per la prima volta di come funziona e macina dati PostgreSQL… perchè praticamente con questo errore stavo usando Zabbix con un DB PostgreSQL pulito senza alcuna estensione o TimescaleDB, solo che ancora non lo sapevo!
La prima cosa di cui ti accorgi, più che le performances è la stabilità nonostante i rallentamenti notturni dovuti ai backup: nettamente superiori a MySQL, pur senza partitioning (che TimescaleDB poi di fatto implementa ma un PostgreSQL pulito no!) il sistema non si è mai ingolfato ne rallentato nonostante il DB fosse arrivato a quasi 300GB!! Allucinante per me che avevo visto MySQL ingolfarsi su un DB di 120GB su un server bare metal! PostgreSQL su una VM invece continuava tranquillo ad ingurgitare dati con ottime performance e nel frattempo gestiva le query in lettura del frontend come se gli stessero facendo il solletico! Credevo che semplicemente TimescaleDB fosse questo: una figata, fin quando non si è riempito il disco e si è piantato tutto. Solo pochi giorni dopo ho capito che PostgreSQL/TimescaleDB era una iper-figata.
Da un lato ero gasato che le performance erano nettamente superiori a prima nonostante un DB così grosso, dall’altro ero deluso perché ero reincappato nella stessa legge di Murphy e pensavo mi servisse hardware dedicato più costoso. Il disco pieno rendeva la VM inutilizzabile, dunque ho ripristinato il backup del giorno prima con ancora qualche GB libero e mi ci sono fatto un giro per revisionare la situazione… è stato li che mi sono accorto che l’estensione TimescaleDB non era attiva, ci era scappata. Dunque l’ho attivata e ricaricato lo schema del DB, è partita una stored procedure che ha macinato più di 24 ore e poi il miracolo sintetizzato da questo grafico: la prima metà è il DB PostgreSQL di Zabbix 5.0 senza TimescaleDB… la seconda metà è lo stesso DB PostgreSQL con TimescaleDB pienamente operativo: ditemi voi se non è ALLUCINANTE.
Avevo voglia di ascoltare “So you want to write a fugue?” di Glenn Gloud, quindi sono andato su youtube ed ho cercato il brano, anche se ce l’avevo offline sul computer. Ho trovato una versione animata in stile karaoke col testo che in verità conoscevo già da tempo, quasi dieci anni, ma che avevo dimenticato e che soprattutto non avevo ancora rivisto e riascoltato con attenzione. Per quanto sia uno smanettone ai tempi non bazzicavo GitHub, anzi studiavo musicologia ed avevo mollato del tutto l’informatica, quindi non ho fatto caso che alla fine del video c’è un url al codice sorgente che ha permesso la realizzazione di questo video. Codice open source e scritto in Python, uno dei pochi linguaggi che conosco e che so leggere. La cosa mi ha fatto riflettere perchè stiamo parlando di Glenn Gould e Python… e tra i due sicuramente il più conosciuto ai più è Python.
Glenn Gould era un folle genio che scrisse questo pezzo nel ’63 per una trasmissione radiofonica canadese allo scopo di far capire alle persone cosa fosse una fuga, in musica. E penso che ci sia riuscito perchè ci ha messo le parole che rendono la sua opera più intellegibile ai profani della musica e non solo. Ma cosa è una fuga? Voglio azzardare a spiegarvelo io, a modo mio, secondo la mia esperienza. Lasciando stare i tecnicismi contrappuntistici barocchi ai testi di musicologia la fuga è un evitare la ripetitività, cercare di essere originali ed evitare di suonare due volte la stessa cosa. Un po’ come il walkin’ bass nel jazz. Vivere e suonare qui ed ora, lasciarsi indietro il passato già suonato e suonare cose nuove, sempre (ove possibile perchè a volte, in alcuni brani veloci, è davvero difficile e disumano suonare sempre cose diverse). Si può e si deve citare il passato, il già suonato, ma non ripeterlo. Mi viene da pensare che una fuga sia una fuga dalla realtà ma è errato, è una fuga dalla consuetudine di mettere cose che non stonino. Puoi mettere anche note stonate se servono, Glenn Gould stesso dice “forget the rules and try”. E nel suo ambito le regole sono molto più ferree del jazz.
Avere a disposizione un video del genere è bellissimo, ha un valore didattico esagerato e l’averlo trovato è più bello ancora. Scoprire stasera che è stato generato grazie a Python (un linguaggio open source) e che l’autore abbia regalato il codice sorgente al mondo su GitHub è meraviglioso. Senza questo video, senza questo codice, senza questa persona (che oltre essere sicuramente un programmatore è sicuramente anche un musicista sopraffino) capire questo brano e capire più profondamente cosa sia una fuga e che che Glenn Gould era un figo sarebbe stato molto più difficile.
Prima o poi volevo fare un articolo della serie “GNU/Linux on [ … ] laptop” pieno di trick su come far funzionare definitivamente anche quei componenti capricciosi. Con i miei precedenti 3 portatili non l’ho mai potuto fare perchè mi sono sempre capitate schede video assolutamente non supportate o supportate alla c*z*o che li rendevano portatili sinceramente poco adatti a GNU/Linux. Con questo, il mio nuovo portatile, non posso farlo nemmeno perchè funziona tutto out-of-the-box!! Peccato, mi limito quindi a riportarvi qualche informazione tecnica per nerd:
Processore: Quad-Core Intel® Core™ i3-3227U CPU @ 1.90GHz
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)
00:1c.2 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
00:1f.2 RAID bus controller: Intel Corporation 82801 Mobile SATA Controller [RAID mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)
01:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 05)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader (rev 01)
Ci sto usando su Debian/testing con Gnome3 e devo dire che con il touchscreen -per me- è quasi fantascienza. Avevo visto qualche video su youtube ma non potevo rendermi conto della qualità del lavoro che è stato fatto sulle GTK3.x e Gnome3.x.
phpIPAM è un applicativo web GPLv3 multiutente per l’address management con funzioni automatiche come il calcolo della netmask in base allo spazio di indirizzamento disponibile, funzioni visuali come una dashboard di riepilogo con widget ordinabili ed altri tool integrati. E’ scritto in PHP e Bootstrap3, non richiede particolari estensioni ed usa mysql come database.
Mette a disposizione delle “sezioni” dentro le quali si possono allocare più reti, ulteriori sottoreti ed indirizzi IP con informazioni aggiuntive ed attributi customizzabili ed estendibili. E’ possibile inserire anche macchine, apparati, VLANs ed importare sottoreti direttamente dal database RIPE.
E’ in inglese e tradotto in varia lingue, purtroppo ancora manca l’italiano ma c’è un modulo interno per la traduzione delle stringhe utilizzate.
Dalla scorsa settimana ho deciso di installare ElementaryOS anche sulla mia workstation al lavoro perchè sia la Ubuntu Gnome 13.04 che la 13.10 mi hanno dato non pochi problemi con continui crash. Anche se sono un fan di ElementaryOS sin dalla prima release ho provato Gnome3 per diversi mesi e devo dire che mi sono trovato molto bene come user experience, soprattutto per la possibilità di escludere il secondo monitor dalla gestione dei workspace: sul secondo monitor tengo tutti i terminali che mi serve avere sempre sott’occhio e sul primo monitor faccio tutto il resto utilizzando molto i workspaces.
Ieri, spulciando su Launchpad, ho scoperto che Gala è basato su libmutter e quindi eredita questa funzionalità da Gnome3! Basta settarla con dconf-editor:
Un qualche system monitor non manca mai nello schermo di un nerd… gkrellm è un progetto maturo che ha alle spalle parecchi anni di sviluppo e mantenimento, ancora sa il fatto suo e perchè no – con delle impostazioni ottimali e qualche tema può stare bene anche in un ambiene nuovo come elementaryOS! (altro…)
Mentre qualcuno elogia Google per il nuovo portatile con una risoluzione 3:2 molto più comoda “per lavorare” (ma anche per fare qualsiasi cosa che IMHO non sia guardarsi un film in 16:9) il resto delle persone che hanno comprato un portatile negli ultimi anni se lo sono ritrovati con uno schermo in -appunto- 16:9 e praticamente senza una possibilità di scelta diversa, perchè oramai i monitor sono tutti in 16:9.
Ora: tra barre, controbarre e toolbars… oggettivamente lo spazio usabile sul monitor è cambiato, se qualche genere di applicazione (ad esempio Gimp e le sue toolbar verticali) ne giova, altre ne perdono. IMHO i browser ne perdono tutti. Entrare in modalità tutto schermo non è sempre conveniente, nelle tastiere i tasti Fxx stanno andando sempre più frequentemente nel secondo livello ed hanno bisogno del tasto selettore fn, nel mio portatile con F11 metto in mute l’audio.
Mappare un angolo dello schermo che si comporti come il tasto F11 mi è sembrata la soluzione più ergonomica per entrare ed uscire dalla modalità fullscreen senza click ne tasti… ed ormai non posso più farne a meno!