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 01:11] – erlevo | 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 | + | 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 |
**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 11: | Ligne 11: | ||
Aujourd' | Aujourd' | ||
- | Un pare-feu est essentiellement un ensemble de règles. Nous allons utiliser par défaut la règle « accès refusé » (deny access) | + | Un pare-feu est essentiellement un ensemble de règles. Nous allons utiliser par défaut la règle « accès refusé » (deny access), c'est-à-dire que, à moins que ce ne soit précisé par ailleurs, un paquet provenant du réseau sera détruit. |
**External access to our server will be allowed under: | **External access to our server will be allowed under: | ||
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). |
- | À partir de maintenant | + | En ce moment, |
**For example – let's suppose you live in the US – it's probably a good idea to allow SSH connections only from the US (any SSH connection attempt from outside the US is not legitimate – it's not you!!! - so it should be banished).** | **For example – let's suppose you live in the US – it's probably a good idea to allow SSH connections only from the US (any SSH connection attempt from outside the US is not legitimate – it's not you!!! - so it should be banished).** | ||
- | Par exemple | + | Par exemple, supposons que vous habitiez aux États-Unis – il est probablement judicieux de ne permettre des connections SSH qu'en provenance des États-Unis (toute connexion SSH provenant de l' |
**In addition, we may decide we will not do business with specific countries – we will block any web access (HTTP) from these countries. In my example, I will choose Canada (note here – this is only an example, there is absolutely nothing wrong with Canada what.so.ever – I am just choosing a country which is a Democracy, this way, I know I won't get into trouble!!!).** | **In addition, we may decide we will not do business with specific countries – we will block any web access (HTTP) from these countries. In my example, I will choose Canada (note here – this is only an example, there is absolutely nothing wrong with Canada what.so.ever – I am just choosing a country which is a Democracy, this way, I know I won't get into trouble!!!).** | ||
- | De plus, il se peut que vous décidiez de ne pas faire d' | + | De plus, il se peut que vous décidiez de ne pas faire d' |
**Please note that checking the incoming country is not foolproof – the source connection can spoof the IP address (or just VPN into a server from an unblocked country). Anyway – this is good protection against automatic bot scanners and will definitely help keep hackers away. | **Please note that checking the incoming country is not foolproof – the source connection can spoof the IP address (or just VPN into a server from an unblocked country). Anyway – this is good protection against automatic bot scanners and will definitely help keep hackers away. | ||
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 s'il vous plaît | + | Notez cependant |
- | Sans aller trop dans le détail, les règles du pare-feu peuvent être établies pour les connexions entrantes, sortantes et les transferts. | + | Sans aller trop dans le détail, les règles du pare-feu peuvent être établies pour les connexions entrantes, sortantes et les transferts |
**Since we are not forwarding anything, we will just set rules for incoming (most important), outgoing (more later on why) and ignore forwarding (by default forwarding is disabled in the kernel anyway).** | **Since we are not forwarding anything, we will just set rules for incoming (most important), outgoing (more later on why) and ignore forwarding (by default forwarding is disabled in the kernel anyway).** | ||
- | Comme nous ne transférons rien, nous allons juste établir des règles pour le trafic entrant (le plus important) et le trafic sortant (j' | + | Comme nous ne transférons rien, nous allons juste établir des règles pour le trafic entrant (le plus important) et le trafic sortant (j' |
**Step by step now | **Step by step now | ||
Ligne 53: | Ligne 53: | ||
Étape par étape maintenant : | Étape par étape maintenant : | ||
- | Petit rappel : seul sudo (ou root (l' | + | Petit rappel : seul sudo (ou root, l' |
sudo su | sudo su | ||
Ligne 71: | Ligne 71: | ||
iptables -P INPUT DROP** | iptables -P INPUT DROP** | ||
- | 1 – réinitialiser le pare-feu et bloquer | + | 1 – réinitialiser le pare-feu et bloquer |
- | La plupart des distributions sont livrées par défaut avec quelques règles de pare-feu (certainement pour Centos | + | La plupart des distributions sont livrées par défaut avec quelques règles de pare-feu (certainement pour ce qui concerne CentOS |
Nous allons effacer toutes les règles pour pouvoir repartir de zéro : | Nous allons effacer toutes les règles pour pouvoir repartir de zéro : | ||
Ligne 81: | Ligne 81: | ||
iptables -X | iptables -X | ||
- | Et par défaut nous allons bloquer tout trafic entrant : | + | Et par défaut nous allons bloquer |
iptables -P INPUT DROP | iptables -P INPUT DROP | ||
Ligne 87: | Ligne 87: | ||
**2 – Allow local connections (to localhost): | **2 – Allow local connections (to localhost): | ||
- | 2 – Nous allons autoriser les connexions locales (à localhost): | + | 2 – Nous allons autoriser les connexions locales (à localhost) : |
iptables -A INPUT -i lo -p all -j ACCEPT | iptables -A INPUT -i lo -p all -j ACCEPT | ||
Ligne 101: | Ligne 101: | ||
iptables with geoip is based on xtables-addons, | iptables with geoip is based on xtables-addons, | ||
- | 3 – Bloquer le trafic entrant s'il provient d'un pays donné : | + | 3 – Bloquer le trafic entrant s'il provient d'un pays donné. |
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 ne fonctionne | + | iptables avec geoip est basé sur xtables-addons qui est une extension de iptables. Cela fonctionne |
**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 114: | Ligne 114: | ||
As geo-localization, | As geo-localization, | ||
- | ipset est une application qui fonctionne avec iptables – elle peut charger en mémoire des plages d' | + | ipset est une application qui fonctionne avec iptables – elle peut charger en mémoire des plages d' |
- | Donc, pour géo-localiser, | + | Donc, pour géo-localiser, |
sudo apt-get install ipset | sudo apt-get install ipset | ||
Ligne 133: | Ligne 133: | ||
Résumons ce que nous cherchons à faire : | Résumons ce que nous cherchons à faire : | ||
- | * Obtenir les plages | + | • 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' |
**IP blocks by country can be found here: http:// | **IP blocks by country can be found here: http:// | ||
Ligne 155: | Ligne 155: | ||
ipset create myset_CANADA hash:net** | ipset create myset_CANADA hash:net** | ||
- | Les blocs d' | + | Les blocs d' |
http:// | http:// | ||
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 182: | Ligne 182: | ||
for i in (cat us-aggregated.zone); | for i in (cat us-aggregated.zone); | ||
- | Chargeons les blocs correspondants | + | Chargeons les blocs correspondant |
for i in (cat ca-aggregated.zone); | for i in (cat ca-aggregated.zone); | ||
Ligne 226: | Ligne 226: | ||
iptables -A INPUT -p tcp ! --dport 22 -j DROP** | iptables -A INPUT -p tcp ! --dport 22 -j DROP** | ||
- | 5 – Si nous arrivons | + | 5 – Si nous arrivons |
La source ne vient pas du Canada et ce n'est pas une requête de type HTTP. Si la requête n'est pas du type SSH, il faut la bloquer et sortir du pare-feu : | La source ne vient pas du Canada et ce n'est pas une requête de type HTTP. Si la requête n'est pas du type SSH, il faut la bloquer et sortir du pare-feu : | ||
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 | + | 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, |
**Below, we're telling iptables to keep track of connections to port 22 for 300 seconds. If a (failed) hit count gets to 5, the connection is denied for the next 5 minutes: | **Below, we're telling iptables to keep track of connections to port 22 for 300 seconds. If a (failed) hit count gets to 5, the connection is denied for the next 5 minutes: | ||
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 307: | Ligne 307: | ||
iptables -A INPUT -j DROP | iptables -A INPUT -j DROP | ||
- | Attention | + | Attention |
**More about logging and checking who tried to access the system... | **More about logging and checking who tried to access the system... | ||
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 373: | Ligne 374: | ||
• DNS (so our requests can be resolved!), this is port 53.** | • DNS (so our requests can be resolved!), this is port 53.** | ||
- | 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 | + | 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 463: | Ligne 464: | ||
In ubuntu 14.04, edit and add both files to / | In ubuntu 14.04, edit and add both files to / | ||
- | Je vais maintenant supposer que tout s'est bien passé | + | 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, | + | Dans Ubuntu 14.04, |
**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 471: | Ligne 472: | ||
I know a few of you may find the sleep 10 not optimal and would rather use upstart' | I know a few of you may find the sleep 10 not optimal and would rather use upstart' | ||
- | Notez l' | + | Notez l' |
- | Je sais qu'un nombre d' | + | Je sais qu' |
**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 488: | Ligne 489: | ||
De toute façon, lors de votre prochain démarrage, vous devriez être automatiquement bien réglé avec un système plutôt bien protégé contre les intrusions. | De toute façon, lors de votre prochain démarrage, vous devriez être automatiquement bien réglé avec un système plutôt bien protégé contre les intrusions. | ||
- | Si vous voulez vous assurer que les scripts on été correctement exécutés, | + | Si vous voulez vous assurer que les scripts on été correctement exécutés, |
iptables -L | iptables -L | ||
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 allons installer | + | Le mois prochain, nous installerons |
issue101/site_web_avec_infrastructure.1444000300.txt.gz · Dernière modification : 2015/10/05 01:11 de erlevo