CASIRCloud: Difference between revisions
| Line 230: | Line 230: | ||
* https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04 |
* https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04 |
||
=Séance 4 : 7/04= |
|||
* Les mêmes exercices mais avec des containers Docker. |
* Les mêmes exercices mais avec des containers Docker. |
||
Revision as of 15:31, 4 April 2017
Enseignant: Didier Donsez (Polytech Grenoble, UGA)
Coordinateur : Clement Raievsky (IUT de Valence, UGA)
Etudiants : UGA - IUT Valence - L3 Pro CASIR
Modalité d’évaluation : DS + DM
Séance 0 : 30/03 de 9h30 à 12h30
Auto-formation
Suivre les cours suivants en vidéo :
- Les transparents
- Les vidéos
Lire:
- https://fr.wikipedia.org/wiki/Cloud_computing
- https://www.ovh.com/fr/serveurs_dedies/comprendre-t3-t4.xml
- http://www.interoute.fr/cloud-article/what-hybrid-cloud
- https://fr.wikipedia.org/wiki/Devops
Vous pouvez suivre les autres présentations si vous en avez envie et le temps: http://erods.liglab.fr/icar2013/programme.html
Et notamment la présentation du datacentre d'OVH
- http://erods.liglab.fr/videos/ICAR2013/ICAR-OVH.mp4
- http://www.youtube.com/watch?v=4e97g7_qSxA (3 minutes)
Création des comptes
- Création d’un compte Pack étudiant Github https://education.github.com/pack
- Création d’un compte sur le SaaS public Azure à partir de ce github student pack
- Création d’un compte sur le SaaS public AWS à partir de ce github student pack
- Création d’un compte sur Docker Hub https://hub.docker.com/
- Création d'un compte sur Heroku https://www.heroku.com/
- Création d'un compte sur Meteor https://www.meteor.com
- Optionnel : Création d'un compte sur Meteor Galaxy (Meteor hosting à 0,04 USD de l'heure) https://www.meteor.com/hosting
Remarque: il existe d'autres hébergeurs IaaS avec des offres gratuites 1 an pour de petites VMs : https://www.digitalocean.com/ ...
Séances 1 & 2 : 31/03
Agenda
- DS QUICK (30 minutes) sur la séance 0 (30% de la note globale). !!!!! NE PAS ARRIVER EN RETARD !!!!
- Introduction aux applications distribuées (transparents)
- Démarrage d'une machine virtuelle (Ubuntu 16.04 LTS) dans un des IaaS pour lesquels vous avez créés des comptes. Choisir une machine "gratuite" type 't2.micro' (1 vCPU, 1 GB RAM, 8GB EBS).
- Fork d'une application Node.js Todo (à choisir parmi celles de http://todomvc.com/) par exemple : TodoMVC Meteor
- Déploiement de votre application Todo.
- Installation du projet
- Installation des dépendances
- Script de démarrage
- Arrêt de la machine
- Script de redémarrage au "reboot" de la machine.
- Installer et configurer Monit.
- Configurer dans Monit votre adresse email pour être notifié des crashs de l'application.
- Sécurisation des ports avec les IPTables.
- Filtrer tous les ports en entrée sauf SSH, ICMP, HTTP, HTTPS et 3000.
- Filtrer tous les ports en sortie sauf SSH, ICMP et SMTPS (pour Monit).
- Installer et Configurer InfluxDB
- Installer et Configurer Telegraf
- Installer et Configurer Chronograf
Scripts
mv ~/Download/iutcloud.pem ~/.ssh chmod 400 ~/.ssh/iutcloud.pem HOST_PRIMARY_AWS=52.215.12.34 ssh -i ~/.ssh/iutcloud.pem ubuntu@$HOST_PRIMARY_AWS
Sur HOST_PRIMARY_AWS
# Installer Meteor curl https://install.meteor.com/ | sh # Cloner le dépôtgit clone https://github.com/tastejs/todomvc.git cd todomvc cd examples/meteor # lancer l'application sur le port 3000 (port de test non sécurisé !!!) meteor run --port 3000 ^C # lancer l'application en mode détaché. L'application continue son exécution après la sortie (exit) du terminal ssh nohup meteor run --port 3000 & # pour arrêter l'application ps axwww pkill meteor ps axwww
Depuis le navigateur de votre poste de travail, naviguer sur http://52.215.12.34:3000
Installer HAProxy pour sécuriser la connexion.
sudo apt-get install -y haproxy
Générer un certificat SSL pour votre serveur HAProxy
openssl genrsa -out haproxy.key 2048
openssl req -new -key haproxy.key \
-out haproxy.csr
openssl x509 -req -days 365 -in haproxy.csr \
-signkey haproxy.key \
-out haproxy.crt
cat haproxy.crt haproxy.key \
| tee haproxy.pem
Modifier le fichier de configuration de HAProxy
sudo vi /etc/haproxy/haproxy.cfg
avec le fichier suivant:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-options no-sslv3 no-tls-tickets force-tlsv12
ssl-default-bind-ciphers !EDH:!RC4:!ADH:!DSS:HIGH:+AES128:+AES256-SHA256:+AES128-SHA256:+SHA:!3DES
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
# IUT UI (80,443 --> 3000)
frontend iut-ui-http
mode http
option httplog
option forwardfor
option http-server-close
option httpclose
bind *:80
redirect scheme https code 301 if !{ ssl_fc }
frontend iut-ui-https
option httplog
option forwardfor
option http-server-close
option httpclose
rspadd Strict-Transport-Security:\ max-age=31536000;\ includeSubDomains
rspadd X-Frame-Option:\ DENY
bind *:443 ssl crt /etc/ssl/haproxy/haproxy.pem ciphers !EDH:!RC4:!ADH:!DSS:HIGH:+AES128:+AES256-SHA256:+AES128-SHA256:+SHA:!3DES force-tlsv12 no-sslv3
default_backend iut-ui
backend iut-ui
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1\r\nHost:localhost
server web01 localhost:3000 check
# server web01 HOST_PRIMARY_AWS:3000 check
# server web02 HOST_BACKUP_AWS:3000 check
Relancer HAProxy
sudo mkdir -p /etc/ssl/haproxy sudo cp haproxy.pem /etc/ssl/haproxy/haproxy.pem haproxy -c -f /etc/haproxy/haproxy.cfg sudo service haproxy restart sudo service haproxy status
Depuis le navigateur de votre poste de travail, naviguer sur http://52.215.12.34 Depuis le navigateur de votre poste de travail, naviguer sur https://52.215.12.34 . Accepter l'exception de sécurité.
Supprimer le port 3000 du security group de la machine AWS depuis la console AWS.
Visualiser le certificat du serveur
openssl s_client -connect $HOST_PRIMARY_AWS:443 -showcerts
Ressources
- https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04
- https://serversforhackers.com/using-ssl-certificates-with-haproxy
- https://doc.ubuntu-fr.org/iptables
- http://dev-notes.eu/2016/08/persistent-iptables-rules-in-ubuntu-16-04-xenial-xerus/
- https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-using-iptables-on-ubuntu-14-04
Séance 3 : 7/04
- Création d'une seconde machine virtuelle.
- Installation de l'application TodoMVC Meteor en mode distribuée (2 machines gratuites) : Meteor inclut MongoDB.
- Installation et configuration d'un load balancer HAProxy sur chaque machine dans le mode HTTPS Termination (Le certificat auto-signé est installé sur les 2 serveurs)
- Arrêter l'applications TodoMVC sur la machine 1 : Que se passe t'il ?
- Arrêter l'applications TodoMVC sur la machine 2 : Que se passe t'il ?
- Redémarrer l'applications TodoMVC sur la machine 1 : Que se passe t'il ?
- Redémarrer l'applications TodoMVC sur la machine 2 : Que se passe t'il ?
- Installation et configuration de Telegraf, Chronograf, InfluxDB sur les 2 machines pour le monitoring de celles-ci.
- Arrêter les 2 machines virtuelles en fin de séance (Les machines virtuelles (programmes et données) sont perdues !!)
- Présentation de Docker (transparents)
- Installation de Docker et Docker Machine
- Les mêmes exercices mais avec des containers Docker.
Ressources
- https://devops.profitbricks.com/tutorials/install-and-configure-haproxy-load-balancer-on-ubuntu-1604/
- https://www.digitalocean.com/community/tutorials/how-to-implement-ssl-termination-with-haproxy-on-ubuntu-14-04
- Les mêmes exercices mais avec des containers Docker.
Ressources
DM
Noté (70% de la note globale)
A RENDRE LE ????