Sécuriser son site Internet

J’ai lancé mon site de e-commerce www.mystockphoto.fr et en consultant les logs, on constate qu’il y a beaucoup de tentative d’accès au serveur en utilisant des failles connues. Il est donc important de sécuriser son serveur et vos logiciels Apache/Nginx; Et il y a aussi les crawlers qui polluent vos statistiques.

  1. Sécuriser l’accès à son serveurJ’utilise deux méthodes simples pour sécuriser l’accès à mon serveur :
      • Restreindre l’accès aux protocoles ssh et ftp à votre adresse IP seulement : Il faut configurer votre firewall
      • Utiliser Google Authenticator (One-time password) pour restreindre l’accès à votre serveur.
  2. Configurer Apache/NginxIl faut configurer Apache/Nginx pour bloquer les exploits connus. Vous trouverez ci-dessus mon fichier block.conf :
    ## Block SQL injections
        set $block_sql_injections 0;
        if ($query_string ~ "union.*select.*(") {
            set $block_sql_injections 1;
        }
        if ($query_string ~ "union.*all.*select.*") {
            set $block_sql_injections 1;
        }
        if ($query_string ~ "concat.*(") {
            set $block_sql_injections 1;
        }
        if ($block_sql_injections = 1) {
            return 403;
        }
    
        ## Block file injections
        set $block_file_injections 0;
        if ($query_string ~ "[a-zA-Z0-9_]=http://") {
            set $block_file_injections 1;
        }
        if ($query_string ~ "[a-zA-Z0-9_]=(..//?)+") {
            set $block_file_injections 1;
        }
        if ($query_string ~ "[a-zA-Z0-9_]=/([a-z0-9_.]//?)+") {
            set $block_file_injections 1;
        }
        if ($block_file_injections = 1) {
            return 403;
        }
    
        ## Block common exploits
        set $block_common_exploits 0;
        if ($query_string ~ "(<|%3C).*script.*(>|%3E)") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "GLOBALS(=|[|%[0-9A-Z]{0,2})") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "_REQUEST(=|[|%[0-9A-Z]{0,2})") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "proc/self/environ") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "mosConfig_[a-zA-Z_]{1,21}(=|%3D)") {
            set $block_common_exploits 1;
        }
        if ($query_string ~ "base64_(en|de)code(.*)") {
            set $block_common_exploits 1;
        }
        if ($block_common_exploits = 1) {
            return 403;
        }
    
        ## Block user agents
        set $block_user_agents 0;
    
        # Don't disable wget if you need it to run cron jobs!
        #if ($http_user_agent ~ "Wget") {
        #    set $block_user_agents 1;
        #}
    
        # Disable Akeeba Remote Control 2.5 and earlier
        if ($http_user_agent ~ "Indy Library") {
            set $block_user_agents 1;
        }
    
        # Common bandwidth hoggers and hacking tools.
        if ($http_user_agent ~ "libwww-perl") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GetRight") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GetWeb!") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Go!Zilla") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Download Demon") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "Go-Ahead-Got-It") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "TurnitinBot") {
            set $block_user_agents 1;
        }
        if ($http_user_agent ~ "GrabNet") {
            set $block_user_agents 1;
        }
    
    #    if ($http_user_agent ~ "^$" ) {
    #    	set $block_user_agents 1;
    #    }
    
        if ($http_user_agent ~ "360Spider" ) {
        	set $block_user_agents 1;
        }
    
        # Block semalt.semalt.com
        if ($http_referer ~* "webperformancenews.com|semalt.com|semalt.semalt.com|.*.kambasoft.com") {
       	set $block_user_agents 1;
        }
        if ($http_referer ~* "youtube-downloader.savetubevideo.com") {
       	set $block_user_agents 1;
        }
    
        if ($block_user_agents = 1) {
            return 403;
        }
    

    Je bloque également certains crawlers qui polluent mes statistiques.

    Fichier qu’il faut inclure dans votre configuration nginx:

        # block regex
        include /etc/nginx/block.conf;
    

    Et ce n’est malheureusement pas suffisant !

  3. Surveiller vos logsJ’utilise fail2ban pour surveiller mes fichiers de log et bannir les IPs en fonction des motifs trouvés dans les logs et stopper les attaques connues. Cet outil est livré avec un certain nombre de filtres pré-configurés.Exemple de filtre
    # Proxy filter /etc/fail2ban/filter.d/nginx-proxy.conf:
    #
    # Block IPs trying to use server as proxy.
    #
    # Matches e.g.
    # 192.168.1.1 - - "GET http://www.something.com/
    #
    [Definition]
    failregex = ^<HOST> -.*GET http.*
    ignoreregex =
    

    Un autre exemple de filtre plutôt efficace :

    # cat /etc/fail2ban/filter.d/nginx-404.conf
    [Definition]
    failregex = ^<HOST>.*"GET .*HTTP/1.1" 404 *.
    	    ^<HOST>.*"POST .*HTTP/1.1" 404 *.
    	    ^<HOST>.*"GET .*HTTP/1.1" 403 *.
    ignoreregex = ^<HOST>.*"GET /favicon.ico*.
    	      ^<HOST>.*"GET /robots.txt*.
    

    Je vous conseille de consulter vos logs assez régulièrement pour enrichir vos filtres.

    Attention de ne pas bannir son IP 🙂

    J’exclus également les IPs de Google pour être certain de ne pas bannir les serveurs de Google.

    Les réseaux de Google sont les suivants (extrait de mon fichier jail.local):

    ignoreip = 64.233.160.0/19 66.102.0.0/20 66.249.64.0/19 72.14.192.0/18 74.125.0.0/16 209.85.128.0/17 216.239.32.0/19</li>
    
  4. Effectuer les mises à jourIl est important d’effectuer les mises à jour de sécurité du système d’exploitation, de wordpress, magento, … dès qu’elles sont disponibles.
  5. Utiliser des mots de passe strongUtiliser KeePass ou outil équivalent pour stocker vos mots de passe strong.
  6. Installer des logiciels connusIl faut éviter d’installer un outil dont vous ne connaissez pas la provenance. Il faut toujours vérifier les sources des modules ou templates Wordpress que vous installer et vérifier qu’il n’y a pas de code caché.

En respectant ces principes, vous devriez minimiser les risques de sécurité.

Voila,

Nicolas Portais
Auteur Photographe
http://www.mystockphoto.fr/

Ce contenu a été publié dans Informatique / Technique / Technologie, avec comme mot(s)-clé(s) , , , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha (solve the arithmetic equation) * Time limit is exhausted. Please reload CAPTCHA.