Monday, October 07, 2013

Postfix Admin Autoresponder and RoundCube webmail 0.9.x

Woke up today to an issue with a friend's webmail, specifically:

PHP Fatal error:  Class 'rcube_mdb2' not found in /usr/share/roundcubemail/plugins/pfadmin_autoresponder/pfadmin_autoresponder.php

which meant that the vacation plugin for RoundCube was not working. Rather quick I found that roundcube webmail was updated recently to 0.9.4 which caused the plugin to stop working, because in 0.9 there's a new interface for plugins. Found on google that some other people had the same issue and the recommendation was to use some other vacation plugin. The problem with this one was that the SQL schema it uses is different than the one I already have. Digging a bit into the code, found that this plugin hit the same issue with Class rcube_mdb2 and fixed it by checking if a certain class is present and using either rcube_mdb2 or rcube_db::factory which meant for me that I can change all occurrences in my plugin from new rcube_mdb2 to rcube_db::factory and make the old plugin work. Quickly did that and now the old plugin works. Below you can find the changes:

--- pfadmin_autoresponder.php.orig 2013-10-07 12:07:18.037672190 +0300
+++ pfadmin_autoresponder.php 2013-10-07 12:06:55.001055439 +0300
@@ -110,7 +110,7 @@

     if (!$rcmail->config->get('db_persistent')) {
       if ($dsn = $rcmail->config->get('db_dsnw')) {
-        $rcmail->db = new rcube_mdb2($dsn, '', FALSE);    
+        $rcmail->db = rcube_db::factory($dsn, '', FALSE);    
       }
     }

@@ -221,7 +221,7 @@
     $sql = $this->sql_select;

     if ($dsn = $rcmail->config->get('db_pfadmin_autoresponder_dsn')) {
-      $db = new rcube_mdb2($dsn, '', FALSE);
+      $db = rcube_db::factory($dsn, '', FALSE);
       $db->set_debug((bool)$rcmail->config->get('sql_debug'));
       $db->db_connect('r');
     } else {
@@ -239,7 +239,7 @@
     $ret = $db->fetch_assoc($res);
     if (!$rcmail->config->get('db_persistent')) {
       if ($dsn = $rcmail->config->get('db_dsnw')) {
-        $rcmail->db = new rcube_mdb2($dsn, '', FALSE);    
+        $rcmail->db = rcube_db::factory($dsn, '', FALSE);    
       }
     }
     return $ret;  
@@ -250,7 +250,7 @@
     $cfg = rcmail::get_instance()->config;
     
     if ($dsn = $cfg->get('db_pfadmin_autoresponder_dsn')) {
-      $db = new rcube_mdb2($dsn, '', FALSE);
+      $db = rcube_db::factory($dsn, '', FALSE);
       $db->set_debug((bool)$cfg->get('sql_debug'));
       $db->db_connect('w');
     } else {


Wednesday, October 26, 2011

Tot din categoria parcarea in Romania

bineinteles ca nu se putea parca nici in stinga nici in dreapta


Monday, August 15, 2011


Linus Torvalds si Greg Kroah-Hartman

despre 20 de ani de Linux

LinuxCon Japan 2011




Thursday, August 04, 2011

Certificari RHCSA / RHCE

Am fost ocupat in ultimele 3 saptamini cu recapitulatul pentru examenele EX200/EX300 adica RedHat Certified System Administrator / RedHat Certified Engineer. Fiind ca le-am dat pe banii mei, vroiam sa le iau din prima incercare, mai ales ca "first time pass percentage" pentru ele e pe la 50%.


The results of your EX200 Exam are reported below.

Passing score for the exam:    210.0
Your score:                    264

Result: PASS

Congratulations -- you have earned the EX200 Certificate

Am fost putin stresat pentru ca am uitat sa adaug doua servicii in firewall, dar pina la urma se pare ca nu m-a costat mult (264/300).


The results of your EX300 Exam are reported below.

Passing score for the exam:    210.0
Your score:                    300

Result: PASS

Congratulations -- you have earned the EX300 Certificate.

Aici am pierdut ceva timp cu o chestie stupida, dar nu am mai facut greseala anterioara, dupa fiecare serviciu am activat firewall-ul, verificat local si remote: Rezultatul 300 din 300 puncte.

Wednesday, July 27, 2011

OpenFire, SSL si certificate intermediare CA

Dupa cite am observat in ultima vreme mai toate (sau toate?) Root CA Authorities nu mai emit direct certificate semnate de ele, ci toate folosesc un Intermediate CA ca sa semneze certificatul (din motive de securitate). Majoritatea serverelor au o optiune care sa-ti permita sa specifici acest Intermediate CA, de exemplu la Apache:


SSLCertificateFile /etc/pki/tls/certs/domeniu.crt
SSLCertificateKeyFile /etc/pki/tls/private/domeniu.key
SSLCertificateChainFile /etc/pki/tls/certs/RapidSSL_CA.pem

Din pacate Openfire nu are o astfel de optiune si aici solutia este sa introduci certificatul in 'truststore' o baza de date cu certificate 'trusted'. Solutia pentru Openfire este:

/opt/openfire/jre/bin/keytool -import -trustcacerts -keystore \ /opt/openfire/resources/security/truststore -file \
/etc/pki/tls/certs/RapidSSL_CA.pem -alias RapidSSL_CA

dupa acest pas se reporneste Openfire si se incarca certificatul. Daca nu am fi incarcat Intermediate CA-ul in truststore, ar fi dat eroare pasul in care incercam sa incarcam certificatul.

Parola implicita pentru truststore este 'changeit'.

Tuesday, July 19, 2011

Volume criptate in Linux (partea a 2-a)

Cum am promis, cum sa montam automat un device criptat in Linux. Din cauza ca un device criptat intii se "deschide" nu il putem pune direct in /etc/fstab, asa ca pentru astfel de device-uri exista /etc/crypttab.
Formatul pentru crypttab (simplific pentru volume LUKS) este:

<nume>   <device>   none

unde nume este numele sub care va fi disponibil device-ul criptat (/dev/mapper/),
device este volumul criptat (/dev/sdb3 de exemplu)
al 3-lea cimp este pentru parola, none in cazul nostru pentru ca vrem sa fie citita de la consola

O mica paranteza, in loc de device putem pune UUID-ul device-ului, pentru ca volumele formatate cu LUKS au in header un UUID, care se poate citi cu comanda cryptsetup luksUUID /dev/device. Folosing UUID in ne ajuta daca /dev/sdb3 se "muta" din diferite motive.



# cryptsetup luksUUID /dev/sdb3
3743ed56-2ab4-44d8-ad22-6f9c1bc4f1f1

Pentru exemplul din postul anterior, /etc/crypttab devine:

sdb3      UUID=3743ed56-2ab4-44d8-ad22-6f9c1bc4f1f1      none

Iar pentru montarea automata in /etc/fstab, linia din fisier este:

/dev/mapper/sdb3   /secret   ext4   defaults    0 0

Spor la criptat date! 

Volume criptate in Linux

Postul asta are doua scopuri: sa-mi aduc aminte cum se foloseste cryptsetup in Linux si sa ramina "pentru posteritate".

In Linux sunt 2 solutii pentru criptarea datelor:

  • cryptsetup simplu, unde criptezi cu dm-crypt o partitie, volum LVM sau un fisier. Spun ca e simplu pentru ca poti folosi o parola sau un fisier pentru securizarea datelor si cam atit. Nu ca asta le face mai putin sigure, dar e mai complicat cind pierzi parola sau fisierul.
  • cryptsetup folosind LUKS (Linux Unified Key Setup) solutie care o voi descrie in contiuare. Cu LUKS exista posibilitatea de a folosi mai multe chei (sunt 8 sloturi) pentru criptarea datelor
Pentru inceput alegem device-ul ce va fi criptat, in acest exemlu /dev/sdb3

/dev/sdb3           19453       38913   156320482+  83  Linux

Alegem cifru AES-256, hash pentru parola SHA512 iar linia de comanda pentru crearea partitiei criptate va fi:

# cryptsetup -c aes -s 256 -h sha256 luksFormat /dev/sdb3
WARNING!
========
This will overwrite data on /dev/sdb3 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Dupa aceasta operatie, avem o partitie criptata si atit. Pasul urmator e sa o "deschidem" ca sa o putem formata cu un sistem de fisiere ca sa putem folosi partitia ca pe orice alta partitie:

# cryptsetup luksOpen /dev/sdb3 sdb3
Enter LUKS passphrase for /dev/sdb3:
key slot 0 unlocked.
Command successful.

Dupa aceasta comanda, vom avea acces la partitia criptata prin /dev/mapper/sdb3 (am ales numele sa fie identic cu partitia ca sa fie mai simplu pentru mine). Pasul urmator e sa formatam partitia:

# mkfs.ext3 -i 65536 /dev/mapper/sdb3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
2443264 inodes, 39079863 blocks
1953993 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
1193 block groups
32768 blocks per group, 32768 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Acum putem monta partitia /dev/mapper/sdb3 unde dorim:

# mount /dev/mapper/sdb3 /mnt/
# df | grep sdb3
/dev/mapper/sdb3     156003840    192072 147995796   1% /mnt

Cind nu mai avem nevoie de partitia criptata, se va demonta si inchide device-ul (cryptsetup luksClose /dev/mapper/sdb3).

Voi reveni in alt post cu solutii de montare automata a partitiilor criptate.



Friday, July 15, 2011

WRT54GL Bridge mode

Am cautat pe google destul de mult cum poti sa pui un WRT54GL in bridge mode (adica sa nu ai routing activat, vrei ca clientii de pe wireless sa fie in aceeasi retea cu clientii de pe LAN) si jumatate din raspunsuri au fost 'nu se poate' cealalta jumatate erau 'pune DD-WRT pe el'. Cu ajutorul unui prieten m-am luminat (desi culmea el m-a intrebat cum se face pentru ca modificase ceva si nu ii mai mergea :) ).

Solutia e exterm de simpla: pui cablul in orice port de LAN in loc de portul de WAN, deoarece porturile de LAN sunt deja in bridge cu portul Wireless.
Ca sa nu ai probleme cu eventualele servere DHCP deja existente pe retea trebuie sa dezactivezi serverul DHCP din WRT54GL.
Administrarea ulterioara o faci prin IP-ul local al echipamentului.

Focus follows mouse pe Windows

Fiind "in deplasare" acum, sunt cam obligat sa folosesc desktop-ul sotiei, care ruleaza Windows. Primul lucru care il simti cind treci de la Linux la Windows e ca trebuie sa dai un click in plus pe fiecare fereastra unde vrei sa scrii ceva.

Dupa ceva cautare am gasit solutia: TXMouse care face focus follows mouse si ca bonus, mouse select to clipboard, si paste cu middle-click.

Recomand tuturor utilizatorilor de Linux care sunt "refugiati" pe un Windows.

Monday, June 06, 2011

Parole Parole Parole

M-a luat putin cu fiori cind am vazut articolul acesta: http://blog.zorinaq.com/?e=43. Cu o investitie relativ modesta (sub 1500EUR) poti sa-ti cumperi o masina care sa "sparga" prin brute-force un hash MD5 cu o viteza de 33 miliarde de hash-uri verificate pe secunda (33GHash/s). Pentru unii poate aceste numere nu inseamna mare lucru, dar sa facem niste calcule. Presupunem ca parola care o folosesti in mod curent este din 8 caractere, litere mari si mici si include si cifre: 26+26+10 = 62 caractere posibile. Numarul de combinatii este de 62 la puterea 8 (numarul de caractere).

62^8 = 218,340,105,584,896 combinatii

218,340,105,584,896 combinatii / 33,000,000,000 Hash/s / 3600 (sec. intr-o ora) = 1.83h

Deci pe o masina relativ ieftina se poate sparge o parola relativ complexa in 1.83 ore. Wow!
Cum parolele care le folosesc eu de obicei sunt din 10 caractere, litere mari si mici si cifre, am fost extrem de curios sa vad cit rezista:

62^10 / 33,000,000,000 / 60 / 60 / 24 = 294.36 zile (cam 9 luni).

Probabil ca unii s-ar simti in siguranta cu 9 luni, dar sincer e o perioada foarte scurta, avind in vedere faptul ca algoritmul folosit e extrem de paralelizabil, si singura bariera e costul, care pentru guverne si corporatii cu bani de aruncat nu e o problema. Cheltui 1milion de EUR si cresti viteza de 1000 de ori si cele 9 luni se reduc la 7h pentru o solutie care o credeai destul de sigura.

Ce e de facut atunci ? Poti creste complexitatea parolei (simboluri pe linga ce ai deja) si la o parola de 10 caractere din 62 caractere posibile mai adaugi inca 10 caractere (simbolurile): ai trecut de la 297 zile la 1313 zile, solutie foarte putin satisfacatoare. Cresti lungimea parolei de la 10 la 11 caractere (fara simboluri) si deja creste timpul de la 9 luni la 50 de ani. Asa mai da! :) Si in final de la 10 la 12 caractere (tot fara simboluri) ajungi la 3100 ani, lucru care si cresterea vitezei de 1000 de ori il reduce la 3.1 ani, care pe mine ma satisface: Daca cineva e dispus sa consume 3 ani de energie (cam 1MW/h, in 3 ani ajungi pe la 900,000 EUR) ca sa-mi sparga mie o parola, distractie placuta!

Concluzia pentru cei care vor securitate e:
- 12 caractere cel putin pentru parole
- folositi hash-uri mai complexe ( si mai lent de implementat - inca ) SHA512

http://www.youtube.com/watch?v=eZFs33Eq0-M pentru inspiratie.

Spor!