Archives pour juin, 2009

hbIRCS : support des connexions sécurisées SSL/TLS

Après 1 mois de travail laborieux, une javadoc bien trop légère sur le sujet, quasiment aucune aide Google (ce post fut tout de même déterminant), 3 implémentations différentes, pas loin d’une centaine de compilations et des sessions de debug interminables…  c’est fait : les connexions sécurisées SSL/TLS sont supportées par mon serveur IRC.

Évidemment, je n’utilise pas les sockets SSL de Java 1.4 – ce serait trop simple – mais le délicat SSLEngine de Java 5 qui apporte le support TLS/SSL aux sockets NIO, bref du TLS taillé pour des I/O non bloquantes en environnement multithreadé :

the SSLEngine can be used for a wide variety of I/O types, such as non-blocking I/O (polling), selectable non-blocking I/O, Socket and the traditional Input/OutputStreams, local ByteBuffers or byte arrays, future asynchronous I/O models , and so on.

Allez, si tout est stable, le code sera commité en fin de semaine.

[00:25:21]  * Looking up localhost
[00:25:21]  * Connecting to localhost (::1) port 9999...
[00:25:21]  * * Subject: /C=FR/ST=Ile-de-France/L=Paris/O=HBIRCS/OU=HBIRCS/CN=localhost
[00:25:21]  * * Issuer: /C=FR/ST=Ile-de-France/L=Paris/O=HBIRCS/OU=HBIRCS/CN=localhost
[00:25:21]  * * Subject: /C=FR/ST=Ile-de-France/L=Paris/O=HBIRCS/OU=HBIRCS/CN=localhost
[00:25:21]  * * Issuer: /C=FR/ST=Ile-de-France/L=Paris/O=HBIRCS/OU=HBIRCS/CN=localhost
[00:25:22]  * * Certification info:
[00:25:22]  *   Subject:
[00:25:22]  *     C=FR
[00:25:22]  *     ST=Ile-de-France
[00:25:22]  *     L=Paris
[00:25:22]  *     O=HBIRCS
[00:25:22]  *     OU=HBIRCS
[00:25:22]  *     CN=localhost
[00:25:22]  *   Issuer:
[00:25:22]  *     C=FR
[00:25:22]  *     ST=Ile-de-France
[00:25:22]  *     L=Paris
[00:25:22]  *     O=HBIRCS
[00:25:22]  *     OU=HBIRCS
[00:25:22]  *     CN=localhost
[00:25:22]  *   Public key algorithm: rsaEncryption (1024 bits)
[00:25:22]  *   Sign algorithm md5WithRSAEncryption
[00:25:22]  *   Valid since Jun  1 13:10:42 2009 GMT to Aug 30 13:10:42 2009 GMT
[00:25:22]  * * Cipher info:
[00:25:22]  *   Version: TLSv1/SSLv3, cipher DHE-RSA-AES256-SHA (256 bits)
[00:25:22]  * * Verify E: self signed certificate.? (18) -- Ignored
[00:25:22]  * Connected. Now logging in...
[00:25:22]  * Welcome to the hbIRCS IRC Network bhuisgen!bhuisgen@localhost
[00:25:22]  * Your host is irc.bhuisgen.fr, running version 0.2.0-UNSTABLE
[00:25:22]  * This server was created Tue Jun 30 00:24:22 CEST 2009
[00:25:22]  * irc.bhuisgen.fr 0.2.0-UNSTABLE aiwroOs abeiIklmnoOpqrstv
[00:25:22]  * NICKLEN=15 CHANNELLEN=50 TOPICLEN=4096 PREFIX=(ov)@+ CHANTYPES=#&+!
 CHANMODES=abeiIklmnoOpqrstv CASEMAPPING=UTF-8 NETWORK=hbIRCS IRC Network :are supported by this server
[00:25:22]  * There are 1 users and 0 invisible on 1 servers
[00:25:22]  * 0 :operator(s) online
[00:25:22]  * 0 :channels formed
[00:25:22]  * I have 1 clients and 0 servers.
[00:25:22]  * Current local users: 1 Max: 1
[00:25:22]  * Current global users: 1 Max: 1
[00:25:22]  * - irc.bhuisgen.fr Message of the Day -
[00:25:22]  * -
[00:25:22]  * -     _/        _/        _/_/_/  _/_/_/      _/_/_/    _/_/_/
[00:25:22]  * -    _/_/_/    _/_/_/      _/    _/    _/  _/        _/
[00:25:22]  * -   _/    _/  _/    _/    _/    _/_/_/    _/          _/_/
[00:25:22]  * -  _/    _/  _/    _/    _/    _/    _/  _/              _/
[00:25:22]  * - _/    _/  _/_/_/    _/_/_/  _/    _/    _/_/_/  _/_/_/
[00:25:22]  * -
[00:25:22]  * -                 Welcome on hbIRCS IRC server !
[00:25:22]  * End of /MOTD command
[00:25:22]  * Found your IP: [127.0.0.1]
[00:25:22]  * irc.bhuisgen.fr sets mode +w bhuisgen
[00:25:22]  * irc.bhuisgen.fr sets mode +i bhuisgen
[00:25:22]  * irc.bhuisgen.fr sets mode +s bhuisgen
[00:25:37]  * You are now an IRC operator

Exim : refuser la réception de mails selon l’adresse d’expédition

Sous Exim, pour refuser l’envoi de SPAM, il est possible de constituer une liste sous la forme d’un fichier texte contenant les emails des expéditeurs à refuser.

Pour ce faire, dans le fichier de configuration, on déclare l’ACL qui va être appellée au moment de la vérification du sender, puis on la définit :

######################################################################
#                    MAIN CONFIGURATION SETTINGS                     #
######################################################################

acl_smtp_mail = acl_check_sender

[...]

######################################################################
#                       ACL CONFIGURATION                            #
#         Specifies access control lists for incoming SMTP mail      #
######################################################################

begin acl

# This access control list is used to check every MAIL FROM in an incoming
# SMTP message. The tests are run in order until the address is either
# accepted or denied.

acl_check_sender:
 deny    senders = /etc/exim/sender_reject.list
 accept

Chaque email à bloquer devra être ajoutée dans le fichier sender_reject.list (une adresse par ligne). Pour valider la nouvelle configuration du serveur SMTP, rien de tel qu’un :

# exim -C /etc/exim/exim.conf -bV

En pratique, lors de l’envoi d’un mail par un expéditeur bloqué, il se produit une erreur 550, comme le montre cette session telnet :

220 smtp.mailserver.fr ESMTP Exim 4.69 Mon, 20 Jun 2009 20:03:58 +0200
EHLO test
250-smtp.mailserver.fr Hello test [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN LOGIN
250-STARTTLS
250 HELP
MAIL FROM:<someuser@somedomain.com>
550 Administrative prohibition

BackupPC : lancement de tâches en ligne de commande

Il est parfois utile de piloter les tâches de BackupPC par la ligne de commande. Par exemple, lancer l’archivage d’un ou plusieurs clients ou plus simplement une backup incrémentale. Je vous fais donc part d’un récapitulatif des commandes que j’ai pu utiliser.

Lancer une backup incrémentale du client client.my.domain d’adresse IP 192.168.0.1 :

# BackupPC_serverMesg backup 192.168.0.1 client.my.domain backuppc 0

Lancer une backup full d’un client client.my.domain (l’hôte étant résolvable) :

# BackupPC_serverMesg backup client.my.domain client.my.domain backuppc 1

Empécher ou délayer la sauvegarde du client client.my.domain pour une heure :

# BackupPC_serverMesg stop client.my.domain backuppc 1

Mettre en queue la sauvegarde de tous les clients :

# BackupPC_serverMesg backup all

Créer une archive de client.my.domain sur le serveur d’archivage localhost :

# BackupPC_archiveStart localhost backuppc client.my.domain

Note : la compression de l’archive sera à effectuer manuellement (cf forum).

Afficher toutes les tâches en cours :

# BackupPC_serverMesg status jobs

Le reste des commandes est détaillée dans la documentation officielle.

Mac OS X : launchd et détection des périphériques amovibles

Le système launchd de Mac OS X (10.4 et +) permet de détecter le branchement d’un volume amovible (clé USB, disque dur, etc). Un script particulier peut donc être lancé suite à cette détection, telle qu’une copie de vos documents ou  le lancement d’une sauvegarde (rsync ou autre). La détection s’appuie sur le nom du volume : /Volumes/<NOM>

Un exemple de script launchd qui lance automatiquement le script shell usb-hotplug au branchement du volume « USB » :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Label</key>
 <string>fr.hbis.usb-hotplug</string>
 <key>Program</key>
 <string>/Users/bhuisgen/Library/Scripts/usb-hotplug</string>
 <key>ProgramArguments</key>
 <array>
 <string>usb-hotplug</string>
 </array>
 <key>WatchPaths</key>
 <array>
 <string>/Volumes/USB</string>
 </array>
</dict>
</plist>

Comme toujours pour lancer un script launchd :

$ launchctl load -w fr.hbis.usb-hotplug

FreeBSD 7 : identificateurs d'objets SNMP

Les identificateurs d’objects OID SNMP sous FreeBSD 7 ont changé.

Voici la liste des plus utilisés :

CPU / User : .1.3.6.1.4.1.2021.11.50.0
CPU / Nice : .1.3.6.1.4.1.2021.11.51.0
CPU / System : .1.3.6.1.4.1.2021.11.52.0
Load / 1 min : .1.3.6.1.4.1.2021.10.1.3.1
Load / 5 min : .1.3.6.1.4.1.2021.10.1.3.2
Load / 15 min : .1.3.6.1.4.1.2021.10.1.3.3
Memory / Buffers : .1.3.6.1.4.1.2021.4.14.0
Memory / Cache : .1.3.6.1.4.1.2021.4.15.0
Memory / Free : .1.3.6.1.4.1.2021.4.6.0
Network / All : .1.3.6.1.2.1.31.1.1.1

Gentoo : portage et collision de fichiers

Parfois, portage peut signaler une collision de fichiers et refuser la poursuite de l’installation d’un package :

>>> Installing sys-libs/timezone-data-2009c
* checking 1712 files for package collisions
1000 files checked ...
* This package will overwrite one or more files that may belong to other
* packages (see list below). You can use a command such as `portageq
* owners / <filename>` to identify the installed package that owns a
* file. If portageq reports that only one package owns a file then do
* NOT file a bug report. A bug report is only useful if it identifies at
* least two or more packages that are known to install the same file(s).
* If a collision occurs and you can not explain where the file came from
* then you should simply ignore the collision since there is not enough
* information to determine if a real problem exists. Please do NOT file
* a bug report at http://bugs.gentoo.org unless you report exactly which
* two packages install the same file(s). Once again, please do NOT file
* a bug report unless you have completely understood the above message.
*
* Detected file collision(s):
*
*     /usr/bin/tzselect
*     /usr/sbin/zic
*     /usr/sbin/zdump
*     /usr/share/zoneinfo/GB
*
* Package 'sys-libs/timezone-data-2009c' NOT merged due to file
* collisions. If necessary, refer to your elog messages for the whole
* content of the above message.

Les fichiers en collision ont été installés par un autre package; il refuse donc de les supprimer. Si cela est nécessaire, il est possible de le débloquer :

# COLLISION_IGNORE="/usr" emerge -av timezone-data

Nginx : astuces pour un hébergement mutualisé

Deux astuces dans le cadre d’un hébergement mutualisé de plusieurs sites avec Nginx.

En premier lieu, il est possible d’inclure des fichiers de configuration par l’option include. Ceci permet alors de créer un répertoire vhosts dédié aux fichiers de configuration de chaque site. Dans le fichier de configuration principal, il faut ajouter par ex :

http {
[...]
# virtual hosts
 include /usr/local/etc/nginx/vhosts/*.conf;
}

Tous les fichiers .conf du répertoire vhosts seront alors inclus. Si un vhost doit être temporairement désactivé, il suffit de changer l’extension de son fichier.

La deuxième astuce touche l’utilisation du module FastCGI. Dans chaque vhost, il faut déclarer le support FastCGI pour PHP, Perl, etc… Il est possible de limiter cette déclaration à ces lignes :

location ~ \.php$ {
 fastcgi_pass   unix:/tmp/fcgi-php.sock;
 fastcgi_index  index.php;
 include        fastcgi_params;
 }

en rajoutant la ligne suivante dans le fichier fastcgi_params :

# Virtual hosts support
fastcgi_param SCRIPT_FILENAME   $document_root$fastcgi_script_name;

Haut de page