DNS dynamique avec Debian

Pour obtenir un DNS dynamique il faut 2 choses :

  • Se déclarer auprès d’un service de DNS Dynamique
  • Installer un demon sur son serveur

 

Le service

J’ai opté pour freedns.afraid.org  .

Créez un compte et ajouter un sous-domaine (rien de compliqué)

Le démon

apt-get install inadyn

inadyn supporte de nombreux services :

  • http://www.dyndns.org
  • http://freedns.afraid.org
  • http://zoneedit.com
  • http://www.no-ip.com
  • http://www.easydns.com
  • http://www.tzo.com
  • http://www.3322.org
  • http://www.dnsomatic.com
  • http://www.tunnelbroker.net
  • http://dns.he.net/
  • http://www.dynsip.org
  • http://www.sitelutions.com
  • http://www.dnsexit.com
  • http://www.changeip.com

Le paramétrer (/etc/inadyn.conf)


# Service provider
# Please see inadyn(8) for a complete list of providers
system default@freedns.afraid.org


# Your username
username monusername

# Your password
password monpassword

# Your hostname. This option can appear multiple times
alias monsousdomaine.mooo.com

A par le « system » rien à expliquer.

Pour system vous trouverez dans le man la valeur correspondant à votre service.

Reste à passer inadyn en demon (/etc/default/inadyn)


...

# Set to "yes" if inadyn should run in daemon mode
# If this is changed to "yes", RUN_IPUP must be set to "no".
RUN_DAEMON="yes"

...

service inadyn restart

service inadyn status   -> pour véirfier que le service a bien démarré

Plus qu’à suivre les logs pour valider (update toute les 300s par défaut) que le service update bien votre IP.

tail -f /var/log/inadyn/inadyn.log


Tue Dec 29 16:39:26 2015: Will retry again in 300 sec...
Tue Dec 29 16:44:26 2015: .
Tue Dec 29 16:44:27 2015: Checking for IP# change, connecting to checkip.dyndns.org(91.198.22.70)
Tue Dec 29 16:44:35 2015: No IP# change detected, still at *********
Tue Dec 29 16:49:35 2015: .
Tue Dec 29 16:49:35 2015: Checking for IP# change, connecting to checkip.dyndns.org(216.146.43.70)
Tue Dec 29 16:49:43 2015: No IP# change detected, still at *********
Tue Dec 29 16:54:43 2015: .
Tue Dec 29 16:54:43 2015: Checking for IP# change, connecting to checkip.dyndns.org(91.198.22.70)
Tue Dec 29 16:54:59 2015: No IP# change detected, still at **********

 

 

 

 

 

 

Accéder à SSH via HTTPS (port 443)

Le grand classique : votre client est OK pour exposer le port 443 car il en a besoin pour accéder à sa WebApp mais impossible de vous ouvrir le port 22 (raisons multiples : « on peut pas », « SSH c’est quoi ? » …) pour accéder au serveur.

Grâce à ShellInABox et au mode proxy d’Apache l’on va pouvoir « mapper » un « SSH Web » à une URL de votre site Web et ainsi accéder en SSH – via HTTPS –  au serveur via un simple navigateur web .

Source image : https://github.com/shellinabox/shellinabox


Maquette (Debian)

Activation des modules Apache de gestion du SSL et Proxy


a2enmod ssl
a2enmod proxy
a2enmod proxy_http

Sur Debian (en tout cas sur la Raspbian utilisé pour ce test) il existe déjà un fichier de configuration valide (avec un certificat auto-signé).

/etc/apache2/sites-available/default-ssl.conf

...
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
# A self-signed (snakeoil) certificate can be created by installing
# the ssl-cert package. See
# /usr/share/doc/apache2/README.Debian.gz for more info.
# If both key and certificate are stored in the same file, only the
# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

...

On active ce host


a2ensite default-ssl

 

On ajoute le « mapping » entre l’URL /shell et ShellInABox

[Avant] /etc/apache2/sites-available/default-ssl.conf


        </VirtualHost>

</IfModule>

 

[Après] /etc/apache2/sites-available/default-ssl.conf


        </VirtualHost>

<Location /shell>
ProxyPass http://localhost:4200/
</Location>
</IfModule>

 

On re-démarre les services


service shellinabox restart

service apache2 restart

 

Vous pouvez à présent accéder à votre SSH via l’adresse https://[votreIP]/shell


Attention : ShelInABox est encore en écoute sur son port. Pour limiter l’accès au seul port 443 il faut modifier la configuration de ShellInABox afin  de limiter son écoute au localhost.

/etc/default/shellinabox


...
SHELLINABOX_ARGS="--localhost-only"

...

Stress test/benchmaking rapide d’un serveur web avec Siege.

Siege est un petit outil permettant de réaliser des stress test rapide (ainsi qu’un benchmarking)  et non qualitatifs de serveurs web.

J’utilise Siege actuellement pour benchmaker mon RaspberryPI Zero avec Raspbian Jessie /Apache.

Pour installer Siege sous Debian/Ubuntu


apt-get install siege

 

Lancer le test :


siege -d10 -c30 -r1000 -v http://lderpib1.local/i2.html

 

  • -d : délais en seconde entre chaque appel de page (par utilisateur)
  • -c : nombre d’utilisateurs (thread) attaquant le serveur web
  • -r : nombre de répétitions. Vous pouvez indiquer un nombre énorme. Un simple ctl+c stoppe le test et vous génère le rapport de benchmark.
  • -v : affiche en console les temps de chaque transaction.

HTTP/1.1 200   0.86 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.52 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.16 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.61 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.61 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.61 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.44 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.17 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.21 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.47 secs:   12360 bytes ==> GET  /i2.html
HTTP/1.1 200   0.50 secs:   12360 bytes ==> GET  /i2.html

Pour l’RL j’ai généré une page web statique remplie aléatoirement.

Une fois le test effectué (ou interrompus par ctl+c)


Transactions:                2378 hits
Availability:              100.00 %
Elapsed time:              468.79 secs
Data transferred:           28.03 MB
Response time:                0.91 secs
Transaction rate:            5.07 trans/sec
Throughput:                0.06 MB/sec
Concurrency:                4.62
Successful transactions:        2378
Failed transactions:               0
Longest transaction:            2.54
Shortest transaction:            0.16


PS : Pour quelques chose de plus fin je passe par JMetter et un site web statique de 1000 pages  générées  par un outils de ma composition.

Chaque page possède :

  • un nombre  aléatoire d’image et de paragraphes
  • chaque paragraphe est composé d’un nombre aléatoire (borne min/max paramétrable) de mots et chaque mot un nombre aléatoire de lettres (borne min/max paramétrable)

VirtualBox : Convertir une image en image VMDK splitable 2Go

Les images splitables (le système produit une machine virtuelle avec des fichiers « découpés » en portion de 2Go maxi)  sont fort pratiques puisqu’elles sont sauvegardables sur tout support (même en FAT32).

Si vous possédez une image virtualBox « monolithique » (format VDI, VHD…) sous souhaitez peut être pouvoir la convertir vers une image splitable.

Cela peut être réalisé très simplement (testé sous Linux) avec VirtualBOX


VBoxManage clonehd monrep1/img.vdi   monrep2/disk.vmdk --format VMDK --variant Split2G

PS : cela fonctionne très bien avec des images virtuelles de plusieurs centaines de giga.

PHP/CURL et TimeOut

Comment éviter les problèmes de TimeOut lors de l’exécution d’un appel CURL en PHP.

2 paramètres sont à prendre en compte :

  • Le temps pour établir la connexion avec le serveur
  • Le temps de la connexion (une fois celle-ci établie)

L’API CURL PHP répond à ce problème :

  • CURLOPT_CONNECTTIMEOUT     The number of seconds to wait while trying to connect. Use 0 to wait indefinitely.
  • CURLOPT_TIMEOUT – The maximum number of seconds to allow cURL functions to execute.
$ch = curl_init();
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,5); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds
$response = curl_exec($ch);
curl_close($ch)

Il ne faut oublier aussi de surcharger la valeur de temps d’exécution maxima du script PHP incluant ce code, sinon ce dernier stoppera le script avant la fin du de la connexion.


set_time_limit(0);// to infinity for example

PS : n’oubliez pas d’installer CURL et son Wrapper PHP.
Exemple Debian/Ubuntu


apt-get update && apt-get dist-upgrade
apt-get install curl php5-curl