Étapes recommandées pour les nouveaux serveurs FreeBSD 12.0
Introduction
Lors de la configuration d'un nouveau serveur FreeBSD, vous pouvez suivre un certain nombre d'étapes facultatives pour mettre votre serveur dans un état plus convivial pour la production. Dans ce guide, nous aborderons certains des exemples les plus courants.
Nous allons mettre en place un pare-feu simple et facile à configurer qui refuse la plupart du trafic. Nous nous assurerons également que le fuseau horaire de votre serveur reflète précisément son emplacement. Nous allons configurer l'interrogation NTP afin de maintenir l'heure exacte du serveur et, enfin, montrer comment ajouter de l'espace d'échange supplémentaire à votre serveur.
Avant de commencer avec ce guide, vous devez vous connecter et configurer votre environnement shell comme vous le souhaitez. Vous pouvez découvrir comment procéder en suivant ce guide.
Note: As of July 1, 2022, DigitalOcean no longer supports the creation of new FreeBSD Droplets through the Control Panel or API. However, you can still spin up FreeBSD Droplets using a custom image. Learn how to import a custom image to DigitalOcean by following our product documentation.
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-feux distincts. Ceux-ci sont appelés pf
, ipfw
, et ipfilter
. Dans ce guide, nous utiliserons 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 /etc/rc.conf
dossier. Pour modifier la configuration, vous utiliserez le sysrc
commande, qui permet aux utilisateurs de modifier la configuration dans /etc/rc.conf
de manière sûre. Dans ce fichier, vous ajouterez un certain nombre de lignes différentes pour activer et contrôler la façon dont le ipfw
le pare-feu fonctionnera. Vous commencerez par les règles essentielles; exécutez la commande suivante pour commencer :
sudo sysrc firewall_enable="YES"
Chaque fois que tu cours 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 ipfw
pare-feu, le démarrant automatiquement au démarrage et lui permettant d'être démarré avec l'habituel service
commandes.
Exécutez maintenant ce qui suit :
sudo sysrc firewall_quiet="YES"
Cela raconte ipfw
de ne rien sortir vers la sortie standard lorsqu'il effectue certaines actions. Cela peut sembler être 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. La seconde est que lorsque le ipfw
commande lit un script de configuration sans le "quiet"
flag, il lit et sort chaque ligne, tour à tour, vers la sortie standard. Lorsqu'il sort une ligne, il immédiatement exécute l'action associée.
La plupart des fichiers de configuration de pare-feu vident les règles actuelles en haut du script afin de recommencer à zéro. Si la ipfw
Si le pare-feu rencontre une ligne comme celle-ci sans l'indicateur silencieux, il videra immédiatement toutes les règles et reviendra à sa politique par défaut, qui consiste généralement à refuser toutes les connexions. Si vous configurez le pare-feu sur SSH, cela supprimera la connexion, fermera la session shell en cours et aucune des règles qui suivent ne sera traitée, ce qui vous empêchera d'accéder au serveur. L'indicateur silencieux 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 "workstation"
comme type de pare-feu que vous configurerez :
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 au fil du temps et stocke des informations sur ces connexions en mémoire pendant une courte période. En conséquence, non seulement des 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 quelles connexions peuvent être établies.
La /etc/rc.conf
vous permet également de personnaliser les services auxquels vous souhaitez que les clients puissent accéder en utilisant le firewall_myservices
et firewall_allowservices
options.
Exécutez la commande suivante pour ouvrir les ports qui doivent être accessibles sur votre serveur, tels que le port 22
pour votre connexion SSH et votre port 80
pour un serveur Web HTTP classique. Si vous utilisez SSL sur votre serveur Web, assurez-vous d'ajouter un port 443
:
sudo sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"
La firewall_myservices
L'option est définie sur une liste de ports ou de services TCP, séparés par des espaces, qui doivent être accessibles sur votre serveur.
Remarque : Vous pouvez également utiliser les services par leur nom. Les services que FreeBSD connaît par leur nom sont listés dans le /etc/services
dossier. Par exemple, vous pouvez remplacer la commande précédente par quelque chose comme ceci :
firewall_myservices="ssh http https"
Cela aurait les mêmes résultats.
La firewall_allowservices
L'option répertorie les éléments qui doivent être autorisés à accéder aux services fournis. Il vous permet donc 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'une machine héberge du contenu Web pour un réseau interne d'entreprise. Le mot clé "any"
signifie que n'importe quelle IP peut accéder à ces services, les rendant complètement publics :
sudo sysrc firewall_allowservices="any"
La firewall_logdeny
l'option indique ipfw
pour consigner toutes les tentatives de connexion refusées dans un fichier situé à /var/log/security
. Exécutez la commande suivante pour définir ceci :
sudo sysrc firewall_logdeny="YES"
Pour vérifier les modifications que vous avez apportées à la configuration du pare-feu, exécutez la commande suivante :
grep 'firewall' /etc/rc.conf
Cette partie de la /etc/rc.conf
le fichier ressemblera à ceci :
Outputfirewall_enable="YES" firewall_quiet="YES" firewall_type="workstation" firewall_myservices="22 80 443" firewall_allowservices="any" firewall_logdeny="YES"
N'oubliez pas de régler le firewall_myservices
possibilité de référencer les services que vous souhaitez exposer aux clients.
Autoriser les connexions UDP (facultatif)
Les ports et services répertoriés dans le firewall_myservices
possibilité dans le /etc/rc.conf
fichier autorise l'accès pour les connexions TCP. Si vous souhaitez exposer des services qui utilisent UDP, vous devez modifier le /etc/rc.firewall
dossier:
sudo vi /etc/rc.firewall
Vous avez configuré votre pare-feu pour utiliser le "workstation"
type de pare-feu, recherchez donc une section qui ressemble à ceci :
/etc/rc.firewall
. . . [Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn]) . . .
Il y a une section dans ce bloc qui est dédiée au traitement des firewall_allowservices
et firewall_myservices
valeurs que vous définissez. 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 tous les services ou ports qui doivent accepter les paquets UDP en ajoutant des lignes comme celle-ci :
${fwcmd} add pass udp from any to me port_num
Dans vi
, presse i
passer à INSERT
mode 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 "any"
si la connexion doit être autorisée pour tous les clients ou remplacez-la par une adresse IP ou une plage de réseau spécifique. La port_num
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 avoir une ligne qui ressemble à 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 192.168.2.0/24 to me 53
Cela permettra à tout client de l'intérieur du 192.168.2.0/24
plage réseau pour accéder à un serveur DNS fonctionnant sur le port standard 53
. Notez que dans cet exemple, vous voudriez également ouvrir ce port pour les connexions TCP car il est utilisé par les serveurs DNS pour les réponses plus longues.
Enregistrez et fermez le fichier lorsque vous avez terminé.
Démarrage du 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 démarrera automatiquement à chaque démarrage.
Vous souhaitez également configurer une limite sur le nombre de refus par adresse IP que vous enregistrerez. Cela empêchera vos journaux de se remplir à partir d'un seul utilisateur persistant. Vous pouvez le faire dans le /etc/sysctl.conf
dossier:
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 actuellement active sans redémarrer, vous pouvez utiliser le sysctl
commande lui-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
C'est une bonne idée de régler correctement le fuseau horaire de votre serveur. Il s'agit d'une étape importante lorsque vous configurez la synchronisation de l'heure NTP dans la section suivante.
FreeBSD est livré avec un outil basé sur un menu appelé tzsetup
pour configurer les fuseaux horaires. Pour définir le fuseau horaire de votre serveur, appelez cette commande avec sudo
privilèges :
sudo tzsetup
Tout d'abord, il vous sera demandé de sélectionner la région du monde dans laquelle se trouve votre serveur :
Vous devrez ensuite choisir une sous-région ou un pays :
Remarque : Pour naviguer dans ces menus, vous devez utiliser le PAGE UP
et PAGE DOWN
clés. Si vous ne les avez pas sur votre clavier, vous pouvez utiliser FN
+ DOWN
ou FN
+ UP
.
Enfin, sélectionnez le fuseau horaire spécifique qui convient à votre serveur :
Confirmez la sélection de fuseau horaire qui est 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 conserver une heure précise
Maintenant que le fuseau horaire est configuré sur votre serveur, vous pouvez configurer NTP ou Network Time Protocol. Cela aidera à synchroniser l'heure de votre serveur avec celle des autres dans le monde. Ceci est important pour les interactions client-serveur sensibles au facteur temps ainsi que pour une journalisation précise.
Encore une fois, vous pouvez activer le service NTP sur votre serveur en ajustant le /etc/rc.conf
dossier. Exécutez la commande suivante pour ajouter la ligne ntpd_enable="YES"
au dossier :
sudo sysrc ntpd_enable="YES"
Vous devez également ajouter une deuxième ligne qui synchronisera l'heure de votre machine avec les serveurs NTP distants au démarrage. Ceci est nécessaire car cela permet à votre serveur de dépasser la limite de dérive normale lors de l'initialisation. Votre serveur sera probablement en dehors de la limite de dérive au démarrage car votre fuseau horaire sera appliqué avant le démarrage du démon NTP, ce qui décalera votre heure 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 faussent l'heure de votre système avant le processus de démarrage.
Vous pouvez commencer votre ntpd
service en tapant :
sudo service ntpd start
Cela maintiendra l'heure de votre serveur en se synchronisant avec les serveurs NTP répertoriés dans /etc/ntp.conf
.
Comment configurer un espace d'échange supplémentaire
You can check how much swap space your server has with the following command:
sudo swapinfo -g
Il devrait afficher quelque chose comme ceci :
OutputDevice 1G-blocks Used Avail Capacity /dev/gpt/swapfs 1 0 1 0%
Certains utilisateurs et applications peuvent avoir besoin de plus d'espace d'échange que cela. Ceci est accompli en ajoutant un fichier d'échange.
La première chose que vous devez faire est d'allouer une partie du système de fichiers au fichier que vous souhaitez utiliser pour le swap. Vous utiliserez le truncate
commande, qui peut rapidement allouer de l'espace à la volée.
Nous allons mettre le fichier d'échange dans /swapfile
pour ce tutoriel, mais vous pouvez placer le fichier 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 au -s
option:
sudo truncate -s 1G /swapfile
Après avoir alloué l'espace, vous devez verrouiller l'accès au fichier. Les utilisateurs normaux ne devraient pas avoir accès au fichier :
sudo chmod 0600 /swapfile
Ensuite, associez un pseudo-périphérique à votre fichier et configurez-le pour qu'il se monte 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 qui ressemble à ceci au /etc/fstab
dossier:
md99 none swap sw,file=/swapfile,late 0 0
Une fois la ligne ajoutée à votre /etc/fstab
fichier, 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 le swapinfo
commande à nouveau :
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 les éléments essentiels de base comme un pare-feu, la synchronisation NTP et un espace d'échange approprié, votre serveur peut être utilisé comme une bonne base pour les installations et services futurs.