Connecter Ubuntu Server à un VPN PPTP (installation du vpn client)

Contrairement a beaucoup de chose sous linux, la connexion cliente a un VPN PPTP sans interface graphique est pas d’une clarté limpide…

Les pré-requis:
– Avoir un serveur Vpn distant dont vous avez l’ip, le login et le mot de passe de connexion (dans mon exemple: Login => « Dominique », Mot de passe => « D7o6m1i2ni0que! », Adresse: « test.dfconcept.com ») (note: ils sont faux, c’est juste pour documenter ce didacticiel)
– Connaitre la plage Ip du sous réseau distant sur lequel on souhaite se connecter (dans mon cas 192.168.0.0/24)
– Définir arbitrairement un nom a cette connexion. (Dans mon exemple « MaConnexionVPN »)

La première chose c’est l’installation du paquet:

sudo apt-get install pptp-linux

Ensuite il faut ajouté une ligne dans le fichier /etc/ppp/chap-secrets avec
le login, le nom de la connexion, le mot de passe de la connexion selon le format suivant:
NomUtilisateur NomDeLaConnexion MotDePasse AdresseIp

sudo vi /etc/ppp/chap-secrets

Puis dans le fichier:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
Dominique MaConnexionVPN D7o6m1i2ni0que! *

Ensuite il faut creer le fichier de connexion dans /etc/ppp/peers/

pty "pptp test.dfconcept.com --nolaunchpppd"
name Dominique
remotename MaConnexionVpn
require-mppe-128
file /etc/ppp/options.pptp
ipparam MaConnexionVpn

La derniere étape est de définir un script qui ajoutera dynamiquement les routes vers le réseau distants lors de l’établissement de la connexion vpn:

sudo vi /etc/ppp/ip-up.d/99mesroutesvpn

Puis dans se fichier faire un copier coller de ceci (a adapter a votre config):

#!/bin/bash

if [ "$PPP_IPPARAM" == "MaConnexionVpn" ]; then
        route add -net 192.168.0.0/24 dev $PPP_IFACE
fi

ensuite rendre ce script exécutable:

sudo chmod +x /etc/ppp/ip-up.d/99mesroutesvpn

Pour lancer la connexion:

sudo pon MaConnexionVpn

Pour l’arrêter

sudo poff

En cumulant cet article au précédent, il est possible de faire un routeur dont la sortie est un VPN.

Creer un routeur lan-lan sur ubuntu

Pour se créer un routeur Lan<=>Lan rapide, installer un Ubuntu sans aucun module.

régler eth0 sur une ip du premier réseau en statique
regler eth1 sur une ip du second réseau en statique

ensuite pour activer le routage des paquets entre les deux réseaux, lancer les commandes:

sudo route add -net (premier réseau) netmask (masque du premier réseau) gw (ip de la carte eth0)

sudo route add -net (second réseau) netmask (masque du second réseau) gw (ip de la carte eth1)

sudo vi /etc/sysctl.conf

décommenter la ligne
net.ipv4.ip_forward=1
puis sauvegarder et sortir.

=> le routage entre les deux réseaux est alors actif

Mise en situation dans mon cas:

  • Le réseau informatique est en 192.168.27.0/24
  • Le réseau téléphonique est en 192.168.65.0/24
  • Le réseau informatique et le réseau téléphonique possède tout deux un DHCP
  • Chaque réseau est sur son propre switch.
  • Le client doit pouvoir depuis le réseau informatique pouvoir accéder au statistique et aux paramètres de l’autocom.

schema_lan-lanSolution retenue:

  • Création d’un VLAN 10 sur le switch informatique pour la téléphonie. (sur une prise en non taguée et sur l’agrégat de prise du serveur 2012 en taguée)
  • Connexion du Switch Téléphonie sur la prise non taguée
  • Création d’un machine virtuelle Hyper-V ayant 2 cartes réseaux. la seconde réglée sur le VLAN 10
  • Installation de Ubuntu
  • Configuration de Eth0 en 192.168.27.7 masque 255.255.255.0 passerelle 192.168.27.1
  • Configuration de Eth1 en 192.168.65.254 masque 255.255.255.0
  • Réglage de l’autocom pour utiliser l’adresse 192.168.65.254 comme passerelle.

puis sur le Ubuntu:

sudo route add -net 192.168.27.0 netmask 255.255.255.0 gw 192.168.27.7
sudo route add -net 192.168.65.0 netmask 255.255.255.0 gw 192.168.65.254

A cette étape le réseau informatique pouvait pinger 192.168.65.254 mais pas l’autocom 192.168.65.1 => les paquets n’étaient pas envoyé vers l’autocom =>

sudo vi /etc/sysctl.conf

décommenter la ligne
net.ipv4.ip_forward=1
puis sauvegarder et sortir.

=> Le réseau informatique peut alors pinger l’autocom en 192.168.65.1 car le serveur Ubuntu envoi bien le paquet vers celui-ci.

Observation:

Oui c’est minimaliste, pas de pare-feu, rien du tout, c’est juste une démonstration qu’Ubuntu peut être d’un grand secours lors d’un déploiement et ce en très peu de temps pour ponter deux réseaux de confiance sans se lancer dans les lourdeurs du service ce routage de Windows, ni matériel supplémentaire.

script php lancé sur création de fichier avec incron sur ubuntu 14.04

Objectif:
Créer un script php exécutant un traitement sur un fichier reçu dans un dossier. Dans mon cas, c’était pour l’intégration automatique de fichiers csv reçu par ftp dans une base de donnée.

Méthode utilisée: Incron

Incron:
Logiciel qui permet de planifier le lancement d’un programme ou d’un script sur un événement système (fichier créé ou modifié etc…)
Très utilise pour réaliser un process se déclenchant à la réception d’un fichier.
L’installation de Incron se fait apt-get install.
La seule chose déroutante c’est que par défaut l’utilisateur root lui-même est interdit et donc il faut l’autoriser.

Donc cela donne:

sudo apt-get install incron
sudo vi /etc/incron.allow

=> ajouter une ligne contenant juste
root
=> enregistrer & quitter

sudo incrontab -e

=> on arrive sur nano et l’on peu ajouter

/var/www/sentinelle/depot IN_CLOSE_WRITE /var/www/sentinelle/sentinelle.php "$#"

=> lors de la création d’un fichier dans /var/www/sentinelle/depot,  le script sentinelle.php sera lancé avec le nom du fichier en argument.
La commande:

sudo chmod +x /var/www/sentinelle/sentinelle.php

aura été préalablement lancé pour rendre le script « exécutable » depuis un shell.

exemple de contenu du script schellscript.php:

#!/usr/bin/php
<?php
// $arg[0] correspond au nom du script
// $arg[1] correspond au 1er parametre
// $arg[2] correspond au 2eme parametre etc...

// si le nombre de parametres est différent du nombre prévu ou que le 1er correspond 
// a une demande d'aide on affiche l'aide 
if ($argc != 2 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
?>

Ce script traite le fichier reçu en argument.

  Utilisation :
  <?php echo $argv[0]; ?> <option>

  <option> doit être le nom de fichier.
  Avec les options --help, -help, -h,
  et -?, vous obtiendrez cette aide.

<?php
// sinon execute le traitement normal du script
} else {
    echo $argv[1]."\n";
}
?>

Note: Attention à ce que le texte du script soit au format linux (retour à la ligne par \n) car ce dernier n’aime pas les scripts comportant des retour à la ligne format Microsoft (\r\n).

reférences:

Un excellent tutorial d’INCRON: http://www.admin-linux.fr/?p=4840
Un autre: http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/
Un dernier: http://www.howtoforge.com/triggering-commands-on-file-or-directory-changes-with-incron

Historique et configuration du shell « bash » (interpreteur de commande)

bash étant l’interpréteur de commande le plus courant dans linux.

Dans le dossier de l’utilisateur, il existe deux fichiers important à connaitre:

tapez « ls -al » dans le dossier de l’utilisateur et certains fichiers apparaissent:

drwxr-xr-x 4 dominique dominique 4096 août 25 11:40 .
drwxr-xr-x 3 root root 4096 mai 3 17:40 ..
-rw------- 1 dominique dominique 4692 août 28 22:32 .bash_history
-rw-r--r-- 1 dominique dominique 220 mai 3 17:40 .bash_logout
-rw-r--r-- 1 dominique dominique 3486 mai 3 17:40 .bashrc
drwx------ 2 dominique dominique 4096 mai 3 17:42 .cache
-rw------- 1 dominique dominique 176 juil. 20 15:03 .mysql_history
-rw-r--r-- 1 dominique dominique 675 mai 3 17:40 .profile
drwxr-xr-x 2 root root 4096 août 25 11:39 .vim
-rw------- 1 root root 5785 août 25 11:40 .viminfo

il s’agit des fichiers « .bash_history » et « .bashrc »

.bash_history est la liste des dernières commandes saisies. Très utilise pour se souvenir de ce que l’on a lancé précédemment car il garde un historique conséquent.

.bashrc est le fichier de configuration de l’interpréteur.

Comme vous le voyez, il en existe d’autres, tel que l’historique des commande mysql (si vous l’utilisez) et autres.

Explication des valeurs de chmod pour les débutants

Valeur Niveau de permission

400 Lecture pour le propriétaire
200 Ecriture pour le propriétaire
100 Exécution pour le propriétaire
40 Lecture pour le groupe
20 Ecriture pour le groupe
10 Exécution pour le groupe
4 Lecture pour tous le monde
2 Ecriture pour tous le monde
1 Exécution pour tous le monde

Donc:

775 Lecture écriture, exécution pour le propriétaire, lecture, écriture, exécution pour le groupe, lecture exécution pour les autres
770 Lecture écriture, exécution pour le propriétaire, lecture, écriture, exécution pour le groupe, rien pour les autres
755 Lecture écriture, exécution pour le propriétaire, lecture, exécution, pour le groupe, lecture exécution pour les autres
777 Lecture, écriture, exécution pour tous le monde.