Archivio per il 'Tips & Tricks'Categoria

Testare i DNS

Dicembre 8, 2009

Con l’uscita di questo articolo dell’ottimo ossblog, che si merita il premio di blog del giorno, ho trovato finalmente una utility per testare i DNS: namebench presente anche su aur.

Ho constatato, con amara sorpresa, che i fooldns (tralasciando le altre feature) non sono poi così veloci ma almeno ho la soddisfazione di scrivere che gli opends sono quasi allo stesso livello.

Sono rimasto invece basito dalle soluzioni che proposte dopo i benchmark:

Recommended configuration (fastest + nearest):
———————————————-
nameserver 151.99.125.2 # Interbusiness IT
nameserver 212.31.224.3 # COLT IT-2
nameserver 62.196.2.70 # Infracom Network Application IT

********************************************************************************
In this test, Interbusiness IT is 96.5% faster than your current primary DNS server
********************************************************************************

Forse ora è meglio che consideri seriamente di reinstallare privoxy + adblock plus per firefox, cambiare dns abbandonando i fooldns…

Più terminali e più log in ssh

Dicembre 5, 2009

Caso d’uso

Ci logghiamo da remoto al nostro server OpenSSH poi, a un certo punto, mentre stiamo lavorando cade la connessione. Ci dobbiamo riloggare ma un’istanza della connessione rimane comunque aperta (controllate con ps ax). Oltretutto qualsiasi programma che avevamo lanciato dalla vecchia istanza continua a girare senza nessun controllo da parte nostra: lo killiamo o non lo killiamo e aspettiamo? Tipo se stavamo aggiornando con pacman…bella rogna vero?

Altro esempio. Siamo sul nostro terminale remoto e dobbiamo controllare più log in contemporanea ovvero osservarne due sulla stessa istanza di terminale aperta…come si fa?

Soluzione

Per il primo caso ci può affidare a screen. Anche se ci cade la connessione possiamo comunque agganciarci all’istanza di screen che abbiamo perso e ritrovarci il programma che avevamo lanciato continuare nel suo lavoro.

Per il secondo caso ci si può affidare a multitail. Apre più finestre nella stessa finestra di terminale e in ognuna un log scelto da noi. Consiglio: meglio usare multitail nelle tty cioé dando CTRL+ALT+F1, se non si fa così le combinazioni di tasti potrebbero venire intercettate da gnome-terminal, terminal ecc…

ssh: denyhosts

Novembre 22, 2009

Configuare OpenSSH a prova di bomba

Siamo talmente paranoici che abbiamo fatto, quasi, tutto quanto consigliato qua per rendere il nostro server con OpenSSH a prova di bomba. Per un uso casalingo io non ho impostato però nessun firewall (mi fido delle impostazioni che ho messo sul mio router netgear dg834g) cioè nessuna regola di iptables sul sistema dove è veramente installato OpenSSH server.

Fregare gli attacchi brute-force

L’unica cosa che mi scoccia sono questi essere infimi, e poco pericolosi, chiamati script-kiddies che tentano degli attacchi brute-force sulla porta 22. Non che sia una gran scocciatura ma i file di log, più precisamente i /var/log/auth.log, tendono a riempirsi paurosamente. Ho trovato una soluzione KISS usando un programma, scritto in Python, chiamato denyhosts. Il concetto è semplice: si guarda i file di log e se un determinato IP fallisce la connessione ssh lo blocca ficcandolo in /etc/hosts.deny.

Una precisazione su come funzionano /etc/hosts.allow e /etc/hosts.deny. Questi sono dei file che configurano il TCP Wrapper: una spiegazione esaustiva si trova negli Appunti di Informatica Libera di Daniele Giacomini. Riassumendo: se un IP è regolamentato da una regola in /etc/hosts.allow tutto fila liscio, se invece questo IP non è previsto in /etc/hosts.allow il sistema guarda /etc/hosts.deny. Quindi in /etc/hosts.allow, se vogliamo fare in modo che gli IP della nostra sottorete non vengano bloccati, mettiamo questa riga:

sshd: 192.168.0.0/255.255.255.248

Ovviamente questo è solo un esempio preso dalla mia configurazione. Se non sapete niente di reti e sottoreti non capirete una tega, forse potrebbe venirvi in aiuto il programma ipcalc:

Esempio ipcalc

ma anche Wikipedia…se non basta fatevi un corso universitario di Reti di Calcolatori o leggetevi un libro a riguardo o rompete i coglioni a un SysAdmin (non io: non lo sono!).
In /etc/hosts.deny non mettiamo nulla: se ne occuperà automaticamente denyhosts. Per esempio una riga che aggiunge denyhosts è la seguente (ovviamente l’IP bloccato è di fantasia):

# DenyHosts: Sat Nov 21 13:05:13 2009 | ALL: 123.123.123.123
ALL: 123.123.123.123

Figo no? Ora non ci resta che editare il file di configurazione di denyhosts che si trova, su Arch Linux, in /etc/denyhosts/denyhosts.cfg.

Configurazione di denyhosts.cfg

Prendo paro paro il mio file di configurazione con una spiegazione tutta mia. Le FAQ sul sito e i commenti su denyhosts.cfg sono molto esaustivi ma degli esempi in più non fanno mai male e non vi faranno sicuramente schifo (vero?). Comunque sia sto usando la versione 2.6 di denyhosts.

SECURE_LOG = /var/log/auth.log Ovviamente questo è il file che denyhosts parsa per andare a pescarsi gli IP da bannare.

HOSTS_DENY = /etc/hosts.deny In un sistema Linux è qui che ci sono le regole per il TCP Wrapper degli IP a cui è vietato l’ingresso nel sistema.

PURGE_DENY = 2d Ricordo che stiamo parlando di uso domestico, quindi abbiamo un indirizzo dinamico raggiungibile magari, con l’ausilio di dyndns come ho fatto io, con un URL www. Ma abbiamo sempre un indirizzo dinamico e ad ogni caduta di connessione (grazie Telecom) cambiamo spesso IP. Quindi gli script-kiddies non punteranno sempre a noi pensando che siamo sempre noi cambiando, magari, gli username e password. Insomma non siamo un bersaglio fisso! Quindi è inutile riempire /etc/hosts.deny di IP. Anche perché magari pure gli script-kiddies hanno IP dinamici come tutti i comuni mortali (a parte i compuer zombie ma si spera di no). Quindi è meglio ripulire /etc/hosts.deny abbastanza spesso. 2d infatti sta per 2 day: due giorni.

BLOCK_SERVICE = ALL Ok, abbiamo solo sshd attivo come servizio. Sarebbe più logico mettere BLOCK_SERVICE = sshd. De gustibus. Questo cambia ovviamente le occorrenze di /etc/hosts.deny che dal mio esempio precedente diventerebbero

# DenyHosts: Sat Nov 21 13:05:13 2009 | sshd: 123.123.123.123
sshd: 123.123.123.123

Denyhosts è molto configurabile, può controllare o tutti i servizi o solo quello che vogliamo noi.

DENY_THRESHOLD_INVALID = 2 Ogni due tentativi da parte di un username invalido (che non esiste sul sistema o che non è specificato in AllowUsers o AllowGroups in /etc/ssh/sshd_config) l’IP viene bannato. Metti che uno al posto di scrivere cicciobanza scrive cicciobnza…lo banniamo subito? Diamogli una seconda possibilità.

DENY_THRESHOLD_VALID = 3 Diamo invece tre tentativi a un user valido nel sistema, magari ha la giornata storta e sbaglia la password (che comunque, siamo stati bravi, è un’autenticazione chiave pubblica/privata).

DENY_THRESHOLD_ROOT = 1 Diciamo che se uno tenta subito root lo banniamo immediatamente..vero?

DENY_THRESHOLD_RESTRICTED = 1 Questa è una sboronata. Possiamo specificare degli username (in /var/lib/denyhosts/restricted-usernames) a cui possiamo dare tot tentativi. Io ho messo 1 perché ci metto i classici: mysql, test, user…i soliti username che non andrebbero mai usati…

WORK_DIR = /var/lib/denyhosts Si commenta da sola, io la lascio così di default e consiglio di fare altrettanto!

SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES A dire la verità non ho ben capito. Sembra che denyhosts si faccia dei sospetti di attacco anche sugli hosts della nostra sottorete e ci avverta di questo. Ho lasciato YES ma approfondirò in seguito…

HOSTNAME_LOOKUP=NO A dire la verità non ho capito molto questo. Non ho capito cosa se ne faccia denyhosts del nome host dell’IP associato che blocca. Approfondirò anche questo…

LOCK_FILE = /var/run/denyhosts.pid Si commenta da solo, lasciamolo così com’è.

ADMIN_EMAIL = Lo lascio vuoto, non ho nessun Postfix o simili installato sul sistema che invii mail di avvertimento quindi…

AGE_RESET_VALID=1m Resetta i tentativi, dopo un minuto di inattività, di un utente valido. Del tipo, scannate password, aspettate un minuto: avete ancora 3 tentativi (riguardate DENY_THRESHOLD_VALID).

AGE_RESET_ROOT= Se uno tenta root non gli diamo altre possibilità.

AGE_RESET_RESTRICTED= Se uno tenta mysql non gli diamo altre possibilità.

AGE_RESET_INVALID= Se uno tenta un utente invalido non gli diamo altre possibilità.

DAEMON_LOG = /var/log/denyhosts Si commenta da solo. Comunque è meglio aggiungere /var/log/denyhosts in /etc/logrotate.d/syslog-ng in modo che logrotate faccia la rotazione anche dei log di denyhosts.

DAEMON_SLEEP = 1m Ogni minuto denhyhosts controlla i file di log. Ci saranno comunque dei tentativi, in un minuto, gli script kiddies provano circa 5-10 username al colpo.

DAEMON_PURGE = 1h Il periodo, quando denyhosts è daemonizzato, con il quale controlla le occorrenze di /etc/hosts.deny e le toglie (in base ovviamente a PURGE_DENY)

Queste sono configurazioni base e utili per un sistema casalingo. Più fico sarebbe sincronizzare /etc/hosts.deny anche con IP bannati da altri che usando denyhosts e che condividono le informazioni (tutto sempre configurando denyhosts.cfg) ma è troppo per noi. Io ho provato ma, come ho già detto, non siamo bersagli fissi.

device usb: che filesystem?

Novembre 15, 2009

Molte volte mi sono chiesto quale filesystem usare per i device usb (intendo le chiavette di memoria o come cavolo si chiamano).

I vari filesystem hanno i loro pro e i loro contro. Proprio in questi giorni phoronix ne ha testato alcuni e i risultati si possono vedere qui.

Quindi mi sono deciso, usando principalmente macchine linux, di prendere la mia kingston da 8GB e metterla in ext4 (ovviamente senza journaling). Mi è stato d’aiuto questo post letto qualche tempo fa.

Prima ho creato la partizione con gparted (accidia portami via) e poi ho tolto il journaling con dumpe2fs. Ovviamente si può anche creare da zero con mkfs e le stesse opzioni per dumpe2fs (ma non ho provato). Infine ho dato un bel

chmod -R 777 /dev/sdc

Per i test finali lascio a voi. Io sono abbastanza soddisfatto.

Sensors, conky, awk e media

Ottobre 21, 2009

La mia ragazza ha un pc con dei sensori pazzeschi

k8temp-pci-00c3
Adapter: PCI adapter
Core0 Temp:  +19.0°C
Core0 Temp:  +25.0°C
Core1 Temp:  +24.0°C
Core1 Temp:  +22.0°C

Già: ho disabilitato quelli che fanno arrabbiare ACPI (togliendo del tutto sensors dai DAEMONS in rc.conf). Ma come faccio a mostrare ora la temperatura della CPU su conky? Ma sono giusti quei valori?

Prima risposta: facciamo una media con awk dei Core0 e Core1

sensors|awk ‘/Core0/ {totale+=$3 n++}END {print totale/n}’

e

sensors|awk ‘/Core1/ {totale+=$3 n++}END {print totale/n}’

Seconda risposta: più o meno sì facendo la media. Basta convincersene con i valori di  it87 (prima di togliere sensors dai DAEMONS) e anche grazie ad una visitina al BIOS.

GNOME, XFCE e i CD audio

Ottobre 18, 2009

Non chiedetemi perché, quando, come.

Non so infatti il motivo, nemmeno da quando c’è il problema, ma le applicazioni GNOME non rilevavano i CD audio (sound-juicer, rhythmbox, brasero) mentre nessun problema con vlc, k3b, exaile. Gira e remena ho trovato (ma che fatica!).

Avendo XFCE ho dovuto sostituire, in .xinitrc, la seguente riga

exec ck-launch-session xfce4-session

con questa

exec ck-launch-session startxfce4

E ora funziona.

Qua è tutta una lista nera

Ottobre 15, 2009

Ultimamente ho più roba sulla lista nera che blue jeans (ah io non porto i blue jeans ne ho solo di neri). Intendo dire che in modprobe.d ho dovuto creare un file blacklist.conf per riuscire a capirmi in futuro. Non usando quindi il punto esclamativo su rc.conf o altri sistemi per evitare il caricamento dei moduli

Ecco il mio /etc/modprobe.d/blacklist.conf

# ipv6 non lo usa ancora nessuno
blacklist ipv6

# questo modulo ho scoperto, grazie a lspci -v, che controlla smbus ma con il kernel 2.6.31 leggo questo messaggio da dmesg:
# ACPI: I/O resource 0000:00:1f.3 [0x400-0x41f] conflicts with ACPI region SMRG [0x400-0x40f]
blacklist i2c-i801

# il kernel cerca un generatore di numeri casuali HW che non trova, non crea problemi ma visualizza solo un messaggio su dmesg fastidioso
# intel_rng: FWH not detected
blacklist intel_rng

# per cups 1.4 bisogna disabilitare questo modulo sennò le stampanti USB non vengono rilevate
# dmesg restituisce un messaggio tipo: usbfs: interface 0 claimed by usblp while ‘usb’ sets config #1
blacklist usblp

Sto sinceramente pensando di ricompilare un kernel per togliere questi moduli e compilare quelli basilari staticamente (così evito anche il ramdisk).

kernel 2.6.31.3: e sensors?

Ottobre 11, 2009

Io non ho avuto problemi perché sensors prende i valori da acpi (atk0110-acpi-0) e quindi non necessito di far partire il demone sensors.

Ma al pc della mia ragazza non comparivano più i valori dando il comando sensors dato che le serve il modulo it87. Per fortuna, prima di andare da lei, avevo visto questo post che è capitato a fagiolo. Così dopo l’aggiornamento, visto che conky non mostrava nulla riguardo temperature e velocità delle ventole, ho aggiunto questo parametro al boot su grub

acpi_enforce_resources=lax

Mi pare di aver capito che sia acpi che alcuni moduli entrino in conflitto se cercano di usare gli stessi sensori contemporaneamente e questa opzione al boot lascia fregarcene di eventuali problemi derivanti. Se un certo modulo ha sempre funzionato non vedo perché farsi pippe mentali.
Occhio perché potrebbe essere potenzialmente dannoso (grazie Bardo).

Un’altra soluzione sarebbe sbattersene a priori di acpi e inserire sulla riga del kernel questa opzione

acpi=off

ovviamente se non avete un portatile o comunque un pc dove ci tenete al risparmio energetico.

module-init-tools 3.8

Giugno 25, 2009

ha cambiato le regole per modprobe. Mi spiego meglio: il file modprobe.conf dovrà trovarsi nella directory /etc/modprobe.d e qualsiasi file si trovi in questa directory deve avere l’estensione .conf. Se non si agisce in questa maniera vengono mostrati dei warning durante il boot e niente altro (è solo un avviso per una versione futura di module-init-tools). Fonte

Dato che rinominare tutti i file a mano usando mv o altro (chi usa MC o simili non so, non ho mai usato questi file manager) è fastidioso quindi ho pensato di usare qualcosa di più intelligente. Per esempio rename ma poi mi sono ricordato che Arch Linux non fornisce la versione “alla debian” che permette di usare le regex quindi ho abbandonato l’idea. Non ne ho nemmeno voluto sapere di fare un ciclo for (anche se è la soluzione che molti adotteranno o hanno già adottato).

Ho quindi preso mmv presente in AUR. Dopo alcuni vani tentativi sono riuscito, grazie a Nss su #linux di azzurra, a rinominare solo quelli che necessitano dell’estensione .conf (chi la ha già è inutile che ne abbia due di .conf giusto?).

Per rinominare più volte invece di fare così

mmv “*.conf” “#1″ ; mmv “*” “#1.conf”

cioé prima tolgo a tutti l’estensione e poi metterla a tutti quanti basta dare mmv, poi sullo standard d’input dare *.conf #1.conf poi * #1.conf e infine ^D. Per visualizzare meglio quello che ho cercato di spiegare:

mmv
*.conf #1.conf
* #1.conf

Funziona così: fra quelle righe comanda la prima che dice che tutti quelli che hanno estensione .conf devono rimanere tali, poi passa alla seconda che dice di aggiungere .conf a tutti i file (tranne però quelli della prima regola). Insomma si comporta in cascata ma in maniera mutamente esclusiva rispetto alle regole precedenti (un po’ come le Leggi della Robotica di Asimov). Altre informazioni su man mmv e qualche esempio qui

A8SC-4P107C: risparmio energetico. Parte V

Maggio 24, 2009

Quanto scritto in questo post è il seguito di quanto nei seguenti:

Ora sto usando il kernel Linux 2.6.29. Quindi per versioni inferiori, per esempio, alcuni percorsi in /sys potrebbero essere diversi.

Risparmio energetico Hard Disk tramite File System ext4 (ext3)

Possiamo far risparmiare il nostro Hard Disk tramite alcune opzioni di ext4 (ext3):

  • esistono 3 modi per fare il journaling: data=writeback, data=ordered, data=journal. Quello meno sicuro è il primo ma ottiene meno accessi al disco. Il più sicuro è l’ultimo ma si hanno più accessi al disco. Il secondo invece è l’impostazione di default. Più informazioni si possono trovare qua. Se vogliamo riassumere: se avete una partizione sulla quale potete rischiare che un file appena modificato diventi corrotto, nel caso di un inaspettato riavvio, potete mettere pure data=writeback. Altrimenti è meglio lasciare tutto con i valori di default;
  • si può anche disattivare il journaling con l’opzione noload. Sembra essere stato provato che ext4 senza journaling sia più performante di ext2 (che è il File System che non ha il journaling). Quindi se avete una partizione sulla quale non vi interessa preservare il File System, cioé a seguito di una corruzione dovete riformattare tutto con perdita dei dati, potrebbe essere una buona idea mettere ext4 con opzione noload. Potrebbe andare bene, per esempio, per chi ha una partizione separata per /var/cache/pacman;
  • per avere meno accessi al disco si può usare l’opzione relatime (l’evoluzione di noatime che non fa arrabbiare Mutt). Si fa in modo che venga aggiornato lo atime (il tempo di ultimo accesso) solo se quello precedente è diverso da mtime (il tempo di modifica) o da ctime (il tempo di accesso). Maggiori informazioni si possono trovare qui. Questa opzione non dovrebbe aver nessuna controindicazione (gli amici di Ubuntu la usano di default dalla versione 8.04);
  • commit: fa il sync (cioé scrive veramente sul disco) tutti i dati e metadati ogni tot secondi. Di default è 5 ma se c’è qualche furbo che mette 0 sappia che commit prende lo stesso 5. Dico subito che questo non inficia il journaling ma potrebbe provocare sgradevoli sorprese. Faccio un esempio con il valore di default, cioé commit=5. Siete in treno e avete il portatile alimentato a batteria, per una ragione a noi sconosciuta Linux va in crash: al massimo perdete tutto quello che avete scritto, della vostra tesi di laurea, negli ultimi 5 secondi. Quindi se volete mettere una valore maggiore di commit, per aver meno accessi al disco, siete avvertiti. Sempre facendo riferimento all’esempio di prima: 10 secondi farebbero bestemmiare chiunque scriva abbastanza veloce alla tastiera.
  • barrier è un’opzione presente solo in ext4 e diminuisce le performance dato che forza, in un certo qual modo, il journaling. Si può disattivare, rischiando in certe occasioni una corruzione dei dati come spiegato in quell’articolo, con l’opzione nobarrier.

Risparmio energetico Hard Disk tramite tmpfs

Ancora con tmpfs? Hai rotto il “ci a 2 zeta o”.

Più o meno, voglio sfruttare tutto questo giga di ram che mi ritrovo. Visto e considerato che il nostro laptop non fa da server e dei log di sistema ci interessa fin la perché non montare /var/log su tmpfs? Appunto, quindi su fstab ho aggiunto questa riga.

none /var/log tmpfs mode=1755 0 0

Direi che è un buon compromesso fra disattivare del tutto i log e averli sempre scritti sul disco. Lo stesso si può fare anche con /var/run e /var/lock

none /var/run tmpfs mode=1755 0 0
none /var/lock tmpfs mode=1777 0 0

Se qualcuno se lo chiede mode imposta i permessi nella stessa logica numerica di chmod, ho visto i permessi delle directory e ho impostato tmpfs di conseguenza.
Risparmio energetico Hard Disk tramite swappiness

La swap è una partizione importante, dovrebbe esserci sempre nonostante i giga e giga di ram che abbiamo.  Però possiamo aiutare il kernel nel dirgli: ok c’è, ma usane proprio quando strettamente necessario. Questa cosa si cerca già di fare ma in un portatile è ancora più importante. Ho così letto questa spiegazione per esseri umani. Ho modificato /etc/sysctl.conf aggiungendoci la riga vm.swappiness = 30. In questo caso ho preferito non masturbare il kernel dicendogli nell’avere un valore di swappiness differente a seconda dell’alimentazione.

Risparmio energetico USB

Ho trovato interessante questa lettura. Spiega anche il famoso usbcore.autosuspend=1
che ci consiglia powertop
e che a me non interessa perché il delay mi va bene anche al valore di default cioé 2.

Di solito chi usa il portatile non ha device USB inseriti (anche se alcuni interni, come il bluetooth, sono sempre USB). Quindi perché dare tutta la corrente a tutte le porte? Appunto! Occhio prima di procedere con quanto indicato, non fatelo se non sapete quali dispositivi USB state disattivando sopratutto sul computer fisso: tastiera, mouse? Sennò non potete più accedere al sistema!

Per sospendere l’alimentazione a tutti (che è come fare l’autosuspend con delay 0)

echo suspend > /sys/class/usb_device/*/device/power/level

mentre per ritornare alla situazione di default

echo auto > /sys/class/usb_device/*/device/power/level

Comunque ho notato che se attacco un device o se riattivo il bluetooth il corrispondente livello ritorna, da solo, alla situazione di default. Almeno da quanto ho letto dalla documentazione per un device USB potrebbe essere normale (peccato che sul fisso, sospendendo tutto, né mouse ne tastiera volevano tornare alla situazione di prima).

Undervolting CPU

Dato che sto ancora provando, più o meno, vi consiglio di darvi una letta a questo topic presente nel forum di Arch Linux. Ho cercato di spiegare e scovare tutte le informazioni per configurare l’undervolting di una CPU Intel Dual Core (che io sappia non esiste una documentazione e bisogna poprio andare di google e forum ufficiale del progetto). Quindi aspettatevi, magari fra qualche mese o mai, una Parte VI per la gestione energetica dove illustrerò i valori minimi di Volt da dare in pasto al mio T7250.

E anythings.zsh?

Vero? Non vi ho ancora dato l’ultima versione del mio script omnicomprensivo che intercetta qualsiasi evento acpi per il semplice fatto che potete trovarlo qua (insieme ad rc.local…).