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

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 verrons comment mettre en place un pare-feu simple, facile à configurer et 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, nous montrerons 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. Pour savoir comment faire cela, suivez his guide.

Comment configurer un pare-feu IPFW simple

La première tâche à laquelle nous allons nous attaquer est la mise en place d’un pare-feu simple pour sécuriser notre serveur.

FreeBSD prend en charge et inclut trois pare-feu distincts, chacun avec ses propres forces et faiblesses. Celles-ci s’appellent + pf +, + ipfw + et + ipfilter +. Dans ce guide, nous utiliserons + ipfw + car nous pouvons facilement nous lancer avec un pare-feu sécurisé et dynamique.

Configuration du pare-feu de base

Presque toute notre configuration aura lieu dans le fichier + / etc / rc.conf +. Ouvrez ce fichier avec les privilèges + sudo + dans votre éditeur:

sudo vi /etc/rc.conf

À l’intérieur, nous devrons ajouter un certain nombre de lignes différentes pour activer et contrôler le fonctionnement du pare-feu + ipfw +. Commençons par les règles essentielles. Ajoutez-les au bas du fichier:

. . .

firewall_enable="YES"
firewall_quiet="YES"

Comme vous vous en doutez, la première ligne active le pare-feu + ipfw +, en le démarrant automatiquement au démarrage et en le démarrant avec les commandes + service + habituelles.

La deuxième commande dit à + ​​ipfw + de ne rien afficher 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. La seconde est que 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 commencer avec une ardoise vierge. 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 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, nous pouvons commencer à configurer le comportement du pare-feu:

. . .

firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"

Premièrement, nous sélectionnons «poste de travail» comme type de pare-feu que nous allons configurer. Il s’agit d’un pare-feu dynamique avec un bon comportement par défaut. Il nous permet également de personnaliser facilement les services auxquels les clients doivent pouvoir accéder en utilisant les options + firewall_myservices + et + firewall_allowservices +. Enfin, nous configurons + ipfw + pour consigner toutes les connexions refusées par les règles configurées.

L’option + firewall_myservices + doit être définie sur une liste de ports ou de services TCP, séparés par des espaces, qui devraient être accessibles sur votre serveur. Vous pouvez utiliser les ports, comme nous l’avons ici (nous avons configuré le port 22 pour notre connexion SSH et le port 80 pour un serveur Web HTTP conventionnel). Vous pouvez également utiliser les services par leur nom. Les services que FreeBSD connaît par son nom sont listés dans le fichier + / etc / services +. Par exemple, nous pourrions changer ce qui précède en quelque chose comme ceci:

firewall_myservices="ssh http"

Cela aurait les mêmes résultats. Si vous utilisez SSL sur votre serveur Web, veillez à ajouter le port + 443 + ou le service + https + à cette liste.

Les éléments de la liste + firewall_allowservices + sont les clients qui doivent être autorisés à accéder aux services fournis. Le mot-clé “any” signifie que tous les clients peuvent accéder à ces services. Si nous voulions limiter le nombre de clients pouvant se connecter à nos services, nous pourrions le faire ici.

L’option + firewall_logdeny + indique à + ​​ipfw + de consigner toutes les tentatives de connexion refusées dans un fichier situé dans + / var / log / security +.

Dans l’ensemble, cette partie du fichier + / etc / rc.conf devrait ressembler à ceci:

. . .

firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 80"
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. Lorsque vous avez terminé, enregistrez et fermez le fichier.

Autoriser les connexions UDP

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 utilisant le protocole UDP, vous devez modifier le fichier + / etc / rc.firewall +:

sudo vi /etc/rc.firewall

Nous avons configuré notre pare-feu pour utiliser le type de pare-feu «poste de travail», cherchez donc une section qui ressemble à ceci:

. . .

[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 nous avons définies. Il ressemblera à ceci:

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 l’exemple ci-dessus, 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 +» ci-dessus 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 doit apparaître correctement, bloquant le trafic indésirable tout en respectant les ports et services autorisés. Ce pare-feu se lancera automatiquement à chaque démarrage.

Nous voulons également configurer une limite sur le nombre de refus par adresse IP que nous allons consigner. Cela empêchera nos 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, nous pouvons limiter notre journalisation à «5» en ajoutant:

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, nous pouvons 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

Vous verrez apparaître le premier écran de menu, qui vous demande si votre horloge matérielle est réglée sur UTC ou sur l’heure locale:

image: https: //assets.digitalocean.com/articles/freebsd_recommended/local_or_utc.png [FreeBSD UTC ou heure locale]

Sélectionnez «Non» ici. Ensuite, il vous sera demandé de sélectionner la région du monde dans laquelle se trouve votre serveur:

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 notre serveur, nous pouvons configurer NTP ou Network Time Protocol sur notre serveur. 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.

Encore une fois, nous pouvons activer le service NTP sur notre serveur en ajustant le fichier + / etc / rc.conf +. Ouvrez-le avec les privilèges + sudo +:

sudo vi /etc/rc.conf

Dans ce fichier, ajoutez la ligne suivante:

ntpd_enable="YES"

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

ntpd_enable="YES"

Si nous n’avions pas cette ligne, notre démon NTP échouerait au démarrage en raison des paramètres de fuseau horaire qui faussent l’heure système avant le démarrage.

Enregistrez et fermez le fichier lorsque vous avez terminé.

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 Go d’espace swap 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:

Device          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 facilement 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 nous voulons utiliser pour le swap. Nous allons utiliser la commande + truncate +, qui peut rapidement allouer de l’espace à la volée.

Dans ce guide, nous allons placer le fichier d’échange sous + / swapfile +, mais vous pouvez utiliser n’importe quel emplacement raisonnable dans le système de fichiers. 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, nous devons 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 à notre fichier et configurez-le pour qu’il soit monté au démarrage en tapant:

sudo sh -c 'echo "md99 none swap sw,file=/swapfile,late 0 0" >> /etc/fstab'

La commande ci-dessus ajoute une ligne semblable à celle-ci dans le fichier + / etc / fstab +:

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

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

sudo swapon -aqL

Nous pouvons 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:

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