Certaines options peuvent être configurées. Par exemple :
~~~
set limit states <number>
set limit src-nodes <number>
~~~
La limite `states` est le nombre d'état que le pare-feu peut créer au maximum. La limite `src-nodes` est le nombre total d'IP sources pouvant être "trackées", et generées par les options `sticky-address` et `source-track`.
*`memory` : le nombre de fois où la mémoire n'a pas pu être allouée, et ayant pu causer des paquets perdus ; ce paramètre est intéressant à suivre après une augmentation des valeurs des options (telles que `limit states` ou `limit src-nodes`)
Des logs sont visibles lorsqu'une règle contenant le mot clef `log` est matchée. Par exemple, la règle `block log all` permettra de voir tous les flux bloqués.
Si une machine est souvent la cible d'attaques pouvant remplir la table d'états, une limite spécifique à une règle peut être mise en place afin de ne pas atteindre la limite globale qui bloquerait la création de nouveaux états.
~~~
pass in quick on $if proto tcp from any to 192.0.2.10 port { 80, 443 } keep state (max 50000)
~~~
Ainsi, au maximum 50 000 états pourront être créés pour 192.0.2.10:80 et 192.0.2.10:443, soit un total de 100 000 états pour l'ensemble.
Attention, les 2 limites (la globale et celle spécifique à la règle) ne sont pas séparées. Si la limite globale est configuré à 150 000 (`set limit states 150000`) et que 50 000 états sont atteints pour 192.0.2.10:80, alors il ne restera que 100 000 états possible globalement.
- L'IP est bannie. Elle peut toujours tenter toute autre connexion, mais ne peut plus tenter de connexion SSH vers le port 2222 (`block in quick on $ext_if proto tcp from <blacklist-ssh> to port 2222`). Cette règle peut être adaptée selon ce que l'on veut bloquer à l'IP bannie.
Cela ne matche que pour les paquets provenants du LAN et non pas pour ceux provenants du routeur lui-même, ni pour une réponse à un paquet provenant de l'extérieur.
La partie nat-to est nécessaire, sinon les paquets vont partir sur l'interface secondaire avec l'IP de l'interface principale. Aussi, l'opérateur réseau en face risque de voir cela comme une usurpation et refuser le paquet.
Attention également, cette règle peut casser le NAT du client ayant émis le paquet dont la route est changée (exemple avec OpenVPN où le client ne reçoit pas le paquet de réponse, et la connexion ne s'établit plus).
L'option nat-to permet de traduire l'adresse IP d'une machine depuis un réseau local vers l'extérieur. Utile par exemple pour qu'une machine ayant une IP privée puisse joindre Internet en utilisant une IP publique.
L'option rdr-to permet de rediriger le trafic arrivant depuis Internet sur une IP et un port particulier du pare-feu vers une autre IP et un autre port d'une machine interne à un réseau. Utile par exemple pour qu'une machine ayant une IP privée puisse être joignable depuis Internet avec une IP publique.
L'option binat-to combine les effets de nat-to et rdr-to en une seule règle. Une machine ayant une IP privée dans un réseau local peut alors sortir avec une IP publique et être joignable depuis l'extérieur par cette même IP publique, qui n'est pourtant pas attribuée directement à la machine.
### Exclure une IP d'une règle autorisant un préfixe plus large
Imaginons la règle suivante, permettant de ne rien bloquer en entrée sur l'interface WAN, depuis n'importe où et à destination du préfixe 192.0.2.0/24 :
~~~
pass in quick on $wan from any to 192.0.2.0/24
~~~
Si dans ce préfixe, il y a l'IP 192.0.2.5 en particulier pour laquelle on ne veut pas avoir cette large autorisation, on pourrait vouloir l'exclure.
PacketFilter permet la négation avec le point d'exclamation `!`. On pourrait donc penser à modifier la règle précédente pour y ajouter `!192.0.2.5`, mais attention ! Cette règle n'indiquerait pas de tout autoriser vers tout le préfixe 192.0.2.0/24 sauf vers l'IP 192.0.2.5. Elle serait découpée en 2 règles indépendantes : la première indiquant de tout autoriser vers 192.0.2.0/24, et la deuxième indiquant de tout autoriser vers tout le monde, sauf vers 192.0.2.5. On se retrouverait alors avec une autorisation depuis n'importe qui et vers l'ensemble de notre réseau, sauf 192.0.2.5.
Pour exclure une IP d'une autorisation plus large, il faut créer une règle `block` en amont :
~~~
block in quick on $wan from any to 192.0.2.5
pass in quick on $wan from any to 192.0.2.0/24
~~~
Ainsi, la première règle de `block` permettra de ne rien autoriser à destination de 192.0.2.5, et la deuxième règle permettra, pour le reste du préfixe 192.0.2.0/24, de tout autoriser.
Si, pour cette même IP 192.0.2.5, on ne veut pas tout bloquer mais autoriser seulement certains ports, il faut encore ajouter une autre règle :
~~~
pass in quick on $wan proto tcp from any to 192.0.2.5 port 443
block in quick on $wan from any to 192.0.2.5
pass in quick on $wan from any to 192.0.2.0/24
~~~
On aura correctement notre autorisation précise vers 192.0.2.5 sur son port TCP/443, les autres ports seront bloqués, et tout le reste du préfixe sera entièrement autorisé.