Jump to content

Recherche dans la communauté

Affichage des résultats pour les étiquettes 'php'.



Plus d'options de recherche

  • Chercher par étiquette

    Saisir les étiquettes en les séparant par des virgules.
  • Chercher par auteur

Type de contenu


Forums

  • Matériel et Conseils d'achat
    • Ordinateurs de bureau et Composants
    • Ordinateurs portables
    • Conseils d'achat
  • Ajustements et Personnalisation de PC
    • Surcadençage
    • Refroidissement à air et à eau
    • Personnalisation de PC
  • Systèmes d'exploitation
    • Microsoft Windows (Mobile)
    • Apple MacOS et iOS
    • GNU/Linux, *BSD et dérivés d'UNIX
  • Réseaux et Programmation
    • Réseaux, Internet, Téléphonie et Services en Ligne
    • Programmation et Lignes de code
  • Multimédia
    • Jeux vidéo, Consoles, Rétrogaming et Jeux occasionels
    • Mobilité et périphériques portables
    • Audio, Vidéo, Photo et Créations
  • Au pays de l'occasion
    • Achats, Ventes et Estimations
    • Retours d'expérience
  • INpact Café
    • Débats et Discussions
    • Espace Détente
    • Projets personnels et Gestion communautaire
  • Vie du site et du forum
    • Vie INpactienne
  • Sujets de Amateurs de Saucisse Authentique
  • Switch de Les Nintendomaniacs
  • 3DS de Les Nintendomaniacs
  • Consoles virtuelles de Les Nintendomaniacs
  • Anciennes consoles de Les Nintendomaniacs
  • Amiibo de Les Nintendomaniacs
  • CM de Hardware PC
  • CPU de Hardware PC
  • GPU de Hardware PC
  • RAM de Hardware PC
  • SSD/HDD de Hardware PC
  • Boîtier & Co de Hardware PC
  • Écran de Hardware PC
  • Clavier/Souris de Hardware PC
  • Réseau de Hardware PC
  • Discussions de Final Fantasy XIV
  • Modding : how to et principes de base de Skyrim
  • News, discussions et partage de connaissances de Skyrim
  • Les perles du Nexus et autres ressources de Skyrim
  • Maquettes et Modélisme de DIY or Die !
  • Electronique de DIY or Die !
  • Bien débuter de Kerbal Space Program Vers l'infini enfin si on décolle !

Calendriers

  • Évènements de Amateurs de Saucisse Authentique
  • Évènements de Les Nintendomaniacs

Rechercher les résultats dans...

Résultats trouvés contenant...


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filter by number of...

Inscrit

  • Début

    Fin


Groupe


5 résultats trouvés

  1. Bonsoir, Pour un projet, j'utilise PHPmailer. Aucun problème sous Windows mais déconne complètement sous Linux, il ne parvient pas à charger un fichier : <br /><b>Warning</b>: require(/phpmailer/PHPMailerAutoload.php): failed to open stream: No such file or directory in <b>/home/site/www/inc/fonctions.php</b> on line <b>76</b><br /><br /><b>Fatal error</b>: require(): Failed opening required './phpmailer/PHPMailerAutoload.php' (include_path='.:/usr/local/php5.6/lib/php') in <b>/home/site/www/inc/fonctions.php</b> on line <b>76</b><br /> C'est là que généralement, je rajoute un point devant le chemin pour passer ça en relatif ... Windows : require("/phpmailer/PHPMailerAutoload.php");Linux : require("./phpmailer/PHPMailerAutoload.php"); Le problème est que l'erreur continue d'être là ... Le fichier où est inscrit cette ligne se situe dans le même dossier qui contient /phpmailer/. Donc la ligne pour Linux devrait fonctionner. J'utilise une architecture MVC pour mon projet. Merci d'avances pour vos idées !
  2. Bonjour, Je suis actuellement sur un projet web et étant donné que les utilisateurs pourront envoyer des infos (via $_GET et formulaire mail), je voudrais bien protéger mon site des injections. Coté SQL, rien à craindre parce que j'utilise PDO (et surtout parce que je n'ai pas de base de données à utiliser actuellement ). Pour le PHP, j'ai codé une p'tite fonction, est-elle suffisante ? function protectInjection($variable) { $sanitize = $variable; if (get_magic_quotes_gpc()) { $sanitize = stripslashes($variable); } return htmlspecialchars(trim($sanitize)); } J'y fais passer tout ce qui provient de $_POST(). Merci à vous ;-)
  3. Bonjour, Je viens vers vous afin d'avoir une petite aide car j'arrive pas à résoudre mon soucis. Voilà sur une page web j'ai mis un Picto en dessous l'intituler de la rubrique et en dessous le chois des sous rubrique pour le premier pas de soucis cela fonctionne et le résultat et comme je le souhaité. Je souhaite en rajouté, mais à chaque fois que je les rajoute comme le premier sa me l'ai met les un en dessous des autre. Hors NON j'aimerais en mettre 3 voir 4 pars ligne Voici en image : Première rubrique résultat positif ajout de la deuxième rubrique mais : celle ci au lieu de se mettre à droite de la première, elle se met en dessous. se que j'aimerais sa serais comme ceci voici mon code de cette partie <div id="content"> <div align="center"> <table width="500" border="0"> <tr> <img src="../../images/logo-utilitaires.jpg" alt=" " width="120" height="80" border="1" /> <th scope="col"><span class="Style1">Utilitaires</span> <form> <select name="listepages" size="1" onChange="chgpage(this.form)"> <option selected="selected">Choisissez votre rubrique.</option> <option value="./OS/">Systèmes d'exploitation</option> </select> </form> </th> </tr> </table> <table width="500" border="0"> <tr> <img src="../../images/logo-personnalisation.png" alt=" " width="120" height="80" border="1" /> <th scope="col"><span class="Style1">Personnalisation</span> <form> <select name="listepages" size="1" onChange="chgpage(this.form)"> <option selected="selected">Choisissez votre rubrique.</option> <option value="./Personnalisation/Amélioration_bureau">Amélioration du bureau</option> <option value="./Personnalisation/Curseur-Icone">Curseur & Icone</option> <option value="./Personnalisation/Ecran_veille">Ecran de veille </option> <option value="./Personnalisation/Gadgets-inutilitaires">Gadgets et inutilitaires</option> <option value="./Personnalisation/Police_caractère">Police de caractère</option> <option value="./Personnalisation/Thèmes_bureau">Thèmes de bureau</option> <option value="./Personnalisation/Widgets">Widgets</option> </select> </form> </th> </tr> </table> </div></div> dans l'attente d'une réponse de votre pars, je vous en remercie d'avance Bien cordialement
  4. Bonjour, Je travaille actuellement sur un projet où je dois lire un fichier XML (pas de JSON, j'ai besoin des attributs) et mettre ces infos dans un tableau. <?xml version="1.0" encoding="UTF-8"?><?DOCTYPE test SYSTEM "./test.dtd"?><test> <a1> <b> <date> 14 juillet </date> <intitule> Fête nationale ! </intitule> </b> <b> <date> 24 décembre </date> <intitule> Noël \o/ </intitule> </b> </a1> <a2> </a2></test> <?xml version="1.0" encoding="UTF-8"?><!ELEMENT test(a1, a2)><!ELEMENT a1(b*)><!ELEMENT b(date, intitule)><!ELEMENT date(#PCDATA)><!ELEMENT intitule(#PCDATA)><!ELEMENT a2(#PCDATA)> Mon objectif est de récupérer le premier élément (<a1> et de lire le contenu de <a2> dans une boucle) J'ai donc : $dom = new DOMDocument();$dom->load("./inc/test.xml");$elementA1 = $dom->getElementsByTagName("a1");$listeElementsB = $elementA1->getElementsByTagName("b");foreach ($listeElementsB as $B) { echo $B->firstChild->nodeValue;} (Je me base sur http://eusebius.developpez.com/php5dom/) Mais rien ne s'affiche :( Et vous connaissez un équivalent de var_dump() pour les données XML ? Chez moi, ça se contente de dire (par exemple) object(DOMNodeList)[2]. C'est pas très parlant ... Merci !
  5. Le but de ce petit tutorial est de monter un serveur WEB (html, php, mysql, phpMyAdmin et serveur ftp) sur un raspberry où a été préalablement installée la distribution raspbian. Au final, il s'agit donc d'héberger son site sur un raspberry! Ce tutorial fait suite au précédent s’agissant de l’installation de la distribution raspbian sur une clef USB (voir ici). Le serveur devra offrir les fonctionnalités de base d’un serveur WEB et être accessible depuis le internet. Ceci implique un minimum de sécurisation. En outre, il disposera de « stratégies » basiques de sauvegarde afin de pouvoir restaurer rapidement le serveur. INTRODUCTION : CHAPITRE I : INSTALLATION ET CONFIGURATION SUR SERVEUR WEB : I – PRE-REQUIS LOGICIELS ET MATERIELS : II – INSTALLATION DE MYSQL : 2.1 – Préparation de l’installation de mysql : 2.2 – Installation du serveur mysql : II – INSTALLATION ET LANCEMENT DE NGINX : III – INSTALLATION DE PHP-FPM : IV – INSTALLATION ET CONFIGURATION DE PHPMYADMIN : V – CONFIGURATION DU SERVEUR : 5 - 1 - Création du répertoire pour le site : 5 - 2 - Création du fichier de configuration Nginx pour notre site : VI – INSTALLATION D’UN SERVEUR FTP : VII – AFFICHER SA PREMIERE PAGE : CHAPITRE II : SECURISATION DU SERVEUR : I – CONFIGURATION D’IPTABLES 1.1 – Ouverture du fichier de configuration d’IpTables 1.2 – Purge des règles antérieures et définition des règles de blocage par défaut 1.3 – Ouvrir uniquement les ports nécessaires 1.4 – Limiter les attaques par déni de service et le scan de ports 1.5 – Bloquer une IP ou une plage d’IP 1.6 – Tester et sauvegarder nos réglages II – INSTALLER ET CONFIGURER FAIL2BAN 2.1 – Installer Fail2Ban 2.2 – Configurer Fail2Ban 2.3 – Eviter les erreurs au lancement de Fail2Ban 2.4 – Relancer Fail2Ban III – INSTALLER PORTSENTRY 3.1 – Installer Portsentry 3.2 – Configurer Portsentry CHAPITRE III : SAUVEGARDER LE SERVEUR : Work in progress ANNEXES : Work in progress INTRODUCTION : L’objectif est bien ici de disposer d’un serveur WEB avec toutes les fonctionnalités de base, mais encore de rendre accessible celui-ci sur le WEB et dont de faire un minimum attention à la sécurité. Bref, on veut devenir un vieux barbu… L'intérêt est évident si on veut herger son site WEB (ou son cloud, son serveur de médias...) cela implique d'avoir une machine allumée 24h/24 7j/7 avec la consommation qui va avec et le bruit de la tour... Le raspberry consomme très peu et est totalement passif, donc c'est une solution de bon sens pour un petit site. Naturellement, on ne va pas héberger un site avec des centaines d'utilisateurs simulmatés et des requêtes intermidables sur le serveur. Je ne manquerai pas de préciser dans les annexes le potentiel exact d'un raspberry s'agissant d'une utilisation en serveur WEB, mais il est évident que le site WEB lui-même devra être pensé pour limiter les requetes inutiles. Comme pour « mes » deux tutoriaux précédents, ils existent pas mal de guides sur le WEB concernant l’installation d’un serveur WEB sur raspberry. Et comme souvent, soit il est choisi d’installer Apache qui est tout simplement un non-sens sur une petite machine comme le raspberry, soit on propose l’installation d’autres serveurs mais en omettant certaines précisions et notamment de mentionner que l’installation habituelle de mysql pose problème. Pour l’essentiel de l’installation, je me suis inspiré de ce tutorial (en anglais) : http://raspberrypihelp.net/tutorials/24-raspberry-pi-webserver S’agissant du deuxième sujet, à savoir la sécurisation et tandis que ce sujet n’est pas spécifique au raspberry, les guides complets sont extrêmement rares et c’est regrettable… Deux cependant sont excellents (aussi bien pour les outils proposés que pour l’effort d’accessibilité fait par leurs auteurs) : - le tutorial d’alsacréations ici http://www.alsacreations.com/tuto/lire/622-Securite-firewall-iptables.html - le tutorial juju251 sur clubic ici Enfin, dans un troisième temps, il conviendra de sauvegarder son serveur afin de pouvoir le restaurer rapidement. Dans la mesure du possible, on tentera d’automatiser ces sauvegardes. CHAPITRE I : INSTALLATION ET CONFIGURATION SUR SERVEUR WEB : I – PRE-REQUIS LOGICIELS ET MATERIELS : J’ai naturellement fait des choix subjectifs ici. D’abord en raison de mes besoins comme pour mysql qui m’est indispensable, mais qui n’est pas forcément un choix logique car mysql n’est pas franchement léger tandis que raspberry n’est vraiment pas un monstre de puissance. Un choix plus rationnel est d’installer sqlite bien plus léger (mais qui n’offre pas les mêmes possibilités). S’agissant du serveur WEB, la majorité installe Apache tandis que même optimisé ce serveur est vraiment très lourd (à l’inverse il est probablement le plus robuste, riche de fonctionnalités, documenté et sans aucun doute le plus courant). Je n’ai même pas voulu tenter une telle installation qui me semble totalement inappropriée sur une machine comme le raspberry à la puissance nécessairement limitée. Deux alternatives sont souvent citées Lighttpd et Nginx, vraiment plus légers qu’Apache. Un troisième serveur que je n’ai jamais testé est Pancake qui d’après les retours est plus léger encore. J’ai donc arbitré entre Lighttpd et Nginx : - le premier est « mieux » documenté que le deuxième. - Nginx semble très légèrement plus réactif que Lighttpd (de très peu). - Nginx consomme moins de mémoire que Lighttpd qui lui-même en consomme peu. - en terme de fonctionnalités, c’est sensiblement la même chose. Certaines fonctions courantes impliquent l’installation de modules avec Lighttpd, là où Nginx gère ces fonctionnalités nativement. La seule différence notable est peut-être pour moi la gestion du virtualhost en faveur de Nginx. - la configuration de Nginx serait plus complexe que celle de Lighttpd. J’ai choisi Nginx qui ne m’a pas posé de problème particulier d’installation ou de configuration et dont la faible consommation mémoire est une caractéristique plus qu’intéressante pour un raspberry. Enfin, phpMyAdmin me semble une évidence pour un feignant comme moi tout comme un serveur ftp, en l’espèce ici : VSFTPD. - Coté matériel, je n’entre pas dans les détails. Certains expliquent que l’installation de mysql implique de disposer de quasiment 4 gigas de libre. On ne doit pas installer la même chose, car au final la distribution raspbian et le serveur WEB complet occupent un peu plus de 2 gigas sur la partition (de 8 gigas au total, c'est-à-dire un peu plus d’un quart de la capacité de ma clef USB)… Pour des pré-requis matériels complets vous pouvez lire le tutorial précédent ici (point I). De même, je n’explique pas à nouveau comment se connecter en SSH à sa raspbian depuis son ordinateur et qu’il est nécessaire de changer le mot de passe du compte pi par un mot de passe complexe et long. (Sinon, vous pouvez vous reporter au point 3.2 du tutorial précédent pour la connexion SSH et VIII pour le mot de passe, ici). II – INSTALLATION DE MYSQL : 2.1 – Préparation de l’installation de mysql : C’est sans aucun doute le seul point « difficile » de l’installation. Certains expliquent qu’il y aurait un bug connu mais non encore résolu concernant l’installation de mysql sur raspberry… Bla bla bla… En réalité, le plantage qui semble le plus courant à l’installation et que je n’ai pas manqué de rencontrer, est que le script d’installation (pourtant lancé avec sudo) n’arrive pas à écrire dans le répertoire temporaire de la raspbian. Je n’ai pas encore trouvé d’explication à cela, en revanche, comment résoudre le problème est relativement simple. Il faut s’assurer des droits de « root » sur le répertoire « tmp ». Si vous ne comprenez rien à ce charabia, retournez sur le tutorial précédent ou exécutez comme une brute les commandes suivantes dans votre terminal SSH : sudo chown root:root /tmpsudo chmod 1777 /tmp Ceci fait, on s’assure que la distribution raspbian est à jour si ce n’est pas déjà fait en exécutant les commandes suivantes : sudo apt-get updatesudo apt-get upgrade 2.2 – Installation du serveur mysql : Attention c’est vraiment compliqué et la commande est très secrète (on ne l’a donne qu’entre vieux barbus… c’est dire !) : sudo apt-get install mysql-server-5.5 Le gestionnaire de paquets va télécharger les paquets nécessaires et lancer l’installation. ATTENTION : durant la procédure d’installation un écran bleu s’affiche et demande d’entrer le mot de passe qui sera utilisé pour accéder au serveur mysql avec tous les droits. Il faut donc entrer un mot de passe relativement long, dans tous les cas complexe et surtout le retenir… Normalement, l’installation s’achève correctement avec notamment un petit [OK] vert après le lancement du serveur signe que tout va bien. NOTE : si par malchance vous avez un petit [FAIL] rouge après le lancement de mysql. Je vous confirme qu’il y a bien un problème… Avant tout, regardez les alertes affichées quelques lignes plus hauts, le plus souvent une recherche sur google vous donnera la réponse si vous relevez le code d’erreur. Avant de vous lancez dans la ré-installation du serveur mysql, faites deux choses : - d’abord, il faut virer le serveur mysql et tous les fichiers qui vont avec à l’aide de ces commandes : sudo apt-get purge mysql-server-5.5sudo rm -rf /var/lib/mysql - ensuite, assurez-vous d’avoir donné les droits à root sur le répertoire tmp comme indiqué au point 1.1. Ceci fait, vous pouvez relancer l’installation… II – INSTALLATION ET LANCEMENT DE NGINX : C’est donc ceci qui est considéré comme « complexe » par certains, pour installer Nginx, il faut saisir la commande : sudo apt-get install nginx Et pour lancer le service Nginx, il faut saisir la commande : sudo service nginx start Effectivement, c’est totalement insurmontable d’installer un serveur WEB Nginx… III – INSTALLATION DE PHP-FPM : Ceci permet de faire communiquer le serveur WEB avec PHP. Pour l’installer : sudo apt-get install php5-fpm Il n’y a rien à faire de particulier. IV – INSTALLATION ET CONFIGURATION DE PHPMYADMIN : PhpMyAdmin est un logiciel permettant de gérer ses bases de données mysql du serveur depuis son navigateur WEB. C’est un classique qui bien pratique lorsqu’on doit mettre le nez dans ses bases pour vérifier que tout va bien. Pour l’installer, on entre : sudo apt-get install phpmyadmin Passez les options de pré-configuration pour Apache ou Lighttpd (touche « TAB »). S’affiche alors « Configure database for phpmyadmin with dbconfig-common ? », naturellement sélectionnez « Yes ». Il va vous être demandé le mot de passe pour accéder au serveur Mysql et le mot de passe pour phpMyadmin. Ceci fait, on relance php5-fpm : sudo service php5-fpm restart V – CONFIGURATION DU SERVEUR : Le serveur n’est pas encore fonctionnel, il faut créer le répertoire où on va stocker le(s) site(s) WEB, donner les droits d’écriture nécessaires, créer quelques petits fichiers pour surveiller le bon fonctionnement du serveur (logs) et enfin configurer Nginx pour propulser votre site. Il vous faut à ce stade une vague idée du nom de votre site par exemple : toto.fr 5 - 1 - Création du répertoire pour le site : Pour créer le répertoire où seront stockés tous nos sites : sudo mkdir /srv/www Puis on donne la propriété et les droits d’écriture à notre compte, qui est normalement le compte « pi » sauf changement de votre part: sudo chown -R pi:www-data /srv/wwwsudo chmod -R 755 /srv/www Il faut naturellement créer le répertoire de notre premier site, toto.fr : mkdir /srv/www/toto.fr On entre dans ce répertoire pour y créer deux fichiers vides ; l’un pour le log du site, l’autre pour les erreurs : cd /srv/www/toto.frmkdir logsnano logs/access.log Contrôle x pour sortir nano logs/error.log Contrôle x pour sortir Enfin, il faut créer dans le répertoire de notre site toto.fr un répertoire public, lieu où on mettra nos pages pour les rendre accessibles : mkdir public 5 - 2 - Création du fichier de configuration Nginx pour notre site : Il reste à paramétrer Nginx pour qu’il cherche les pages de notre site et le propulse en ligne (pour le moment sur le réseau local ^^). Pour cela on entre : sudo nano /etc/nginx/sites-available/toto.fr Il faut compléter le fichier de configuration ainsi (192.168.0.50 est l'IP du raspberry sur le réseau local) : server {server_name toto.fr 192.168.0.50;access_log /srv/www/toto.fr/logs/access.log;error_log /srv/www/toto.fr/logs/error.log;root /srv/www/toto.fr/public/; location / {index index.php index.html index.htm;try_files $uri $uri/ /index.php?$args; } location ~ \.php$ {include /etc/nginx/fastcgi_params;fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /srv/www/toto.fr/public$fastcgi_script_name; } location /phpmyadmin {root /usr/share/;index index.php index.html index.htm;location ~ ^/phpmyadmin/(.+\.php)$ {try_files $uri =404;root /usr/share/;fastcgi_pass unix:/var/run/php5-fpm.sock;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include /etc/nginx/fastcgi_params; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {root /usr/share/; } } location /phpMyAdmin {rewrite ^/* /phpmyadmin last;}} Contrôle o pour sauvegarder, contrôle x pour sortir. Très bien, on peut créer un petit lien symbolique entre les répertoires « sites disponibles » et « sites activés » : sudo ln -s /etc/nginx/sites-available/toto.fr /etc/nginx/sites-enabled/toto.fr On relance Nginx pour que les fichiers de configuration soient pris en compte : sudo service nginx restart VI – INSTALLATION D’UN SERVEUR FTP : Ceci n’est pas indispensable, mais pour moi un serveur WEB va avec un serveur ftp. Accessoirement, l’administrateur du site n’est pas nécessairement l’administrateur du serveur WEB, aussi il peut être pratique de ne donner qu’un accès FTP à l’administrateur du site (et un compte limité sur mysql via phpadmin) pour éviter des bidouillages sur le serveur WEB. Là encore j’ai opté pour un serveur léger afin de préserver les ressources du raspberry ; VSFTPD. Pour l’installer : sudo apt-get install vsftpd Il faut modifier le fichier de configuration de VSFTPD pour le sécuriser un minimum mais aussi créer les accès : sudo nano /etc/vsftpd.conf On recherche la ligne : anonymous_enable=YES pour naturellement la changer en anonymous_enable=NO afin d’interdire l’accès utilisateurs anonymes. Et on dé-commente les lignes suivantes (retirer les #) afin de permettre aux comptes utilisateurs de la raspbian de se connecter et d’avoir les droits d’écriture : local_enable=YESwrite_enable=YESlocal_umask=022 Contrôle o pour sauvegarder, contrôle x pour sortir. On configurera des comptes limités (notamment celui de l’administrateur du site), dans les annexes. On relance le serveur FTP pour que les modifications du fichier de configuration soient prises en compte : sudo service vsftpd restart A ce stade, vous pouvez normalement vous connecter avec votre client ftp avec le compte « pi ». VII – AFFICHER SA PREMIERE PAGE : Pour s’assurer que tout fonctionne il faut encore avoir une page pour l’afficher… Afin de voir que tout est fonctionnel, on va faire en sorte que cette page affiche l’état du serveur à l’aide de la fonction php : phpinfo() On va donc créer une page index.php et y coller la fonction voulue: nano /srv/www/toto.fr/public/index.php On entre dans le fichier ceci : <?php phpinfo();?> Contrôle o pour sauvegarder, contrôle x pour sortir. Pour vérifier, on lance le navigateur WEB de son choix et dans la barre d’adresse on entre l’adresse ip de notre serveur raspberry… roulements de tambour … s’affichent les infos du serveur. On peut même accéder à Phpmyadmin en ajoutant à l’URL « /phpmyadmin/ ». Je ne sais pas si vous avez la même réflexion que moi à cet instant, mais je trouve que c’est extrêmement réactif… On monitorera les performances du serveur dans un second temps pour s’en convaincre, mais la solution Nginx (et sans doute Lighttpd) est redoutablement efficace au regard de la puissance du raspberry. A ce stade, vous pouvez uploader votre site WEB sur le serveur, paramétrer vos bases de données mysql, bref programmer votre site WEB en perspective de le rendre accessible depuis internet. Mais ne permettez pas encore l’accès depuis internet au serveur (pas encore de redirection de ports à ce stade ou de DMZ sur votre routeur/box). Le serveur WEB ne doit être accessible qu’en local car il est très peu (quasiment pas) sécurisé et est très vulnérable. CHAPITRE II : SECURISATION DU SERVEUR : Il y a énormément d’options possibles et d’outils s’agissant de la sécurisation d’un serveur WEB sous linux. Là encore, j’ai du faire un arbitrage entre les outils les plus courants mais aussi le choix de ne pas surcharger le raspberry. A mon sens on ne peut pas faire l’économie de trois outils : - IpTables : qui est THE firewall, - Fail2ban : permet de bannir les IP qui tentent de se connecter à l’aide d’attaques par dictionnaires de mots de passe ou par bruteforce, - Portsentry : qui va détecter le scan des ports du serveur et bloquer toutes les requêtes provenant de l’IP de l’attaquant. On peut aussi envisager d’installer Rkhunter, qui va chercher si une intrusion (réussie donc) n’a pas laissé une porte ouverte, une backdoor. I – CONFIGURATION D’IPTABLES : La configuration d’IpTables est sans l’ombre d’un doute le point le plus important et le plus complexe de la sécurisation d’un serveur WEB sous linux. Il ne faut vraiment pas se planter car l’essentiel de la sécurité de notre raspberry est là. Le fichier de configuration se trouve dans /etc/init.d/firewall. Ce fichier doit toujours rester structuré et commenté afin de s’y retrouver. En outre, les autres logiciels de sécurisation vont eux-mêmes ajouter des éléments au fichier de configuration d’IpTables, donc il faut pouvoir facilement distinguer les éléments qui sont ceux de notre configuration « manuelle », de ceux ajoutés notamment par Fail2ban. Enfin et j’insiste lourdement ici : on ne doit jamais rendre le fichier de configuration d’IpTables exécutable au démarrage du Raspberry sans s’être assuré que tout fonctionne et est accessible. A défaut et avec une erreur de configuration « bloquant plus que nécessaire », il n’y aura d’autre choix que de brancher le raspberry à un écran et clavier pour reprendre la main sur notre serveur… 1.1 – Ouverture du fichier de configuration d’IpTables : On ouvre une connexion SSH. Et on entre la commande : sudo nano /etc/init.d/firewall 1.2 – Purge des règles antérieures et définition des règles de blocage par défaut : Le fichier doit se présenter ainsi : #!/bin/sh# Suppression des règles antérieuresiptables -t filter -Fiptables -t filter -X# On laisse tout sortir et on bloque tout en entréeiptables -t filter -P INPUT DROPiptables -t filter -P FORWARD DROPiptables -t filter -P OUTPUT ACCEPT# On conserve les connexions déjà établiesiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT# On autorise le loopbackiptables -t filter -A INPUT -i lo -j ACCEPTiptables -t filter -A OUTPUT -o lo -j ACCEPT Le loopback permet l’accès à soi-même de la machine… 1.3 – Ouvrir uniquement les ports nécessaires : Pour un serveur WEB on doit laisser accessible le port 80 (http) et le port 21 (ftp). Ceci donne : # Serveur HTTP (80)iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPTiptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT# Serveur FTP (21) dont mode passifmodprobe ip_conntrack_ftpiptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPTiptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPTiptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT Il faut aussi permettre l’accès en SSH à notre Raspberry, soit et par défaut le port 22. (Surtout si on veut ne pas y brancher d’écran, clavier et souris). Là deux « écoles » existent : - on laisse le SSH accessible depuis l’extérieur dans ce cas on change le port par défaut du SSH et on limite au mieux les tentatives de connexions intempestives. - on n’a besoin d’accéder au SSH que depuis le réseau local, dans ce cas on accepte que les connexions en SSH depuis le réseau local. Pour moi, permettre l’accès en SSH depuis l’extérieur est un risque que je peux éviter. Risque important cas si quelqu’un arrive à se connecter, notamment avec le compte « pi » voire root, il peut tout faire sur le raspberry (voire sur le lan en cas de partage depuis une boxadsl…). -> Si vous souhaitez accéder en SSH depuis l’extérieur : Par défaut, le port SSH est le 22, mais il est recommandé d’en changer. # Connexionx SSHiptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPTiptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP Ici, il ne peut y avoir plus de 4 connexions SSH par minute. -> Si vous souhaitez accéder en SSH que depuis le réseau local (192.168.0.x) : # Connexionx SSHiptables -A INPUT -i eth0 -p tcp -s 192.168.0.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT - Il est utile que notre serveur réponde au ping, cependant, il me semble intéressant de limiter le nombre de pings possibles par minute pour qu’une demande de ping un peu musclée ne plante pas le raspberry. Ici j’ai limité à 15 pings par minutes : # Autorisation du PING :iptables -A INPUT -p icmp -m limit --limit 15/minute -j ACCEPTiptables -A INPUT -p icmp -j DROP 1.4 – Limiter les attaques par déni de service et le scan de ports : Sans que ces options soient suffisantes, elles sont une bonne base : # Bloquer les attaques par déni de serviceiptables -A FORWARD -p tcp --syn -m limit --limit 1/second -j ACCEPTiptables -A FORWARD -p udp -m limit --limit 1/second -j ACCEPTiptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT# Bloquer les scans de portsiptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT 1.5 – Bloquer une IP ou une plage d’IP : Il peut être intéressant de bloquer une IP, voir une plage d’IP. Pour par exemple bloquer les IP 85.159.236.252 et 193.107.240.1 : # Bloquer des IP spécifiquesiptables -A INPUT -s 85.159.236.252 -j DROPiptables -A INPUT -s 193.107.240.1 -j DROP On peut aussi souhaiter bloquer une plage IP dans son entier. C’est parfois « utile » pour bloquer l’essentiel des connexions d’un pays mais ça fait très mal du coté de la neutralité du net, dont on utilisera ce type de blocage qu’en dernier recours… Par exemple, pour bloquer toute la plage d’ip de 213.87.0.*, cela donne : # Bloquer des plages d’IPiptables -I INPUT 1 -s 213.87.0.0/16 -j DROP Au passage, il faut faire attention à ne pas bloquer sa propre IP ^^. 1.6 – Tester et sauvegarder nos réglages : Avant de lancer notre configuration d’IpTables à chaque lancement du raspberry, on va s’assurer que tout fonctionne. Tout d’abord, on sauvegarde notre configuration en faisant : control o, on valide, contrôle x Il faut rendre notre fichier de configuration exécutable : sudo chmod +x /etc/init.d/firewall Et on l’exécute : sudo /etc/init.d/firewall Tentez de vous connecter en SSH, d’afficher votre page WEB… pour s’assurer que tout fonctionne et que l’on n’a pas une erreur de configuration. Si ça bloque… relancez le raspberry et chercher votre erreur (souvent un problème de syntaxe). Si tout est ok, on fait en sorte que le script de configuration d’IpTables s’exécuter à chaque lancement du raspberry : sudo update-rc.d firewall defaults Et voila, IpTables est configuré et à ce stade on a déjà bien sécurisé notre serveur ! Il faut admettre que la syntaxe d’IpTables n’est pas forcément toujours compréhensible, si vous souhaitez étudier cela plus en profondeur : http://doc.ubuntu-fr.org/iptables II – INSTALLER ET CONFIGURER FAIL2BAN : Fail2Ban va surveiller les tentatives d’intrusions sur notre petit serveur WEB et plus particulièrement les tentatives de connexion via des dictionnaires id/mots de passe ou par bruteforce. L’idée est donc de bloquer une IP après x tentatives de connexions échouées pour un temps donné, voire définitivement. 2.1 – Installer Fail2Ban : Comme toujours la commande d’installation est très difficile : sudo aptitude install fail2ban On accepte l’installation et on patiente un peu, le logiciel s’installe tout seul comme un grand… 2.2 – Configurer Fail2Ban : Pour ouvrir le fichier de configuration : sudo nano /etc/fail2ban/jail.conf Ce fichier se décompose en 3 parties : Default, Actions et Jail. Dans la section Default on peut préciser le paramétrage général du logiciel, ainsi : > ignoreip permet de préciser les IP qui ne doivent pas être surveillées (on les sépares par un espace), à minima on laisse ignoreip = 127.0.0.1/8 > bantime est le délai par défaut de bannissement en secondes, par défaut 600, soit 10 minutes. > maxretry permet de définir le nombre maximum d’échec de connexions avant le bannissement, par défaut c’est 3 tentatives. > destemail permet de définit l’adresse email qui recevra un email s’il y a un incident détecté par Fail2Ban. Par défaut, cela va dans le compte root. On peut laisser le reste inchangé tout comme la section Actions. C’est donc la section Jail qui va nous occuper. Dans cette section chaque type de connexions est proposée afin d’indiquer à Fail2Ban quoi surveiller. On peut naturellement en ajouter. Le principe est que pour un service donné, on indique le nombre de tentative de connexions avant bannissement. Si une option n’est pas indiquée, c’est le réglage par défaut qui s’applique. Ainsi, on va définir des prisons en fonction de la connexion et de l’action voulue. Pour limiter les tentatives de connexions en SSH, voila une petite prison basique (cette option est déjà activée par défaut) : # SSH Limiter à 3 tentatives avant ban de 15min[ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 3bantime = 900 Si le port SSH n’est pas le 22, alors remplacez port = SSH, par port = [VOTRE PORT SSH] Il faut aussi ajouter une prison pour les connexions au FTP : [vsftpd]enabled = trueport = ftp,ftp-data,ftps,ftps-datafilter = vsftpdlogpath = /var/log/vsftpd.logmaxretry = 5 S’agissant de Nginx, il faut créer des prisons spécifiques et des filtres. > Tout d’abord les prisons : [nginx-auth]enabled = truefilter = nginx-authaction = iptables-multiport[name=NoAuthFailures, port=http,https]logpath = /var/log/nginx*/*error*.logbantime = 600maxretry = 6[nginx-login]enabled = truefilter = nginx-loginaction = iptables-multiport[name=NoLoginFailures, port=http,https]logpath = /var/log/nginx*/*access*.logbantime = 600maxretry = 6 [nginx-badbots]enabled = truefilter = apache-badbotsaction = iptables-multiport[name=BadBots, port=http,https]logpath = /var/log/nginx*/*access*.logbantime = 86400 # 1 jourmaxretry = 1 [nginx-noscript]enabled = trueaction = iptables-multiport[name=NoScript, port=http,https]filter = nginx-noscriptlogpath = /var/log/nginx*/*access*.logmaxretry = 6bantime = 86400 # 1 jour On sauvegarde avec contrôle o et on valide, puis on quitte nano avec contrôle x Il maintenant ajouter un à un les filtres nécessaires. Tout d’abord on se place dans le répertoire où sont stockés les filtres : cd /etc/fail2ban/filter.d/ Et va créer et sauvegarder un à un nos filtres : . Pour nginx-noscript.conf : sudo nano nginx-noscript.conf On entre pour le filtre nginx-noscript.conf: # Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:# Bloque les IP qui tentent d’executer des scripts sur le serveur# type .php, .pl, .exe et autres# Matches e.g.# 192.168.1.1 - - "GET /something.php[Definition]failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)ignoreregex = Contrôle o, valider, contrôle x . Pour nginx-auth.conf : sudo nano nginx-auth.conf On entre pour ce filtre : # Auth filter /etc/fail2ban/filter.d/nginx-auth.conf:# Bloque les IP qui ne s’authentifient pas correctement[Definition]failregex = no user/password was provided for basic authentication.*client: <HOST> user .* was not found in.*client: <HOST> user .* password mismatch.*client: <HOST> ignoreregex = Contrôle o, valider, contrôle x . Pour nginx-login.conf: sudo nano nginx-login.conf On entre pour ce filtre : # Login filter /etc/fail2ban/filter.d/nginx-login.conf:# Bloque les IP qui ne s’authentifient pas correctement via post# Scan access log for HTTP 200 + POST /sessions => failed log in[Definition]failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200ignoreregex = Contrôle o, valider, contrôle x Le filtre badbots existe déjà car il s’agit en fait d’un filtre pour apache. 2.3 – Eviter les erreurs au lancement de Fail2Ban : Lorsqu’il y a beaucoup de prisons qui se lancent au chargement de Fail2Ban on peut avoir quelques erreurs. Pour éviter cela, il suffit de laisser un délai entre le chargement de chaque prison. Ouvrez le fichier fail2ban-client: sudo nano /usr/bin/fail2ban-client Vers la ligne 140 (ou avec contrôle w pour chercher le passage), ajoutez la ligne time.sleep(0.1) ainsi : def __ping(self): return self.__processCmd([["ping"]], False) def __processCmd(self, cmd, showRet = True): beautifier = Beautifier() for c in cmd: time.sleep(0.1) beautifier.setInputCmd© Contrôle o, valider, contrôle x 2.4 – Relancer Fail2Ban : Il faut maintenant relancer Fail2Ban pour que nos paramètres soient pris en compte : sudo service fail2ban restart Normalement, on a un beau ok indiquant que Fail2Ban a pu charger nos règles. En revanche, si c’est un FAIL qui s’affiche il y a sans doute une erreur (vérifiez la syntaxe de vos prisons et de vos filtres). III – INSTALLER PORTSENTRY : Le but est de bloquer les IP qui scannent les ports du raspberry à la recherche de failles en perspective d’une attaque. Théoriquement, IpTables et Fail2Ban nous protègent déjà, mais l’intérêt est ici de bloquer des IP avant même une tentative de connexion. 3.1 – Installer Portsentry : Pour lancer l’installation : sudo aptitude install portsentry A l’installation, Portsentry nous indique qu’il ne bloque rien par défaut. 3.2 – Configurer Portsentry : Tout d’abord on va indiquer les IP qu’il faut ignorer, naturellement, je vous invite à ignorer votre réseau local ou au moins l’IP locale du pc d’où vous vous connectez au raspberry. sudo nano /etc/portsentry/portsentry.ignore.static Aussi, sous 127.0.0.1/32 et 0.0.0.0 ajoutez votre réseau local par exemple 192.168.0.0/24, vous pouvez aussi ajouter les IP des principaux moteurs de recherche. Contrôle o pour sauvegarder, contrôle x pour sortir. Ici deux possibilités, soit on indique les ports qu’il faut surveiller, soit on laisse le soin au logiciel de le déduire des ports utilisés, c’est cette dernière option qui est la plus simple. On édite /etc/portsentry/portsentry.conf : sudo nano /etc/default/portsentry et on remplace cherche les options TCP_MODE="tcp"UDP_MODE="udp" En TCP_MODE="atcp"UDP_MODE="audp" Contrôle o pour sauvegarder, contrôle x pour sortir. Et on relance Portsentry pour s’assurer que l’on a pas de message d’erreur: sudo service portsentry restart Si c’est bon, on peut modifier le fichier principal de configuration de Portsentry pour lui demander de bloquer les tentatives de scans : sudo nano /etc/portsentry/portsentry.con Et on remplace : BLOCK_UDP="0"BLOCK_TCP="0" En : BLOCK_UDP="1"BLOCK_TCP="1" Contrôle o pour sauvegarder, contrôle x pour sortir. Et on relance Portsentry pour activer la configuration : sudo service portsentry restart Et voilà, Portsentry est fonctionnel… Ouf !!! Voilà pour le chapitre 2… C’est déjà un beau bébé, donc je ne souhaite pas charger la mule ici. En revanche, on peut encore sécuriser par mal de chose ; tout d’abord Nginx lui-même en limitant les attaques par débordement de tampon, en sécurisant l’accès de certains répertoire du site, en limitant le nombre de connexions simultanées… Mais encore Mysql… J’aborderai rapidement cela dans les annexes. CHAPITRE III : SAUVEGARDER LE SERVEUR : Work in progress ANNEXES : Ne va pas tarder.
×