Aws billing : surveiller vos coûts grâce aux notifications

aws billing dashboardChez AWS le billing (facture) fonctionne à l’usage, c’est à dire que vous ne payez que ce que vous utilisez. Cependant la facture est mensuel. La console aws billing a prévu de quoi surveiller ceci.  Le but de cet article est de permettre de surveiller en amont les montants des prochaines factures et d’éviter les surprises ! Comme on dit mieux vaut prévenir que guérir !

Imaginez que vous ayez laisser tourner vos services de tests pendant des jours, cela impliquera des surcoûts importants.

Nous allons voir içi comment surveiller votre facture (billing) grâce à Cloudwatch et recevoir des alertes via SNS.

Activation de l’alerte aws billing

Après s’être loggué sur la console de management, il faut ouvrir la console « Billing and Cost Management » -> https://console.aws.amazon.com/billing/home#/

Ensuite sur le menu de gauche, il faut aller dans « Preferences », pour activer « Receive Billing Alerts ».

receive billing Alerts

Enfin on sauvegarde en cliquant sur « save preferences« .

La console « Billing and Cost Management » va « envoyer » les infos de consomation à la console « CloudWatch » .

Création de l’alarme

Il faut ouvrir la console CloudWatch -> https://console.aws.amazon.com/cloudwatch/.

Attention à bien être dans la région « US East » (N. Virginia) car les métriques de facturation ne sont sauvegardées uniquement dans cette région même pour des ressources d’autres régions.

Sur le menu de gauche, sous « Metrics » il faut choisir « Billing« . Dans la liste des métriques « billing » il faut sélectionner la métrique nommée « EstimatedCharges » .

EstimatedCharges

Enfin on clique en bas à droite sur « Create Alarm » et on arrive sur cet écran :

3

Rien de plus simple içi car il n’y qu’à mettre le montant à ne pas dépasser (ici 100 $)  et une adresse mail.

On va vous demander de confirmer votre adresse email pour terminer. Si vous choisissez de valider plus tard le status de l’alarme sera « Pending confirmation » jusqu’à ce que l’email soit validé.

Voici une astuce toute simple qui vous évitera quelques conflits avec votre Directeur financié !

WordPress : Recevoir des notifications de mise à jour

wordpress

Un nombre très important de site web tourne sur wordpress ce qui en fait aussi un des plus vulnérables aux attaques. Il suffit de regarder cette liste d’articles pour s’apercevoir que cela revient régulièrement.

Il est donc important d’être averti le plus rapidement possible en cas de mise à jour de WordPress et de ses plugins. Un des gros avantages de WordPress est son énorme quantité de plugins. Nous allons utiliser l’un d’entre eux pour recevoir un mail en cas de mise à jour.

Cette extension est WP Updates Notifier et vous permettra d’être notifié en cas de nouvelle version de WordPress ou quand un plugin a été mise à jour.

En a t’on vraiment besoin ?

Dans un premier temps oon pourrait penser que l’on a pas besoin de cette extension. Mais est ce que vous accédez à l’administration tous les jours ? Combien de fois par jour ?

Si vous n’accédez pas assez souvent à l’administration, vous allez sans doute passer à côté d’une mise à jour …

Avec cette solution cela vous permet d’être beaucoup plus proactif.

Configuration du plugin WP Updates Notifier

Après avoir installer et activer l’extension WP Updates Notifier, la configuration se trouve dans la partie « Réglages ». Voici ce qui apparait à l’écran.

updates notifier

  • On laisse le « wordpress cron » c’est le plus simple;
  • On choisit la fréquence de contrôle. Au moins 2 fois par jour.
  • Remplir l’email de destination et de l’émetteur.
  • Laisser activé les notifications pour la mise à jour d’extensions, de thèmes et de WordPress
  • On cache la mise à jour aux simples utilisateurs.

Et pour les multisite WordPress ?

Cette extension fonctionne aussi avec les multisites wordpress. Pour cela il suffit de l’activer sur le blog principal et de le configurer.

Donc installez dès à présent l’extension WP Updates Notifier plugin et conserver vos sites sécurisés. Vous n’avez maintenant plus d’excuses !!

Les regex -> expression régulière

expression régulière

Les expressions régulières … cette phrase me hantait à l’époque…
Il m’était quasiment impossible d’effectuer une recherche dans des fichiers de logs…
Voici ce qu’il faut retenir !

Voici un extrait de la definition de  Wikipedia:

 Une expression rationnelle ou expression régulière est en informatique une chaîne de caractères que l’on appelle parfois un motif et qui décrit un ensemble de chaînes de caractères possibles selon une syntaxe précise. Les expressions rationnelles sont issues des théories mathématiques des langages formels des années 1940

Pas évident non plus comme approche … alors que ce ne sont que des expressions que l’on retrouve regulièrement !
On les retrouve dans tous les langages : Perl, awk, Python, vi, grep, C++, Java, sed, avec le mod_rewrite d’apache, règles nginx…

1- La Théorie

Symbole   Description
n’importe quel caractère
[…] tout caractère parmis ceux énumérés
[^…] tout caractère exepté ceux énumérés
^ la position en début de ligne
$ la position en fin de ligne
< la position en début de mot
la position en fin de mot
| (pipe) reconnaît l’un ou l’aure des termes qu’il sépare
? 0 ou 1 occurence du caractère ou de l’expression régulière précédé
* 0 ou n occurences du caractère ou de l’expression régulière précédé

2- La Pratique avec egrep

Recherche les mots dont q n’est pas suivi de u :

egrep 'q[^u]' wordlist.txt

Recherche toute ligne qui commence par ‘From:, Subject:’ ou Date dans le fichier de mail :

egrep '^(From|Subject|Date):' mailbox

Liste toute les lignes du fichier money commençant avec le caractère $

egrep '^\\$' money

Liste tous les fichiers et répertoires dans le répertoire courant qui ne se terminent pas avec .tex

ls -l | egrep '\[^.tex\]$'

Liste tous les fichiers et répertoires dans le répertoire courant qui se terminent avec .tex

ls -l | egrep '\[.tex\]$'

3- La Pratique avec Vi

Remplace un espace ou plus par un espace.

:1,$s/ */ /g

Supprime les espaces en fin de ligne.

:1,$s/ *$//

Supprime tous les numéros en début de ligne.

:1,$s/^\[0-9\]\[0-9\]* //

4- La Pratique avec les autres outils

 sed

Supprime toutes les lignes vides du fichier

$ sed 's/^$/d' toto.txt

Supprime tous les guillemets dans le fichier

$ sed 's/"//g' toto.txt

awk

Affiche le fichier sans prendre en compte les lignes vides du fichier.

$ awk ‘$0 !~ /^$/’ phonelist.txt
$ awk ‘NF > 0’ toto.txt

grep

Soit le fichier phone2.txt suivant :

Durand, Sophie 4-5471
Bigard, Jean-Marie 8-7463
Roumanoff, Anne 3-8456
Satriani, Joe 7-1554
Saintlazar, Rob 5-8451
Vai, Steve 7-9547
Maiden, Iron 9-6669

Affiche les lignes dont le numéro de téléphone commence par un 5 et se termine par un 1

grep '5-...1' phone2.txt

Affiche les lignes dont le nom de famille commence par un S et dont le prénom commence par un R

$ grep '^S\[^ \]* R' phone2.txt

Affiche les lignes dont le nom de famille commence avec les lettres allant de M à Z

$ grep '^\[M-Z\]' phone2.txt

Affiche les lignes dont le prénom est composé de quatre caractères

$ grep ',....\t' phone2.txt

Si vous en voulez encore :

L’article de Wikipedia

Pfsense: changer le port de l’interface web

pfsense port interface

Si pour des raisons de sécurité ou autres… Vous souhaitez changer le port de l’interface web de Pfsense, voici la procédure :

C’est très simple, il faut déjà avoir l’accès à l’interface.
Ensuite « System » -> « Advanded » et de mettre le numéro de port choisi dans la case « TCP Port« .

Enfin on sauvegarde avec « save » et quelques secondes plus tard vous pouvez vous relogguer (en oubliant pas de changer le port sans le navigateur).

Pfsense: mettre l’interface web sur le wan

pfsense wan

Par défaut, l’interface web de pfsense n’est accessible que depuis le LAN.

Attention ce qui va suivre désactive quelques principes de sécurité. On pourra pour compenser filtrer sur une adresse ip par exemple.

La méthode est assez simple ! car il suffit simplement de créer une nouvelle règle dans le firewall.

Nous allons aller dans « Firewall » > « Rules » et se placer dans l’onglet « WAN » et cliquez sur le « + »

Nous allons créer la nouvelle règle :

Action : "Pass"
Interface : "WAN"
Source : Soit vous mettez toutes les ips soit une seule pour plus de sécurité.
Destination : "WAN Address"
Destination port range : "HTTP"
Log : Oui ou non cela dépend si vous voulez des logs
Description : Votre choix

Enfin on clique sur « Save » puis « Apply changes »

Vous pouvez alors accéder à l’interface depuis http://WAN/

Liste des codes http

codes http

Voici une liste des codes HTTP… En français :

* 100 : OK pour continuer
* 101 : le serveur a changé de protocoles
* 200 : requête effectuée avec succès
* 201 : document créé (raison : nouvelle URI)
* 202 : requête achevée de manière asynchrone (TBS)
* 203 : requête achevée de manière incomplète
* 204 : aucune information à renvoyer
* 205 : requête terminée mais formulaire vide
* 206 : requête GET incomplète
* 300 : le serveur ne peut pas déterminer le code de retour
* 301 : document déplacé de façon permanente
* 302 : document déplacé de façon temporaire
* 303 : redirection avec nouvelle méthode d’accès
* 304 : le champ ‘if-modified-since’ n’était pas modifié
* 305 : redirection vers un proxy spécifié par l’entête
* 307 : HTTP/1.1
* 400 : erreur de syntaxe dans l’adresse du document
* 401 : pas d’autorisation d’accès au document
* 402 : accès au document soumis au paiement
* 403 : pas d’autorisation d’accès au serveur
* 404 : la page demandée n’existe pas
* 405 : méthode de requête du formulaire non autorisée
* 406 : requête non acceptée par le serveur
* 407 : autorisation du proxy nécessaire
* 408 : temps d’accès à la page demandée expiré
* 409 : l’utilisateur doit soumettre à nouveau avec plus d’infos
* 410 : cette ressource n’est plus disponible
* 411 : le server a refusé la requête car elle n’a pas de longueur
* 412 : la précondition donnée dans la requête a échoué
* 413 : l’entité de la requête était trop grande
* 414 : l’URI de la requête était trop longue
* 415 : type de média non géré
* 500 : erreur interne du serveur
* 501 : requête faite au serveur non supprimée
* 502 : mauvaise passerelle d’accès
* 503 : service non disponible
* 504 : temps d’accès à la passerelle expiré
* 505 : version HTTP non gérée

La même liste en anglais :

* 200 : request completed
* 201 : object created, reason = new URI
* 202 : async completion (TBS)
* 203 : partial completion
* 204 : no info to return
* 205 : request completed, but clear form
* 206 : partial GET furfilled
* 300 : server couldn’t decide what to return
* 301 : object permanently moved
* 302 : object temporarily moved
* 303 : redirection w/ new access method
* 304 : if-modified-since was not modified
* 305 : redirection to proxy, location header specifies proxy to use
* 307 : HTTP/1.1: keep same verb
* 400 : invalid syntax
* 401 : access denied
* 402 : payment required
* 403 : request forbidden
* 404 : object not found
* 405 : method is not allowed
* 406 : no response acceptable to client found
* 407 : proxy authentication required
* 408 : server timed out waiting for request
* 409 : user should resubmit with more info
* 410 : the resource is no longer available
* 411 : the server refused to accept request w/o a length
* 412 : precondition given in request failed
* 413 : request entity was too large
* 414 : request URI too long
* 415 : unsupported media type
* 500 : internal server error
* 501 : required not supported
* 502 : error response received from gateway
* 503 : temporarily overloaded
* 504 : timed out waiting for gateway
* 505 : HTTP version not supported

Jenkins : installation sur Centos, Debian ou Ubuntu

jenkins install

Jenkins est un outil open source d’intégration continue. C’est sans doute le plus connu de sa catégorie. Il est écrit en JAVA et embarque son propre serveur web. L’intégration continue apporte de nombreux avantages comme l’automatisation de taches ou encore la possibilité de délivrer une version fonctionnelle de votre application régulièrement.

Jenkins (anciennement appelé Hudson), dont la réputation n’est plus à faire, s’est formé tout un éco-système et dispose à ce jour plus de 1000 Plugins. Nous allons voir comment l’installer sur les distributions linux les plus standard avec Nginx en reverse proxy.

Centos / RedHat

1. Mise en place du repository

wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

2. Installation

yum install jenkins

3. Activation du service

Pour s’assurer que le service soit démarrer au lancement du serveur :

systemctl enable jenkins

On démarre le service :

systemctl start jenkins

Debian / Ubuntu

1. Mise en place du repository

wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'

2. Installation

sudo apt-get update
sudo apt-get install jenkins

3. Activation du service

Pour s’assurer que le service soit démarrer au lancement du serveur :

systemctl enable jenkins

On démarre le service :

systemctl start jenkins

Mise en place du reverse proxy avec Nginx

Nous allons créer un nouveau virtual host pour notre Jenkins.

 vi /etc/nginx/conf.d/jenkins.conf

et y mettre ceci :

upstream app_server {
    server 127.0.0.1:8080 fail_timeout=0;
}

server {
    listen 80;
    server_name jenkins.cloud-devops.fr;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://app_server;
        }
}

On relance le service nginx :

systemctl restart nginx

et on peut accéder à Jenkins via l’url http://jenkins.cloud-devops.fr/

Notre Jenkins est maintenant installé. Nous verrons par la suite comment le paramétrer pour

Linux : lister les paquets installés

package-managers

Il peut être intéressant de pouvoir lister les paquets installés sur notre distribution linux.
Par exemple pour en connaitre la version, vérifier si besoin de l’installer.
Nous allons voir comment les lister sur différentes distributions.

Debian

Avec l’outil dpkg

 dpkg --list

On peut utiliser aussi l’outil apt

 apt list --installed

Centos/Redhat

Avec les distribution à base de rpm on utilise yum

yum list installed

Archlinux

Sur Arch, c’est l’utilitaire pacman qui nous permet de gérer nos paquets

 pacman -Q

WordPress : Restreindre l’accès de l’admin par ip

restreindre admin wordpress

Si vous avez une adresse IP statique, chez vous ou au bureau, ou peut-être votre propre VPN, vous avez la chance de pouvoir augmenter votre sécurité. La technique consiste à restreindre les accès à l’admin de wordpress par une ou plusieurs ip.

Nous allons voir comment le mettre en place sur Nginx.

1. Création d’un bloc map

Nous allons créer un bloc map pour y inclure la liste des adresses ip autorisées.

map $remote_addr $allowed_ip {

1.2.3.4 1;
1:: 1;
5.6.7.8 1;

default 0;
}

On assigne la valeur 1 aux adresses ip que l’on veut autoriser et 0 pour le reste.

2. Modification du bloc server

Nous allons modifier notre « bloc server » pour y inclure nos conditions. Nginx ne supporte pas les opérateurs logiques dans les bloc if , nous allons donc devoir contourner le problème en mettant plusieurs if.

server {
... 
set $check ''; #initialisation de la variable  

if ( $allowed_ip = 0 ) {
  set $check "A";
}

if ( $request_uri ~ ^/wp-(login\.php|admin/) )  {
  set $check "${check}B";
}

if ( $check = "AB" ) {
return 403;
}
...
}

Donc si l’adresse n’est pas dans la liste du bloc map « check = A » et si l’uri correspond à /wp-login.php ou wp-admin/ « check = AB ». Si nous avons $check = AB nous retournons une 403 ( forbidden ).

Nginx : Installer la dernière version / mainline

Nginx

Chaque nouvelle version de Nginx apporte son lot de nouveauté. Par exemple la version 1.9.7 apporte le support du protocole http2. Vous pouvez trouver les différents changements ainsi que les corrections de bug sur le changelog.

J’avais l’habitude d’utiliser la version « stable » de Nginx sur mes serveurs, mais je voulais vraiment offrir le support de http2. J’ai donc décidé de mettre à jour ma version pour passer sur la version « mainline« . Attention si vous utilisez des modules dit de « third-party » ils peuvent devenir incompatible ou apporter des nouveaux bugs.

Nous allons voir une méthode pour passer sur cette version tout en conservant le gestionnaire de paquets de ma distribution linux (apt, yum).

1. Installation de la version mainline sur Centos/Redhat

Nous allons créer le fichier /etc/yum.repos.d/nginx.repo avec ce contenu :

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

Il faut modifier OS par rhel ou centos suivant votre distribution et OSRELEASE par 5,6 ou 7 suivant votre version.
Ensuite il faut mettre à jour le paquet Nginx :

 yum update

2. Installation de la version mainline sur Debian/Ubuntu

Pour Debian/Ubuntu nous devons identifier le repository à l’aide d’une clé. Cela va aussi permettre d’eliminer tous les messages d’alertes.

curl http://nginx.org/keys/nginx_signing.key | apt-key add -

On ajoute ensuite le repository. Il faut ajouter ces lignes à la fin du fichier /etc/apt/sources.list.

Pour Debian :

deb http://nginx.org/packages/mainline/debian/ codename nginx
deb-src http://nginx.org/packages/mainline/debian/ codename nginx

Il faut remplacer « codename » par wheezy pour la version 7.x ou jessie pour la version 8.x.

Pour Ubuntu :

deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx

On remplace « codename » par precise pour la version 12.04, trusty pour la version 14.04, vivid pour la version 15.04 et wily pour la version 15.10

Il ne reste plus qu’à mettre à jour :

apt-get update
apt-get install nginx

3. Test de la version

nginx -v
nginx version: nginx/1.9.10

On peut bien sur, garder ce numéro de version pour nous et ne pas l’afficher dans nos headers http.