issue101:site_web_avec_infrastructure
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
issue101:site_web_avec_infrastructure [2015/10/05 19:19] – auntiee | issue101:site_web_avec_infrastructure [2015/10/06 23:05] (Version actuelle) – d52fr | ||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
**Now that that our Linux VM is built, we must add security for better server protection; this will be accomplished by using the Linux firewall capabilities. Afterwards, we will install a web server and set up additional security on the web server.** | **Now that that our Linux VM is built, we must add security for better server protection; this will be accomplished by using the Linux firewall capabilities. Afterwards, we will install a web server and set up additional security on the web server.** | ||
- | Maintenant que notre machine virtuelle Linux est construite, nous devons augmenter la sécurité pour améliorer la protection du serveur ; ce sera fait en utilisant les capacités du pare-feu Linux. Après cela on installera un serveur Internet et on y implantera des sécurités additionnelles. | + | Maintenant que notre machine virtuelle Linux est construite, nous devons augmenter la sécurité pour améliorer la protection du serveur ; ce sera fait en utilisant les capacités du pare-feu Linux. Après cela, on installera un serveur Internet et on y implantera des sécurités additionnelles. |
**Today we will focus on the Linux firewall. We will use iptables, standard Linux firewall functionality. | **Today we will focus on the Linux firewall. We will use iptables, standard Linux firewall functionality. | ||
Ligne 20: | Ligne 20: | ||
L' | L' | ||
- | * SSH - pour un contrôle à distance. | + | • SSH - pour un contrôle à distance. |
- | | + | • HTTP - pour les pages Web du serveur (notre site Internet). |
En ce moment, n' | En ce moment, n' | ||
Ligne 37: | Ligne 37: | ||
Without getting into too much detail, the firewall rules can be set for incoming, outgoing, and forward connections.** | Without getting into too much detail, the firewall rules can be set for incoming, outgoing, and forward connections.** | ||
- | Notez cependant que le contrôle du pays de provenance n'est pas absolument sûr. La connexion initiale peut utiliser une fausse adresse IP (ou passer par VPN dans un serveur situé dans un pays autorisé). Néanmoins c'est une bonne protection contre les robots scanneurs et cela aidera de toute façon à éloigner les pirates. | + | Notez cependant que le contrôle du pays de provenance n'est pas absolument sûr. La connexion initiale peut utiliser une fausse adresse IP (ou passer par VPN dans un serveur situé dans un pays autorisé). Néanmoins, c'est une bonne protection contre les robots scanneurs et cela aidera de toute façon à éloigner les pirates. |
Sans aller trop dans le détail, les règles du pare-feu peuvent être établies pour les connexions entrantes, sortantes et les transferts de connexion. | Sans aller trop dans le détail, les règles du pare-feu peuvent être établies pour les connexions entrantes, sortantes et les transferts de connexion. | ||
Ligne 105: | Ligne 105: | ||
Il y a plusieurs manières de vérifier le pays d' | Il y a plusieurs manières de vérifier le pays d' | ||
- | * iptables geoip, | + | • iptables geoip, |
- | | + | • charger les blocs d' |
- | iptables avec geoip est basé sur xtables-addons qui est une extension de iptables. Cela fonctionne assez bien. Toutefois ce n'est pas vraiment « standard », | + | iptables avec geoip est basé sur xtables-addons qui est une extension de iptables. Cela fonctionne assez bien. Toutefois ce n'est pas vraiment « standard », |
**ipset is a companion application to iptables – it can load in-memory ranges of IP addresses, and iptables can leverage ipset to test if an IP is within this range. | **ipset is a companion application to iptables – it can load in-memory ranges of IP addresses, and iptables can leverage ipset to test if an IP is within this range. | ||
Ligne 133: | Ligne 133: | ||
Résumons ce que nous cherchons à faire : | Résumons ce que nous cherchons à faire : | ||
- | * Obtenir les plages d' | + | • Obtenir les plages d' |
- | | + | • Charger ces plages dans ipset. |
- | | + | • Ajouter une règle iptable qui vérifie que le pays d' |
- | | + | • Si oui, bloquer. |
- | | + | • 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' | + | • • Si la cible est SSH, on doit alors aussi vérifier que le pays d' |
J' | J' | ||
Ligne 161: | Ligne 161: | ||
On obtiendra les blocs des USA et du Canada soit en téléchargeant le fichier, soit en utilisant wget : | On obtiendra les blocs des USA et du Canada soit en téléchargeant le fichier, soit en utilisant wget : | ||
- | wget http:// | + | wget http:// |
wget http:// | wget http:// | ||
Ligne 250: | Ligne 250: | ||
C'est une requête de type SSH (qui ne vient pas du Canada). Vérifions que le pays d' | C'est une requête de type SSH (qui ne vient pas du Canada). Vérifions que le pays d' | ||
- | Avant de l' | + | Avant de l' |
iptables -A INPUT -j LOG --log-prefix " | iptables -A INPUT -j LOG --log-prefix " | ||
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 : | + | Au cas où nous aurions raté quelque chose, chaque connexion arrivant sur la commande ci-dessus sera bloquée (rappelez-vous : |
iptables -A INPUT -j DROP | iptables -A INPUT -j DROP | ||
Ligne 273: | Ligne 273: | ||
Ce n'est pas obligatoire, | Ce n'est pas obligatoire, | ||
- | Imaginons que quelqu' | + | Imaginons que quelqu' |
On peut faire quelque chose contre cela : si une adresse IP spécifique essaie de se connecter plus de x fois (disons 5) à notre serveur sur le port 22, nous pouvons temporairement interdire cette adresse IP pendant quelques minutes, disons 5 (300 secondes). Ça veut donc dire pratiquement qu'un attaquant peut essayer 5 combinaisons toutes les 5 minutes. Comme vous le comprendrez certainement, | On peut faire quelque chose contre cela : si une adresse IP spécifique essaie de se connecter plus de x fois (disons 5) à notre serveur sur le port 22, nous pouvons temporairement interdire cette adresse IP pendant quelques minutes, disons 5 (300 secondes). Ça veut donc dire pratiquement qu'un attaquant peut essayer 5 combinaisons toutes les 5 minutes. Comme vous le comprendrez certainement, | ||
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 | + | Ci-dessous, nous disons |
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 / | cat / | ||
- | Cela va vous donner | + | Cela vous donnera |
**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 | + | Cette version modifiée est certainement plus utile et vous donnera |
cat / | cat / | ||
Une rapide explication de cette commande : | Une rapide explication de cette commande : | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
- | | + | |
**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' | + | Le sujet de cet article est le pare-feu et la sécurité. Toutefois, je crois fermement que la sécurité et l' |
**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' | + | La commande suivante va interdire l' |
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' | + | 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' |
- | Nous allons donc également | + | Nous allons donc combler cette lacune |
- | | + | |
- | | + | |
- | | + | |
**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à | + | Vous avez probablement déjà |
- | | + | |
- | | + | |
- | | + | |
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' | + | Et s' |
Ligne 440: | Ligne 441: | ||
• Run the file. For my example, I'll call this file / | • Run the file. For my example, I'll call this file / | ||
- | Vous devez écrire toutes les règles du pare-feu dans un fichier texte (voir l' | + | Vous devez alors écrire toutes les règles du pare-feu dans un fichier texte (voir l' |
- | 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. |
- | | + | • Copiez/ |
- | | + | • Exécutez le fichier. Dans mon exemple, je l'ai appelé / |
**You should now have the firewall fully loaded and operational. | **You should now have the firewall fully loaded and operational. | ||
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 |
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, | + | 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, |
**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 465: | Ligne 466: | ||
Je vais maintenant supposer que tout s'est bien passé. Nous allons ensuite mettre en place les deux scripts qui doivent s' | Je vais maintenant supposer que tout s'est bien passé. Nous allons ensuite mettre en place les deux scripts qui doivent s' | ||
- | Dans Ubuntu 14.04, éditez et ajoutez les deux fichier | + | Dans Ubuntu 14.04, éditez et ajoutez les deux fichiers |
**Note the sleep 10 – we're telling iceberg to wait 10 seconds before running our scripts – this is to ensure that the network is up & running before we set up the firewall. | **Note the sleep 10 – we're telling iceberg to wait 10 seconds before running our scripts – this is to ensure that the network is up & running before we set up the firewall. | ||
Ligne 473: | Ligne 474: | ||
Notez l' | Notez l' | ||
- | Je sais qu'un certain nombre d' | + | Je sais qu'un certain nombre d' |
**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' | Et vous devriez voir les règles du pare-feu apparaître à l' | ||
- | Le mois prochain, nous installerons Apache (le serveur | + | Le mois prochain, nous installerons Apache (le serveur |
issue101/site_web_avec_infrastructure.1444065572.txt.gz · Dernière modification : 2015/10/05 19:19 de auntiee