Faire un framadrop ça me semblait accessible, par contre Lufi (utilisé par framadrop) c’est codé en Perl et sur les serveurs de l’asso on est plus en mode PHP (et j’essaie de pas trop me disperser et pas héberger : un coup du perl, un coup du python, un coup du ruby, du node.js… c’est plus facile à maintenir) Sauf qu’en PHP je n’ai pas trouvé de logiciel maintenu similaire qui répondent à mes attentes, du coup j’en ai pondu un : file2link.
Ménage des fichiers expiré par tâche cron (cron.php) ou par traffic sur la page d’accueil (web cron)
Personnalisation du contenu de la page avec la possibilité de créer des pages header-page.php, header.php, footer-page.php, footer.php, start-home.php, end-home.php
Ajout d’un menu vers des pages HTML pour créer des pages « contact » « mention légal »…
Installation
Pré-requis :
Un serveur http configuré compatible avec htaccess / url rewriting (apache2 typiquement
Modifier le fichier config.yaml, changé le baseUrl et autres paramètres que vous souhaitez personnalisé. Assuré vous de la cohérence des paramètres :
maxUploadPerFile doit être similaire à la config PHP upload_max_filesize and post_max_size
maxUploadNbdoit doit être similaire à la config PHP config max_file_uploads
Assurez vous que le répertoire « files » soit accessible en écriture pour le servuer
Option : si vous voulez faire le ménage par tâche cron modifier la valeur expireCron par « cron » dans le fichier config.yaml et ajouter votre tâche cron :
Afin de réaliser des maintenances ou migration sur mon serveur qui héberge ~100 sites et qui tourne avec le panel ISPConfig j’ai mis en place un petit mot d’excuse qui dit en substance : « maintenance en cours, merci de repasser plus tard ». C’est mieux que « La connexion a échoué » ou « Can’t Connect to MySQL Server on nian nian nian » non ?. C’était plutôt simple jusqu’à l’arrivé massive du SSL. parce que quand on tente de joindre https://david.mercereau.info ou https://zici.fr et qu’on est redirigé vers la même page de maintenance, avec le SSL ça coince / ça affiche un message d’erreur, normal… hors c’est ce qu’on cherche à éviter.
La configuration de prod en temps normal :
Apache sur le port 80 & 443
Let’sEncrypt délivre les certificat SSL
Le tout est motorisé par ISPConfig
La configuration de maintenance :
Apache sur le port 80 & 443 (toujours)
Lighttpd sur le port 81 & 444
Iptables redirige le trafic arrivant sur le port 80 vers le port 81 en PREROUTING sauf pour mon IP (ça permet donc de bricoler)
Installation de lighttpd
Apété, et ayé :
aptitude -y install lighttpd
update-rc.d lighttpd remove
mkdir /var/www/maintenance
echo "Serveur en maintenance" > /var/www/maintenance/index.html # Vous pouvez faire une belle page html c'est mieux !
La configuration de lighttpd : /etc/lighttpd/lighttpd.conf
J’ai fais un script qui récupère dans configuration apache (généré par ISPConfig chez moi), les chemins vers les certificats SSL Let’sEncrypt et qui (re)génère la conf lighttpd (qui crée le fichier /etc/lighttpd/conf-enabled/maintenance-mode-ssl.conf).
# Mon ip :
IPMAISONDEMOI=X.X.X.X
# Lancer le script ci-dessus qui génère la conf SSL pour lighttpd
php maintenance-ssl-lighttpd.php
# Démarrage du serveur d'excuse
service lighttpd start
# Redirection du port 80 vers 81 sauf pour mon IP
iptables -A INPUT -p tcp --dport 81 -j ACCEPT
iptables -A INPUT -p tcp --dport 444 -j ACCEPT
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 80 -j DNAT --to-destination ${IPDUSERVEUR}:81
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 443 -j DNAT --to-destination ${IPDUSERVEUR}:444
iptables -t nat -A POSTROUTING -j MASQUERADE
Et pour désactiver le mode maintenance :
# Si vous n'avez pas d'autres règles (c'est mal) :
iptables -F
iptables -t nat -F
# Sinon redémarrer votre service iptables
# Lighttpd n'est plus utile
service lighttpd stop
Je m’occupe d’un service d’hébergement destiné aux actions politiques / citoyennes / artistiques… Le serveur était plein de chez plein, ça tournait sans que je m’en occupe trop… J’ai décroché de ces geekeries pour d’autres occupations… Mais voilà Debian 7 était en fin de support, j’ai migré, fais du ménage… du coup il y a de nouveau de la place sur le serveur donc je ré-ouvre les portes.
De ce fait j’ai automatisé une tâche qui me prenait du temps jadis : la création des comptes (même si avec Ispconfig, c’est quand même clique clique). J’ai donc accouché d’un script PHP qui utilise l’API d’ISPconfig, on y passe en paramètre :
Nom d’utilisateur
Email de l’utilisateur
Sous domaine souhaité (ici : cequejesouhait.zici.fr)
Et il nous génère :
Création de l’utilisateur « client » pour l’accès au panel Ispconfig
Création du site web
Création d’une base de donnée et de son utilisateur
Création d’un compte FTP et SFTP pour l’accès au site web
Création d’un transfère mail (ici cequejesouhait@zici.fr vers l’email de l’utilisateur)
Je partage ici mon script de firewall iptable. C’est un script « à l’ancienne », dans du bash… ça fait le taf, mais rien de bien transsudant. En gros :
On ferme tout les ports sauf ceux qui nous intéresse (80, 25, icmp…)
Petite fonction pour ouvrir les ports mis en écoute sur Portsentry. Portsentry c’est un petit logiciel de sécurité en mode « pot de miel ». On met des ports en écoute mais il n’y a rien derrière. Dès que quelqu’un tente de s’y connecter (un robot ou quelqu’un de malveillant), ça bloque son IP dans le firewall pour un temps donnée. C’est radical si vous déplacez le port SSH du 22 vers autre chose et que vous mettez Portsentry à écouter (entre autre) sur le 22…
Mode maintenance du serveur web (lancé via ./iptables.sh maintenance). Il permet de mettre une page de maintenance pour tout le monde sauf pour vous (j’explique en détail dans cet article)
#!/bin/bash
## IP :
# Chez moi
MOI="A.A.A.A"
# Mon serveur
SRV1="X.X.X.X"
IPT="/sbin/iptables"
PORTSENTRYCONF="/etc/portsentry/portsentry.conf"
export IPT PORTSENTRYCONF
function portsentryOpen() {
. ${PORTSENTRYCONF}
IFS=',' read -ra TCP_PORTS_SPLIT <<< "${TCP_PORTS}"
for TCP_PORT in "${TCP_PORTS_SPLIT[@]}"; do
${IPT} -A INPUT -p tcp --dport ${TCP_PORT} -j ACCEPT
done
IFS=',' read -ra UDP_PORTS_SPLIT <<< "${UDP_PORTS}"
for UDP_PORT in "${UDP_PORTS_SPLIT[@]}"; do
${IPT} -A INPUT -p udp --dport ${UDP_PORT} -j ACCEPT
done
}
# Remise a 0
${IPT} -F
${IPT} -t nat -F
# Les connexions entrantes sont bloquées par défaut
${IPT} -P INPUT DROP
# Les connexions destinées à être routées sont acceptées par défaut
${IPT} -P FORWARD ACCEPT
# Les connexions sortantes sont acceptées par défaut
${IPT} -P OUTPUT ACCEPT
######################
# Règles de filtrage #
######################
# Nous précisons ici des règles spécifiques pour les paquets vérifiant
# certaines conditions.
# Pas de filtrage sur l'interface de "loopback"
${IPT} -A INPUT -i lo -j ACCEPT
# Accepter le protocole ICMP (notamment le ping)
${IPT} -A INPUT -p icmp -j ACCEPT
# Accepter les packets entrants relatifs à des connexions déjà
# établies : cela va plus vite que de devoir réexaminer toutes
# les règles pour chaque paquet.
${IPT} -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# ftp
${IPT} -A INPUT -p tcp --dport 20 -j ACCEPT
${IPT} -A INPUT -p tcp --dport 21 -j ACCEPT
# Préalabielemnt, pour pure-ftpd : echo "29700 29750" > /etc/pure-ftpd/conf/PassivePortRange ${IPT} -A INPUT -p tcp --dport 29700:29750 -j ACCEPT
# SSH
${IPT} -A INPUT -p tcp --dport 222 -j ACCEPT
# NTP
${IPT} -A INPUT -p udp --dport 123 -j ACCEPT
# smtp
${IPT} -A INPUT -p tcp --dport smtp -j ACCEPT
# Pour test bricolage smtp
${IPT} -A INPUT -p tcp --dport 587 -j ACCEPT
# imap(s)
${IPT} -A INPUT -p tcp --dport 143 -j ACCEPT
${IPT} -A INPUT -p tcp --dport 993 -j ACCEPT
# sieve
${IPT} -A INPUT -p tcp --dport 4190 -j ACCEPT
# dns
${IPT} -A INPUT -p tcp --dport domain -j ACCEPT
${IPT} -A INPUT -p udp --dport domain -j ACCEPT
# http
${IPT} -A INPUT -p tcp --dport http -j ACCEPT
# https
${IPT} -A INPUT -p tcp --dport https -j ACCEPT
# Maintenance
if [ "$1" == "maintenance" ] ; then
echo "Maintenance On"
/usr/sbin/service lighttpd start
${IPT} -A INPUT -p tcp --dport 81 -j ACCEPT
${IPT} -t nat -A PREROUTING \! -s ${MOI} -p tcp --dport 80 -j DNAT --to-destination ${SRV1}:81
${IPT} -t nat -A POSTROUTING -j MASQUERADE
elif [ -f "/var/run/lighttpd.pid" ] ; then
echo "Maintenance Off"
/usr/sbin/service lighttpd stop
fi
# Portsentry
if [ -f ${PORTSENTRYCONF} ] ; then
portsentryOpen ${IPT} ${PORTSENTRYCONF}
fi
# End
${IPT} -A INPUT -j LOG --log-prefix "iptables denied: " --log-level 4
${IPT} -A INPUT -j REJECT
# Si vous utilisez fail2ban, relancé à la fin du script :
#/usr/sbin/service fail2ban restart
Ensuite il faut se connecter à horde en admin (http://horde.chezvous.com/admin/config) et lancer la mise à jours des configurations et des schémas de bases (suivre la procédure à l’écran, c’est du clic clic…).
Si tout c’est bien passé vous devriez avoir un panel d’admin dans ce goût là :
emailPoubelle.php est donc une page qu’il faut typiquement inclure dans votre site. Elle permet d’administrer des adresses email (des alias plus précisément) jetable ou temporaire. Ces adresses peuvent avoir une durée de vie limitée ou non. Elles peuvent être désactivé (>/dev/null) à tout moment.
Le (petit) projet
Le plus gros changement sur version 1.0 est l’utilisation d’une base de données (sqlite, postgresql, mysql.. au choix, c’est du PDO). Mais vous pouvez continuer à utiliser la version 0.3 qui est en full plain text
Le script dépend de Postfix, un service web avec PHP, php-pdo et (en option) de la lib pear Net_DNS2
Afin de réaliser des maintenances sur mon service web (ou les services attenant tel que Mysql) j’ai mis en place un petit mot d’excuse qui dit en substance : « maintenance en cours, merci de repasser plus tard ». C’est mieux que « La connexion a échoué » ou « Can’t Connect to MySQL Server on nian nian nian » non ?
La configuration de prod :
Apache sur le port 80
La configuration de maintenance :
Apache sur le port 80 (le même)
Lighttpd sur le port 81
Iptables redirige le trafic arrivant sur le port 80 vers le port 81 en PREROUTING sauf pour mon IP (ça permet donc de bricoler)
Installation de lighttpd
Apeuté, et ayé :
aptitude -y install lighttpd
update-rc.d lighttpd remove
mkdir /var/www/maintenance
echo "Serveur en maintenance" > /var/www/maintenance/index.html # Vous pouvez faire une belle page html c'est mieux !
Il est certainement possible de faire plus propre sur ce point. Actuellement je gère le message dans le index.html que je met dans le error404. Des redirection 302 quelque soit l’URL serait à envisager.
Maintenance On/Off
Pour se mettre en mode maintenance :
# Démarrage du serveur d'excuse
service lighttpd start
# Redirection du port 80 vers 81 sauf pour mon IP
iptables -A INPUT -p tcp --dport 81 -j ACCEPT
iptables -t nat -A PREROUTING \! -s ${IPMAISONDEMOI} -p tcp --dport 80 -j DNAT --to-destination ${IPDUSERVEUR}:81
iptables -t nat -A POSTROUTING -j MASQUERADE
Et pour désactiver le mode maintenance :
# Si vous n'avez pas d'autres règles (c'est mal) :
iptables -F
iptables -t nat -F
# Sinon redémarrer votre service iptables
# Lighttpd n'est plus utile
service lighttpd stop
Si vous avez des suggestions…
En continuant à utiliser le site, vous acceptez l’utilisation des cookies (au chocolat) Plus d’informations
Les cookies sont utilisés à des fin de statistique de visite du blog sur une plateforme indépendante que j'héberge moi même. Les statistiques sot faites avec un logiciel libre. Aucune information n'est redistribué à google ou autre. Je suis seul autorisé à lire ces informations