Le wiki de Mickaël

Informatique, logiciels libres et GNU/Linux...

Outils pour utilisateurs

Outils du site


securite:configurer-firewalld

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
securite:configurer-firewalld [15/04/2020 18:49]
mickaël
securite:configurer-firewalld [15/04/2020 18:51] (Version actuelle)
mickaël
Ligne 1: Ligne 1:
 +====== Configurer FirewallD ======
  
 +===== Introduction =====
 +
 +Depuis CentOS 7, Red Hat Enterprise Linux 7 (RHEL 7), Fedora 18, [[https://​firewalld.org/​|FirewallD]] ( Dynamic Firewall Manager ) a remplacé le pare-feu IPTables. ​
 +
 +Celui-ci peut être configuré de manière graphique avec [[https://​firewalld.org/​documentation/​utilities/​firewall-config.html|firewall-config]],​ à l'aide des fichiers de configurations contenus dans /​usr/​lib/​firewalld et /​etc/​firewalld ou bien en lignes de commandes avec [[https://​firewalld.org/​documentation/​man-pages/​firewall-cmd.html|firewall-cmd]].
 +
 +<WRAP left round info >
 +Les possibilités de configuration de FirewallD sont nombreuses....
 +
 +Cet article présente les notions de base de la configuration de FirewallD... \\
 +</​WRAP>​\\ \\ \\ \\ \\ \\ 
 +
 +===== Vérifier la version de FirewallD =====
 +
 +Je vérifie dans un premier temps quelle est la version de FirewallD.
 +
 +<​code>​[mickael@srvcentos ~]$ cat /​etc/​centos-release
 +CentOS Linux release 8.1.1911 (Core) ​
 +[mickael@srvcentos ~]$ rpm -qa | grep firewalld
 +firewalld-0.7.0-5.el8.noarch
 +firewalld-filesystem-0.7.0-5.el8.noarch
 +[mickael@srvcentos ~]$ sudo firewall-cmd -V
 +0.7.0
 +</​code>​
 +
 +===== Vérifier le statut du service FirewallD =====
 +
 +Par défaut FirewallD est lancé automatiquement au démarrage du système.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo systemctl is-enabled firewalld
 +enabled
 +</​code>​
 +
 +Pour vérifier si FirewallD est actif.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo systemctl status firewalld
 +● firewalld.service - firewalld - dynamic firewall daemon
 +   ​Loaded:​ loaded (/​usr/​lib/​systemd/​system/​firewalld.service;​ enabled; vendor preset: enabled)
 +   ​Active:​ active (running) since Thu 2020-04-09 22:22:39 CEST; 20min ago
 +     Docs: man:​firewalld(1)
 + Main PID: 1545 (firewalld)
 +    Tasks: 2 (limit: 6074)
 +   ​Memory:​ 22.9M
 +   ​CGroup:​ /​system.slice/​firewalld.service
 +           ​└─1545 /​usr/​libexec/​platform-python -s /​usr/​sbin/​firewalld --nofork --nopid
 +
 +avril 09 22:22:39 srvcentos.tux.lan systemd[1]: Starting firewalld - dynamic firewall daemon...
 +avril 09 22:22:39 srvcentos.tux.lan systemd[1]: Started firewalld - dynamic firewall daemon.
 +[mickael@srvcentos ~]$ sudo firewall-cmd --state
 +running
 +
 +</​code>​
 +
 +===== Arrêter/​démarrer FirewallD =====
 +
 +Pour arrêter/​démarrer le service. ​
 +
 +<​code>​[mickael@srvcentos ~]$ sudo systemctl stop firewalld
 +[mickael@srvcentos ~]$ sudo systemctl is-active firewalld
 +inactive
 +[mickael@srvcentos ~]$ sudo systemctl start firewalld
 +[mickael@srvcentos ~]$ sudo systemctl is-active firewalld
 +active</​code>​
 +
 +===== Désactiver/​activer FirewallD au démarrage du système =====
 +
 +Pour désactiver/​activer le service au démarrage du système.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo systemctl disable firewalld
 +Removed /​etc/​systemd/​system/​multi-user.target.wants/​firewalld.service.
 +Removed /​etc/​systemd/​system/​dbus-org.fedoraproject.FirewallD1.service.
 +[mickael@srvcentos ~]$ sudo systemctl is-enabled firewalld
 +disabled
 +[mickael@srvcentos ~]$ sudo systemctl enable firewalld
 +Created symlink /​etc/​systemd/​system/​dbus-org.fedoraproject.FirewallD1.service → /​usr/​lib/​systemd/​system/​firewalld.service.
 +Created symlink /​etc/​systemd/​system/​multi-user.target.wants/​firewalld.service → /​usr/​lib/​systemd/​system/​firewalld.service.
 +[mickael@srvcentos ~]$ sudo systemctl is-enabled firewalld
 +enabled
 +</​code>​
 +
 +<WRAP left round info >
 +Après toute modification,​ il faudra recharger FirewallD pour que les modifications soient prises en compte.
 +
 +Pour cela il faudra utiliser la commande : **firewall-cmd - -reload**\\
 +</​WRAP>​\\ \\ \\ \\ \\ \\ 
 +
 +<WRAP left round info >
 +Si vous souhaitez que vos paramétrages ne soient pas perdus au redémarrage du service ou du système, il faudra rendre la configuration permanente.
 +
 +Pour cela il faudra utiliser le paramètre : ** - -permanent**\\
 +</​WRAP>​\\ \\ \\ \\ \\ \\ 
 +
 +[[https://​firewalld.org/​documentation/​man-pages/​firewall-cmd.html|Documentation firewall-cmd]]
 +
 +===== Gérer les zones =====
 +
 +FirewallD fonctionne sur un système de zones et catégorise tout le trafic entrant dans celles-ci.
 +
 +Chaque zone a son propre ensemble de règles en fonction desquelles elle accepte ou refuse le trafic entrant.
 +
 +==== Zone par défaut ====
 +
 +FirewallD utilise par défaut la zone **public**. ​
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --get-default-zone
 +public</​code>​
 +
 +==== Définir une autre zone par défaut ====
 +
 +Pour définir une autre zone par défaut :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --set-default-zone=work
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --get-default-zone
 +work
 +</​code>​
 +
 +==== Définir une autre zone à une interface ====
 +  ​
 +Pour définir une autre zone à une interface ( si plusieurs interfaces sont actives ) tout en gardant la zone par défaut :
 +
 +<​code>​[mickael@srvcentos ~]$  sudo firewall-cmd --get-active-zones ​
 +public
 +  interfaces: enp0s3 enp0s8
 +[mickael@srvcentos ~]$ sudo firewall-cmd --zone=dmz --permanent --change-interface=enp0s8
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$  sudo firewall-cmd --get-active-zones ​
 +dmz
 +  interfaces: enp0s8
 +public
 +  interfaces: enp0s3
 +[mickael@srvcentos ~]$  sudo firewall-cmd --get-default-zone ​
 +public
 +</​code>​
 +
 +==== Lister les différentes zones disponibles ====
 +
 +Pour lister les différentes zones disponibles :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --get-zones ​
 +block dmz drop external home internal public trusted work</​code>​
 +
 +
 +  * **block** : toutes les connexions entrantes sont rejetées avec un message icmp-host-prohibited pour IPv4 et icmp6-adm-prohibited pour IPv6. Seules les connexions sortantes sont autorisées.
 +  * **dmz** : utilisé pour les ordinateurs situés dans votre zone démilitarisée qui ont un accès limité au reste de votre réseau. Seules les connexions entrantes sélectionnées sont autorisées.
 +  * **drop** : toutes les connexions entrantes sont abandonnées sans aucune notification. Seules les connexions sortantes sont autorisées.
 +  * **external** : pour une utilisation sur des réseaux externes avec le masquage NAT activé lorsque votre système agit comme une passerelle ou un routeur. Seules les connexions entrantes sélectionnées sont autorisées.
 +  * **home** : utilisé pour les machines domestiques. Les autres ordinateurs du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
 +  * **internal** : pour une utilisation sur les réseaux internes lorsque votre système agit comme une passerelle ou un routeur. Les autres systèmes du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
 +  * **public** : pour une utilisation dans les zones publiques non fiables. Vous ne faites pas confiance aux autres ordinateurs du réseau, mais vous pouvez autoriser certaines connexions entrantes.
 +  * **trusted** : toutes les connexions réseau sont acceptées.Vous faites confiance à tous les ordinateurs du réseau.
 +  * **work** : utilisé pour les machines de travail. Les autres ordinateurs du réseau sont généralement fiables. Seules les connexions entrantes sélectionnées sont autorisées.
 +
 +==== Lister les zones actives et les interfaces qui leur sont attribuées====
 +
 +Pour lister les zones actives et les interfaces qui leur sont attribuées :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --get-active-zones ​
 +dmz
 +  interfaces: enp0s8
 +public
 +  interfaces: enp0s3
 +</​code>​
 +  ​
 +==== Lister les règles associées à la zone par défaut ====
 +
 +Pour lister les règles associées à la zone par défaut :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s3
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +</​code> ​
 +  ​
 +==== Lister les règles associées à une zone précise ====
 +
 +Pour lister les règles associées à une zone précise :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --zone=dmz --list-all
 +dmz (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s8
 +  sources: ​
 +  services: ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +</​code> ​
 +   ​
 +==== Lister les règles associées à toutes les zones ====
 +
 +Pour lister les règles associées à toutes les zones :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-all-zones
 +block
 +  target: %%REJECT%%
 +  icmp-block-inversion:​ no
 +  interfaces: ​
 +  sources: ​
 +  services: ​
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +
 +dmz (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s8
 +  sources: ​
 +  services: ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +
 +drop
 +  target: DROP
 +  icmp-block-inversion:​ no
 +  interfaces: ​
 +  sources: ​
 +  services: ​
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +.....</​code> ​
 +
 +===== Gérer les services =====
 +
 +==== Lister les services supportés ====
 +
 +Pour lister les services supportés :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --get-services
 +RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp
 +bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit ​
 +condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm ​
 +dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps ​
 +freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git grafana gre high-availability ​
 +http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos ​
 +kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix ​
 +mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nfs nfs3 nmea-0183 nrpe 
 +ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 
 +pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel ​
 +rpc-bind rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp 
 +snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy ​
 +syslog syslog-tls telnet tentacle tftp tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm 
 +vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server</​code>​
 +
 +==== Obtenir des informations sur un service ====
 +
 +Pour bbtenir des informations sur un service ( ici le service DNS )
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --info-service=dns
 +dns
 +  ports: 53/tcp 53/udp
 +  protocols: ​
 +  source-ports: ​
 +  modules: ​
 +  destination: ​
 +  includes:</​code>​
 +
 +==== Lister les services autorisés dans une zone ====
 +
 +Pour Lister les services autorisés dans une zone :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-services --zone home
 +cockpit dhcpv6-client mdns samba-client ssh</​code>​
 +
 +Si la zone n'est pas précisée, alors la commande s'​effectuera sur la zone par défaut.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-services ​
 +cockpit dhcpv6-client ssh</​code>​
 +
 +==== Ajouter un service ====
 +
 +Je souhaite ici accéder à une page HTML. 
 +
 +L'​accès à ma page est impossible...
 +
 +<​code>​mickael@xubuntu-mickael:​~$ lynx -dump 192.168.0.7
 +
 +Recherche 192.168.0.7
 +Connexion HTTP à 192.168.0.7
 +Alerte ! : Impossible d’établir une connexion à l’hôte distant.
 +
 +lynx : accès impossible au fichier de départ http://​192.168.0.7/</​code>​
 +
 +J'​autorise le trafic HTTP entrant de manière permanente pour l'​interface située dans la zone « public ». 
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone=public --add-service=http
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --zone=public --list-services
 +cockpit dhcpv6-client http ssh</​code>​
 +
 +Si la zone n'est pas précisée, la commande s'​effectuera alors sur la zone par défaut.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --add-service=http
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-services
 +cockpit dhcpv6-client http ssh
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s3
 +  sources: ​
 +  services: cockpit dhcpv6-client http ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules:
 +</​code>​
 +
 +Je tente à nouveau d'​accéder à ma page HTML et celle-ci s'​affiche...
 +
 +<​code>​mickael@xubuntu-mickael:​~$ lynx -dump 192.168.0.7
 +   ​Bienvenue sur ma page Web !</​code>​
 +
 +==== Supprimer un service ====
 +
 +Pour supprimer le service :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone=public --remove-service=http
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-services
 +cockpit dhcpv6-client ssh
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s3
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +</​code>​
 +
 +
 +===== Gérer les ports =====
 +
 +==== Lister les ports autorisés dans une zone ====
 +
 +Pour lister les ports autorisés dans une zone :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-ports --zone work
 +443/tcp 80/tcp 21/​tcp</​code>​
 +
 +Si la zone n'est pas précisée, la commande s'​effectuera alors sur la zone par défaut.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-ports ​
 +21/tcp 22/​tcp</​code>​
 +
 +==== Ajouter un port ====
 +
 +Je souhaite ici me connecter à mon serveur FTP.
 +
 +La connexion à celui-ci est impossible...
 +
 +<​code>​mickael@xubuntu-mickael:​~$ ftp 192.168.0.7
 +ftp: connect: No route to host
 +ftp> exit</​code>​
 +
 +J'​autorise le port 21/tcp de manière permanente pour l'​interface située dans la zone « public ».
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone=public --add-port=21/​tcp
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --zone=public --list-ports
 +21/tcp
 +</​code>​
 +
 +Si la zone n'est pas précisée, la commande s'​effectuera alors sur la zone par défaut.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --add-port=21/​tcp
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$  sudo firewall-cmd --list-ports
 +21/tcp
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s3
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: 21/tcp
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: </​code>​
 +
 +Je teste à nouveau la connexion à mon serveur FTP.
 +
 +La connexion fonctionne...
 +
 +<​code>​mickael@xubuntu-mickael:​~$ ftp 192.168.0.7
 +Connected to 192.168.0.7.
 +220 (vsFTPd 3.0.3)
 +Name (192.168.0.7:​mickael):​ mickael
 +331 Please specify the password.
 +Password:
 +230 Login successful.
 +Remote system type is UNIX.
 +Using binary mode to transfer files.
 +ftp> pwd
 +257 "/​home/​mickael"​ is the current directory</​code>​
 +
 +==== Supprimer un port ====
 +
 +Pour supprimer le port :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone=public --remove-port=21/​tcp
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$  sudo firewall-cmd --zone=public --list-ports
 +
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public (active)
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: enp0s3
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: </​code>​
 +  ​
 +===== Configurer des règles riches =====
 +
 +Il est possible avec FirewallD de définir des règles plus complexes. ​
 +
 +Pour cela, il faut utiliser [[https://​firewalld.org/​documentation/​man-pages/​firewalld.richlanguage.html|rich language]].
 +
 +==== Autoriser une adresse IP à accéder au service HTTP ====
 +
 +Je souhaite ici accéder à une page HTML.
 +
 +L'​accès à ma page est impossible…
 +
 +<​code>​mickael@xubuntu-mickael:​~$ hostname -I
 +192.168.0.1 ​
 +mickael@xubuntu-mickael:​~$ lynx -dump 192.168.0.7
 +
 +Recherche 192.168.0.7
 +Connexion HTTP à 192.168.0.7
 +Alerte ! : Impossible d’établir une connexion à l’hôte distant.
 +
 +lynx : accès impossible au fichier de départ http://​192.168.0.7/​
 +</​code>​
 +  ​
 +Je vais créer une règle s'​appliquant à ipv4 autorisant l'​adresse IP 192.168.0.1 à accéder au service HTTP.
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone public --add-rich-rule 'rule family="​ipv4"​ source address="​192.168.0.1"​ service name="​http"​ accept'​
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-rich-rules
 +rule family="​ipv4"​ source address="​192.168.0.1"​ service name="​http"​ accept
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: ​
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 + rule family="​ipv4"​ source address="​192.168.0.1"​ service name="​http"​ accept</​code> ​
 +
 +Je tente à nouveau d'​accéder à ma page HTML et celle-ci s'​affiche…
 +
 +<​code>​mickael@xubuntu-mickael:​~$ hostname -I
 +192.168.0.1 ​
 +mickael@xubuntu-mickael:​~$ lynx -dump 192.168.0.7
 +   ​Bienvenue sur ma page Web !
 +</​code>​
 +
 +Je tente une connexion depuis une autre adresse IP et l'​accès est impossible.
 +
 +<​code>​mickael@srvdebian:​~$ hostname -I
 +192.168.0.12 ​
 +mickael@srvdebian:​~$ lynx -dump 192.168.0.7
 +
 +Recherche 192.168.0.7
 +Connexion HTTP à 192.168.0.7
 +Alerte ! : Impossible d’établir une connexion à l’hôte distant.
 +
 +lynx : accès impossible au fichier de départ http://​192.168.0.7/​
 +</​code>​
 +
 +==== Supprimer une règle riche ====
 +
 +Pour supprimer la règle :
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone public --remove-rich-rule 'rule family="​ipv4"​ source address="​192.168.0.1"​ service name="​http"​ accept'​
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-rich-rules
 +
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: ​
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 +</​code>​
 +
 +==== Autoriser toutes les adresses IP d'un réseau à accéder au service FTP ====
 +
 +Je vais créer une règle s'​appliquant à ipv4 autorisant toutes les adresses de mon réseau à accéder au service FTP.
 +
 +La journalisation sera enregistrée dans /​var/​log/​messages avec le préfixe ​ << **Infos_FTP:​** >>
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --permanent --zone=public --add-rich-rule='​rule family=ipv4 source address=192.168.0.0/​24 service name=ftp log prefix="​Infos_FTP:"​ level="​info"​ accept' ​
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --reload
 +success
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-rich-rules
 +rule family="​ipv4"​ source address="​192.168.0.0/​24"​ service name="​ftp"​ log prefix="​Infos_FTP:"​ level="​info"​ accept
 +[mickael@srvcentos ~]$ sudo firewall-cmd --list-all
 +public
 +  target: default
 +  icmp-block-inversion:​ no
 +  interfaces: ​
 +  sources: ​
 +  services: cockpit dhcpv6-client ssh
 +  ports: ​
 +  protocols: ​
 +  masquerade: no
 +  forward-ports: ​
 +  source-ports: ​
 +  icmp-blocks: ​
 +  rich rules: ​
 + rule family="​ipv4"​ source address="​192.168.0.0/​24"​ service name="​ftp"​ log prefix="​Infos_FTP:"​ level="​info"​ accept
 +</​code>​
 +
 +<​code>​[mickael@srvcentos ~]$ sudo grep "​Infos_FTP:"​ /​var/​log/​messages ​
 +Apr 14 22:39:09 srvcentos kernel: Infos_FTP:​IN=enp0s3 OUT= MAC=08:​00:​27:​d8:​3d:​b9:​08:​00:​27:​fb:​02:​2a:​08:​00 SRC=192.168.0.12 DST=192.168.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=5908 DF PROTO=TCP SPT=40138 DPT=21 WINDOW=64240 RES=0x00 SYN URGP=0 ​
 +Apr 14 22:39:28 srvcentos kernel: Infos_FTP:​IN=enp0s3 OUT= MAC=08:​00:​27:​d8:​3d:​b9:​2c:​27:​d7:​32:​b9:​6d:​08:​00 SRC=192.168.0.1 DST=192.168.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=52614 DF PROTO=TCP SPT=41882 DPT=21 WINDOW=64240 RES=0x00 SYN URGP=0 ​
 +Apr 14 22:39:42 srvcentos kernel: Infos_FTP:​IN=enp0s3 OUT= MAC=08:​00:​27:​d8:​3d:​b9:​08:​00:​27:​fb:​02:​2a:​08:​00 SRC=192.168.0.12 DST=192.168.0.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=55497 DF PROTO=TCP SPT=40140 DPT=21 WINDOW=64240 RES=0x00 SYN URGP=0 ​
 +</​code> ​
 +
 +==== Afficher la liste des règles riches ====
 +
 +Pour afficher la liste des règles riches : 
 +
 +<​code>​[mickael@srvcentos ~]$ sudo firewall-cmd --list-rich-rules
 +rule family="​ipv4"​ source address="​192.168.0.0/​24"​ service name="​ftp"​ log prefix="​Infos_FTP:"​ level="​notice"​ accept
 +rule family="​ipv4"​ source address="​192.168.0.1"​ service name="​http"​ accept</​code>​
 +
 +
 +===== Fichiers de configuration de FirewallD =====
 +
 +Les fichiers de configuration de FirewallD sont situés dans :
 +
 +  * **/​etc/​firewalld** qui contient toute la configuration effectuée par les utilisateurs.
 +  * **/​usr/​lib/​firewalld** qui contient les fichiers de configuration par défaut.
 +
 +Si un fichier de configuration du même nom est stocké dans les deux emplacements,​ ce sera la version située dans /​etc/​firewalld qui sera utilisée.
 +
 +Si un des fichiers est modifié dans dans /​usr/​lib/​firewalld,​ il faudra le copier dans /​etc/​firewalld au risque de voir celui-ci être écrasé lors d'une mise à jour de FirewallD.
 +
 +<​code>​[root@srvcentos ~]# cd /​usr/​lib/​firewalld/​
 +[root@srvcentos firewalld]# ls -l
 +total 16
 +drwxr-xr-x. 2 root root  224  1 févr. 21:16 helpers
 +drwxr-xr-x. 2 root root 4096  1 févr. 21:16 icmptypes
 +drwxr-xr-x. 2 root root   ​20 ​ 1 févr. 21:16 ipsets
 +drwxr-xr-x. 2 root root 8192  1 févr. 21:16 services
 +drwxr-xr-x. 2 root root  163  1 févr. 21:16 zones
 +[root@srvcentos firewalld]# ls -C zones
 +block.xml ​ dmz.xml ​ drop.xml ​ external.xml ​ home.xml ​ internal.xml ​ public.xml ​ trusted.xml ​ work.xml</​code>​
 +
 +<​code>​[root@srvcentos ~]# cd /​etc/​firewalld
 +[root@srvcentos firewalld]# ls -l
 +total 8
 +-rw-r--r--. 1 root root 2528  8 nov.  17:48 firewalld.conf
 +drwxr-x---. 2 root root    6  8 nov.  17:48 helpers
 +drwxr-x---. 2 root root    6  8 nov.  17:48 icmptypes
 +drwxr-x---. 2 root root    6  8 nov.  17:48 ipsets
 +-rw-r--r--. 1 root root  283  8 nov.  17:48 lockdown-whitelist.xml
 +drwxr-x---. 2 root root    6  8 nov.  17:48 services
 +drwxr-x---. 2 root root   ​46 ​ 8 nov.  17:48 zones</​code>​
 +
 +
 +Dans le répertoire /​etc/​firewalld se situe le fichier firewalld.conf qui reprend toute la configuration générale de FirewallD. ​
 +
 +<​code>#​ firewalld config file
 +
 +# default zone
 +# The default zone used if an empty zone string is used.
 +# Default: public
 +DefaultZone=public
 +
 +# Clean up on exit
 +# If set to no or false the firewall configuration will not get cleaned up
 +# on exit or stop of firewalld
 +# Default: yes
 +CleanupOnExit=yes
 +
 +# Lockdown
 +# If set to enabled, firewall changes with the D-Bus interface will be limited
 +# to applications that are listed in the lockdown whitelist.
 +# The lockdown whitelist file is lockdown-whitelist.xml
 +# Default: no
 +Lockdown=no
 +
 +# IPv6_rpfilter
 +# Performs a reverse path filter test on a packet for IPv6. If a reply to the
 +# packet would be sent via the same interface that the packet arrived on, the 
 +# packet will match and be accepted, otherwise dropped.
 +# The rp_filter for IPv4 is controlled using sysctl.
 +# Default: yes
 +IPv6_rpfilter=yes
 +
 +# IndividualCalls
 +# Do not use combined -restore calls, but individual calls. This increases the
 +# time that is needed to apply changes and to start the daemon, but is good for
 +# debugging.
 +# Default: no
 +IndividualCalls=no
 +
 +# LogDenied
 +# Add logging rules right before reject and drop rules in the INPUT, FORWARD
 +# and OUTPUT chains for the default rules and also final reject and drop rules
 +# in zones. Possible values are: all, unicast, broadcast, multicast and off.
 +# Default: off
 +LogDenied=off
 +.....</​code>​
 +
 +Si on observe le contenu, du fichier public.xml situé dans le répertoire zones, on observe que celui-ci contient toutes les règles que j'ai configuré.  ​
 +<​code>​[root@srvcentos ~]# cd /​etc/​firewalld
 +[root@srvcentos firewalld]# ls -l
 +total 8
 +-rw-r--r--. 1 root root 2528  8 nov.  17:48 firewalld.conf
 +drwxr-x---. 2 root root    6  8 nov.  17:48 helpers
 +drwxr-x---. 2 root root    6  8 nov.  17:48 icmptypes
 +drwxr-x---. 2 root root    6  8 nov.  17:48 ipsets
 +-rw-r--r--. 1 root root  283  8 nov.  17:48 lockdown-whitelist.xml
 +drwxr-x---. 2 root root    6  8 nov.  17:48 services
 +drwxr-x---. 2 root root   24 15 avril 11:50 zones
 +[root@srvcentos firewalld]# cd zones
 +[root@srvcentos zones]# ls -l
 +total 4
 +-rw-r--r--. 1 root root 611 14 avril 22:51 public.xml
 +[root@srvcentos zones]# cat public.xml
 +<?xml version="​1.0"​ encoding="​utf-8"?>​
 +<​zone>​
 +  <​short>​Public</​short>​
 +  <​description>​For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</​description>​
 +  <service name="​ssh"/>​
 +  <service name="​dhcpv6-client"/>​
 +  <service name="​cockpit"/>​
 +  <rule family="​ipv4">​
 +    <source address="​192.168.0.0/​24"/>​
 +    <service name="​ftp"/>​
 +    <log prefix="​Infos_FTP:"​ level="​notice"/>​
 +    <​accept/>​
 +  </​rule>​
 +  <rule family="​ipv4">​
 +    <source address="​192.168.0.1"/>​
 +    <service name="​http"/>​
 +    <​accept/>​
 +  </​rule>​
 +</​zone>​
 +</​code>​
 +
 +
 +===== Logs FirewallD =====
 +
 +Selon le niveau de [[https://​firewalld.org/​documentation/​howto/​debug-firewalld.html|debug]] que vous aurez paramétré,​ vous pourrez consulter les logs dans /var/log.
 +
 +<​code>​[mickael@srvcentos ~]$ cd /var/log
 +[mickael@srvcentos log]$ sudo cat firewalld | head -20
 +2020-02-01 21:17:04 ERROR: Failed to load firewalld.conf file '/​etc/​firewalld/​firewalld.conf':​ int() argument must be a string, a bytes-like object or a number, not '​NoneType'​
 +2020-02-01 21:17:04 ERROR: Failed to load service file '​RH-Satellite-6.xml':​ PARSE_ERROR:​ Unexpected element include
 +2020-02-01 21:17:04 ERROR: Failed to load service file '​freeipa-4.xml':​ PARSE_ERROR:​ Unexpected element include
 +2020-04-14 18:18:12 ERROR: INVALID_RULE:​ '​source'​ outside of rule. Use 'rule ... source ...'.
 +2020-04-14 18:19:46 ERROR: INVALID_RULE:​ '​source'​ outside of rule. Use 'rule ... source ...'.
 +2020-04-14 22:07:20 WARNING: NOT_ENABLED:​ rule family="​ipv4"​ source address="​192.168.0.0/​24"​ port port=21 protocol=tcp limit value="​2/​h"​ accept
 +2020-04-14 22:27:40 WARNING: NOT_ENABLED:​ rule family=ipv4 source address=192.168.0.0/​24 service name=ftp log prefix=”Infos_FTP” level="​info"​ accept
 +2020-04-14 22:28:12 WARNING: NOT_ENABLED:​ rule family=ipv4 source address=192.168.0.0/​24 service name=ftp log prefix=”Infos_FTP” level="​info"​ accept
 +2020-04-15 17:50:58 DEBUG2: <class '​firewall.core.ipXtables.ip4tables'>:​ /​usr/​sbin/​iptables will be using -w10 option.
 +2020-04-15 17:50:58 DEBUG2: <class '​firewall.core.ipXtables.ip4tables'>:​ /​usr/​sbin/​iptables-restore will be using -w option.
 +2020-04-15 17:50:58 DEBUG2: <class '​firewall.core.ipXtables.ip6tables'>:​ /​usr/​sbin/​ip6tables will be using -w10 option.
 +2020-04-15 17:50:58 DEBUG2: <class '​firewall.core.ipXtables.ip6tables'>:​ /​usr/​sbin/​ip6tables-restore will be using -w option.
 +2020-04-15 17:50:58 DEBUG2: <class '​firewall.core.ebtables.ebtables'>:​ /​usr/​sbin/​ebtables-restore /​run/​firewalld/​temp.jy0_pzvz:​ 0
 +2020-04-15 17:50:58 DEBUG1: start()
 +2020-04-15 17:50:58 DEBUG1: Loading firewalld config file '/​etc/​firewalld/​firewalld.conf'​
 +2020-04-15 17:50:58 DEBUG1: CleanupOnExit is set to '​True'​
 +2020-04-15 17:50:58 DEBUG1: IPv6 rpfilter is enabled
 +2020-04-15 17:50:58 DEBUG1: LogDenied is set to '​off'​
 +2020-04-15 17:50:58 DEBUG1: AutomaticHelpers is set to '​system'​
 +2020-04-15 17:50:58 DEBUG1: FirewallBackend is set to '​nftables'​
 +</​code>​
 + 
securite/configurer-firewalld.txt · Dernière modification: 15/04/2020 18:51 par mickaël

Outils de la page