Tunnel SSH, IP Dynamique & proxy Firefox

Configurer un tunnel SSH sur un poste client, puis le proxy Firefox

Quand on bosse avec des freelances, qui se trouvent à différents endroits du monde leur accès à internet peut-être plus ou moins aléatoire. En ce moment je rencontre le problème suivant:

Nous utilisant un service en s’appuyant sur leur API. Mais l’accès au différentes ressources est restreinte selon l’IP cliente. Pour peu que l’on se trouve derrière une IP dynamique et cela devient problématique…

Au moin deux solutions peuvent être mise en oeuvre pour contourner le problème:

  • Utilisation d’un VPN
  • Utilisation d’un Tunnel SSH

Le choix a été fait d’utiliser un tunnel SSH, car plus simple, selon moi, à mettre en œuvre, surtout si le besoin est de fixer l’adresse IP de la machine cliente. L’installation est simple pour le client, un client ssh est disponible sur une machine Linux, et l’utilitaire putty sous Windows permet de faire cela simplement. Le tunnel SSH créer un proxi local sur la machine cliente client convient de préciser au programme dont on souhaite qu’il utilise le tunnel

Configuration du tunnel SSH

Configuration du tunnel SSH sous Windows:

Récupérer putty, et configurer une connexion SSH classique:

  • Host Name (or IP adress)
  • Port si le serveur SSH n’écoute pas sur le port 22

Howto:tunnel_ssh_avec_putty [Fig. 1]
Configuration tunnel SSH putty étape 1
Ensuite se rendre dans Connection > SSH > Tunnels

  • Source Port, une valeur arbitraire mais doit être libre sur la machine cliente
  • Destination, identique à Host Name, préciser le port si différent de 22 (après les deux points)
  • Et enfin choisir Dynamique
howto_putty_ssh_tunnel3
Configuration tunnel SSH putty étape 2

Pour finir Cliquez sur le bouton ADD pour ajouter le tunnel. Pour ouvrir le tunnel cliquer sur Open.

Configuration du Tunnel sous Linux

Avec ssh:

ssh -D1080 user@destination:port

Le port est facultatif si égal à 22.

Le paramètre -D est pour définir une connexion dynamique.

Enfin 1080, est le Source Port, une valeur arbitraire pourvu que ce soit un port libre la machine cliente.

Configuration du proxy sous Firefox

Une fois le tunnel établi il se comporte comme un proxy sur la machine locale: exemples de configuration avec Firefox:

proxy-firefox-tunnel-ssh-1
Configuration Proxy Firefox Etape 1

Se rendre dans Paramètre > Avancé > Réseau, dans la section Connexion cliquer sur paramètres:

proxy-firefox-tunnel-ssh-2
Configuration Proxy Firefox Etape 2

Sélectionner « Configuration Manuelle du Proxy« , dans Hôte SOCKS saisissez « localhost« , SOCKS v5 et dans le champ Port mettre Source Port précédement défini.

Puis valider par OK. Tant que le proxy sera actif toute les connesxions initialiser par Firefox passerons désormais par le tunnel SSH.

Elle est pas belle la vie 🙂

HTML Helper pour WordPress

Je n’aime pas le html. Je sais pour un dev web, c’est plutôt gênant. Quoiqu’il en soit j’ai créé une classe HTMLHelper pour WordPress. Bon il y a des pour et des contres quand à l’utilisation d’une classe PHP supplémentaire pour générer du templating. Cette réponse sur StackExchange est intéressante: http://codereview.stackexchange.com/a/65281.

J’en ai profité pour me familiariser avec les Closures et fonctions anonymes en PHP. Voici un exemple de ce qu’il est possible de faire:

// Déclaration des en-tête d'un tableau HTML
$data['head'] = array(
	'Capture',
	'Nom',
	'Catégories',
	'Mots Clefs',
	'Projet',
	'Actions'
);

// On prépare les donné a présenter dans le tableau
foreach ( $videos as $index => $video ) {
	$data['data'][] = array(
		HTMLHelper::img( $image_url, array( 'height' => 256, 'width' => 128 ) ),
		$title,
		'Catégories',
		'Mots Clefs',
		HTMLHelper::p( array(), function () {
			echo 'Projet';
		} ),
		'Voir, editer, Supprimer'
	);
}

// Et Hop! On génère notre tableau HTML !
HTMLHelper::table( $data, array(), true );

Ce projet en est à son commencement (aucun commentaire!), mais je compte bien l’améliorer au file de l’eau. Pour le moment il est disponible sur GitHub: https://github.com/natrio/wp-html-helper. Faites en bon usage 🙂

 

A noter que ce dépôt est plutôt bon à mon goût: https://github.com/naomik/htmlgen.

Deux documents racine pour un vhost Apache en fonction de l’IP distante

Petite astuce de configuration apache quand on fait une maintenance sur un site. Bien sur on peut gérer l’affichage d’une page maintenance via le site. Mais cela ajoute des règles de re-directions qui peuvent interférer avec le site dont on assure la maintenance. L’opération de maintenance que j’ai dû faire aujourd’hui implique la gestion de re-direction. Donc, j’ai assuré l’affichage de la page de maintenance par le serveur Apache et non par le site web en question.

Voici la configuration utilisée:

<VirtualHost *:80>
  ServerAdmin webmaster@example.com
  ServerAlias *.example.com

  DocumentRoot /var/www/monsite-maintenance

	RewriteEngine On
	RewriteCond %{REMOTE_ADDR} xxx.xxx.xxx.xxx // L'ip de mon post de dev
	RewriteRule ^(.*)$ /var/www/monsite-maintenance/$1

	
    Options -Indexes +FollowSymLinks +MultiViews
    AllowOverride all
    Order allow,deny
	  allow from all
  

	
		Options -Indexes +FollowSymLinks +MultiViews
		AllowOverride all
		Order allow,deny
		allow from all
	


source: http://serverfault.com/questions/336586/apache-client-ip-based-documentroot

Et l’astuce du soir, pour tester sa configuration apache avant un reload ou un restart:

apachectl configtest

 

Ajouter des champs personnalisé à l’inscription Worpress dans un context buddypress

Je souhaite ajouter un champ de confirmation email lors du processus d’inscription d’un utilisateur.

Il existe de nombreux plugins pour customiser les champs a l’inscription en front-end WordPress. Mais pour un ou deux champs avec une logique de validation simple, je préfère utiliser un peu de code à mettre dans un plugin ou dans le functions.php. Plutôt que de prendre un plugin qui risque d’alourdir pour pas grand chose mon WordPress.

A ce sujet la doc WordPress est très bien faite: https://codex.wordpress.org/Customizing_the_Registration_Form

Mais… Avec BuddyPress cela ce passe différemment. En effet BuddyPress surcharge complètement le mécanisme d’inscription natif de WordPress. Voici comment faire:

Tout d’abord, créer un child theme, puis surcharger le fichier:

buddypress/members/register.php

Les champs de base de WordPress sont gérés autour des lignes 70 de ce Template.


email errors.
*
* @since BuddyPress (1.1.0)
*/
do_action( 'bp_signup_email_errors' ); ?>
/>



/**
* Fires and displays any member registration email confirmations errors.
*
*/

Ensuite il reste ces quelques fonctions pour gérer les erreurs et l’affichage du mail de confirmation:

add_action( 'bp_signup_validate', function() {
$bp = buddypress();
if ( strcmp( $_POST['signup_email_confirm'], $_POST['signup_email'] ) !== 0 ) {
$bp->signup->errors['signup_email_confirm'] = __( 'Les deux email ne correspondent pas.', 'lang-bp-confirm-email' );
}
});

function bp_signup_email_confirm_value() {
echo bp_get_signup_email_confirm_value();
}

function bp_get_signup_email_confirm_value() {
$value = '';
if ( isset( $_POST['signup_email_confirm'] ) ) {
$value = $_POST['signup_email_confirm'];
}

return $value;
}