Un FreeBSD comme reverse proxy NGINX et son intégration complète à mon infra

(Pas encore de note)
U

Bonjour à tous,

J’ai décidé de plus laisser mon serveur web directement ouvert sur internet et de tout faire passer via un reverse proxy nginx (qui était déjà mon serveur web).
Tant qu’à faire, comme le serveur ne servira qu’à cela, j’en ai profité pour partir sur un freebsd 15 pour ne plus tout avoir sous Debian.

Je vais rapidement vous partager ma configuration pour nginx et ensuite je vous expliquerai comment j’ai intégré à Wazuh, CheckMK et Ansible et 2-3 autres trucs.

 

Adressage fixe

Ouvrez le fichier RC :

nano /etc/rc.conf

Désactivez IPv6 et configurez votre IPv4 et ses options selon vos besoins :

# Disable IPv6
ipv6_activate_all_interfaces="NO"

# Disable DHCPv6 (rtsold)
rtsold_enable="NO"

# Static IPv4 configuration
ifconfig_hn0="inet 192.168.1.12 netmask 255.255.255.0"
defaultrouter="192.168.1.254"

# Optional: DNS servers
nameserver="192.168.1.254"

 

Reverse Proxy NGINX

Dans un premier temps, installez NGINX avec la commande suivante pour la génération de certificats Wildcard :

pkg install nginx-full wget

Ensuite, récupérez ma config depuis mon Github :

curl -o /usr/local/etc/nginx/nginx.conf https://raw.githubusercontent.com/stylersnico/nginx-secure-config/refs/heads/master/nginx.conf-freebsd15

J’ai adapté ma config nginx sécurisée de Debian pour FreeBSD 15.1, plus d’informations ici : https://github.com/stylersnico/nginx-secure-config

Ensuite, les configurations nginx sont les mêmes, elles sont simplement dans /usr/local/etc/nginx/sites-enabled/

Pour finir, activez et lancez le service nginx :

service nginx enable && service nginx start

 

Certbot avec plugin Infomaniak

Malheureusement, le plugin Infomaniak n’existe pas comme paquet sur FreeBSD, il faut donc utiliser python et pip.

Installez Python et pip avec la commande suivante :

pkg install python3 py312-pip

Ensuite, installez certbot avec pip :

pip install certbot certbot-dns-infomaniak

Reconnectez-vous pour avoir la commande certbot et suivez la procédure suivante : https://wiki.abyssproject.net/fr/debian/webservers/wildcard-ecdsa-infomaniak-letsencrypt

 

Installation de l’agent Wazuh et connexion au serveur

Pour vous connecter à votre console Wazuh, installez d’abord l’agent :

pkg install -y wazuh-agent

Ouvrez le fichier de configuration :

nano /var/ossec/etc/ossec.conf

Indiquez l’adresse de votre serveur Wazuh :

 <server>
<address>192.168.1.16</address>
<port>1514</port>
<protocol>tcp</protocol>
</server>

Ensuite, activez l’agent au démarrage et lancez le :

service wazuh-agent enable && service wazuh-agent start

 

Installation de l’agent CheckMK et connexion au serveur

Créez d’abord l’utilisateur “cmk_agent” :

adduser cmk_agent

Ensuite, installez sudo, l’agent et ouvrez le fichier des sudoers :

pkg install sudo check_mk_agent
visudo

Ajoutez la ligne suivante pour le monitoring des services :

cmk_agent ALL=(root) NOPASSWD: /usr/sbin/service

Créez votre fichier de configuration CheckMK avec la clé d’enregistrement de votre serveur :

nano /etc/check_mk/checkmk.conf

En modifiant votre clé et l’adresse de votre serveur :

CHECKMK_HOSTNAME="Reverse"
CHECKMK_SERVER="checkmk.internal"
CHECKMK_PORT="8000"
CHECKMK_SITE="cmk"
CHECKMK_OTT="37d7axxx1cc"

Ajoutez le service dans inetd et démarrez le :

echo "check_mk 6556/tcp" >> /etc/services
echo "check_mk stream tcp nowait cmk_agent /usr/local/bin/check_mk_agent check_mk_agent -c /etc/check_mk/checkmk.conf" >> /etc/inetd.conf
service inetd enable && service inetd start

Vérifiez ensuite que l’agent tourne avec la commande suivante :

nc -zv localhost 6556

Le retour devrait être le suivant :

Connection to localhost 6556 port [tcp/check_mk] succeeded!

Ensuite, pour la surveillance des services, surtout nginx dans mon cas, créez un script de surveillance comme ceci :

cat > /usr/local/lib/check_mk_agent/local/freebsd_services << 'EOF'
#!/bin/sh
# Monitor FreeBSD services

echo "<<>>"

# Services to monitor
SERVICES="sshd inetd nginx"

for service in $SERVICES; do
    if sudo service $service status > /dev/null 2>&1; then
        echo "0 \"FreeBSD Service $service\" - Service $service is running"
    else
        echo "2 \"FreeBSD Service $service\" - Service $service is NOT running"
    fi
done
EOF

Ensuite, rendez le exécutable et testez le :

chmod +x /usr/local/lib/check_mk_agent/local/freebsd_services && /usr/local/lib/check_mk_agent/local/freebsd_services

Le retour devrait être comme ceci :

<<<local>>>
0 "FreeBSD Service sshd" - Service sshd is running
0 "FreeBSD Service inetd" - Service inetd is running
0 "FreeBSD Service nginx" - Service nginx is running

Ensuite, lancez une découverte depuis votre instance CheckMK.

 

Mise à jour avec Ansible

Voici un playbook pour mettre à jour vos FreeBSD et vos paquets via Ansible :

- hosts: freebsd
  become: yes
  become_method: sudo
  tasks:
    - name: Fetch base system updates
      command: freebsd-update fetch
      failed_when: false

    - name: Update base system
      command: freebsd-update install
      register: base_update
      failed_when: false
      changed_when: "'installed' in base_update.stdout or 'Executing' in base_update.stdout"

    - name: Update packages
      command: pkg upgrade -y

    - name: Clean old packages
      command: pkg clean -y

    - name: Reboot if needed
      reboot:
        reboot_timeout: 600
      when: base_update.changed

Et voilà, je crois que j’ai fait le tour, notez que cet article aura une suite purement basée sur NGINX et l’intégration complète de Naxsi comme firewall applicatif 🙂

A propos de l'auteur

Nicolas Simond

Ingénieur Systèmes et Réseaux et guitariste hard rock et metal à mes heures perdues.
Je suis le créateur et l'unique rédacteur d'Abyss Project, c'est ici que je note la plupart de mes procédures et quelques divagations.

Si vous l'article vous a aidé, pensez à me payer un café :)

guest

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.

0 Commentaires
Plus récents
Plus anciens Populaires