Procédure recommandée pour les nouveaux serveurs FreeBSD 12.0

introduction

Lorsque vous configurez un nouveau serveur FreeBSD, vous pouvez effectuer plusieurs étapes facultatives pour que votre serveur passe à un état plus propice à la production. Dans ce guide, nous aborderons certains des exemples les plus courants.

Nous allons mettre en place un pare-feu simple, facile à configurer, qui refuse le plus de trafic. Nous veillerons également à ce que le fuseau horaire de votre serveur reflète fidèlement son emplacement. Nous allons configurer la scrutation NTP afin de conserver l’heure du serveur et, enfin, montrer comment ajouter de l’espace de swap supplémentaire à votre serveur.

Avant de commencer à utiliser ce guide, vous devez vous connecter et configurer votre environnement shell à votre guise. Vous pouvez trouver comment faire cela en suivant this guide.

Comment configurer un pare-feu IPFW simple

La première tâche consiste à configurer un pare-feu simple pour sécuriser votre serveur.

FreeBSD prend en charge et inclut trois pare-feu distincts. Celles-ci s’appellent + pf +, + ipfw + et + ipfilter +. Dans ce guide, nous utiliserons https://www.freebsd.org/doc/handbook/firewalls-ipfw.html [+ ipfw +] comme pare-feu. + ipfw + est un pare-feu sécurisé et dynamique, écrit et maintenu dans le cadre de FreeBSD.

Configuration du pare-feu de base

La quasi-totalité de votre configuration aura lieu dans le fichier + / etc / rc.conf +. Pour modifier la configuration, vous utiliserez la commande + sysrc +, qui permet aux utilisateurs de modifier la configuration dans + / etc / rc.conf + de manière sécurisée. Dans ce fichier, vous ajouterez un certain nombre de lignes différentes pour activer et contrôler le fonctionnement du pare-feu + ipfw +. Vous allez commencer avec les règles essentielles; lancez la commande suivante pour commencer:

sudo sysrc firewall_enable="YES"

Chaque fois que vous exécutez + sysrc + pour modifier votre configuration, vous recevrez une sortie indiquant les modifications:

Outputfirewall_enable: NO -> YES

Comme vous vous en doutez, cette première commande active le pare-feu + ipfw +, en le démarrant automatiquement au démarrage et en lui permettant de démarrer avec les commandes + service + habituelles.

Maintenant, lancez ce qui suit:

sudo sysrc firewall_quiet="YES"

Ceci dit + ipfw + de ne rien exporter en sortie standard lorsqu’il effectue certaines actions. Cela peut sembler une question de préférence, mais cela affecte en fait la fonctionnalité du pare-feu.

Deux facteurs se combinent pour en faire une option importante. La première est que le script de configuration du pare-feu est exécuté dans l’environnement shell actuel et non en tâche de fond. Deuxièmement, lorsque la commande + ipfw + lit un script de configuration sans l’indicateur " quiet ", elle lit et affiche chaque ligne, à son tour, en sortie standard. Quand il sort une ligne, il * immédiatement * exécute l’action associée.

La plupart des fichiers de configuration du pare-feu effacent les règles actuelles en haut du script afin de recommencer à zéro. Si le pare-feu + ipfw + rencontre une ligne comme celle-ci sans l’indicateur de silence, il effacera immédiatement toutes les règles et reviendra à sa stratégie par défaut, qui consiste généralement à refuser toutes les connexions. Si vous configurez le pare-feu sur SSH, la connexion sera interrompue, la session shell en cours sera fermée et aucune des règles suivantes ne sera traitée, ce qui vous obligera effectivement à quitter le serveur. L’indicateur de silence permet au pare-feu de traiter les règles comme un ensemble au lieu de les implémenter individuellement.

Après ces deux lignes, vous pouvez commencer à configurer le comportement du pare-feu. Sélectionnez maintenant " poste de travail " comme type de pare-feu que vous allez configurer:

sudo sysrc firewall_type="workstation"

Cela définit le pare-feu pour protéger le serveur à partir duquel vous configurez le pare-feu à l’aide de règles avec état. Un pare-feu avec état surveille l’état des connexions réseau dans le temps et stocke les informations relatives à ces connexions en mémoire pendant une courte période. En conséquence, non seulement les règles peuvent être définies sur les connexions que le pare-feu doit autoriser, mais un pare-feu avec état peut également utiliser les données qu’il a apprises sur les connexions précédentes pour évaluer les connexions pouvant être établies.

Le fichier + / etc / rc.conf + vous permet également de personnaliser les services auxquels les clients pourront accéder en utilisant les options + firewall_myservices + et + firewall_allowservices +.

Exécutez la commande suivante pour ouvrir les ports qui devraient être accessibles sur votre serveur, tels que le port + 22 + pour votre connexion SSH et le port + 80 + pour un serveur Web HTTP classique. Si vous utilisez SSL sur votre serveur Web, veillez à ajouter le port + 443 +:

sudo sysrc firewall_myservices="22/tcp  "

L’option + firewall_myservices + est définie sur une liste de ports ou de services TCP, séparés par des espaces, qui devraient être accessibles sur votre serveur.

L’option + firewall_allowservices + répertorie les éléments qui devraient être autorisés à accéder aux services fournis. Par conséquent, cela vous permet de limiter l’accès à vos services exposés (de + firewall_myservices +) à des machines ou des plages de réseau particulières. Par exemple, cela peut être utile si vous souhaitez qu’un ordinateur héberge du contenu Web pour un réseau interne à l’entreprise. Le mot-clé " any " signifie que n’importe quelle IP peut accéder à ces services, ce qui les rend totalement publics:

sudo sysrc firewall_allowservices="any"

L’option + firewall_logdeny + demande à + ​​ipfw + de consigner toutes les tentatives de connexion refusées dans un fichier situé dans + / var / log / security +. Exécutez la commande suivante pour définir ceci:

sudo sysrc firewall_logdeny="YES"

Pour vérifier les modifications apportées à la configuration du pare-feu, exécutez la commande suivante:

grep 'firewall' /etc/rc.conf

Cette partie du fichier + / etc / rc.conf + ressemblera à ceci:

Outputfirewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22  "
firewall_allowservices="any"
firewall_logdeny="YES"

N’oubliez pas de régler l’option + firewall_myservices + pour référencer les services que vous souhaitez exposer aux clients.

Autoriser les connexions UDP (facultatif)

Les ports et services répertoriés dans l’option + firewall_myservices + dans le fichier + / etc / rc.conf + autorisent l’accès aux connexions TCP. Si vous souhaitez exposer des services qui utilisent UDP, vous devez modifier le fichier + / etc / rc.firewall +:

sudo vi /etc/rc.firewall

Vous avez configuré votre pare-feu pour utiliser le type de pare-feu " poste de travail ", cherchez donc une section qui ressemble à ceci:

/etc/rc.firewall

. . .

[Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn])

. . .

Ce bloc contient une section dédiée au traitement des valeurs + firewall_allowservices + et + firewall_myservices + que vous avez définies. Il ressemblera à ceci:

/etc/rc.firewall

for i in ${firewall_allowservices} ; do
 for j in ${firewall_myservices} ; do
   ${fwcmd} add pass tcp from $i to me $j
 done
done

Après cette section, vous pouvez ajouter tout service ou port devant accepter les paquets UDP en ajoutant des lignes comme celles-ci:

${fwcmd} add pass udp from  to me

Dans + vi +, appuyez sur + i + pour passer en mode + INSERT + et ajoutez votre contenu, puis enregistrez et fermez le fichier en appuyant sur + ESC +, en tapant +: wq + et en appuyant sur + ENTER + . Dans l’exemple précédent, vous pouvez laisser le mot-clé " any " si la connexion doit être autorisée pour tous les clients ou le remplacer par une adresse IP ou une plage de réseau spécifique. Le `+ numéro_port + + doit être remplacé par le numéro de port ou le nom du service auquel vous souhaitez autoriser l’accès UDP. Par exemple, si vous utilisez un serveur DNS, vous souhaiterez peut-être une ligne ressemblant à ceci:

for i in ${firewall_allowservices} ; do
 for j in ${firewall_myservices} ; do
   ${fwcmd} add pass tcp from $i to me $j
 done
done

${fwcmd} add pass udp from  to me

Cela permettra à tout client de la plage réseau + 192.168.2.0 / 24 + 'd’accéder à un serveur DNS fonctionnant sur le port standard + 53 + `. Notez que dans cet exemple, vous voudrez également ouvrir ce port pour les connexions TCP, car il est utilisé par les serveurs DNS pour des réponses plus longues.

Enregistrez et fermez le fichier lorsque vous avez terminé.

Démarrer le pare-feu

Lorsque vous avez terminé votre configuration, vous pouvez démarrer le pare-feu en tapant:

sudo service ipfw start

Le pare-feu démarrera correctement, bloquant le trafic indésirable tout en respectant vos services et ports autorisés. Ce pare-feu se lancera automatiquement à chaque démarrage.

Vous souhaitez également configurer une limite quant au nombre de refus par adresse IP que vous allez consigner. Cela empêchera vos journaux de se remplir d’un seul utilisateur persistant. Vous pouvez le faire dans le fichier + / etc / sysctl.conf:

sudo vi /etc/sysctl.conf

Au bas du fichier, vous pouvez limiter votre journalisation à "" 5 "` en ajoutant la ligne suivante:

/etc/sysctl.conf

...
net.inet.ip.fw.verbose_limit=5

Enregistrez et fermez le fichier lorsque vous avez terminé. Cela configurera ce paramètre au prochain démarrage.

Pour implémenter ce même comportement pour votre session active sans redémarrer, vous pouvez utiliser la commande + sysctl + elle-même, comme ceci:

sudo sysctl net.inet.ip.fw.verbose_limit=5

Cela devrait immédiatement implémenter la limite pour ce démarrage.

Comment définir le fuseau horaire de votre serveur

Il est judicieux de définir correctement le fuseau horaire de votre serveur. Il s’agit d’une étape importante pour la configuration de la synchronisation de l’heure NTP dans la section suivante.

FreeBSD est livré avec un outil de menu appelé + tzsetup + pour configurer les fuseaux horaires. Pour définir le fuseau horaire de votre serveur, appelez cette commande avec les privilèges sudo +:

sudo tzsetup

Tout d’abord, il vous sera demandé de sélectionner la région du monde où votre serveur est situé:

image: https: //assets.digitalocean.com/articles/freebsd_recommended/region.png [Région du monde sous FreeBSD]

Vous devrez ensuite choisir une sous-région ou un pays:

image: https: //assets.digitalocean.com/articles/freebsd_recommended/country.png [pays FreeBSD]

Enfin, sélectionnez le fuseau horaire spécifique à votre serveur:

image: https: //assets.digitalocean.com/articles/freebsd_recommended/time.png [Fuseau horaire FreeBSD]

Confirmez la sélection du fuseau horaire présentée en fonction de vos choix.

À ce stade, le fuseau horaire de votre serveur doit correspondre aux sélections que vous avez effectuées.

Comment configurer NTP pour garder l’heure exacte

Maintenant que le fuseau horaire est configuré sur votre serveur, vous pouvez configurer NTP ou Network Time Protocol. Cela contribuera à la synchronisation de l’heure de votre serveur avec les autres utilisateurs du monde entier. Ceci est important pour les interactions client-serveur sensibles au facteur temps ainsi que pour une journalisation précise.

Là encore, vous pouvez activer le service NTP sur votre serveur en modifiant le fichier + / etc / rc.conf +. Exécutez la commande suivante pour ajouter la ligne + ntpd_enable =" YES "+ au fichier:

sudo sysrc ntpd_enable="YES"

Vous devez également ajouter une deuxième ligne qui synchronisera l’heure sur votre ordinateur avec les serveurs NTP distants au démarrage. Cela est nécessaire car cela permet à votre serveur de dépasser la limite de dérive normale à l’initialisation. Votre serveur sera probablement en dehors de la limite de la dérive au démarrage car votre fuseau horaire sera appliqué avant le démarrage du démon NTP, ce qui compensera l’heure du système:

sudo sysrc ntpd_sync_on_start="YES"

Si vous n’aviez pas cette ligne, votre démon NTP échouerait au démarrage en raison des paramètres de fuseau horaire qui décalent l’heure du système avant le démarrage.

Vous pouvez démarrer votre service + ntpd + en tapant:

sudo service ntpd start

Ceci maintiendra l’heure de votre serveur en effectuant une synchronisation avec les serveurs NTP listés dans + / etc / ntp.conf +.

Comment configurer un espace d’échange supplémentaire

Sur les serveurs FreeBSD configurés sur DigitalOcean, 1 gigaoctet sur swap space est automatiquement configuré quelle que soit la taille de votre serveur. Vous pouvez le voir en tapant:

sudo swapinfo -g

Il devrait montrer quelque chose comme ça:

OutputDevice          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%

Certains utilisateurs et applications peuvent nécessiter plus d’espace d’échange que cela. Ceci est accompli en ajoutant un fichier d’échange.

La première chose à faire est d’allouer une partie du système de fichiers au fichier que vous souhaitez utiliser pour l’échange. Vous utiliserez la commande + truncate +, qui peut rapidement allouer de l’espace à la volée.

Nous allons placer le fichier swap dans + / swapfile + pour ce tutoriel, mais vous pouvez le placer où vous le souhaitez, comme + / var / swapfile + par exemple. Ce fichier fournira 1 gigaoctet supplémentaire d’espace d’échange. Vous pouvez ajuster ce nombre en modifiant la valeur donnée à l’option + -s +:

sudo truncate -s  /swapfile

Après avoir alloué l’espace, vous devez verrouiller l’accès au fichier. Les utilisateurs normaux ne devraient avoir aucun accès au fichier:

sudo chmod 0600 /swapfile

Ensuite, associez un pseudo-périphérique à votre fichier et configurez-le pour qu’il soit monté au démarrage en tapant:

echo "md99 none swap sw,file=/swapfile,late 0 0" | sudo tee -a /etc/fstab

Cette commande ajoute une ligne ressemblant à ceci dans le fichier + / etc / fstab +:

md99 none swap sw,file=/swapfile,late 0 0

Une fois la ligne ajoutée à votre fichier + / etc / fstab +, vous pouvez activer le fichier d’échange pour la session en tapant:

sudo swapon -aqL

Vous pouvez vérifier que le fichier d’échange fonctionne maintenant en utilisant à nouveau la commande + swapinfo +:

sudo swapinfo -g

Vous devriez voir le périphérique supplémentaire (+ / dev / md99 +) associé à votre fichier d’échange:

OutputDevice          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%
/dev/md99               1        0        1     0%
Total                   2        0        2     0%

Ce fichier d’échange sera monté automatiquement à chaque démarrage.

Conclusion

Les étapes décrites dans ce guide peuvent être utilisées pour amener votre serveur FreeBSD dans un état plus prêt pour la production. En configurant des fonctions de base, telles qu’un pare-feu, une synchronisation NTP et un espace d’échange approprié, votre serveur peut être utilisé comme base pour de futures installations et services.