226 lines
5.1 KiB
Markdown
226 lines
5.1 KiB
Markdown
---
|
|
categories: openbsd network firewall
|
|
title: Howto PacketFilter
|
|
---
|
|
|
|
## Tips & Astuces
|
|
|
|
### Général
|
|
|
|
Activer PacketFilter :
|
|
|
|
> Note : Attention, comme les règles qui seront activées n'auront pas d'état, pf va couper **toutes** les connexions.
|
|
|
|
~~~
|
|
# pfctl -e
|
|
~~~
|
|
|
|
Désactiver PacketFilter :
|
|
|
|
~~~
|
|
# pfctl -d
|
|
~~~
|
|
|
|
Vérifier la configuration sans la charger :
|
|
|
|
~~~
|
|
# pfctl -nf /etc/pf.conf
|
|
~~~
|
|
|
|
Recharger la configuration :
|
|
|
|
~~~
|
|
# pfctl -f /etc/pf.conf
|
|
~~~
|
|
|
|
### Utilisation détaillée
|
|
|
|
#### Observation
|
|
|
|
Voir la QoS en temps réel :
|
|
|
|
~~~
|
|
# systat queue
|
|
# pfctl -s queue -vv
|
|
~~~
|
|
|
|
Voir toutes les règles actuellement en place :
|
|
|
|
~~~
|
|
# pfctl -sr
|
|
~~~
|
|
|
|
Voir toutes les règles actuellement en place, avec les statistiques :
|
|
|
|
~~~
|
|
# pfctl -vsr
|
|
~~~
|
|
|
|
Obtenir la règle numéro 42 :
|
|
|
|
~~~
|
|
# pfctl -sr -R42
|
|
~~~
|
|
|
|
Liste des états :
|
|
|
|
~~~
|
|
# pfctl -s states | less
|
|
~~~
|
|
|
|
Liste des états avec statistiques, notamment l'âge et l'expiration de l'état :
|
|
|
|
~~~
|
|
# pfctl -vs states | less
|
|
~~~
|
|
|
|
Obtenir le nombre d'états :
|
|
|
|
~~~
|
|
# pfctl -si | grep curr
|
|
~~~
|
|
|
|
Toutes les infos sur PF :
|
|
|
|
~~~
|
|
# pfctl -sa | less
|
|
~~~
|
|
|
|
#### Action
|
|
|
|
Flush des états :
|
|
|
|
~~~
|
|
# pfctl -F states
|
|
~~~
|
|
|
|
Gestion des tables :
|
|
|
|
~~~
|
|
# pfctl -t <table> -T show/flush/kill/add/delete
|
|
~~~
|
|
|
|
#### Logs
|
|
|
|
Voir les logs :
|
|
|
|
~~~
|
|
# tcpdump -n -e -ttt -r /var/log/pflog
|
|
~~~
|
|
|
|
Voir les vieux logs :
|
|
|
|
~~~
|
|
# zcat /var/log/pflog.0.gz |tcpdump -ne -ttt -r -
|
|
~~~
|
|
|
|
Voir les logs en temps réel :
|
|
|
|
~~~
|
|
# tcpdump -n -e -ttt -i pflog0
|
|
~~~
|
|
|
|
### Cas d'utilisation
|
|
|
|
#### Limite d'état spécifique à une règle
|
|
|
|
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.
|
|
|
|
## FAQ
|
|
|
|
### pfctl: warning: namespace collision with \<table\> global table.
|
|
|
|
Il faut a priori effacer la table avec
|
|
|
|
~~~
|
|
# pfctl -t <table> -T kill
|
|
~~~
|
|
|
|
### Valeurs des timeout
|
|
|
|
D'après le man :
|
|
|
|
~~~
|
|
set optimization environment
|
|
Optimize state timeouts for one of the following network
|
|
environments:
|
|
|
|
aggressive
|
|
Aggressively expire connections. This can greatly reduce
|
|
the memory usage of the firewall at the cost of dropping
|
|
idle connections early.
|
|
conservative
|
|
Extremely conservative settings. Avoid dropping
|
|
legitimate connections at the expense of greater memory
|
|
utilization (possibly much greater on a busy network) and
|
|
slightly increased processor utilization.
|
|
high-latency
|
|
A high-latency environment (such as a satellite
|
|
connection).
|
|
normal A normal network environment. Suitable for almost all
|
|
networks.
|
|
satellite
|
|
Alias for high-latency.
|
|
|
|
~~~
|
|
|
|
Comparaison des valeurs des modes *aggressif* et *normal*
|
|
|
|
~~~
|
|
Agressive Normal
|
|
tcp.first 30s 120s
|
|
tcp.opening 5s 30s
|
|
tcp.established 18000s 86400s
|
|
tcp.closing 60s 900s
|
|
tcp.finwait 30s 45s
|
|
tcp.closed 30s 90s
|
|
tcp.tsdiff 10s 30s
|
|
udp.first 60s 60s
|
|
udp.single 30s 30s
|
|
udp.multiple 60s 60s
|
|
icmp.first 20s 20s
|
|
icmp.error 10s 10s
|
|
other.first 60s 60s
|
|
other.single 30s 30s
|
|
other.multiple 60s 60s
|
|
frag 60s 60s
|
|
interval 10s 10s
|
|
adaptive.start 6000 states 6000 states
|
|
adaptive.end 12000 states 12000 states
|
|
src.track 0s 0s
|
|
~~~
|
|
|
|
À titre d'indication, en mode *satellite*
|
|
|
|
~~~
|
|
tcp.first 180s
|
|
tcp.opening 35s
|
|
tcp.established 86400s
|
|
tcp.closing 905s
|
|
tcp.finwait 50s
|
|
tcp.closed 95s
|
|
tcp.tsdiff 60s
|
|
udp.first 60s
|
|
udp.single 30s
|
|
udp.multiple 60s
|
|
icmp.first 20s
|
|
icmp.error 10s
|
|
other.first 60s
|
|
other.single 30s
|
|
other.multiple 60s
|
|
frag 60s
|
|
interval 10s
|
|
adaptive.start 6000 states
|
|
adaptive.end 12000 states
|
|
src.track 0s
|
|
|
|
~~~
|