pfwd
pfwd – port 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.