Categories


Browse by


Selected Tag


All Tags 6


RSS Feed

VPN avec PPP et SSH

  • Oct 6 '09
  • Posted By: Jean-Philippe Blais

Une méthode pour créer un VPN en utilisant PPP et SSH sous Linux.  Testé sous Ubuntu 8.04 LTS, Ubuntu 8.10 et bien sûr Debian.

Sources:
http://www.faqs.org/docs/Linux-mini/ppp-ssh.html
http://www.revsys.com/writings/quicktips/nat.html

==> Setup a vpn user on the server

root@server:~# useradd -U vpn

edit /etc/passwd and change vpn default shell to /bin/bash

root@server:~# mkdir -p /home/vpn/.ssh
root@server:~# chown -R vpn.vpn /home/vpn
root@server:~# passwd vpn

==> Use a generated hard to remember password. You will use it only once.

Generate root RSA keys on the client

root@client:~# ssh-keygen

Copy the client root RSA public key to the server vpn user authorized keys

root@client:~# scp .ssh/id_rsa.pub vpn@server:./.ssh/authorized_keys
root@server:~# chmod 700 /home/vpn/.ssh
root@server:~# chmod 600 /home/vpn/.ssh/authorized_keys

Test the automatic login :

root@client:~# ssh -l vpn server

==> You should get the vpn user shell without password

Setup sudo on the server to allow vpn user run the pppd command

root@server:~# visudo

Add:

Cmnd_Alias VPN=/usr/sbin/pppdvpn ALL=NOPASSWD: VPN

Test sudo :

root@server:~# su – vpn
vpn@server:~$ sudo usr/sbin/pppd noauth

==> should see pppd garbage on your terminal

The vpn-pppssh Script

Use this script in the client

Change those lines for your needs :

SERVER_HOSTNAME=eldivino.domain.com
SERVER_USERNAME=vpn
SERVER_IFIPADDR=192.168.3.2
CLIENT_IFIPADDR=192.168.3.1

#!/bin/sh
# /usr/local/bin/vpn-pppssh
#
# This script initiates a ppp-ssh vpn connection.
# see the VPN PPP-SSH HOWTO on http://www.linuxdoc.org for more information.
#
# revision history:
# 1.6 11-Nov-1996 miquels@cistron.nl
# 1.7 20-Dec-1999 bart@jukie.net
# 2.0 16-May-2001 bronson@trestle.com
#
# You will need to change these variables...
#
# The host name or IP address of the SSH server that we are
# sending the connection request to:
SERVER_HOSTNAME=eldivino.domain.com
# The username on the VPN server that will run the tunnel.
# For security reasons, this should NOT be root.  (Any user
# that can use PPP can intitiate the connection on the client)
SERVER_USERNAME=vpn
# The VPN network interface on the server should use this address:
SERVER_IFIPADDR=192.168.3.2
# ...and on the client, this address:
CLIENT_IFIPADDR=192.168.3.1
# This tells ssh to use unprivileged high ports, even though it's
# running as root.  This way, you don't have to punch custom holes
# through your firewall.
LOCAL_SSH_OPTS="-P"
#
# The rest of this file should not need to be changed.
#
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11
#
# required commands...
#
PPPD=/usr/sbin/pppd
SSH=/usr/bin/ssh
if ! test -f $PPPD  ; then echo "can't find $PPPD";  exit 3; fi
if ! test -f $SSH   ; then echo "can't find $SSH";   exit 4; fi
case "$1" in
  start)
    # echo -n "Starting vpn to $SERVER_HOSTNAME: "
    ${PPPD} updetach noauth passive pty "${SSH} ${LOCAL_SSH_OPTS} ${SERVER_HOSTNAME} -l${SERVER_USERNAME} -o Batchmode=yes sudo ${PPPD} nodetach notty noauth" ipparam vpn ${CLIENT_IFIPADDR}:${SERVER_IFIPADDR}
    # echo "connected."
    ;;
  stop)
        # echo -n "Stopping vpn to $SERVER_HOSTNAME: "
        PID=`ps ax | grep "${SSH} ${LOCAL_SSH_OPTS} ${SERVER_HOSTNAME} -l${SERVER_USERNAME} -o" | grep -v ' passive ' | grep -v 'grep ' | awk '{print $1}'`
        if [ "${PID}" != "" ]; then
          kill $PID
          echo "disconnected."
        else
          echo "Failed to find PID for the connection"
        fi
    ;;
  config)
    echo "SERVER_HOSTNAME=$SERVER_HOSTNAME"
    echo "SERVER_USERNAME=$SERVER_USERNAME"
    echo "SERVER_IFIPADDR=$SERVER_IFIPADDR"
    echo "CLIENT_IFIPADDR=$CLIENT_IFIPADDR"
  ;;
  *)
    echo "Usage: vpn {start|stop|config}"
    exit 1
    ;;
esac
exit 0

Test the VPN link

root@client:~# ./vpn-pppssh start

Should see something like :

Using interface ppp0Connect: ppp0 <--> /dev/pts/1local IP address 192.168.3.1remote IP address 192.168.3.2

Test the VPN link :

root@client:~# ping 192.168.3.1 (ping client local IP)root@client:~# ping 192.168.3.2 (ping server IP)root@server:~# ping 192.168.3.1 (ping client IP)

Setup server routing :

root@server:~# echo 1 > /proc/sys/net/ipv4/ip_forward
root@server:~# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
root@server:~# iptables -A FORWARD -i eth0 -o ppp0 -m state –state RELATED,ESTABLISHED -j ACCEPT
root@server:~# iptables -A FORWARD -i ppp0 -o eth0 -j ACCEPT

Add default route on the client :

root@client:~# route add -net default gw 192.168.3.2

Test if every things work from the client :

root@client:~# ping www.google.ca


Lister les fichiers et trier par...

  • Jun 27 '09
  • Posted By: Jean-Philippe Blais

Quelques petits "tips" pour lister les fichiers.

 

Liste des fichiers trié sur la grosseur (-S), ordre décroissant (-r) et afficher le format des fichiers en "human readable" (-h).

ls -lSrh

 

Liste des fichiers trié sur la date de modification (-t) et ordre décroissant (-r).

ls -ltr

 

Liste des fichiers trié par ordre alphabétique en utilisant l'extention (-X), utile pour grouper.

ls -lX

 

Liste des fichiers trié par ordre alphabétique... (do!) c'est le défaut!

ls -l

 

** L'option -l est pour le "long listing".

 

Voir "man ls" et l'option --sort pour découvrir les types de tri.


Quelques commandes Unix utiles

  • May 30 '09
  • Posted By: Jean-Philippe Blais

Voici une petite liste de commandes Unix fort utile pour manipuler des fichiers textes.  Je ne donne pas de détail de leur utilisation, puisque ceci est généralement bien documenté dans les "man pages".

cat :affiche un fichier (sans pagination) ou concaténation de fichiers si plus d'un fichier a été passé en paramètre.

tac : C'est l'inverse de 'cat'!  Affiche donc un fichier de la fin au début.

grep, egrep, fgrep, rgrep : Affiche les lignes qui s'apparient ("matching") à un échantillon ("pattern").

awk : C'est un outil très puissant pour faire le traitement de fichiers texte.  Un conseil, pratiquez-vous et aller acheter un bon livre.

sed : Éditeur en "flux".  Encore là, un bon livre en vaut l'investissement.

head : Affiche les premières lignes d'un fichier

tail :  Affiche les dernières lignes d'un fichier, voir l'option '-f' pour l'affichage de log en continue.

more : Affiche un fichier à l'écran, page par page.

less : C'est l'opposé de "more", mais qui en fait plus!

diff : Compare 2 fichiers, ligne par ligne.

vi, vim : Mon éditeur de texte préféré.

emacs, xemacs : C'est l'édireur de texte préféré de ceux qui ne veulent pas apprendre vi!

Leur pendant 'z' pour vous éviter d'avoir à décompresser les fichiers déjà compressés (format gzip) :

zcat, zdiff, zgrep, zfgrep, zmore, zdiff, zless

La seule commande pour supporter les zip : 

zipgrep

Pour les autres commandes qui n'ont pas le suffixe zip, il y a toujours les 'pipes'.

Vous voulez en savoir plus?  Allez voir le site TLDP : http://www.tldp.org/

Amusez-vous bien!


Conçu avec Apostrophe CMS
Propulsé par et