Archives pour la catégorie ‘Administration’

OpenSSH : journaliser les transferts SFTP

OpenSSH journalise par défaut les évènements d’erreur et d’authentification. Ceci n’est pas suffisant dans le cas d’un serveur SFTP public, où une trace complète des transferts est nécessaire. Pour rectifier le tir et obtenir un fichier journal dédié aux connexions SFTP, il est nécessaire de modifier la configuration d’OpenSSH, en particulier celle du processus sftp-server.

Pour ce faire, dans le fichier de configuration du serveur /etc/ssh/sshd_config, ajoutez les deux options suivantes :

# override default of no subsystems
Subsystem       sftp    /usr/lib/misc/sftp-server  -f LOCAL7 -l INFO

On déclare donc que le serveur SFTP doit envoyer tous les évènements possibles (niveau INFO) vers la facilité LOCAL7 du serveur de journalisation système. Vous pouvez évidemment la modifier si celle-ci est déjà utilisée par une autre application.

La seconde étape est dépendante de votre serveur de journalisation. Je présume ici qu’il s’agit de syslog-ng. Il convient donc de déclarer une destination, un filtre et la la règle associée. Tout ceci étant éclaté dans votre fichier de configuration pour respecter l’ordre de définition :

# destinations
destination sftp { file("/var/log/sftp.log"); };
[...]
# filters
filter f_sftp { facility(local7); };
[...]
# logs
log { source(src); filter(f_sftp); destination(sftp); };

Une fois le serveur OpenSSH et le serveur de journalisation redémarré, le logging est en place :

# tail sftp.log
May  2 21:15:54 tele2itwww1 sftp-server[15332]: opendir "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02"
May  2 21:15:54 tele2itwww1 sftp-server[15331]: closedir "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02"
May  2 21:15:54 tele2itwww1 sftp-server[15332]: closedir "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02"
May  2 21:15:55 tele2itwww1 sftp-server[15331]: open "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02/subscriptions_address_coverage_report_2010-05-02_1272808802.xls" flags READ mode 0666
May  2 21:15:55 tele2itwww1 sftp-server[15332]: open "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02/subscriptions_number_coverage_report_2010-05-02_1272808802.xls" flags READ mode 0666
May  2 21:15:55 tele2itwww1 sftp-server[15331]: close "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02/subscriptions_address_coverage_report_2010-05-02_1272808802.xls" bytes read 9728 written 0
May  2 21:15:55 tele2itwww1 sftp-server[15332]: close "/home/www/sites/tele2.it/www/scripts/exports/subscriptions_reports/2010/05/02/subscriptions_number_coverage_report_2010-05-02_1272808802.xls" bytes read 24576 written 0
May  2 21:15:57 tele2itwww1 sftp-server[15331]: session closed for local user cdevincenzo from [83.103.25.92]
May  2 21:15:57 tele2itwww1 sftp-server[15332]: session closed for local user cdevincenzo from [83.103.25.92]
May  2 21:15:57 tele2itwww1 sftp-server[14759]: session closed for local user cdevincenzo from [83.103.25.92]

Exim : désactiver les requêtes IDENT

Exim réalise par défaut des requêtes IDENT, correspondant à des connexions sortantes vers le port 113 des hôtes, afin de les identifier.  N’étant pas nécessaires d’un point de vue sécurité, ces requêtes ralentissent le traitement de chaque message. Pour y remédier, il est possible de les désactiver en ajoutant à votre fichier de configuration l’option suivante :

rfc1413_query_timeout = 0s

Le traitement des messages n’est donc plus ralenti inutilement.

Système : copie d’un disque par le réseau

Sur la machine cible :

# netcat -vv -l -p 7000 | dd of=/dev/hdb
listening on [any] 7000 ...
connect to [192.168.100.166] from maggie.interact.lu [192.168.100.100] 53106

Sur la machine source :

# dd if=/dev/hdb | netcat -vv 192.168.100.166 7000
Warning: Inverse name lookup failed for `192.168.100.166'
192.168.100.166 7000 (afs3-fileserver) open

OpenSSH : restreindre l’accès utilisateur en SFTP

Pour limiter l’accès sécurisé d’un utilisateur au mode SFTP uniquement, le plus simple est d’utiliser un shell prévu à cet effet. C’est le cas de rssh (Restricted Secure Shell) qui autorise l’accès unique, et au choix, aux commandes suivantes : scp, sftp, rsync et cvs. L’environnement peut être également chrooté (pour éviter le parcours de l’arborescence) mais cela implique une cohérence dans les accès au répertoire de base du chroot (par exemple /home), auquel sera ajouté automatiquement le login de l’utilisateur (/home/user).

Voici un exemple de fichier de configuration /etc/rssh.conf où seul l’accès SFTP est autorisé par défaut :

logfacility = LOG_USER
# Leave these all commented out to make the default action for rssh to lock
# users out completely...
#allowscp
allowsftp
#allowcvs
#allowrdist
#allowrsync
# set the default umask
umask = 022
# If you want to chroot users, use this to set the directory where the root of
# the chroot jail will be located
chrootpath = /home

La configuration étant faite, les comptes utilisateurs sont à modifier avec le changement du shell et également du groupe primaire, afin de gérer au mieux les permissions d’accès aux fichiers :

# usermod -s /usr/bin/rssh bhuisgen
# usermod -g clients bhuisgen

Enfin, un petit test de connexion :

$ ssh bhuisgen@127.0.0.1
Password:
Last login: Fri Mar 26 11:46:29 CET 2010 from bart.interact.lu on pts/3

This account is restricted by rssh.
Allowed commands: sftp

If you believe this is in error, please contact your system administrator.

Connection to 127.0.0.1 closed.

C’est bon, l’utilisateur n’a donc plus d’accès shell et il doit utiliser obligatoirement un client SFTP.

Système : trier les processus par nombre de descripteurs

# lsof -n | awk '{print $1}' | sort |  uniq -c | sort -rn | head

Pour classer uniquement par descripteur de type socket :

# lsof -ni | awk '{print $1}' | sort |  uniq -c | sort -rn | head

Messagerie : exemple de filtre sieve

Voici un exemple de filtre sieve. Il inclut le filtre global spam.sieve ainsi que le filtre personnel vacation.sieve (dont la ligne sera à décommenter pour être actif). Il y a quelques règles pour flager les mails (TODO, monitoring, etc), les classer (cron, mailings) et les marquer automatiquement comme lus.

require "fileinto";
require "imap4flags";
require "include";
require "regex";

include :global "spam.sieve";
#include :personal "vacation.sieve";

# important
if anyof (
   address "from" "alert@hbis.fr",
   header :regex ["subject"][".*security alert.*"]) {
   addflag "$label1"; # important
}

# todo
if header :regex ["subject"] [".*TODO.*"] {
   addflag "$label4"; # todo
}

# mailings
if exists "List-Id" {
   fileinto "INBOX.mailings";
}

# backup
if header :regex ["subject"] [
   ".*backup.*"] {
   fileinto "INBOX.admin.backup";
}

# cron
if exists "X-Cron-Env" {
 fileinto "INBOX.admin.cron";
}

# periodic
if header :regex ["subject"] [
                    ".* security run output",
                    ".* monthly run output",
                    ".* daily run output",
                    ".* weekly run output"] {
 fileinto "INBOX.admin.periodic";
}

# awstats
if header :regex ["subject"] [
                    "awstats report"] {
 fileinto "INBOX.admin.awstats";
 setflag "\\seen";
}

Le script ci-dessous est un exemple de répondeur automatique, dont les notifications sont limitées à une seule notification par jour (pour un même expéditeur) :

require "vacation";

vacation
   :days 1
   :subject "Out of office"
   "I'm currently out of office.";

N’oubliez pas que les options disponibles dépendent de l’implémentation et des extensions de votre serveur SIEVE.

Thunderbird : afficher votre quota mail

Depuis sa version 3, Thunderbird ne nécessite plus d’extension pour afficher l’état d’occupation de votre de espace de stockage mail. Par défaut, il s’affiche au moment où 75 % du quota est atteint.

Pour l’afficher constamment, vous devez modifier sa configuration :
- dans la boîte de dialogue des options / préférences de votre client, sélectionnez l’onglet ‘Avancé’ puis ‘Général’.
- cliquez sur le bouton ‘Editeur de configuration’.
- saisissez ‘quota’ dans le filtre d’affichage.
- modifiez la variable mail.quota.mainwindow_threshold.show en fixant sa valeur à 0.

- Redémarrez votre client mail et la barre d’état affichera le statut de votre quota.

MacPorts : cleanup & upgrade

Quelques commandes d’utilisation de MacPorts …

- Nettoyer les fichiers objets et temporaires liés à la compilation de chaque port :

$ sudo port -f clean --all installed

- Désinstaller toutes les versions antérieures des ports installés :

$ sudo port -f uninstall inactive

- Effectuer une mise à jour avec nettoyage automatique :

$ sudo port selfupdate
$ sudo port -fuc upgrade outdated

Cherokee : le serveur web qui réconcilie administrateurs et développeurs

Un serveur web rapide, léger et facilement configurable ? C’est Cherokee !

Toutes les fonctions sont présentes : TLS, FastCGI, rewrite, proxy, cache, journalisation Apache, expiration, compression, limitation du trafic … et en plus une interface web de configuration dont la simplicité est déconcertante. Cette dernière prouve son réel intérêt avec le mécanisme des règles appliquées au contenu. Des assistants sont même présents pour configurer automatiquement le support PHP, créer un hôte pour WordPress, Mailman, etc …

Niveau performances, un benchmark prouve sa supériorité face à Nginx / Lighttpd (sans compter l’autre que je ne nommerai pas), mais il manque un test avec 100/200 clients simultanés pour être certain que les performances ne s’effondre pas à forte charge (ce qui est toujours le cas, OS oblige). L’interface de configuration fonctionne dans un processus séparé, son exécution est donc indépendante et peut être arrétée à tout moment.

Voici quelques screenshots de l’interface web :

PS : non, je n’ai pas acheté le dernier Linux Mag.

FreeBSD : RAID1 hotswap avec gestion AHCI

FreeBSD 8 gère par défaut vos disques par le driver ATA. Celui ne gère pas le hotswap disque. Si atacontrol permet bien de désactiver et débrancher un disque à chaud, la détection n’est effective qu’au prochain reboot. Pour permettre une détection à chaud, il est nécessaire d’utiliser le driver expérimental AHCI, tout en s’assurant que la gestion AHCI des disques est supportée et activée dans le BIOS.

La gestion AHCI s’appuie sur la couche CAM (déjà utilisée pour les périphériques SCSI et USB), ce qui implique un changement  de noms des disques durs. Ainsi /dev/ad0 devient /dev/ada0. La fstab est à modifier avant de redémarrer, d’autant qu’un LiveCD est nécessaire en cas d’erreur ou pour réactiver la gestion ATA. Pour éviter ces désagréments, GEOM propose comme solution les labels qui permettent de bénéficier de noms fixes pour les disques (quelque soit le mode en cours). Pour récupérer les labels de vos partitions UFS, activez l’option suivante :

# sysctl kern.geom.label.debug=1

Les labels seront alors listés au prochain boot, lesquels seront à récupérer et à placer dans la fstab. Pour la partition de swap, le label doit être créer par glabel :

# glabel label swap /dev/ad0s1b

Dans le cas d’un système déjà configuré en RAID par GEOM, les labels sont déjà configurés : GEOM les utilise implicitement. Ainsi, l’activation / désactivation de l’AHCI est transparente et un simple reboot permet de bénéficier de la gestion AHCI.

Pour rappel, voici la méthode de création d’un RAID1 sous GEOM :

# sysctl kern.geom.debugflags=16
# gmirror label -v -b round-robin gm0 /dev/ad8
# cat geom_mirror_load="YES" >> /boot/loader.conf
# ee /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b      none            swap    sw              0       0
/dev/mirror/gm0s1a      /               ufs     rw              1       1
/dev/mirror/gm0s1f      /home           ufs     rw              2       2
/dev/mirror/gm0s1d      /usr            ufs     rw              2       2
/dev/mirror/gm0s1e      /var            ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
# shutdown -r now
# gmirror insert gm0 /dev/ad10
# gmirror status
 Name    Status  Components
mirror/gm0  DEGRADED  ada0
                      ada1 (48%)

A présent, la gestion des AHCI peut être activée :

# cat ahci_load="YES" >> /boot/loader.conf
# shutdown -r now
# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (ada1,pass2)
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus3 target 0 lun 0 (pass0,ada0)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)

Je débranche le second disque, la pile RAID se dégrade :

(ada1:ahcich3:0:0:0): lost device
(ada1:ahcich3:0:0:0): Invalidating pack
GEOM_MIRROR: Cannot write metadata on ada1 (device=gm0, error=6).
GEOM_MIRROR: Cannot update metadata on disk ada1 (error=6).
GEOM_MIRROR: Device gm0: provider ada1 disconnected.

Une fois le disque rebranché, une détection des périphériques de masse est nécessaire (ce n’est pas automatisé) :

# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (pass0,ada0)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)
# camcontrol rescan all
Re-scan of bus 0 was successful
Re-scan of bus 1 was successful
Re-scan of bus 2 was successful
Re-scan of bus 3 was successful
Re-scan of bus 4 was successful
Re-scan of bus 5 was successful
# camcontrol devlist
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus2 target 0 lun 0 (pass0,ada0)
<WDC WD2502ABYS-02B7A0 02.03B03>   at scbus3 target 0 lun 0 (ada1,pass2)
<Slimtype DVD A  DS8A2S 6P5D>      at scbus5 target 0 lun 0 (cd0,pass1)

Le disque est à présent reconnu mais le RAID lui aussi ne se reconstruit pas automatiquement :

(ada1:ahcich3:0:0:0): Synchronize cache failed
(ada1:ahcich3:0:0:0): removing device entry
(aprobe0:ahcich3:0:0:0): SIGNATURE: 0000
ada1 at ahcich3 bus 0 target 0 lun 0
ada1: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device
ada1: 300.000MB/s transfers
ada1: 239429MB (490350672 512 byte sectors: 16H 63S/T 16383C)
ada1: Native Command Queueing enabled
GEOM_MIRROR: Component ada1 (device gm0) broken, skipping.
GEOM_MIRROR: Cannot add disk ada1 to gm0 (error=22).
GEOM_MIRROR: Device gm0: rebuilding provider ada1.

Ce qui est entrepris de suite :

# gmirror forget gm0 /dev/ada1
gmirror: No such device: /dev/ada1.
# gmirror insert gm0 /dev/ada1
# gmirror status
 Name    Status  Components
mirror/gm0  DEGRADED  ada0
                      ada1 (1%)

La reconstruction RAID au final ne nécessite plus aucun redémarrage. Le driver AHCI apporte également d’autres fonctionnalités comme le support du NCQ, ce qui permet d’augmenter le débit en cas de forte charge. Pour le vérifier et obtenir des informations détaillées sur un disque, camcontrol est de rigueur :

# camcontrol identify ada0
pass0: <WDC WD2502ABYS-02B7A0 02.03B03> ATA/ATAPI-8 SATA 2.x device

protocol              ATA/ATAPI-8 SATA 2.x
device model          WDC WD2502ABYS-02B7A0
serial number         WD-WCAT1E308323
firmware revision     02.03B03
cylinders             16383
heads                 16
sectors/track         63
LBA supported         268435455 sectors
LBA48 supported       490350672 sectors
PIO supported         PIO4
DMA supported         WDMA2 UDMA6
overlap not supported

Feature                      Support  Enable    Value           Vendor
write cache                    yes    yes
read ahead                     yes    yes
Native Command Queuing (NCQ)   yes        31/0x1F
Tagged Command Queuing (TCQ)   no    no    31/0x1F
SMART                          yes    yes
microcode download             yes    yes
security                       yes    no
power management               yes    yes
advanced power management      no    no    0/0x00
automatic acoustic management  yes    yes    254/0xFE    128/0x80
Haut de page