Archivio per il 'Sicurezza'Categoria

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.

FoolDNS beta tester

Marzo 22, 2009

Eh sì, anche io sono un beta tester dei DNS forniti da FoolDNS.

Devo dire che, a livello pratico, ho disattivato l’add-on di firefox adblock plus e che rispetto agli OpenDNS si ha una velocità di query del 40% in più (non ho fatto statistiche evolute, ogni tanto provo manualmente con dig sul terminale).

Dato che FoolDNS blocca le pubblicità (e ci riesce nel 99% dei siti che visito) viene duramente criticato. Ma se io, consapevolmente, non voglio continuamente vedere dei cazzuttissimi banner pubblicitari, che non ho mai clickato in vita mia, cosa tange all’economia globale? Cosa cambia rispetto a prima? Cosa cambia rispetto a quando usavo l’estensione adblock plus?

Allora immagino che a questi personaggi, a cui piace tanto vedersi dei cazzi di banner che ti invitano su qualche sito dato che è il 99999999 accesso effettuato, non gli scazzino nemmeno quelle merdose telefonate di pubblicità che arrivano, dai call-center, sul telefono di casa alle 7 di sera proponendo una vantaggiosa offerta riguardo “qualcosa”. Oppure quelle cazzo di pubblicità in televisione delle cartomanti sulle reti private o quelle dei pannolini pieni di pupù trasmesse durante il pranzo.

PS riguardo alle telefonate rompi-cazzo-della-sera, se voglio cambiare gestore telefonico lo decido quando voglio io. Se il gestore dell’enel vuole cambiarmi un tariffario e farmi quello più conveniente per me la cosa puzza, cosa gli viene in tasca all’enel che la mia bolletta sia più leggera se sono già cliente della loro azienda?

certificati (SSL) mancanti

Luglio 23, 2008

Non so come mai ma la cartella

/etc/ssl/certs/

risultava vuota. Ergo qualsiasi sito con una catena di certificati valida non risultava valido! Ohibò…ho reinstallato ca-certificates (il pacchetto che si occupa di validare i certificati) e ha ricreato i link simbolici su tale cartella e facendo un suo update…ora è tutto risolto! Finalmente posso navigare senza che konqueror rompa sui certificati, risolsi l’arcano mistero (ma non da dove venissie)

sudo pacman -S ca-certificates

[...omissis...]
Clearing symlinks in /etc/ssl/certs…done.
Updating certificates in /etc/ssl/certs….done.
Running hooks in /etc/ca-certificates/update.d….done.

PS so che sul planet si legge ugaciaka:ugaciaka invece del nome del post ma non so come risolvere…se qualcuno ha qualche idea…

Cerco un’unità NAS domestica

Giugno 29, 2008

Sto cercando disperatamente un’unità NAS, qualcuno sa consigliarmi?

Vi dirò alcune caratteristiche:

- che sia di una marca notoriamente specializzata in questo ramo (tipo l’asus per me MoBo), pensavo alla Western Digital

- io ho un router wifi e vorrei che il NAS si attaccasse all’ethernet del router mentre accedo al NAS tramite il router dal pc di casa (mi sembra ovvio che debba funzionare ma non ne sono sicuro),

- che possa contenere due dischi (non ci sono limiti per dimensioni in GiB vero? perché vorrei ficcarne due da 750GB…un tera e mezzo per ora forse mi basta)

- che sia silenzioso

- consumi poco

- che magari abbia una distro linux interna da hackerare (che ne so…per installarci bittorrent)

- il nas mi serve per backappare tutti i miei film e ne ho tanti (in DVD dual layer…quindi sui 8GiB ciascuno) , tutta la mia musica (ho intere discofrafie originali)…E non sto scherzando forse quei 1tera e mezzo forse non mi basteranno …

- ultimo ma non meno importante: sono disposto a spendere intorno a 200euro, anche senza HD incorporati (ne ho uno da 250 e uno da 500 della western digital)

Grazie ;-)

EDIT:

o questa unità NAS oppure un pc assemblato. Quest’ultimo del tipo un bel procio che consumi poco, poca ram a pochi ghz, tower piccolo, scheda madre asus; il tutto da controllare tramite SSH e NFS.
Entrambi le soluzioni si aggirano sui 300euro.

RIEDIT: infatti guardate cosa ho trovato per 300 euri

RIRIEDIT: grazie al forum di www.unipd.net mi hanno consigliato questa derivata di freeBSD fatta apposta per installare un SO per un NAS!

Ralink per WL-167G e custom kernel

Giugno 21, 2008

Come promesso scrivo la guida per installare i driver con *buntu 8.04, compilandoli da sorgenti, per la WL-167G dell’Asus quando si ha un kernel customizzato e vogliamo i driver più aggiornati.

Scarichiamo i sorgenti
Usiamo ovviamente i compat-wireless (contiene anche molti altri driver oltre ai nostri)

wget http://linuxwireless.org/download/compat-wireless-2.6/compat-wireless-2.6.tar.bz2

Il firmware
Per far funzionare i driver serve il firmware, purtroppo no opensource, scarichiamolo con

wget http://www.ralinktech.com.tw/data/RT71W_Firmware_V1.8.zip

Sì, casomai ci facciate caso anche per la intel 3945 serve il firmware…

Scompattiamo la cartella

gunzip RT71W_Firmware_V1.8.zip

entriamo nella cartella scompattata

cd RT71W_Firmware_V1.8/

e spostiamo il firmware nella cartella /lib/firmware

sudo mv rt73.bin /lib/firmware/

Rimuoviamo i componenti non necessari
Per essere sicuri che finisca tutto liscio prima di compilare ed installare i driver da sorgenti scarichiamo dal kernel quelli di ubuntu

sudo rmmod rt73

Compiliamo ed installiamo
Scompattiamo ed entriamo nella cartella

tar xjvf compat-wireless-2.6.tar.bz2
cd compat-wireless-2.6

compiliamo

make
sudo make install

ed installiamo

sudo make unload
sudo make load

Ora il gioco è fatto

ugaciaka@eclipse:~$ modinfo rt73usb | grep version
version: 2.1.7
srcversion: DA51F4772B0889CE02618DC

Conclusioni
Ovviamente questa guida è stata adattata per un kernel customizzato che non vede il firmware già presente nella cartella del kernel patchato di ubuntu. Infatti la stessa guida può essere seguita per un kernel generic che non ha bisogno di “vedere” il firmware essendo già messo in

/lib/firmware/”kernel generico”

Il tutto è spiegato

qua

per i compat wireless in generale

Intel 3945 su ubuntu 8.04

Giugno 19, 2008

Breve guida su come far funzionare la scheda WiFi 3945 di Intel. Naturalmente tutto testato con wpa essid nascosto e ip statici.

Ho scritto la guida per installare i driver con il kernel ricompilato dimenticandomi di scrivere come usarli: come si configura ora? Bene adesso lo spiegherò.

Ovviamente alcuni parametri dovete saperli voi, tipo la vostra password, gli indirizzi ip della vostra rete ecc ecc

Prima di tutto

Innanzitutto assicuriamoci che compaia una wlan0 tramite il comando ifconfig. Se non c’è avete fatto qualche castroneria, quindi cazzi vostri.

Fatto questo tiriamo giù eth0 e su wlan0 (ovviamente adattate le vostre situazioni)

sudo ifconfig eth0 down
sudo ifconfig wlan0 up

Ora con iwconfig dovrebbe comparire wlan0 (wmaster0 non toccatela, è una periferica fittizia)

Configuriamo l’interfaccia di rete

ugaciaka@echoes:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto wlan0
iface wlan0 inet static
address indirizzo_ip_adattatore
netmask 255.255.255.0
gateway indirizzo_ip_router
wireless-essid nome_rete_essid
wireless-channel 11
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf

L’eth0 la lasciamo là, così almeno possiamo connetterci a internet (se qualcosa dovesse andare storto) con l’ethernet decommentando quelle righe, commentando quelle relative alla sezione wlan0 e riavviando le interfacce

ugaciaka@echoes:~$ sudo /etc/init.d/networking restart

e/o

ugaciaka@echoes:~$ sudo dhclient3 eth0

Ovviamente ammesso e concesso che il vostro router abbia il DHCP (momentaneamente) attivato.

Configuriamo per il wpa wpa_supplicant.conf

wpa_passphrase nome_rete password

riceverete (dopo l’inserimento della password per la rete)

#
reading passphrase from stdin
password
network={
ssid=”nome_rete”
#psk=”password”
psk=82b8b0bad290450d6e8476a1ae27a40aae0c2c28278bf98be028ee3ae57645db
}

Ottenute queste informazioni creiamo un il file qui sotto e ci mettiamo anche questi parametri

ugaciaka@echoes:~$ cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
fast_reauth=1
network={
ssid=”nome_rete”
proto=WPA
key_mgmt=WPA-PSK
pairwise=TKIP
group=TKIP
#psk=”password”
psk=82b8b0bad290450d6e8476a1ae27a40aae0c2c28278bf98be028ee3ae57645db
}

Infine deamonizziamo tutto con

sudo wpa_supplicant -Dwext -iwlan0 -c /etc/wpa_supplicant.conf -dd -B

Risoluzione di un bug

Esiste un bug fastidioso riguardante i driver installati in hardy che non rileva le reti all’avvio. Risolvibile con questo trucchetto: si crea un file nelle regole di modprobe che faccia questo per noi!

ugaciaka@echoes:~$ cat /etc/modprobe.d/iwl3945
alias wlan0 iwl3945
options iwl3945 disable_hw_scan=1

Infine

Ok, ora avete quasi tutto. Riavviate il computer o

ugaciaka@echoes:~$ sudo /etc/init.d/networking restart

e buona fortuna.

rsync, ssh e porta diversa dalla 22

Maggio 25, 2008

Volevo fare un’intelligente trasferimento di backup fra fisso e portatile. Ovviamente, penso, usiamo rsync…non va un cazzo! E perché? Perché da bravo mona sul portatile ho cambiato la porta standar (su /etc/sshd/sshd_config) da 22 a un’altra, tutto per la mia paranoia di sicurezza. La soluzione? Modificare un pelino il comando che do di solito, più o meno risulta una roba del genere

rsync –verbose –progress –stats –recursive –times –perms –links –compress -e “ssh -p 1234″ /home/ugaciaka/Musica/ ugaciaka@portatile:/home/ugaciaka/Musica

Ovviamente da sostituire con i parametri (1234 e portatile…), spero possa essere utile.

Controllare salute hard disk

Maggio 24, 2008

Ogni tanto bisogna pur controllare lo stato di salute degli HD, in fondo una testina che va su e giù e il disco che gira tutto il giorno aumentano la probabilità di qualche problema HW.

Installazione

Bene installiamo il necessario

sudo apt-get install smartmontools

HD *ata

Supponiamo che voi abbiate un sata o pata, quello che è insomma, e che sia il sda il disco da controllare…

sudo smartctl -d ata /dev/sda

così abilitate il controllo su quel disco oppure se non va (spero di no a me va sempre)

sudo smartctl -d ata -s on /dev/sda

poi facciamo un controllo veloce

sudo smartctl -d ata -t short /dev/sda

lo lasciate lavorare per il tempo che chiede…di solito 2-3 minuti
Poi controllate

sudo smartctl -d ata -l selftest /dev/sda

Se compare tipo una roba del genere

Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4642 -

niente paura, vi sta solo dicendo

  • che ha finito (00%),
  • che l’hard disk ha vissuto 4642 ore che NON sono quelle che gli rimangono da vivere ma quelle che ha già vissuto (e credo che si riferisca a ore di consumo, non ore di quanto è stato usato il disco)
  • che non ci sono errori -

HD ide

Tutto funziona uguale, basta togliere l’opzione -d ata ai comandi

Se proprio non va…

Vediamo se gli HD sono compatibili con questo tool..

sudo smartctl -i /dev/hda

Per controlli più accurati…

Per controllare più accuratamente il tutto, quindi ci vuole mooooooooolto tempo,

sudo smartctl -t long /dev/sda

Per interrompere

sudo smartctl -X

Per saperne di più

Basta dare il comando

sudo smartctl -a /dev/sda

Vi renderà noto tutti i parametri che usa per sapere se un disco è in buona salute o no, per esempio a me la temperatura massima ha sforato solo una volta (dopo ho comprato una ventola sparata sugli HD nella parte sotto del case e poi una sopra che butti fuori l’aria, ora va tutto ok…)

Per controlli meno accurati…

Se siete nella condizione:

Oh cazzo il disco fa strani errori

oppure

Questo disco è vecchio come mia nonna

Forse non è il caso di fare i test descritti sopra, meglio dare una controllata velocissima con

sudo smartctl -d ata -H /dev/sda

Se ottenete Failed meglio che copiate i vostri dati da qualche altra parte e buttate via il disco!

Con una interfaccia grafica

Esiste anche una interfaccia grafica molto carina e facile da usare: gsmartcontrol. Sulle tabelle riassuntive cerca anche di spiegare cosa significhino i vari parametri. Consiglio di darci un’occhiata.Screenshot

wg111v2 su debian con ndiswrapper e wpa

Maggio 14, 2008

(Ri)Scrivo esclusivamente questa guida per debian, in quanto per *buntu 8.04 sembra non più funzionare in modo totale.

Oltretutto, dall’ultimo kernel disponibile su www.kernel.org, a ndiswrapper non verrà più permesso di essere compilato come modulo; questa amara decisione è stata presa da Linus in persona in quanto, secondo lui, violerebbe la GPL della sua creatura (non essendo infatti i driver per Windows rilasciati sotto stessa licenza).

Comunque questa guida è presente anche qui qui per *buntu e qui e qui per debian etch.

Leggi il seguito di questo post »

crittografare cartella

Maggio 13, 2008

Siete alla ricerca di un qualcosa che metta al sicuro i vostri dati da occhi indiscreti? Bene, la risposta è una sola: crittografia.

La cosa è molto semplice su linux (come tutto del resto), sopratutto sulle distibuzioni debian (o derivate), come appunto *buntu. Premetto che io ho testato tutto su una kubuntu 7.10, 8.04 e debian etch. Incominciamo (comunque non mi prendo nessuna responsabilità dell’uso di quanto spiegato in seguito).

Leggi il seguito di questo post »