pfwdport forwarding daemon – est un proxy de redirection réseau. Il prend en charge la redirection des connexions réseaux TCP vers un serveur local ou distant. Fonctionnant en IPv4 et IPv6, il facilite les procédures de migration réseau et le passage sous IPv6.

Caractéristiques :

  • proxy de redirection TCP.
  • gestion des sockets IPv4 / IPv6 / UNIX.
  • règles de filtrage par autorisation / interdiction.
  • support de journalisation par syslog.

Dépendances :

  • glib 2.6.
  • ev 3.0.

Le logiciel est placé sous licence open-source et est fonctionnel sous GNU/Linux, BSD (FreeBSD, OpenBSD, NetBSD) et Mac OS X.

Cas d’utilisation

  • redirection des ports privilégiés HTTP/HTTPS  vers les ports non privilégiés d’un serveur d’applications Java.
  • redirection d’une socket UNIX vers un serveur SQL distant.
  • redirection d’un site web en attente de propagation DNS.
  • redirection d’un flux IPv6 vers une application IPv4.

Exemple

# pfwd
[2012-01-29 15:42:43] [INFO] java: socket is listening (*:80)
[2012-01-29 15:42:43] [INFO] sql: socket is listening (unix:/var/run/mysqld/mysqld.sock)

Développement

Le projet est disponible sous github : https://github.com/bhuisgen/pfwd.

Pour cloner le dépôt :

$ git clone git://github.com/bhuisgen/pfwd.git

Installation

# ./configure --prefix=/usr --sysconfdir=/etc
# make
# make install

Ligne de commandes

$ pfwd --help-all
Usage:
pfwd [OPTION...] [FORWARDER]

Help Options:
-h, --help                  Show help options
--help-all                  Show all help options
--help-forwarder            Show all forwarder options

Forwarder Options
--listen=ADDRESS            Local address
--listen-port=PORT          Local port
--listen-backlog=LENGTH     Local socket backlog
--listen-owner=NAME         User of the local unix socket
--listen-group=NAME         Group of the local unix socket
--listen-mode=MODE          Mode of the local unix socket
--forward=ADDRESS           Forward address
--forward-port=PORT         Forward port
--buffersize=SIZE           Socket buffer size

Application Options:
-f, --file=FILE             Read configuration from file
-v, --verbose               Set verbose output
--version                   Show version information

pfwd permet d’exécuter une redirection directement en ligne de commande.

Dans le cas où plusieurs redirections sont à effectuer, il est nécessaire d’utiliser un fichier de configuration. Avec ce dernier, il est alors possible d’activer l’exécution en démon.

Configuration

La configuration s’effectue dans le fichier pfwd.conf présent soit dans le répertoire personnel de l’utilisateur (~/.pfwd/pfwd.conf), soit dans le répertoire global /etc (/etc/pfwd.conf). Un fichier de configuration spécifique peut également être fourni en ligne de commande par l’option -f.

La syntaxe de ce fichier est de type mot-clef/valeur. Les lignes débutant par le caractère # sont des commentaires. Les mots-clefs peuvent être groupés avec la syntaxe [nom_du_groupe]. La première partie du fichier englobe les options générales sous le groupe [main]. Les groupes suivants constituent chacun une redirection réseau.

[main]

Groupe principal des options.

Le groupe est obligatoire.

Daemonize=0

Active l’exécution en arrière-plan.

L’option est facultative, par défaut 0.

PIDFile=/var/run/pfwd/pfwd.pid

Fichier utilisé par le démon pour stocker son PID. Ce fichier est généralement utilisé par un script de démarrage init.d.

L’option est facultative, par défaut /var/run/pfwd/pfwd.pid.

User=nobody

Nom de l’utilisateur vers lequel le démon rétrograde ses droits suite à un lancement par l’utilisateur root.

L’option est facultative.

Group=nogroup

Groupe utilisateur vers lequel le démon rétrograde ses droits suite à un lancement par l’utilisateur root.

L’option est facultative.

LogLevel=3

Niveau de journalisation du fichier journal. Les niveaux possibles sont les suivants :

  • 0 : désactive la journalisation.
  • 1 : enregistre les erreurs.
  • 2 : enregistre les erreurs et les warnings.
  • 3 : enregistre les erreurs, warnings et informations.
  • 4 : enregistre les erreurs, warnings, informations et les évènements de débogage.

Note : pour bénéficier des évènements de débogage, pfwd doit être compilé avec l’option de débogage activée.

L’option est facultative. Par défaut, 3.

LogFile=/var/log/pfwd/pfwd.log

Nom du fichier journal où le démon enregistre ses évènements. En cas d’exécution console, les évènements sont automatiquement envoyés vers les sorties standards.

L’option est facultative. Par défaut, /var/log/pfwd/pfwd.log.

UseSyslog=0

Utilisation du serveur syslog local pour enregistrer les évènements.

L’option est facultative. Par défaut, 0.

SyslogFacility=DAEMON

Code de facilité utilisé pour l’enregistrement des évènements. Les valeurs possibles sont les suivantes : DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7.

L’option est facultative. Par défaut, DAEMON.

[nom]

Groupe nommé englobant les options d’une redirection réseau.

L’option est obligatoire.

Listen=*

Adresse source d’écoute. L’adresse peut être une adresse IPv4, une adresse IPv6 mise entre crochets (exemple : [2001:1234:4567::1]) ou un fichier de socket UNIX (exemple : unix:/path/file.sock).

  • la valeur * spécifie l’ensemble des adresses IPv4.
  • la valeur [::] spécifie l’écoute sur l’ensemble des adresses IPv6.

L’option est obligatoire.

ListenPort=123

Port réseau source.

L’option est obligatoire, sauf dans le cas d’une socket d’écoute UNIX.

ListenBacklog=100

Taille de la file d’attente de connexions avant acceptation. Si cette file est pleine, toute nouvelle connexion est alors refusée par la pile TCP/IP.

L’option est facultative et n’est pas disponible dans le cas d’une socket d’écoute UNIX. Par défaut, 100.

ListenOwner=bhuisgen

Utilisateur propriétaire de la socket UNIX. Ce réglage n’est valable que dans le cas où pfwd est lancé par root.

L’option est facultative et n’est pas disponible dans le cas d’une socket d’écoute réseau. Par défaut, aucune modification n’est effectuée.

ListenGroup=bhuisgen

Groupe propriétaire de la socket UNIX. Ce réglage n’est valable que dans le cas où pfwd est lancé par root.

L’option est facultative et n’est pas disponible dans le cas d’une socket d’écoute réseau. Par défaut, aucune modification n’est effectuée.

ListenMode=0640

Permissions d’accès de la socket UNIX.

L’option est facultative et n’est pas disponible dans le cas d’une socket d’écoute réseau. Par défaut, aucune modification n’est effectuée.

Forward=192.168.0.1

Adresse de redirection. L’adresse peut être une adresse IPv4, une adresse IPv6 mise entre crochets (exemple : [2001:1234:4567::1]) ou un fichier de socket UNIX (exemple : unix:/path/file.sock).

  • la valeur * spécifie l’ensemble des adresses IPv4.
  • la valeur [::] spécifie l’écoute sur l’ensemble des adresses IPv6.

Cette option est obligatoire.

ForwardPort=456

Port réseau de redirection.

L’option est obligatoire, sauf dans le cas d’une socket d’écoute UNIX.

Buffer=4096

Taille de tampon pour les opérations réseau en octets. Chaque connexion redirigée utilise deux tampons de cette taille.

Valeur minimum 1024, par défaut 4096.

Allow=127.0.0.1,81.81.81.81

Liste des adresses IP autorisées à se connecter. Les wildcards sont supportés. Le caractère de séparation est la virgule.

Cette liste d’autorisation a un ordre prioritaire par rapport à la liste d’interdiction. Ainsi, si une liste d’interdiction est spécifiée, seules les adresses IP présentes dans cette liste sont autorisées.

L’option est facultative, sauf dans le cas d’une socket d’écoute UNIX. Par défaut, toutes les adresses IP sont autorisées.

Deny=*

Liste des adresses IP refusées. Les wildcards sont supportés. Le caractère de séparation est la virgule.

L’option est facultative, sauf dans le cas d’une socket d’écoute UNIX. Par défaut, aucune adresse IP est refusée.