Skip to content →

Category: Webapps

Laverna, une application web de Notes

En cherchant une application pour auto-héberger mes notes et remplacer EverNote, j’ai été séduit par l’application Laverna.

Les fonctionnalités qui m’ont attirées sont les suivantes :

  • Gérer vos notes, même lorsque vous êtes déconnecté
  • Cryptage sécurisé côté client (AES)
  • Possibilité de synchroniser avec DropBox – ce que je ne ferais pas bien entendu 🙂
  • Boutons de contrôle WYSIWYG
  • Coloration syntaxique 
  • Raccourcis clavier

Pour une démonstration : https://laverna.cc/

Pour l’installation, il suffit de faire un git clone du repository dans un Virtual Host sécurisé : https://github.com/Laverna/laverna

Bref, une application web de plus auto-hébergée !

One Comment

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

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 RSS Reader, part 3

Maintenant que notre lecteur de flux tourne, deux solutions pour démarrer le démon d’update :

Démarrage :

[user@home:~]$ sudo start-stop-daemon -c www-data -Sbx /var/www/[YOUR_PATH]/rss/update_daemon2.php

Arrêt :

[user@home:~]$ killall php

Si vous avez un problème de démarrage (messages sur le GUI du type “update daemon is not running”), tapez en connaissance de cause :

[user@home:~]$ sudo chmod 777 -R /var/www/[YOUR_PATH]/rss/{cache,feed-icons,lock,lib/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer}
[user@home:~]$ sudo chown www-data:www-data -R /var/www/[YOUR_PATH]/rss/{cache,feed-icons,lock,lib/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer}

Sinon vous pourrez toujours démarrer avec la crontab, mais vous aurez un message comme quoi le démon ne tourne pas ! Par exemple pour lancer un update toutes les 30 minutes :

[user@home:~]$ sudo crontab -l -u www-data
SHELL=/bin/bash
PATH=/bin:/usr/bin
MAILTO=user
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
*/30 *  *  *  * cd /var/www/[YOUR_PATH]/rss && /usr/bin/php update.php -feeds >/dev/null 2>&1

Bon amusement, maintenant vous avez un Google Reader @ Home.

Après quelques semaines d’utilisation, je suis à 20MB de DB MySQL occupée pour l’instant (sur 2To de Disque !!!) !

Comments closed
en_USEN