Table des matières

Packet Filter



Services Réseaux

OpenBSD PF - User's Guide
PF : Le Filtre de Paquets d'OpenBSD
Comment configurer le filtre de paquets (PF) sur FreeBSD 12.1
PF : Options de Fonctionnement


Contrôle

Après le démarrage, PF peut être contrôlé grâce au programme pfctl( 8 ). Voici des exemples de commandes :

     # pfctl -f /etc/pf.conf     Charge le fichier pf.conf
     # pfctl -nf /etc/pf.conf    Analyse le fichier mais ne le charge pas
     # pfctl -Nf /etc/pf.conf    Charge uniquement les règles NAT à partir du fichier
     # pfctl -Rf /etc/pf.conf    Charge uniquement les règles de filtrage à partir du fichier
 
     # pfctl -sn                 Affiche les règles NAT actuelles 
     # pfctl -sr                 Affiche les règles de filtrage actuelles
     # pfctl -ss                 Affiche la table d'état actuelle
     # pfctl -si                 Affiche les statistiques et les compteurs de filtrage
     # pfctl -sa                 Affiche TOUT ce qu'on est capable d'afficher


Faire une prise d'empreinte du système avec nmap -A

nmap -A 192.168.1.12
 
Starting Nmap 7.60 ( https://nmap.org ) at 2020-05-12 12:45 CEST
Nmap scan report for panoramix.home.lan (192.168.1.12)
Host is up (0.00035s latency).
Not shown: 989 closed ports
PORT      STATE SERVICE     VERSION
21/tcp    open  ftp         Pure-FTPd
| ssl-cert: Subject: commonName=nuxbsd.duckdns.org/organizationName=NuxBSD/stateOrProvinceName=Liege/countryName=BE
| Not valid before: 2020-04-30T17:30:25
|_Not valid after:  2020-05-30T17:30:25
|_ssl-date: TLS randomness does not represent time
22/tcp    open  ssh         OpenSSH 7.8 (FreeBSD 20180909; protocol 2.0)
| ssh-hostkey: 
|   2048 48:83:e6:d8:97:d6:a4:07:1a:21:5f:32:22:e6:0b:3e (RSA)
|   256 84:61:d3:e9:cd:8e:9e:39:d4:fa:a9:4c:46:e2:4e:1d (ECDSA)
|_  256 f7:93:2f:11:5c:d0:aa:70:5e:f0:d3:8a:a3:dc:6b:84 (EdDSA)
80/tcp    open  http        Apache httpd
|_http-server-header: Apache
|_http-title: PanoramiX
111/tcp   open  rpcbind     2-4 (RPC #100000)
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/7  rpcbind
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100003  2,3         2049/tcp  nfs
|   100003  2,3         2049/udp  nfs
|   100005  1,3          993/tcp  mountd
|_  100005  1,3          993/udp  mountd
139/tcp   open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
443/tcp   open  ssl/http    Apache httpd (PHP 7.4.5)
|_http-generator: DokuWiki
|_http-server-header: Apache
| http-title: start [NuxBsD : Free Infos Linux & BSD]
|_Requested resource was doku.php
| ssl-cert: Subject: commonName=nuxbsd.duckdns.org
| Subject Alternative Name: DNS:nuxbsd.duckdns.org, DNS:www.nuxbsd.duckdns.org
| Not valid before: 2020-05-05T20:17:47
|_Not valid after:  2020-08-03T20:17:47
445/tcp   open  netbios-ssn Samba smbd 4.10.14 (workgroup: WORKGROUP)
993/tcp   open  mountd      1-3 (RPC #100005)
2049/tcp  open  nfs         2-3 (RPC #100003)
3306/tcp  open  mysql?
| fingerprint-strings: 
|   DNSStatusRequest, DNSVersionBindReq, FourOhFourRequest, GenericLines, GetRequest, HTTPOptions, Help, Kerberos, NULL, RPCCheck, RTSPRequest, SMBProgNeg, SSLSessionReq, TLSSessionReq, X11Probe: 
|_    Host '192.168.1.20' is not allowed to connect to this MariaDB server
10000/tcp open  http        MiniServ 1.941 (Webmin httpd)
|_http-server-header: MiniServ/1.941
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port3306-TCP:V=7.60%I=7%D=5/12%Time=5EBA7EA4%P=x86_64-pc-linux-gnu%r(NU
SF:LL,4B,"G\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allo
SF:wed\x20to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(GenericLine
SF:s,4B,"G\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allow
SF:ed\x20to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(GetRequest,4
SF:B,"G\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\
SF:x20to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(HTTPOptions,4B,
SF:"G\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x2
SF:0to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(RTSPRequest,4B,"G
SF:\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20t
SF:o\x20connect\x20to\x20this\x20MariaDB\x20server")%r(RPCCheck,4B,"G\0\0\
SF:x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20
SF:connect\x20to\x20this\x20MariaDB\x20server")%r(DNSVersionBindReq,4B,"G\
SF:0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to
SF:\x20connect\x20to\x20this\x20MariaDB\x20server")%r(DNSStatusRequest,4B,
SF:"G\0\0\x01\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x2
SF:0to\x20connect\x20to\x20this\x20MariaDB\x20server")%r(Help,4B,"G\0\0\x0
SF:1\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20co
SF:nnect\x20to\x20this\x20MariaDB\x20server")%r(SSLSessionReq,4B,"G\0\0\x0
SF:1\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20co
SF:nnect\x20to\x20this\x20MariaDB\x20server")%r(TLSSessionReq,4B,"G\0\0\x0
SF:1\xffj\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20co
SF:nnect\x20to\x20this\x20MariaDB\x20server")%r(Kerberos,4B,"G\0\0\x01\xff
SF:j\x04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20connect
SF:\x20to\x20this\x20MariaDB\x20server")%r(SMBProgNeg,4B,"G\0\0\x01\xffj\x
SF:04Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20connect\x2
SF:0to\x20this\x20MariaDB\x20server")%r(X11Probe,4B,"G\0\0\x01\xffj\x04Hos
SF:t\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20connect\x20to\x
SF:20this\x20MariaDB\x20server")%r(FourOhFourRequest,4B,"G\0\0\x01\xffj\x0
SF:4Host\x20'192\.168\.1\.20'\x20is\x20not\x20allowed\x20to\x20connect\x20
SF:to\x20this\x20MariaDB\x20server");
MAC Address: 00:24:8C:3F:92:27 (Asustek Computer)
No exact OS matches for host (If you know what OS is running on it, see https://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=7.60%E=4%D=5/12%OT=21%CT=1%CU=33062%PV=Y%DS=1%DC=D%G=Y%M=00248C%T
OS:M=5EBA7EFA%P=x86_64-pc-linux-gnu)SEQ(SP=FB%GCD=1%ISR=10E%TI=Z%CI=Z%TS=21
OS:)SEQ(SP=101%GCD=1%ISR=10B%TI=Z%CI=Z%II=RI%TS=21)OPS(O1=M5B4NW6ST11%O2=M5
OS:B4NW6ST11%O3=M5B4NW6NNT11%O4=M5B4NW6ST11%O5=M5B4NW6ST11%O6=M5B4ST11)WIN(
OS:W1=FFFF%W2=FFFF%W3=FFFF%W4=FFFF%W5=FFFF%W6=FFFF)ECN(R=Y%DF=Y%T=40%W=FFFF
OS:%O=M5B4NW6SLL%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R
OS:=Y%DF=Y%T=40%W=FFFF%S=O%A=S+%F=AS%O=M5B4NW6ST11%RD=0%Q=)T4(R=Y%DF=Y%T=40
OS:%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q
OS:=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=40%W=0%S=Z%A
OS:=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N%T=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%R
OS:UCK=G%RUD=G)IE(R=Y%DFI=S%T=40%CD=S)
 
Network Distance: 1 hop
Service Info: Host: PANORAMIX; OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd
 
Host script results:
|_nbstat: NetBIOS name: PANORAMIX, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown)
| smb-os-discovery: 
|   OS: Windows 6.1 (Samba 4.10.14)
|   Computer name: panoramix
|   NetBIOS computer name: PANORAMIX\x00
|   Domain name: home.lan
|   FQDN: panoramix.home.lan
|_  System time: 2020-05-12T12:47:27+02:00
| smb-security-mode: 
|   account_used: <blank>
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled but not required
| smb2-time: 
|   date: 2020-05-12 12:47:26
|_  start_date: 1601-01-01 00:17:30
 
TRACEROUTE
HOP RTT     ADDRESS
1   0.35 ms panoramix.home.lan (192.168.1.12)
 
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 174.15 seconds
nmap -sT 192.168.1.12
 
PORT      STATE SERVICE
21/tcp    open  ftp
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
139/tcp   open  netbios-ssn
443/tcp   open  https
445/tcp   open  microsoft-ds
993/tcp   open  imaps
2049/tcp  open  nfs
3306/tcp  open  mysql
10000/tcp open  snet-sensor-mgmt


nmap -sU 192.168.1.12
 
PORT      STATE SERVICE
111/udp   open          rpcbind
123/udp   open          ntp
137/udp   open          netbios-ns
138/udp   open|filtered netbios-dgm
514/udp   open|filtered syslog
2049/udp  open          nfs
10000/udp open          ndmp


1. Création de votre jeu de règles préliminaire


Il existe deux approches pour créer un pare-feu:

  1. refus par défaut et l'autorisation par défaut:
    1. le refus par défaut bloque tout le trafic et n'autorise que ce qui est spécifié dans une règle.
    2. l'autorisation par défaut fait exactement le contraire, elle passe tout le trafic et ne bloque que ce qui est spécifié dans une règle.

Ici nous allons utiliser l'approche de refus par défaut.

Les jeux de règles PF sont écrits dans un fichier de configuration nommé /etc/pf.conf, qui est également son emplacement par défaut.
Il est correct de stocker ce fichier ailleurs tant qu'il est spécifié dans le /etc/rc.conf fichier de configuration.

Ici nous allons utiliser l'emplacement par défaut.

Par défaut il n'existe pas de /etc/pf.conf, il faut le créer !

vi /etc/pf.conf 

PF filtre les paquets en fonction de trois actions fondamentales: block, pass, et match.
Lorsqu'elles sont combinées avec d'autres options, elles forment des règles.
Une action est entreprise lorsqu'un paquet répond aux critères spécifiés dans une règle.

Attention PF traite les informations de manières séquentielles, c'est à dire de haut en bas.

PF peut soit utiliser le n° de port 22 ou le nom ssh

Ouvrir le port 22 uniquement

vim /etc/pf.conf
block all				bloque tout le trafic in et out
pass in proto tcp to port 22 ou ssh	permet le trafic sur le port 22


Ouvrir le port 22 et le 53, 80, 123, 443

vim /etc/pf.conf
block all						bloque tout le trafic in et out
pass in proto tcp to port { 22 }			permet le trafic in sur 22
pass out proto { tcp udp } to port { 22 53 80 123 443 } permet le out sur 22 53 80 123 443

Ici on permet l'accès sur le port 22


Erreurs


pfctl: /dev/pf: No such file or directory

kldload pf
/etc/rc.d/pf start
kldstat




Services Réseaux