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:
- refus par défaut et l'autorisation par défaut:
- le refus par défaut bloque tout le trafic et n'autorise que ce qui est spécifié dans une règle.
- 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.
- block : block le trafic
- pass : laisse passer le trafic
- match : exécute une action sur un paquet lorsqu'elle trouve un critère de correspondance
- block all : bloque le trafic dans les deux sens
- block in all : bloque tout le trafic en entrée
- block out all : bloque tout le trafic en sortie
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
