OpenBSD - Unix Experience

Transcription

OpenBSD - Unix Experience
OpenBSD
Packet Filter
Par Loïc Blot
Thématiques
●
OpenBSD
– Présentation
●
Packet Filter
– Commandes
– Le
d'administration
filtrage
– NAT
et redirection de ports
– PFLog
●
Aller plus loin
– Firewall
redondé
Partie I
OpenBSD
Présentation
Créé en 1995 par Theo de Raadt
●
Dérivé de BSD 4.4
●
Axe majeur : Sécurité
●
–
Axe de développement
–
Attention à la cryptographie (SSH, IPSec...)
Système porté sur plusieurs archis
●
Nouvelle version tous les 6 mois
●
Partie II
Packet Filter
Support
Filtrage
●
–
IPv4/IPv6
–
Avec et sans état
QoS (ALTQ)
●
NAT/PAT/RDR
●
Tables dynamiques
●
Commandes d'administration
Pfctl: contrôler PF
●
–
Classiques
●
-d : désactiver
●
-e : activer
●
-f : chargement du fichier de règle
●
-n : interprétation uniquement
Commandes d'administration
Pfctl: contrôler PF
●
●
Moniteurs
●
-sr : liste des règles
●
-si : statistiques temps réel
●
-st : timeouts
●
-sa : tout voir
pfctl -si
root@gate2> pfctl -si
~
Status: Enabled for 7 days 09:53:49
State Table
current entries
searches
Debug: err
Total
Rate
3195
6656450409
10393.7/s
inserts
255265499
398.6/s
removals
255262304
398.6/s
1590567349
2483.6/s
0
0.0/s
7218
0.0/s
0
0.0/s
3917
0.0/s
3937078
6.1/s
0
0.0/s
1118
0.0/s
49121
0.1/s
0
0.0/s
21674
0.0/s
1123
0.0/s
state-limit
0
0.0/s
src-limit
0
0.0/s
synproxy
0
0.0/s
Counters
match
bad-offset
fragment
short
normalize
memory
bad-timestamp
congestion
ip-option
proto-cksum
state-mismatch
state-insert
Filtrage
Syntaxe globale
●
●
action [direction] [log] [quick] [on interface] [af] [proto protocol]
[from src_addrs [port src_ports]] [to dst_addrs [port
dst_addrs]] [flags tcp_flags] [state]
●
Action : pass/block
●
Direction: in/out
●
Log : enregistrer le paquet
●
Quick : sortie d'urgence
●
Interface (seule ou liste)
●
Af : inet/inet6
Filtrage
Syntaxe globale
●
●
action [direction] [log] [quick] [on interface] [af] [proto
protocol] [from src_addrs [port src_ports]] [to dst_addrs
[port dst_addrs]] [flags tcp_flags] [state]
●
Protocole : tcp/udp/icmp/icmp6 (seul ou liste)
●
srcs_addrs/dst_addrs
●
src_ports/dst_ports
●
tcp_flags
●
State : no state/keep state/modular state/synproxy state
Filtrage
●
●
Exemples :
–
pass in on bnx0 proto tcp from 10.55.55.23 port any to 192.168.1.1
port 22 flags S/PAF
–
block out quick all
–
pass out proto { tcp icmp } to 98.1.42.69 port 1:1023 keep state
–
block in to any port 80
Désactiver le filtrage sur une interface
–
set skip on interface
Filtrage
Antispoofing
●
●
Protection contre les paquets non légitimes/illogiques
●
Syntaxe
●
●
Exemple (em0 : 192.168.1.1/24)
●
●
antispoof [log] [quick] for interface [af]
antispoof log for em0
Interprétation
●
Block in on !fxp0 from 192.168.1.0/24
●
Block in from 192.168.1.1
Grouper pour mieux administrer
●
Listes
–
{ el1, el2, el3 }
–
IP { 10.4.5.1, 17.91.255.1, 26.9.0.98 }
–
Réseaux { 145.90.65.0/24, 10.0.45.0/16 }
–
Ports { smtp, 465, 587, 10:21, <1024 }
–
Protocoles { tcp, udp, icmp, pfsync, carp }
Nommer pour mieux retrouver
●
Macros
–
Interfaces : ext_if = « bnx0 »
–
Ports : smtp_port = « 25 »
–
IP : Webserver = « 88.191.2.10 »
–
Listes : smtp_ports = « { 25, 465, 587 } »
–
Inclusions complexes :
webserver_pub = { 143.10.78.1/26, 18.5.6.98 }
webserver_priv = { 192.168.1.0/24, 10.0.0.0/25 }
webservers = { $webserver_pub $webserver_priv
45.9.4.63 }
Optimiser et dynamiser
Tables
●
●
Adresses IPv4 et/ou IPv6 uniquement
●
Amélioration des performances de recherche
●
Dynamisme
●
Syntaxe
table <nom> (attr) { 10.10.0.0/16, 196.103.202.4 }
●
●
Attributs
●
const : non modifiable
●
persist : en mémoire
Utilisation
block quick from { <noobs>, <devs> }
Optimiser et dynamiser
Tables
●
●
Interactions via pfctl
●
pfctl -t noobs -T add 8.8.8.8
●
pfctl -t devs -T delete 9.154.0.0/18
●
Pfctl -t noobs -T show
NAT et redirection de ports
●
NAT (PAT)
–
Pass out from sth to sth nat-to (iface)
●
NAT (1-1)
●
NAT (pool)
●
Redirection de ports
–
Pass out from sth to sth rdr-to ip:port
Bonnes pratiques
Factoriser
●
●
Évite les doublons
●
Accélère la recherche
Mettre de l'ordre
●
●
Macros, Tables
●
Options
●
Normalisation
●
QoS
●
Translation
●
Filtrage
PFlog
●
Moniteur de paquets
block in log all
●
Interface réseau virtuelle
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33152
priority: 0
groups: pflog
●
Utilisation :
–
tcpdump -nni pflog0
Partie III
Aller plus loin
Firewall redondé
●
CARP
–
Common Address Redundancy Protocol
–
Adressage IP virtuel
–
Master Slave / Balancing
–
Interface réseau virtuelle
–
Règles d'or
●
VHID
●
Priorité
●
Mot de passe
●
Demote
Firewall redondé
Création de l'interface
●
●
ifconfig carp0 create
Configuration
●
●
ifconfig carp0 carpdev em0 vhid 50 advskew 0
●
ifconfig carp0 192.168.1.10/24
Un peu de sécurité
●
●
ifconfig carp0 pass <pwd>
●
ifconfig carp0 carppeer A.B.C.D
Firewall redondé
Carpdemote
●
●
Peut être modifié par PF et d'autres services
●
Définit un niveau fonctionnel de la machine
●
Incrémenté en cas d'erreur critique
●
Prioritaire sur tout le reste
●
Commandes :
●
●
Ifconfig -g carp
●
Ifconfig -g carp carpdemote 20
Utilisé au démarrage de la machine
Firewall redondé
PFSync
●
●
●
Synchronisation d'états (protocole PFSync)
Interface virtuelle
●
ifconfig pfsync0 syncdev em0
Optimisations fines (PF)
●
●
set limit option valeur
–
frags (5000)
–
src-nodes (10000)
–
states (10000)
–
tables (1000)
–
table-entries (200000)
set optimization option
–
normal (par défaut)
–
high-latency (systèmes satellites...)
–
aggressive (réduction mémoire)
–
conservative (réduction mémoire mais CPU)
Optimisations fines (PF)
●
set state-policy option
–
if-bound : lié à l'interface
–
floating : non lié (défaut)
Optimisations fines
(Noyau)
●
●
Mémoire
–
Une plus grosse part de gâteau
–
Kern.bufcachepercent=20
Ifqueue
–
File d'attente digne d'un Apple Store
–
net.inet.ip.ifq.maxlen=256
–
Eviter la congestion (débit très élevé)
–
net.inet.ip.ifq.len > 0
Des questions ?
Contact :
[email protected]
@Unix_XP
Site: http://www.unix-experience.fr
+Loïc Blot

Documents pareils