Pare-feuVoici le troisième article dans la série sur le système de pare-feu FirewallD. Dans nos deux précédents articles, nous avons configuré FirewallD sur un serveur simple et sur un routeur dans le réseau local. Aujourd’hui nous allons nous intéresser de plus près à la configuration de FirewallD sur un serveur dédié dans un datacenter.

État des lieux

Dans le réseau de mon entreprise, la machine alphajet.microlinux.fr est un serveur dédié muni d’une installation de CentOS 7. Elle héberge entre autres choses la page que vous êtes en train de lire et dispose actuellement d’un pare-feu géré par un script iptables.

Avant de supprimer ce pare-feu « fait maison », j’affiche les règles en vigueur et je prends note des différents services autorisés.

  • DNS
  • HTTP
  • HTTPS
  • SMTP
  • SMTPS
  • IMAP
  • IMAPS
  • XMPP

Installation et mise en service

Je désactive le pare-feu « fait maison ».

$ sudo systemctl stop iptables
$ sudo yum remove iptables-services

J’installe le paquet firewalld.

$ sudo yum install firewalld

J’active et je lance le service correspondant.

$ sudo systemctl enable firewalld --now

J’affiche l’état du pare-feu.

$ sudo firewall-cmd --state
running

Utiliser la zone par défaut

Le serveur dispose d’une interface réseau eth0 avec une ouverture frontale sur Internet.

$ nmcli con show
NAME  UUID                                  TYPE      DEVICE 
WAN   f1f2025e-dbed-3596-b314-371972966e30  ethernet  eth0

Dans la configuration par défaut, cette interface est associée à la zone public. Rappelons ici que les « zones » de FirewallD représentent une collection de règles de pare-feu adaptées à un certain contexte.

$ firewall-cmd --get-active-zones
public
  interfaces: eth0

La zone public est parfaitement adaptée à un serveur dédié. Nous allons donc la conserver. Pour plus de clarté, nous allons même l’inscrire explicitement dans la configuration de l’interface réseau.

$ echo "ZONE=public" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-WAN

Afficher les services autorisés

J’affiche la configuration de la zone.

$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

Supprimer un service prédéfini

Je peux sereinement me débarrasser de dhcpv6-client pour ne garder que le seul service ssh.

$ sudo firewall-cmd --permanent --remove-service=dhcpv6-client
success
$ sudo firewall-cmd --reload
success

Afficher les services disponibles

J’affiche la liste complète des services disponibles et je repère ceux qui m’intéressent.

$ firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula
bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph
ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns
docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client
etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust
ftp ganglia-client ganglia-master git gre high-availability http https imap
imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos
kibana klogin kpasswd kprop kshell ldap ldaps libvirt libvirt-tls
lightning-network llmnr managesieve matrix mdns 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 proxy-dhcp ptp pulseaudio puppetmaster
quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client
samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap
spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui
synergy syslog syslog-tls telnet tftp tftp-client 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

Autoriser les services nécessaires

J’autorise les services dns, http, https, smtp, smtps, imap, imaps et xmpp-client. Étant donné qu’il s’agit de la zone public définie par défaut, ce n’est pas le peine de la préciser explicitement.

$ sudo firewall-cmd --permanent --add-service=dns
success
$ sudo firewall-cmd --permanent --add-service=http
success
$ sudo firewall-cmd --permanent --add-service=https
success
$ sudo firewall-cmd --permanent --add-service=smtp
success
$ sudo firewall-cmd --permanent --add-service=smtps
success
$ sudo firewall-cmd --permanent --add-service=imap
success
$ sudo firewall-cmd --permanent --add-service=imaps
success
$ sudo firewall-cmd --permanent --add-service=xmpp-client
success
$ sudo firewall-cmd --reload
success

J’affiche le résultat de l’opération.

$ sudo firewall-cmd --list-services
dns http https imap imaps smtp smtps ssh xmpp-client

Et maintenant ?

Mon serveur dédié dispose désormais d’un pare-feu avec une configuration raisonnablement saine. Pour compléter la configuration, j’intègre Fail2ban pour le protéger contre les attaques par force brute.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.