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