Skip to content →

Category: Linux

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

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

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/

 

 

 

One Comment
en_USEN