Skip to content →

Fabien Vincent Posts

Apache et Roundcube, sécurisation et obfuscation de version

Après installation d’un serveur de mail pour remplacer Google Apps sur mon domaine perso, j’ai trouvé que Roundcube était le seul webmail qui me plaisait à peu près.

Quelques tips et tricks sur la sécurisation de Apache / PHP et Roundcube, pas sur les serveurs Postfix / Dovecot, qui je l’espère, viendront ici alimenter le blog avec du fail2ban …

  • Configuration du vHost et sécurisation dossiers “sensibles”
<VirtualHost *:443>
        ServerAdmin postmaster@beufa.net
        ServerName  x.beufa.net
        DocumentRoot /var/www/x
        SSLEngine on
        SSLCipherSuite ALL:!ADH:RC4+SHA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
        SSLProtocol all -SSLv2
        SSLStrictSNIVHostCheck on
        SSLOptions StrictRequire
        SSLCertificateFile     cert.pem
        SSLCertificateKeyFile  cert.pem
        #GnuTLSEnable on 
        #GnuTLSPriorities SECURE:!ANON-DH:!MD5
        #GnuTLSCertificateFile cert.pem
        #GnuTLSKeyFile cert.pem
        #GnuTLSCertificateChainFile cert.pem
        #GnuTLSCACertificatePath /

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

        <Directory /var/www/roundcube/config>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/roundcube/temp>
                Options -FollowSymLinks
                AllowOverride None
        </Directory>

        <Directory /var/www/roundcube/logs>
                Options -FollowSymLinks
                AllowOverride None
                Order allow,deny
                Deny from all
        </Directory>

        <Directory /var/www/roundcube/plugins/enigma/home>
                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 ${APACHE_LOG_DIR}/05.x.beufa.net_error.log
        CustomLog ${APACHE_LOG_DIR}/05.x.beufa.net_access.log combined

</VirtualHost>
  • Supprimer les headers de mail PHP verbeux dans /etc/php5/apache2/php.ini
; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
expose_php = Off
; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename
; Example for Roundcube : X-PHP-Originating-Script: 33:main.inc in each mail sent 
mail.add_x_header = Off
  • Avoir des logs Apache / PHP dans un fichier spécifique
; The path to a log file that will log all mail() calls. Log entries include
; the full path of the script, line number, To address and headers.
;mail.log = /var/log/mail.apache-php.log

Bientôt d’autres tips sur le couple Postfix / Dovecot / Roundcube !

Comments closed

Raspberry Pi & Munin, monitoring température

Suite à l’installation d’un Raspberry Pi dans ma salon avec raspbmc, et ayant déjà une solution de monitoring Munin @Home, je suis tombé sur cet article fort intéressant pour surveiller la température de ce boitier.

Pour cela, une fois munin-node installé sur le raspberry, il suffit de créer un plugin basé sur la commande vcgencmd permettant d’obtenir la température.

root@raspbmc:/home/pi# vim /usr/share/munin/plugins/pi_temp

#!/bin/sh
#
# Plugin to monitor raspberry pi internal Temperature
# version: 2013-01-18
# author: Dju
#
# install the plugin :
# save it in /usr/share/munin/plugins, then activate it with a symbolic link
# ln -s /usr/share/munin/plugins/pi_temp /etc/munin/plugins/
#
# Magic markers (optional - only used by munin-config and some installation scripts):
#%# family=contrib

VCG=/opt/vc/bin/vcgencmd
WARN=70
CRIT=75

if [ "$1" = "autoconf" ]; then
        if [ -x $VCG ]; then
                echo yes
                exit 0
        else
                echo no
                exit 1
        fi
elif [ "$1" = "config" ]; then
        echo "graph_title Pi Temperature"
        echo "graph_args --base 1000"
        echo "graph_vlabel Celsius"
        echo "graph_category sensors"
        echo "graph_info This graph shows Temperatur data from $LOCATION"
        echo "temp.label temp"
        echo "temp.type GAUGE"
        echo "temp.info Celsius."
        echo "temp.colour 00ff00"
        echo "temp.warning $WARN"
        echo "temp.critical $CRIT"
        exit 0
fi

temp=$($VCG measure_temp | cut -d'=' -f2 | cut -d"'" -f1)
echo "temp.value $temp"

Une fois ce plugin créé, faire un chmod +x du fichier puis activez le plugin avec un lien symbolique :

chmod +x /usr/share/munin/plugins/pi_temp
ln -s /usr/share/munin/plugins/pi_temp /etc/munin/plugins/

Il vous suffit alors de rédémarrer le service munin-node et attendre quelques minutes pour voir apparaitre le graphique :

Raspberry PI Temperature Munin Graph
Raspberry PI Temperature Munin Graph

Pour plus de détails sur la source de ce plugin et le fonctionnement du Raspberry Pi, voir ici : http://blog.crifo.org/post/2013/01/19/reception-et-installation-du-raspberry-pi

 

2 Comments

Auto héberger son Google Reader, part4

Ca y est, Google Reader est mort !!! J’ai bien fait d’anticiper cette série d’articles sur comment auto héberger son Google Reader.

Dernier petit tip sur la gestion du démarrage du script d’update :

Créer le fichier /etc/init.d/ttrss :

#!/bin/sh -e
# ligne de commande du programme
DAEMON="/var/www/rss/update_daemon2.php"
# argument à utiliser par le programme
DAEMON_OPT=""  #argument à utiliser par le programme
DAEMONUSER="www-data" #utilisateur du programme
DAEMON_NAME="ttrss" #Nom du programme (doit être identique à l'exécutable)

PATH="/sbin:/bin:/usr/sbin:/usr/bin" #Ne pas toucher

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

d_start () {
        log_daemon_msg "Starting system $DAEMON_NAME Daemon"
        start-stop-daemon --background --name $DAEMON_NAME -c www-data -Sbx $DAEMON -- $DAEMON_OPT
        log_end_msg $?
}

d_stop () {
        log_daemon_msg "Stopping system $DAEMON_NAME Daemon"
        start-stop-daemon --name $DAEMON_NAME --stop --retry 5 --quiet --name $DAEMON_NAME
        log_end_msg $?
}

case "$1" in

        start|stop)
                d_${1}
                ;;

        restart|reload|force-reload)
                        d_stop
                        d_start
                ;;

        force-stop)
               d_stop
                killall -q $DAEMON_NAME || true
                sleep 2
                killall -q -9 $DAEMON_NAME || true
                ;;

        status)
                status_of_proc "$DAEMON_NAME" "$DAEMON" "system-wide $DAEMON_NAME" && exit 0 || exit $?
                ;;
        *)
                echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|force-stop|restart|reload|force-reload|status}"
                exit 1
                ;;
esac
exit 0

Ensuite, il faut suffit de taper les commandes suivantes :

[root@server:~]$ sudo chmod +x /etc/init.d/ttrss
[root@server:~]$ sudo chmod 0755 /etc/init.d/ttrss
[root@server:~]$ sudo update-rc.d ttrss defaults
update-rc.d: warning: /etc/init.d/ttrss missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
 Adding system startup for /etc/init.d/ttrss ...
   /etc/rc0.d/K20ttrss -> ../init.d/ttrss
   /etc/rc1.d/K20ttrss -> ../init.d/ttrss
   /etc/rc6.d/K20ttrss -> ../init.d/ttrss
   /etc/rc2.d/S20ttrss -> ../init.d/ttrss
   /etc/rc3.d/S20ttrss -> ../init.d/ttrss
   /etc/rc4.d/S20ttrss -> ../init.d/ttrss
   /etc/rc5.d/S20ttrss -> ../init.d/ttrss
[root@server:~]$ sudo chkconfig --list | grep ttrss
ttrss                     0:off  1:off  2:on   3:on   4:on   5:on   6:off

Si le service n’est pas activé, il suffit de faire un :

[root@server:~]$ sudo chkconfig ttrss on

Amusez vous bien !

Next time : un article pour clean up la base des articles vieux de x mois, car après plusieurs mois d’utilisation, la base peut vite atteindre les 70 / 100 MB…

Comments closed

LaBox by Numericable, bien mais pas top …

J’ai commandé il y a plusieurs mois LaBox by Numericable pour remplacer mes vieux modem NetGear et boitier HD Box. Passés les problèmes de mauvais provisionning fait par Numéricable, j’ai enfin pu profiter de ce produit, quand même bien foutu en terme d’interface (quelle évolution par rapport à la HD Box disposant d’une interface d’un autre âge).

Petit à petit, de fonctionnalité en fonctionnalité, je me suis rendu compte de nombreux bugs ou fonctionnalités promises et vendus même par la Valérie Damido mais pourtant non accessibles … Twitter, Facebook n’ont jamais fonctionné pour moi, et la VOD est un problème insolvable, même par la très compétente et très disponible cellule Experts de Lyon.

Pour ceux qui n’auraient pas accès à la VOD sur LaBox, je pense que c’est vraiment un problème matériel, si comme moi, il vous manque des accroches sur certaines porteuses. Petit explication :

Pour ma part, la première porteuse est à 122000KHz, Canal 85. Normalement, il y en a 8 en réception, espacées de 8000KHz chacune. Vous devez, en fonction de la fréquence de démarrage, obtenir donc des porteuses sur les fréquences suivantes :

  • 122.000 KHz => Canal 85
  • 130.000 KHz => Canal 86
  • 138.000 KHz => Canal 87
  • 146.000 KHz => Canal 89
  • 154.000 KHz => Canal 90
  • 162.000 KHz => Canal 91
  • 170.000 KHz => Canal 109
  • 178.000 KHz => Canal 110

En tout cas, même si je ne peux confirmer cette information, vous devriez avoir 8 porteuses en réception pour profiter de tous les services. Problème chez moi, lorsque le technicien fait le test avec son boitier dédié, aucun problème. Dès que je branche LaBox, celle-ci n’accroche que 4 des 8 porteuses, 122.000 KHz, 146.000 KHz, 154.000 KHz et 162.000 KHz.

NUMERICABLE_porteuses
Numéricable – problème réception porteuses

Ce qui fait qu’il manque des services. Je suspecte fortement un problème matériel sur LaBox, c’est à dire un bug sur le driver DOCSIS permettant l’accroche sur les porteuses du câble. Bizarrement, le problème ne se produit pas en boutique (SNR et puissance meilleurs ?)

En effet, dès que je force la fréquence de démarrage sur une porteuse, celle ci est acquise …

Forcé à 130000KHz
Statut     Modulation     Canal     Débit de symboles     Fréquence     Puissance     SNR
Acquis     QAM256     86     6952000 sym/sec     130000000 Hz     7.1 dBmV     43.9 dB
Acquis     QAM256     89     6952000 sym/sec     146000000 Hz     7.0 dBmV     42.4 dB
Acquis     QAM256     90     6952000 sym/sec     154000000 Hz     7.1 dBmV     42.5 dB
Acquis     QAM256     91     6952000 sym/sec     162000000 Hz     6.7 dBmV     42.6 dB
Forcé à 138000KHz
Statut     Modulation     Canal     Débit de symboles     Fréquence     Puissance     SNR
Acquis     QAM256     87     6952000 sym/sec     138000000 Hz     7.3 dBmV     43.9 dB
Acquis     QAM256     89     6952000 sym/sec     146000000 Hz     7.0 dBmV     42.1 dB
Acquis     QAM256     90     6952000 sym/sec     154000000 Hz     7.1 dBmV     42.5 dB
Acquis     QAM256     91     6952000 sym/sec     162000000 Hz     6.6 dBmV     42.6 dB
Forcé à 170000KHz
Statut     Modulation     Canal     Débit de symboles     Fréquence     Puissance     SNR
Acquis     QAM256     109     6952000 sym/sec     170000000 Hz     5.0 dBmV     41.1 dB
Forcé à 178000KHz
Statut     Modulation     Canal     Débit de symboles     Fréquence     Puissance     SNR
Acquis     QAM256     110     6952000 sym/sec     178000000 Hz     5.0 dBmV     42.4 dB

Dans les logs, j’ai également pas mal de lignes comme celles-ci :

 No Ranging Response received – T3 time-out;CM-MAC=24:ec:99:x:x:x;CMTS-MAC=68:ef:bd:x:x:x;CM-QOS=1.0;CM-VER=3.0;

Bref, si vous êtes comme moi, remontez le problème par Twitter @SAV_Numericable pour qu’un correctif soit appliqué, pour ma part, la seule solution proposée à part un échange en boutique puis un retour sur une HD Box Memory, aucune solution n’a été trouvée pas Numéricable.

Je reste content du débit (95MBps en down et 5Mbps en up) ainsi que du service support par Numéricable (par Twitter, le téléphone étant une catastrophe et une perte de temps).

Mais je trouve dommage d’avoir commercialisé un produit aussi peu fini, j’ai l’impression de me retrouver avec une Freebox v5 (voir v6 d’après ce que j’ai pu lire) à ses débuts. C’est très énervant quand on voit les pubs et chez soi, aucun service accessoire vendu ne fonctionne …. (je n’ai aucun problème sur la TV, l’Internet et le téléphone, ouf …)

A bon entendeur !

 

One Comment

Fail2Ban : bloquer les requêtes w00tw00t et phpMyAdmin

Parce que j’en avais marre de tous ces scanners DFind et autres sur mes serveurs home et OVH, j’ai ajouté deux regexp que je vous partage ici pour bloquer après la première requête les accès aux URI :

/w00tw00t.at.ISC.SANS.DFind

/phpMyAdmin

Pour cela, il faut créer deux nouveaux fichiers dans la configuration fail2ban :

[user@srv:~]$ cat /etc/fail2ban/filter.d/apache-w00tw00t.conf 
[Definition]

failregex = ^<HOST> -.*"GET /w00tw00t.at.ISC.SANS.DFind:).*".*

ignoreregex =

[user@srv:~]$ cat /etc/fail2ban/filter.d/apache-pma.conf 
[Definition]

failregex = ^<HOST>.*GET.*(?i)phpmyadmin.*
            ^<HOST>.*GET.*(?i)pma.*
            ^<HOST>.*GET.*(?i)mysql.*
            ^<HOST>.*GET.*(?i)setup.*

ignoreregex =

Une fois ces 2 fichiers créés, il faut éditer le fichier /etc/fail2ban/jail.conf et y ajouter, à votre convenance, les références aux filtres nouvellement créés :

[apache-w00tw00t]
enabled = true
filter = apache-w00tw00t
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp]
         sendmail-whois[name=Apache-w00tw00t, dest=user@mail.com, sender=srv@mail.com]
logpath = /var/log/apache2/*_access.log
maxretry = 1

[apache-pma]
enabled = true
filter = apache-pma
action = iptables[name=Apache-pma,port=80,protocol=tcp]
         sendmail-whois[name=Apache-pma, dest=user@mail.com, sender=srv@mail.com]
logpath = /var/log/apache2/*_access.log
maxretry = 1

Dès qu’une requête contenant dans l’URI les regexp renseignées dans les filtres plus haut, l’IP sera bannie et un mail sera envoyé à user@mail.com.

Vous pouvez monitorer les hosts blacklistés par munin ou par la commande iptables :

[user@srv:~]$ sudo iptables -L fail2ban-Apache-pma --line-num 
Chain fail2ban-Apache-pma (1 references)
num  target     prot opt source               destination         
1    RETURN     all  --  anywhere             anywhere

Bye bye les scripts kiddies 😉

Comments closed
en_USEN