Voici 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.