Connaître la taille de vos bases MySQL

Pour connaître la taille des bases de données MySQL que vous hébergez sur votre serveur, en root :

En ko :

SELECT table_schema "Data Base Name",
                     sum( data_length + index_length ) / 1024 "Data Base Size in KB",
                     sum( data_free )/ 1024 "Free Space in KB"
FROM information_schema.TABLES
GROUP BY table_schema ;

En Mo :

SELECT table_schema "Data Base Name",
                     sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB",
                     sum( data_free )/ 1024 / 1024 "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema ;

 

Tags: , ,

Auto héberger son RSS Reader, part 3

Maintenant que notre lecteur de flux tourne, deux solutions pour démarrer le démon d’update :

Démarrage :

[user@home:~]$ sudo start-stop-daemon -c www-data -Sbx /var/www/[YOUR_PATH]/rss/update_daemon2.php

Arrêt :

[user@home:~]$ killall php

Si vous avez un problème de démarrage (messages sur le GUI du type « update daemon is not running »), tapez en connaissance de cause :

[user@home:~]$ sudo chmod 777 -R /var/www/[YOUR_PATH]/rss/{cache,feed-icons,lock,lib/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer}
[user@home:~]$ sudo chown www-data\:www-data -R /var/www/[YOUR_PATH]/rss/{cache,feed-icons,lock,lib/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer}

Sinon vous pourrez toujours démarrer avec la crontab, mais vous aurez un message comme quoi le démon ne tourne pas ! Par exemple pour lancer un update toutes les 30 minutes :

[user@home:~]$ sudo crontab -l -u www-data
SHELL=/bin/bash
PATH=/bin:/usr/bin
MAILTO=user
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
*/30 *  *  *  * cd /var/www/[YOUR_PATH]/rss && /usr/bin/php update.php -feeds >/dev/null 2>&1

Bon amusement, maintenant vous avez un Google Reader @ Home.

Après quelques semaines d’utilisation, je suis à 20MB de DB MySQL occupée pour l’instant (sur 2To de Disque !!!) !

Tags: , , , ,

Auto héberger son RSS Reader, part 2

Après vous avoir indiquer comment installer Tiny Tiny RSS pour auto héberger son ex futur Google Reader, voici quelques retours et aperçus.

Pour ce qui est de la home, rien de plus classique :

Tiny Tiny RSS HomePage

Tiny Tiny RSS HomePage

Mais ça remplit son rôle et ça fournit quelques options en plus de Google Reader (et en moins) :

  • ++ Quand on clique sur « marquer tous comme lus », on passe directement à la catégorie suivante qui permet de lire en bloc des articles (j’avoue ne pas tout lire dans mes RSS, juste survoler les titres dans certaines catégories).
  • + La fenêtre qui s’affiche ouvre un volet de lecture façon Outlook qui n’est pas déplaisant. Cependant comme la majorité des RSS ne publient pas des flux de données entiers, il est irréaliste de pouvoir l’utiliser vraiment.
  • - L’affichage « Magic » marche beaucoup moins bien, les articles sont parfois désordonnés en terme de polling (i.e. des articles sont plus vieux, mais non lus, mais apparaissent plus tard dans le désordre, en fonction du polling php)
  • – En comparaison, j’ai l’impression que je perds certains flux, mais au moins je sais ceux qui ne marchent pas/plus (erreur 404 ou autre, l’appli propose directement de le supprimer ^^)

La version mobile est sympa aussi, mais pas pratique avec mes systèmes d’authentification à moi (authentification Basic Apache pour mon serveur web chez moi et monocompte Reader).

Tiny Tiny RSS Mobile Web

Tiny Tiny RSS Mobile Web

Une version Android est quand même plus pratique.

Tiny Tiny RSS Reader for Android

Tiny Tiny RSS Reader for Android

Perso j’apprécie cette application web et elle me parait aussi simple que d’utiliser mon Google Reader et chez moi.

J’ai quand même quelques soucis encore avec le polling des RSS, mais en se résolvant, ça devrait me permettre de gagner en confort et de supprimer les – et — affichés plus haut ;)

 

Tags: , , , ,

Auto-héberger son Reader RSS Web

Marre, marre de la nouvelle politique de confidentialité Google.

Du coup, je me suis dit, pourquoi ne pas héberger un Google Reader like sur mon serveur dédié, vu que refusant un compte G+, je ne peux même plus partager à mes « amis GMail » des articles sans passer par le mail, ce qui n’est pas très fun (surtout quand avant G+ cela fonctionnait très bien.

Figurer vous, que comme souvent sur le net, une bonne recherche sur Google :p m’a donné mon bonheur, il s’agit de Tiny Tiny RSS, aka tt-rss. Bonus : l’appli dispose d’une API et des applis existent déjà officielles sur l’Android Market (avec un ptit bonus sécurité puisque l’appli supporte l’authentification basic HTTP en plus de l’identification à l’API)

Tiny Tiny RSS Reader - Version Web

Tiny Tiny RSS Reader - Version Web

 

Pour l’installer, rien de bien compliqué, il vous suffit de le télécharger ici (http://tt-rss.org/download/),

Suivre ces instructions (http://blog.rom1v.com/2011/06/tiny-tiny-rss-auto-hebergement-des-flux-rss/).

Installer une base MySQL pour le stockage des flux :

mysql> CREATE DATABASE flux;
Query OK, 1 row affected (0,00 sec

mysql> GRANT ALL PRIVILEGES ON flux.* TO rss@localhost IDENTIFIED BY 'rssreader';
Query OK, 0 rows affected (0.04 sec)

mysql> USE flux
Database changed

mysql> \. ttrss_schema_mysql.sql

Copiez le fichier config.php initial dist et configurer le pour votre DB nouvellement créée.

L’application vous permet ensuite de configurer vos flux, d’importer vos ou votre Google Reader en OPML, en mode multi-utilisateurs ou non

Une fois installé et configuré à votre sauce, vous pouvez installer tt-rss sur votre Android ou y accéder depuis votre URL /mobile pour les iPhone.

Un bon moyen de sortir de l’emprise de Google assez simplement finalement.

Je galère encore un peu à cette heure à finaliser mon install (dodo), mais il n’y a plus qu’à comprendre le fonctionnement du poller en PHP et ça sera parfait.

Les pages du projet pour la doc, super cool à utiliser en Redmine :

http://tt-rss.org/redmine/

 

 

 

Tags: , , , , ,

[IPv6] ipv6.he.net certification

Ca y est je l’ai !

Je vous invite à réaliser cette certification ipv6 : http://ipv6.he.net/certification/

Elle est très bien réalisée, et vous aide au travers de différentes étapes (configuration réseau, interface 6in4 et routage, smtp/dns/http), à monter un tunnel 6in4 chez vous et obtenir gratuitement un préfixe /48 pour l’adressage de tous vos postes chez vous (quand ils sont accessibles).

Pour l’instant, IPv6 Sage avec 1022 points, pour aller plus loin, il faut soumettre un ping / traceroute / dig AAAA / dig -x / whois pour obtenir un point pour chacun des tests, afin d’être dans le Top du top avec les 1500 points maximum.

IPv6 Certification Badge for beufa

Allez pour vous donner l’eau à la bouche, la conf de mon interface 6in4 :

iface heipv6 inet6 v4tunnel
	address 2001:470:xxxx:xxx::2
	netmask 64
	endpoint 216.66.84.42  # Map IPv4/6 he.net
	gateway ::216.66.84.42 # Map IPv6/4 he.net
	local 192.168.0.yyy    # Endpoint tunnel 6in4 local
	#bring up the networking needed for LAN dual-stack
	    up /sbin/ip -6 route add ::/0 dev heipv6
	    up /sbin/ip -6 addr add 2001:470:xxx::1/64 dev eth1 # Address from IPv6 /48 Prefix
	#take it down!
	    pre-down /sbin/ip -6 addr del 2001:470:xxx::1/64 dev eth1
	    pre-down /sbin/ip -6 route del ::/0 dev heipv6

 

Bon courage !

Tags: , , , ,

[Bind] Bindgraph : surveiller l’usage de votre DNS

Utilisateur de Bind en tant que serveur local et de cache, j’ai découvert hier un outil assez sympa pour surveiller l’utilisation de Bind et les requêtes faites sur mon réseau local : BindGraph.

Pour l’installer :

$ sudo apt-get install bindgraph

Bien évidemment, il vous faut un serveur Bind et Apache fonctionnels, avec librrd4 et perl correctement installés !

Une fois installé, il est nécessaire de configurer un fichier de collecte pour le script Perl bindgraph.pl que l’on vient d’installer. Dans le fichier d’options de bind, dans la partie logging, créer le channel et la category suivants :

$ sudo vim /etc/bind/named.conf.options

logging {
        channel "querylog" {
                file "/var/log/named/query.log";
                print-time yes;
        };
        category queries { querylog; };
};

Une fois cela réalisé, une simple commande va permettre de lancer le script perl bindgraph.pl :

sudo nice -20 bindgraph.pl --daemon --logfile /var/log/named/query.log

Vous pourrez ensuite consulter l’usage last hours, quotidien, hebdomadaire, mensuel et annuel de votre serveur Bind, en vous rendant sur http://[server]//cgi-bin/bindgraph.cgi

bindgraph

Vous pouvez chercher sur Google inurl:bindgraph.cgi pour trouver des exemples de graph, comme celui-ci : https://dns.webhotel.net/cgi-bin/bindgraph.cgi

 

[Linux Samba] Montage automatique de partages avec autofs

Ayant un laptop que j’emmène partout avec moi, j’ai cherché longtemps une solution pour éviter de tout mettre dans le fichier /etc/fstab. Il y avait bien cette solution avec l’option noauto, mais cela est quand même plus propre. Qui plus est, lorsque que je monte mon VPN avec OpenVPN, les shares se montent tout seul !

Pour cela, il vous suffit d’installer le package autofs

$ sudo apt-get install autofs5

Ensuite, vous pouvez éditer le fichier /etc/auto.master, en spécifiant le dossier de montage principal (ici j’ai mis /media, mais vous trouverez beaucoup d’exemple avec /net), et le timeout de montage / démontage (ici 30sec) :

/media /etc/auto.cifs --ghost,--timeout=30

Ensuite, il suffit d’éditer le fichier des partages à monter dans /media :

$ sudo cat /etc/auto.cifs
data     -fstype=cifs,file_mode=0777,dir_mode=0755,uid=beufa,gid=users,username=beufa,password=nicepasswd,workgroup=HOME	://192.168.0.x/data
music    -fstype=cifs,file_mode=0777,dir_mode=0755,uid=beufa,gid=users,username=beufa,password=nicepasswd,workgroup=HOME	://192.168.0.x/music
video    -fstype=cifs,file_mode=0777,dir_mode=0755,uid=beufa,gid=users,username=beufa,password=nicepasswd,workgroup=HOME	://192.168.0.x/video

Bien évidemment, étant donné qu’on renseigne les mots de passe dans ce fichier, il est très important de le sécuriser un minimum :

$ chmod 400 /etc/auto.master
$ chmod 400 /etc/auto.cifs

Il y a juste 2 choses qui posent problème : normalement il est possible de spécifier les mots de passes dans un fichier credentials au format suivant :

username=beufa
password=nicepasswd
workgroup=HOME

Et ensuite spécifiez l’option suivante dans /etc/auto.cifs :

data     -fstype=cifs,file_mode=0777,dir_mode=0755,uid=beufa,gid=users,credentials=/etc/auto.auth	://192.168.0.x/data

Malheureusement, cette option me génère l’erreur suivante :

CIFS VFS: No username specified

Autre point génant, impossible de spécifier un nom de serveur, j’ai le même genre d’erreur si je remplace l’IP par le nom du serveur.

Mais voila, avec le détail de ce test autofs, vous devriez pouvoir monter vos partages Samba/Windows/CIFS à la maison ou au travers d’un VPN, et ce automatiquement !

Bon amusement !

Tags: , , , ,

[Perl] Vérifier vos sites automatiquement avec SafeBrowsing

SafeBrowsing est la base anti malware / anti phishing de Google. Intégré à Firefox et Google Chrome, il permet de valider que le site n’est pas un nid à malware ou tentative de phishing.

Exemple SafeBrowsing

Pour tester par site :

http://www.google.com/safebrowsing/diagnostic?site=beufa.net

Ou par AS :

http://www.google.com/safebrowsing/diagnostic?site=AS:15069

Des modules existent en Perl pour automatiser ces vérifications :

use Net::Google::SafeBrowsing2;
use Net::Google::SafeBrowsing2::Storage;
use Net::Google::SafeBrowsing2::Sqlite;

Ensuite, quelques lignes de Perl suffit à vérifier une liste de sites (qu’il est possible d’inclure depuis une base MySQL !)

my @sites =(
		'http://flashupdate.co.cc/',
		'http://www.beufa.net/',
		'http://www.fortinet.com/',
		'http://www.gumblar.cn'
		);

Créer une base locale, qui permettra de stocker les hashs localement

 my $storage_malware_db = Net::Google::SafeBrowsing2::Sqlite->new(file => 'goog-malware-shavar.db');
  my $malware_db = Net::Google::SafeBrowsing2->new(
        key     => "YOUR_KEY",
        storage => $storage_malware_db,
	error	=> 1,
##      debug   => 1,
##      mac     => 1,
        list    => MALWARE,
##	force	=> 1
  );

Il est possible de télécharger 2 bases (paramètre LIST) : MALWARE (goog-malware-shava.db) ou PHISHING (googpub-phish-shavar.db)

Vérifier les mises à jour :

  my $last_db1 = $storage_malware_db->last_update(list => 'goog-malware-shavar')->{time};
  my $next_db1 = $last_db1+$storage_malware_db->last_update(list => 'goog-malware-shavar')->{wait};
  my $last_db2 = $storage_phishing_db->last_update(list => 'googpub-phish-shavar')->{time};
  my $next_db2 = $last_db2+$storage_phishing_db->last_update(list => 'googpub-phish-shavar')->{wait};

  print color 'reset'; print color 'bold yellow';
  print "---   ----------------------------------   ----\n";
  print "---   Updates of Google SafeBrowsing DBs   ----\n";
  print "---   ----------------------------------   ----\n";
  print color 'reset';  print color 'cyan';
  print "\t > Last Up. (google-malware-shavar) : ".scalar(localtime($last_db1))."\n";
  print "\t > Next Up. (google-malware-shavar) : ".scalar(localtime($next_db1))."\n";
  print "\t > Last Up. (googpub-phish-shavar)  : ".scalar(localtime($last_db2))."\n";
  print "\t > Next Up. (googpub-phish-shavar)  : ".scalar(localtime($next_db2))."\n";
  print color 'reset';

Vérifiez ensuite que chacun des sites n’est pas dans les hashs Google SafeBrowsing :

print color 'reset'; print color 'bold yellow';
  print "--- -------------------------------------- ----\n";
  print "--- Checking for Malwares Distribution URL ----\n";
  print "--- -------------------------------------- ----\n";
  foreach $site (@sites) {
	my $match_malware = $malware_db->lookup(url => $site);
	if ($match_malware eq MALWARE) {
		print color 'reset'; print color 'bold red';
        	print "\t(MAL)\tNOK => ".$site." => MALWARE \n";
	}
	else {
		print color 'reset'; print color 'green';
        	print "\t\tOK  => ".$site."\n";
	}
  }
  print color 'reset';
  print color 'reset'; print color 'red';
  print "--- Errors for Malwares Distribution Check ----\n";
  print "Last malware_db error: ", $malware_db->last_error(), "\n";
  print "--- -------------------------------------- ----\n";
  $storage_malware_db->close();

Le résultat :

user@pc:~$ perl Bureau/safeb
---   ----------------------------------   ----
---   Updates of Google SafeBrowsing DBs   ----
---   ----------------------------------   ----
	 > Last Up. (google-malware-shavar) : Fri Nov 11 10:44:43 2011
	 > Next Up. (google-malware-shavar) : Fri Nov 11 11:14:49 2011
	 > Last Up. (googpub-phish-shavar)  : Fri Nov 11 10:44:57 2011
	 > Next Up. (googpub-phish-shavar)  : Fri Nov 11 11:16:36 2011
--- -------------------------------------- ----
--- Checking for Malwares Distribution URL ----
--- -------------------------------------- ----
	(MAL)	NOK => http://flashupdate.co.cc/ => MALWARE
		OK  => http://beufa.net
		OK  => http://fortinet.com
		OK  => http://gumblar.cn
--- Errors for Malwares Distribution Check ----
Last malware_db error:
--- -------------------------------------- ----
--- -------------------------------------- ----
--- Checking for Phishing Distribution URL ----
--- -------------------------------------- ----
		OK  => http://flashupdate.co.cc/
		OK  => http://beufa.net
		OK  => http://fortinet.com
		OK  => http://gumblar.cn
--- Errors for Phishing Distribution Check ----
Last phishing_db error:
--- -------------------------------------- ----

Bon amusement !

A venir : scan de pages avec ClamAV et son module File::Scan::ClamAV

Tags: , , , ,

Blog is back … enfin bientôt !

Bienvenue sur mon premier post, certes vide, de mon nouveau blog … Je n’avais plus le temps de m’intéresser à la sécurité d’aussi près, alors j’ai décidé de monter ce nouveau blog, sur mon hébergement plutôt que chez Blogger.

Vos commentaires sont les bienvenus, même si ils seront de toute évidence modérés.

Ce blog n’engage bien sûr que mon expérience technique personnelle, en aucun cas elle n’engage ma société !

Tags: