Outils pour utilisateurs

Outils du site


issue101:site_web_avec_infrastructure

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue101:site_web_avec_infrastructure [2015/10/06 08:52] d52frissue101:site_web_avec_infrastructure [2015/10/06 23:05] (Version actuelle) d52fr
Ligne 133: Ligne 133:
 Résumons ce que nous cherchons à faire : Résumons ce que nous cherchons à faire :
  
-  * Obtenir les plages d'adresses IP que nous voudrions interdire (basées sur les pays). +• Obtenir les plages d'adresses IP que nous voudrions interdire (basées sur les pays). 
-  Charger ces plages dans ipset. +• Charger ces plages dans ipset. 
-  Ajouter une règle iptable qui vérifie que le pays d'origine est à l'intérieur de cette plage (le Canada dans notre exemple). +• Ajouter une règle iptable qui vérifie que le pays d'origine est à l'intérieur de cette plage (le Canada dans notre exemple). 
-  Si oui, bloquer. +• Si oui, bloquer. 
-  Sinon : +• Sinon : 
-     * Permettre si la cible est HTTP (une page Internet). +• • Permettre si la cible est HTTP (une page Internet). 
-     * Si la cible est SSH, on doit alors aussi vérifier que le pays d'origine est USA (de la même façon que ci-dessus, avec ipset).+• • Si la cible est SSH, on doit alors aussi vérifier que le pays d'origine est USA (de la même façon que ci-dessus, avec ipset).
  
 J'espère que vous me suivez jusque-là !!! J'espère que vous me suivez jusque-là !!!
Ligne 261: Ligne 261:
 iptables -A INPUT -j DROP** iptables -A INPUT -j DROP**
  
-Au cas où nous aurions raté quoi que ce soit, chaque connexion arrivant sur la commande ci-dessus sera bloquée (rappelez-vous : nous bloquons tout par défaut à moins que ce ne soit spécifiquement mentionné).+Au cas où nous aurions raté quelque chose, chaque connexion arrivant sur la commande ci-dessus sera bloquée (rappelez-vous : nous bloquons tout par défaut à moins que ce ne soit spécifiquement mentionné).
  
 iptables -A INPUT -j DROP iptables -A INPUT -j DROP
Ligne 283: Ligne 283:
 iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 5 --name DEFAULT --rsource -j DROP** iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 5 --name DEFAULT --rsource -j DROP**
  
-Ci-dessous, nous allons dire à iptables de conserver une trace des connexions sur le port 22 pendant 300 secondes. Si le nombre de requêtes (qui n'ont pas abouti) arrive à 5 alors le trafic [Ndt : pour cette IP] est rejeté pendant 5 minutes :+Ci-dessous, nous disons à iptables de conserver une trace des connexions sur le port 22 pendant 300 secondes. Si le nombre de requêtes (qui n'ont pas abouti) arrive à 5alors le trafic [Ndt : pour cette IP] est rejeté pendant 5 minutes :
  
 iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
Ligne 318: Ligne 318:
  
 Allons plus loin dans la liste et la vérification de ceux qui ont cherché à se connecter au système… Allons plus loin dans la liste et la vérification de ceux qui ont cherché à se connecter au système…
 +
 Cette commande va afficher toutes les tentatives de connexion à votre système : Cette commande va afficher toutes les tentatives de connexion à votre système :
  
 cat /var/log/messages | grep “Accepted SSH” cat /var/log/messages | grep “Accepted SSH”
  
-Cela va vous donner très rapidement une très longue liste (« rapidement » voulant dire après quelques minutes d'utilisation du serveur) qui ne sera pas facile à lire.+Cela vous donnera très rapidement (« rapidement » voulant dire après quelques minutes d'utilisation du serveur) une très longue liste qui ne sera pas facile à lire.
  
 **This revised version is probably more useful and will give the list of unique IP attempts – sorted by number of connection attempts: **This revised version is probably more useful and will give the list of unique IP attempts – sorted by number of connection attempts:
Ligne 336: Ligne 337:
 • It sorts descending as numbers (sort -n).** • It sorts descending as numbers (sort -n).**
  
-Cette version modifiée est certainement plus utilisable et va vous donner la liste des adresses IP qui ont tenté de se connecter, classée par nombre de tentatives de connexion :+Cette version modifiée est certainement plus utile et vous donnera la liste des adresses IP qui ont tenté de se connecter, classée par nombre de tentatives de connexion :
  
 cat /var/log/messages | grep "Accepted SSH" | awk -FSRC= '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n cat /var/log/messages | grep "Accepted SSH" | awk -FSRC= '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n
  
 Une rapide explication de cette commande : Une rapide explication de cette commande :
-  Elle affiche le contenu du fichier /var/log/messages. +  • Elle affiche le contenu du fichier /var/log/messages. 
-  Elle ne conserve que les lignes où les mots clés « Accepted SSH » existent. +  • Elle ne conserve que les lignes où les mots clés « Accepted SSH » existent. 
-  Elle récupère le texte qui suit le mot clé « SRC = » (adresse IP de la connexion entrante). +  • Elle récupère le texte qui suit le mot clé « SRC= » (adresse IP de la connexion entrante). 
-  Elle ordonne la liste. +  • Elle ordonne la liste. 
-  Elle ne conserve que les adresses IP uniques, mais compte le nombre d’occurrences de chaque IP. +  • Elle ne conserve que les adresses IP uniques, mais compte le nombre d’occurrences de chaque IP. 
-  Elle classe les nombres par ordre décroissant (sort -n).+  • Elle classe les nombres par ordre décroissant (sort -n).
  
 **The goal of this article is firewall and security. However, I strongly believe that security and scripting go hand-in-hand. Logging intrusion attempts is great but not using the data is useless. As you can see, a quick shell command was able to provide very useful information – extremely quickly. I can now, for example, ban the topmost 10 IPs who tried to log in to my system.** **The goal of this article is firewall and security. However, I strongly believe that security and scripting go hand-in-hand. Logging intrusion attempts is great but not using the data is useless. As you can see, a quick shell command was able to provide very useful information – extremely quickly. I can now, for example, ban the topmost 10 IPs who tried to log in to my system.**
  
-Le sujet de cet article est le pare-feu et la sécurité. Toutefois, je crois fermement que la sécurité et l'écriture de scripts vont de pair. Identifier les tentatives d'intrusion est parfait, mais le faire sans utiliser les données correspondantes ne sert à rien. Vous voyez comment une commande shell a pu nous fournir des informations extrêmement intéressantes, très rapidement. Je peux maintenant, par exemple, bloquer les 10 adresses IP qui ont essayé de s'introduire dans mon système le plus fréquemment.+Le sujet de cet article est le pare-feu et la sécurité. Toutefois, je crois fermement que la sécurité et l'écriture de scripts vont de pair. Identifier les tentatives d'intrusion est parfait, mais le faire sans utiliser les données correspondantes ne sert à rien. Comme vous l'avez constaté, une commande shell rapide a pu nous fournir des informations extrêmement intéressantes, très rapidement. Je peux maintenant, par exemple, bloquer les 10 adresses IP qui ont essayé de s'introduire dans mon système le plus fréquemment.
  
 **The following command will ban the IP 10.10.10.10 by inserting the rule on top of all rules (-I INPUT 1): **The following command will ban the IP 10.10.10.10 by inserting the rule on top of all rules (-I INPUT 1):
Ligne 358: Ligne 359:
 Have fun and please make sure not to ban… yourself!** Have fun and please make sure not to ban… yourself!**
  
-La commande suivante va interdire l'adresse IP 10.10.10.10 en donnant la priorité à cette règle sur toutes les autres.+La commande suivante va interdire l'adresse IP 10.10.10.10 en insérant cette règle en haut de la liste de toutes les autres.
  
 iptables -I INPUT 1 -s 10.10.10.10 -j DROP iptables -I INPUT 1 -s 10.10.10.10 -j DROP
Ligne 375: Ligne 376:
 7 – Règles concernant le trafic sortant 7 – Règles concernant le trafic sortant
  
-Très souvent, les pare-feu ne mettent en place des règles que pour le trafic entrant – ce qui signifie qu'ils ouvrent grandes les portes du trafic sortant. Ce n'est pas une bonne façon de faire ; imaginez qu'un pirate s'introduise dans votre ordinateur et arrive à installer un logiciel serveur qui pourra alors créer un tunnel, via un port aléatoire, jusqu'au serveur de l'attaquant et ainsi offrir un accès complet de votre système à l'attaquant.+Très souvent, les pare-feu ne mettent en place des règles que pour le trafic entrant – ce qui signifie qu'ils ouvrent grandes les portes du trafic sortant. Ce n'est pas une bonne façon de faire ; imaginez qu'un pirate s'introduise dans votre ordinateur et arrive à installer un logiciel serveur qui pourra alors créer un tunnel, via un port aléatoire, jusqu'au serveur de l'attaquant et lui fournir ainsi l'accès complet à votre système. 
  
-Nous allons donc également combler cette lacune. Nous allons principalement donner accès au trafic sortant à : +Nous allons donc combler cette lacune aussi. Nous allons principalement donner accès au trafic sortant à : 
-  SSH (pour notre accès à distance), c'est le port TCP 22. +  • SSH (pour notre accès à distance), c'est le port TCP 22. 
-  HTTP et HTTPS (pour les pages internet), ce sont les ports 80 et 443. +  • HTTP et HTTPS (pour les pages Internet), ce sont les ports 80 et 443. 
-  DNS (pour que nos requêtes puissent aboutir !), c'est le port 53.+  • DNS (pour que nos requêtes puissent aboutir !), c'est le port 53.
  
 **You probably got the point: **You probably got the point:
Ligne 387: Ligne 388:
 • Allow SSH, DNS, HTTP & HTTPS.** • Allow SSH, DNS, HTTP & HTTPS.**
  
-Vous avez probablement déjà noté les points suivants +Vous avez probablement déjà compris 
-  Par défaut, bloquer tout trafic sortant, à moins que nous ne l'autorisions spécifiquement. +  • Par défaut, bloquer tout trafic sortant, à moins que nous ne l'autorisions spécifiquement. 
-  Permettre des connexions à l'hôte local (le serveur lui même). +  • Permettre des connexions à l'hôte local (le serveur lui même). 
-  Permettre SSH, DNS, HTTP et HTTPS.+  • Permettre SSH, DNS, HTTP et HTTPS.
  
 iptables -P OUTPUT DROP iptables -P OUTPUT DROP
Ligne 430: Ligne 431:
 **And make sure all rules were really deleted – you should see this:** **And make sure all rules were really deleted – you should see this:**
  
-Et s'assurer que toutes les règles ont bien été effectivement effacées. Vous devez voir cela :+Et s'assurer que toutes les règles ont bien été effacées. Vous devez voir cela :
  
  
Ligne 440: Ligne 441:
 • Run the file. For my example, I'll call this file /usr/local/sbin/firewall.sh** • Run the file. For my example, I'll call this file /usr/local/sbin/firewall.sh**
  
-Vous devez écrire toutes les règles du pare-feu dans un fichier texte (voir l'encadré page suivante).+Vous devez alors écrire toutes les règles du pare-feu dans un fichier texte (voir l'encadré page suivante).
  
-De façon à tester tout cela, je recommanderais les choses suivantes :+De façon à tester tout ceci, je recommanderais les choses suivantes :
 • Utilisez wget pour obtenir les blocs d'IP et conservez les fichiers. • Utilisez wget pour obtenir les blocs d'IP et conservez les fichiers.
-• Copiez/collez les codes ci-dessus dans un fichier shell (un fichier texte portant l'extension sh et rendez-le exécutable avec l'instruction chmod +x [nom du fichier]).+• Copiez/collez les codes ci-dessus dans un fichier shell (un fichier texte portant l'extension .sh et rendez-le exécutable avec l'instruction chmod +x [nom du fichier]).
 • Exécutez le fichier. Dans mon exemple, je l'ai appelé /usr/local/sbin/firewall.sh • Exécutez le fichier. Dans mon exemple, je l'ai appelé /usr/local/sbin/firewall.sh
  
Ligne 453: Ligne 454:
 When you run the file, your terminal will be “locked”. This is because we reset the firewall by blocking all rules by default. Just try connecting again to iceberg from another terminal. If it works – you should be all set, but, if you cannot, stop and restart the VM from the Digital Ocean panel. After the restart, the rules are not loaded, so you can fix that problem: For example, I allowed the US IP blocks because I live in the US, did you load the right blocks of IPs from where you live?** When you run the file, your terminal will be “locked”. This is because we reset the firewall by blocking all rules by default. Just try connecting again to iceberg from another terminal. If it works – you should be all set, but, if you cannot, stop and restart the VM from the Digital Ocean panel. After the restart, the rules are not loaded, so you can fix that problem: For example, I allowed the US IP blocks because I live in the US, did you load the right blocks of IPs from where you live?**
  
-Vous devez avoir maintenant un pare-feu chargé et opérationnel.+Maintenant le pare-feu doit être entièrement chargé et opérationnel.
  
 IMPORTANT – iptables -F remet le pare-feu à zéro et ferme votre session SSH ! IMPORTANT – iptables -F remet le pare-feu à zéro et ferme votre session SSH !
  
-Quand vous lancez le fichier, votre terminal sera « bloqué ». Cela est dû à la ré-initialisation du pare-feu en bloquant toutes les règles par défaut. Essayez juste de vous reconnecter à Iceberg depuis un autre terminal. Si cela fonctionne, vous devriez être opérationnel, mais, si vous n'y arrivez pas, arrêtez et redémarrez la machine virtuelle (VM) à partir du panneau de Digital Ocean. Après le redémarrage, les règles ne sont pas chargéesvous pouvez donc résoudre ce problème : par exemple, j'ai permis le bloc d'adresses IP des USA parce que j'habite aux USA, mais vous, avez-vous bien chargé le bloc d'adresses IP de l'endroit où vous vivez ?+Quand vous lancez le fichier, votre terminal sera « verrouillé ». Cela est dû à la ré-initialisation du pare-feu en bloquant toutes les règles par défaut. Essayez juste de vous reconnecter à Iceberg depuis un autre terminal. Si cela fonctionne, vous devriez être opérationnel, mais, si vous n'y arrivez pas, arrêtez et redémarrez la machine virtuelle (VM) à partir du panneau de Digital Ocean. Après le redémarrage, les règles ne sont pas chargées et vous pouvez donc résoudre le problème : par exemple, j'ai permis le bloc d'adresses IP des USA parce que j'habite aux USA, mais vous, avez-vous bien chargé le bloc d'adresses IP de l'endroit où vous vivez ?
  
 **I will now suppose everything worked well – we will then set both scripts to run at startup. **I will now suppose everything worked well – we will then set both scripts to run at startup.
Ligne 473: Ligne 474:
 Notez l'instruction sleep 10 : nous disons à Iceberg d'attendre 10 secondes avant de lancer nos scripts, c'est pour s'assurer que le réseau est en place et fonctionne avant que nous ne paramétrions le pare-feu. Notez l'instruction sleep 10 : nous disons à Iceberg d'attendre 10 secondes avant de lancer nos scripts, c'est pour s'assurer que le réseau est en place et fonctionne avant que nous ne paramétrions le pare-feu.
  
-Je sais qu'un certain nombre d'entre vous n'apprécieront pas le sleep 10 et préféreront utiliser les règles des dépendances de l'upstart. Personnellement ça me semble trop compliqué et suffisamment sûr comme cela (même si quelqu'un se connecte durant ces 10 secondes, il sera bloqué par le iptables -F) – il est à noter que le logiciel upstart semble être en fin de vie (même Canonical a décidé de basculer sur systemd dans les nouvelles versions d'Ubuntu – ce qui ne signifie pas que je supporte ou non systemd, je précise juste que c'est la décision de Canonical).+Je sais qu'un certain nombre d'entre vous n'apprécieront pas le sleep 10 et préféreront utiliser les règles des dépendances de l'upstart. Personnellement ça me semble trop compliqué et le sleep 10  est suffisamment sûr (même si quelqu'un se connecte durant ces 10 secondes, il sera bloqué par le iptables -F) – il est à noter aussi que le logiciel upstart semble être en fin de vie (même Canonical a décidé de basculer sur systemd dans les nouvelles versions d'Ubuntu – ce qui ne signifie pas que je suis partisan ou non  de systemd, je précise juste que c'est la décision de Canonical).
  
 **Anyway, during your next reboot, you should be automatically all set, with a system pretty well protected against intrusions. **Anyway, during your next reboot, you should be automatically all set, with a system pretty well protected against intrusions.
Ligne 494: Ligne 495:
 Et vous devriez voir les règles du pare-feu apparaître à l'écran. Et vous devriez voir les règles du pare-feu apparaître à l'écran.
  
-Le mois prochain, nous installerons Apache (le serveur internet) et nous le sécuriserons.+Le mois prochain, nous installerons Apache (le serveur Internet) et nous le sécuriserons.
issue101/site_web_avec_infrastructure.1444114325.txt.gz · Dernière modification : 2015/10/06 08:52 de d52fr