Premièrement, désactiver pf sur votre OpenBSD par la commande suivante :

# pfctl -d

On édite le fichier /etc/pf.conf, et voilà à quoi ressemble le mien :

#       $OpenBSD: pf.conf,v 1.49 2009/09/17 06:39:03 jmc Exp $
#
# See pf.conf(5) for syntax and examples.
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.
 
# Configuration des interfaces
int_if="bge0"
ext_if="pppoe0"
 
# Adresses connues
table <addr_connues> {1.2.3.4}
 
# Machines connues
addr_fw="192.168.0.210"
addr_samba="192.168.0.211"
addr_old="192.168.0.253"
 
# On autorise tout sur l'interface locale
set skip on lo
 
# On autorise la sortie depuis le réseau interne
match out on $ext_if from ($int_if:network) nat-to ($ext_if)
 
# On bloque le loging
block log
 
# On autorise tout en entrée/sortie sur l'interface interne
pass on $int_if
 
# On autorise tout en sortie sur l'interface publique
pass out on $ext_if
 
# On autorise le ping
pass in on $ext_if proto icmp
 
# On autorise Les adresses connues à se connecter a des ports spécifiques
pass in on $ext_if from <addr_connues> to ($int_if:network) port {8081 8082 ssh 2222 2223 5666 5667 5668}
 
# On autorise les connections publiques aux ports suivants
pass in on $ext_if proto tcp from any to ($ext_if) port {http}
 
# Redirrections de ports
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 2222 rdr-to $addr_samba port ssh
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 2223 rdr-to $addr_old port ssh
 
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 5667 rdr-to $addr_samba port 5666
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 5668 rdr-to $addr_old port 5666
 
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port http rdr-to $addr_old
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 8081 rdr-to $addr_fw port http
pass in on $ext_if proto tcp from <addr_connues> to ($ext_if) port 8082 rdr-to $addr_samba port http

Les explications :

  • $ext_if est l'appel d'une variable, dans notre cas, c'est un nom d'interface réseau
  • ($ext_if) et l'appel d'un calcul dans notre cas, c'est l'adresse IP associée au nom d'interface réseau
  • ($int_if:network) est l'appel d'un calcul dans notre cas, et renvoie le réseau de l'interface prise en paramètre
  • http ou ssh sont des constantes de pf et définissent des ports standards

Dans notre cas, on utilise le NAT. Il faudra donc penser à activer le forwarding dans /etc/sysctl.conf :

net.inet6.ip6.forwarding=1
net.inet.ip.forwarding=1

Pour réactiver pf :

# pfctl -ef  /etc/pf.conf

Pour terminer, pour recharger les règles pf (après modification) :

# pfctl -f  /etc/pf.conf