Skip to content →

Catégorie : Linux

Rsyslog : Dériver les messages syslog dans un fichier particulier

Depuis pas mal de temps, je me casse les dents sur la d√©rivation des logs envoy√©s au d√©mon rsyslog, utilis√©s pas d√©faut dans Ubuntu. En effet, j’ai install√© un tvheadend sur mon serveur / media center pour avoir √† la TV dans tous mes XBMC/Kodi, et le mode debug est un peu trop verbeux √† mon go√Ľt.

La configuration de base de rsyslog est fait par d√©faut dans “/etc/rsyslog.d/50-default.conf”. Pour qu’un fichier particulier soit trait√© en premier, comme dans Apache, il faut en cr√©er un nouveau.

Par exemple, j’ai cr√©er les fichiers suivants :

[19:54 user@home ~] > ll /etc/rsyslog.d/*
-rw-r--r-- 1 root root  483 Apr  9 21:40 /etc/rsyslog.d/10-tvheadend.conf
-rw-r--r-- 1 root root  465 Apr  9 21:40 /etc/rsyslog.d/11-dhcpd.conf
-rw-r--r-- 1 root root  469 Apr  9 21:50 /etc/rsyslog.d/12-postfix.conf
-rw-r--r-- 1 root root  311 Mar 17  2012 /etc/rsyslog.d/20-ufw.conf
-rw-r--r-- 1 root root 1.7K Apr  9 21:52 /etc/rsyslog.d/50-default.conf

Ces fichiers contiennent les dérivations suivantes :

[19:54 user@home ~] > cat /etc/rsyslog.d/10-tvheadend.conf
# Put tvheadend log in a specific log file
if $programname == 'tvheadend' then /var/log/tvheadend/tvheadend.log
& stop

[19:54 user@home ~] > cat /etc/rsyslog.d/11-dhcpd.conf
# Put isc-dhcpd-server log in a specific log file
if $programname == 'tvheadend' then /var/log/dhpcd.log
& stop

[19:54 user@home ~] > cat /etc/rsyslog.d/12-postfix.conf
# Put postfix log in a specific log file
if $programname == 'tvheadend' then /var/log/postfix.log
& stop

Il faut ensuite simplement reloader/restarter le service rsyslog pour prendre en compte ces changements, et vérifiez que vos fichiers sont bien crées (il peut subsister des problèmes de droits, surtout lorsque vous avez créer un dossier spécifique comme dans le cas de tvheadend).

A noter qu’il existe beaucoup d’options pour filtrer par programname, severity, ou de mani√®re plus puissante par regex. Dans le cas ou vous souhaiteriez faire ceci, RFTM !

Ensuite, il ne faut oublier de configurer la rotation des logs (dans mon cas, j’ajoute un restart du process, car je n’ai pas de ‘status‘ pour le d√©mon tvheadend dans mon init.d) :

[20:05 user@home ~] > cat /etc/logrotate.d/tvheadend
/var/log/tvheadend/*.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        create 640 syslog adm
        sharedscripts
        postrotate
                /etc/init.d/tvheadend restart
        endscript
}

Puis forcer la rotation (-f) ou débuguer (-d)

[20:09 user@home ~] > sudo logrotate -d /etc/logrotate.conf
reading config file /etc/logrotate.conf
[...]
reading config file tvheadend
[...]

rotating pattern: /var/log/tvheadend/*.log  after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
switching euid to 0 and egid to 104
considering log /var/log/tvheadend/tvheadend.log
  log does not need rotating
not running postrotate script, since no logs were rotated
switching euid to 0 and egid to 0

Vous trouvez alors la rotation des logs :

[20:11 user@home ~] > ll /var/log/tvheadend/
 
-rw-r----- 1 syslog adm  12K Apr 11 20:11 tvheadend.log
-rw-r----- 1 syslog adm  48K Apr 11 09:50 tvheadend.log.1

Bon amusement !

Comments closed

Perfect Forward Secrecy pour Apache

Lors de l’utilisation d’un protocole comme SSL/TLS pour le chiffrement et la s√©curisation des donn√©es sur des r√©seaux non s√Ľrs, il est important de garantir la confidentialit√© totale des communications, m√™me en cas de capture du trafic chiffr√©.

TLS n’est en effet pas un protocole unique, mais une multitude de briques permettant la s√©curisation des √©changes, gr√Ęce √† :

  • L’authentification du serveur (et optionnellement du client). On utilise en g√©n√©ral un certificat x509v3 d√©livr√© par une autorit√© de certification.
  • La confidentialit√© des donn√©es, en utilisant les suites de chiffrement disponibles dans les CipherSpecs.
  • L’int√©grit√© des donn√©s, en utilisant des fonctions de hachage disponibles dans les CipherSpecs.

Un des probl√®mes de TLS est que pour que cela fonctionne, il faut bien un cl√© master sym√©trique d√©finie dans l’√©tape client key exchange. Heureusement, celle-ci est chiffr√©e par la cl√© publique du certificat serveur, emp√™chant sa lecture par un tiers autre que le serveur.

Un des probl√®mes est que si l’on r√©cup√®re la cl√© master et la cl√© priv√©e du serveur, m√™me √† post√©riori, il est techniquement possible (m√™me si cela n’est pas √† la port√© de quiconque !) de d√©chiffrer l’ensemble d’une capture du trafic par exemple. On perd ainsi la confidentialit√© des donn√©es transmises, ce qui n’est pas acceptable pour un protocole de s√©curisation de donn√©es. Quand on connait les impacts potentiels de la faille HeartBleed, on se rend compte que l’obtention de la cl√© priv√©e est possible (m√™me si encore une fois, cela reste une attaque tr√®s complexe et non garantie, cela reste possible et envisageable).

Afin d’√©viter cela, nous allons utiliser la propri√©t√©¬†Perfect Forward Secrecy, qui va faire appel √† des suites de chiffrement bas√©es sur les √©changes de cl√© DH (au lieu de RSA) qui ne sont pas faillibles (en th√©orie) √† ce principe, car les cl√©s √©chang√©es sont √©ph√©m√®res et sign√©es. Cette propri√©t√© permet d’√©viter le d√©chiffrement √† post√©riori d’une capture, m√™me en possession de la cl√© priv√©e du serveur. Attention, ceci est vrai si le groupe DH est suffisamment grand et valide, et uniquement sur des communications ant√©rieures √† l’obtention de la cl√© priv√©e.

Il est possible de renforcer ce m√©canisme de Perfect Forward Secrecy en utilisant la cryptographie bas√©e sur des courbes elliptiques (ECDHE pour l’√©change de cl√©s √©ph√©m√®res, et ECDSA pour l’authentification du serveur), r√©put√©e plus s√Ľre que la cryptographie par factorisation.

Par exemple, sur le logiciel Apache, on peut utiliser les CipherSuites suivantes pour renforcer la sécurité de nos échanges basés sur TLS :

# Activation du mod_ssl dans Apache
SSLEngine on

# On désactive SSLv2 et SSLv3 pour n'utiliser que TLS v1.x
SSLProtocol all -SSLv2 -SSLv3

# Au lieu de préférer les suites du client (mécanisme par défaut), on privilégie les suites proposées par le serveur
SSLHonorCipherOrder on

# On propose les suites avec ECDHE, ECDSA uniquement pour PFS
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
 
# On autorise les clients non compatibles SNI à accéder à ce vhost
SSLStrictSNIVHostCheck on

# Certificat, cl√© et ch√ģne de certification
SSLCertificateFile      /etc/ssl/certs/cert_beufa.net.cert
SSLCertificateKeyFile   /etc/ssl/private/cert_beufa.net.key
SSLCertificateChainFile /etc/ssl/certs/CAcert_chain.pem

Ces options sont bien s√Ľr √† activer avec pr√©caution en cas de forte charge sur vos serveurs Apache. En effet, la baisse de performances li√©es √† l’usage de la propri√©t√© Perfect Forward Secrecy entra√ģne des baisses de performances importantes, de l’ordre de 15% √† 20% en fonction de la longueur des cl√©s et CipherSpecs utilis√©s.

Comments closed

Bloquer le brute force sur une authentification Apache

Toujours et encore du fail2ban !

Pour bloquer des tentatives d’authentification et donc de l’√©num√©ration d’utilisateur type brute force sur des authentifications Apache / httpd, il existe d√©j√† le fichier de filtre suivant :

[20:18 user@server ~] > vim /etc/fail2ban/filter.d/apache-auth.conf
 
Fail2Ban apache-auth filter
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# apache-common.local
before = apache-common.conf

[Definition]


failregex = ^%(_apache_error_client)s (AH01797: )?client denied by server configuration: (uri )?\S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01617: )?user .*? authentication failure for "\S*": Password Mismatch(, referer: \S+)?$
            ^%(_apache_error_client)s (AH01618: )?user .*? not found(: )?\S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01614: )?client used wrong authentication scheme: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH\d+: )?Authorization of user \S+ to access \S* failed, reason: .*$
            ^%(_apache_error_client)s (AH0179[24]: )?(Digest: )?user .*?: password mismatch: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH0179[01]: |Digest: )user `.*?' in realm `.+' (not found|denied by provider): \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01631: )?user .*?: authorization failure for "\S*":(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01775: )?(Digest: )?invalid nonce .* received - length is not \S+(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01788: )?(Digest: )?realm mismatch - got `.*?' but expected `.+'(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01789: )?(Digest: )?unknown algorithm `.*?' received: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01793: )?invalid qop `.*?' received: \S*(, referer: \S+)?\s*$
            ^%(_apache_error_client)s (AH01777: )?(Digest: )?invalid nonce .*? received - user attempted time travel(, referer: \S+)?\s*$

ignoreregex =

Il suffit ensuite d’activer le filtre fans la configuration globale de fail2ban :

[20:53 user@serveur ~] > vim /etc/fail2ban/jail.conf

[apache]
enabled  = true
port     = http,https
filter   = apache-auth
logpath  = /var/log/httpd/*/*error_log
action = iptables-multiport[name=Apache-auth, port="http,https", protocol=tcp]
         sendmail-whois[name=Apache-auth, dest=user@beufa.net, sender=sender@beufa.net]
maxretry = 6

Ceci permet de bloquer l’IP source sur le port 80 et 443 dans la cha√ģne iptables d√©di√©e (ici : fail2ban-Apache-auth), ainsi que d’envoyer un mail contenant un whois de l’IP source au bout de 6 authentifications √©chou√©es :

[20:56 user@serveur ~] > iptables -L fail2ban-Apache-auth
Chain fail2ban-Apache-auth (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Malheureusement avec fail2ban, toujours pas de compatibilité IPv6 native (cela est possible, mais via un patch fourni sur le wiki de fail2ban).

 

Comments closed

Auditer la configuration sécurité de votre Unix avec Lynis

Lynis est un outil d’audit de votre syst√®me Unix/Linux (et d’autres syst√®mes type AIX).

L’objectif est d’am√©liorer la s√©curit√© de votre syst√®me par une v√©rification de certains √©l√©ments de s√©curit√©. Bien s√Ľr, il ne faut pas s’attendre √† une v√©rification compl√®te de votre syst√®me d’un point de vue applicatif, mais il s’agit d’un bon d√©but pour auditer ce qui pourrait poser un probl√®me de s√©curisation de votre machine, en cas d’attaque sur un de vos applicatifs par exemple.

Pour téléchargez Lynis, rendez vous ici : http://cisofy.com/lynis/ (http://rootkit.nl/software/lynis/)

Comments closed

Installation de mailpile et de RainLoop

Après recherche de solutions remplaçant un Roundcube pour mon webmail perso, je suis tombé sur plusieurs projets :

  • MailPile, un webmail python, en cours de d√©veloppement
  • RainLoop, un webmail PHP/Ajax, qui semble plus fini

 

Installation de RainLoop

L’installation de RainLoop est assez simple :

cd /var/www/html/rainloop/
find . -type d -exec chmod 777 {} ;
find . -type f -exec chmod 666 {} ;
wget -qO- http://repository.rainloop.net/installer.php | php

Ensuite, il suffit de créer un vhost sur votre apache (ici en SSL sur myhost.beufa.net) :

<VirtualHost *:443>
        ServerAdmin postmaster@beufa.net
        ServerName  myhost.beufa.net
        DocumentRoot /var/www/html/rainloop
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+SHA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
        SSLProtocol all -SSLv2
        SSLStrictSNIVHostCheck on
        SSLOptions StrictRequire
        SSLCertificateFile      /etc/ssl/certs/myhost.cert
        SSLCertificateKeyFile   /etc/ssl/private/myhost.key
        #GnuTLSEnable on
        #GnuTLSPriorities SECURE:!ANON-DH:!MD5
        #GnuTLSCertificateFile cert.pem
        #GnuTLSKeyFile cert.pem
        #GnuTLSCertificateChainFile cert.pem
        #GnuTLSCACertificatePath /

        <Directory /var/www/html/rainloop>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        <Directory /var/www/html/rainloop/data>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        ErrorLog /var/log/httpd/myhost.beufa.net/error_log
        CustomLog /var/log/httpd/myhost.beufa.net/access_log combined

</VirtualHost>

Et vous obtiendrez alors le webmail après une configuration sur https://myhost.beufa.net/?admin (Le login / mot de passe par défaut est admin :: 12345, il faut donc le changer !)

Une version de démonstration est disponible ici : http://rainloop.net/try-now/

Installation de MailPile

MailPile est encore en d√©veloppement, et honn√™tement, ca a l’air loin d’√™tre fini. Curieux, j’ai quand m√™me gratter pour l’installer :

# Installation des dépendances (suivant votre système, ici en CentOS 6.5)
yum install python-imaging python-jinja2 python-lxml python-devel python-pip python-setuptools

# Clone git du repository github
cd /opt/
git clone https://github.com/pagekite/Mailpile.git 
cd Mailpile

# Installation des dépendances pip (upgrade de jinja2 pour éviter l'erreur sur les templates)
pip install -r requirements.txt
pip install jinja2 --upgrade

# Setup de Mailpile
./mp --setup

# On ajoute un compte et son dossier de stockage
./mp --set "profiles.0.email = mymail@beufa.net"
./mp --set "profiles.0.name = My Name FirstName"
./mp --add /opt/vmail/mymailhost.net/myname/  --rescan all

# On démarre le démon www
./mp --www

Le démon écoutant sur localhost et le port 33441, le plus simple est de créer un Reverse Proxy Apache pour le test :

<VirtualHost *:443>
        ServerAdmin postmaster@beufa.net
        ServerName  myhost.net
        #DocumentRoot /var/www/html/mailpile
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+SHA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
        SSLProtocol all -SSLv2
        SSLStrictSNIVHostCheck on
        SSLOptions StrictRequire
        SSLCertificateFile      /etc/ssl/certs/myhost.net.cert
        SSLCertificateKeyFile   /etc/ssl/private/myhost.net.key
        #GnuTLSEnable on
        #GnuTLSPriorities SECURE:!ANON-DH:!MD5
        #GnuTLSCertificateFile cert.pem
        #GnuTLSKeyFile cert.pem
        #GnuTLSCertificateChainFile cert.pem
        #GnuTLSCACertificatePath /

        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>

        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:33411/
        ProxyPassReverse / http://localhost:33411/

        <Location />
                Order allow,deny
                Allow from all
        </Location>
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        ErrorLog /var/log/httpd/myhost.net/error_log
        CustomLog /var/log/httpd/myhost.net/access_log combined

</VirtualHost>

Vous pouvez alors tester sur le vhost reverse proxy ainsi cr√©√©. Par contre, par encore de formulaire d’authentification, ce qui fait que votre mail est accessible “all around the world” ! Prot√©gez l’interface √† minima avec un htaccess ou une authentification basique dans le vhost.

En résumé

RainLoop semble un produit fini, mais il y a certaines choses manquantes :

  • Pas d’import possible des contacts
  • Fonctionnalit√©s et configuration tr√®s tr√®s basiques
  • Gestion des threads de conversation limit√©e et pas forc√©ment pratique
  • Pas d’affichage des headers mail comme sur Roundcube
  • Pas de v√©rification des sous dossiers IMAP

Pour MailPile, m√™me si le projet est prometteur (Support OpenPGP, chiffrement des pi√®ces jointes …), il manque encore :

  • Un formulaire d’authentification !!!
  • Une interface d’administration √† minima comme sur RainLoop
  • La gestion des dossiers IMAP
  • Un produit fini et utilisable tout simplement.

Je vais suivre donc ce dernier plus sp√©cifiquement, RainLoop me semblant agr√©able pour l’instant en plus de RoundCube, que je garde pour l’usage avanc√© (gestion des filtres Sieve/ManageSieve). La bonne nouvelle de ces 2 projets est qu’ils supportent tous les deux mon serveur Dovecot / Postfix avec SASL pour IMAPS et SMTP/STARTTLS.

Bref, deux produits intéressants à suivre !

2 Comments
fr_FRFR