Fibre et auto-hébergement derrière une Freebox

J’avais choisi, à la fin des années 90 et au début des années 2000, de m’héberger chez Free. C’était compris dans l’abonnement que j’avais souscris. A l’époque, il s’agissait de réaliser des sites statiques. Et puis Free nous permit de mettre nos scripts PHP sur leur serveur. S’en est suivie une longue période d’errement en mode hébergement mutualisé sur OVH, où j’ai utilisé DotClear, puis PhpMyFAQ pour échouer sur WordPress. En 2010, j’ai fait le choix de passer en hébergement dédié chez Scaleway, une filiale de Free. J’en suis 6 serveurs successifs. J’en ai plus que ras-le-bol !

La raison de la non disponibilité de la dernière Dedibox est due à une panne de disque SSD sur un serveur loué à raison de 34.49 euros mensuels TTC. En 2010, il m’en coûtait 17.93 euros par mois. Le prix de la location d’un serveur a donc doublé en 12 ans. J’ai donc fait un bref calcul. Avec les frais de ma box ADSL Orange à 62 euros par mois mobile inclus et la location de ce serveur, j’enregistre une dépense annuelle de 1157.88 euros. En passant à la fibre chez Free, du fait du changement d’opérateur, j’ai, pour la 1ère année, un coût mensuel téléphonie incluse de 34.98 euros auxquels s’ajoute 49 euros d’installation. L’économie réalisée sera donc de 1157.88-480.76, soit 677.12 euros. Du coup, j’ai donc décidé de m’acheter un NUC à base de processeur i3 disposant d’un NVE de 2 To et de 32 Go RAM au prix de 671 euros pour le coller au cul de ma nouvelle box. L’économie ainsi réalisée sera de 419.76 euros dès la 2e année.

Choix et installation de la distribution Linux

Je suis un homme fidèle à ma distribution de prédilection, à savoir Fedora Server, sur laquelle, après mise à jour, j’ai installé les paquets suivants :

dnf update
dnf install NetworkManager-tui
dnf install nano mc htop
dnf install httpd php-fpm mariadb-server php-mysqlnd awstats certbot
dnf install mod_evasive mod_security mod_ssl
dnf install iptables-services iptables-utils
dnf install memcached
dnf install php-mbstring php-pecl-imagick php-pecl-zip php-gd php-gettext php-intl php-tidy php-xml
# Pour mod_file_cache
dnf install gcc gcc-c++ kernel-devel httpd-devel redhat-rpm-config

IP fixe et NAT

La 1ère chose que j’ai faite est de demander une IPv4 fixe au niveau de l’espace abonné de la Freebox.

Free > Ma Freebox > Fonctionnalités avancées > Demander une adresse IP fixe V4 full-stack

Au niveau de l’interface de la box à laquelle vous pouvez accéder à partir de votre navigateur en tapant https://192.168.1.254 dans la barre d’adresses, double-cliquez sur Paramètres de la Freebox.

Là, choisissez Gestion des ports.

J’ai saisi l’adresse IPv4 interne de mon serveur Linux dans IP DMZ, après avoir coché Activer la DMZ. J’aurais pu aussi passer par les redirections.

Forcer la carte à 1 Gbit

Comme je rencontrais des problèmes de performances assez sérieux, j’ai décidé de forcer le débit de la carte de la machine Linux en changeant la vitesse du port du Switch de la FreeBox en 1 Gbit/s Full-Duplex.

IPv6

J’ai choisi comme préfixe le 1er subnet (ici 2a01:e0a:8c0:2c60::/64) proposé au niveau de la box pour fixer l’adresse IPv6 de mon serveur Linux Fedora avec l’utilitaire nmtui.

Gestion des noms de domaines

Une fois le serveur installé, la configuration IPv4 et IPv6 et les redirections effectuées, j’ai actualisé les adresses associées à mon nom de domaine acheté auprès du registrar Gandi.

Délestage et blocage

Une fois les mises à jour des enregistrements DNS répliqués aux serveurs du monde entier, les attaques ont commencé. Il m’a fallu d’abord délester le serveur Apache à coup de Rewriting. Puis, je me suis attaché à bloquer quelques adresses IP associées à ces assaillants et autres parasites commerciaux.

J’ai observé dans les logs les user agents à l’aide de la commande :

 tail -f /var/log/httpd/dsfc-access_log |cut -d '"' -f 6

Du coup, dans l’un de mes nombreux fichiers de configuration Apache présent dans le dossier /etc/httpd/conf.d, j’ai ajouté :

RewriteCond %{HTTP_USER_AGENT} "(^|\.| |/|\(|@|;|-)(adsbot|ahrefs(bot)?|apple(bot)?|bazqux|buck|dataforseo(bot)?|crawler|dotbot|facebookexternalhit|feedbot|flusio|hyperfactors|linkedin(bot)?|linkfluence|mbcrawler|mj12bot|mjukisbyxor|mojeek(bot)?|monitorbacklinks|montools|onalyticabot|paperlibot|pinterest(bot)?|repolookout|ryte(bot)?|semantic|slack(bot)?|semrush(bot)?|scoop\.it|seobilitybot|twitter(bot)?|yak)( |/|\.|;|\)|-|$)" [NC]
RewriteRule ".*" "/index.html" [QSA,R=302,L]

J’ai recherché leurs adresses IP (ubermetrics dans l’exemple ci-dessous) :

# cat /var/log/httpd/dsfc-access_log |grep -i ubermetrics|cut -d ' ' -f 1|sort|uniq -c
8 159.69.219.137
25 159.69.250.195
13 159.69.250.201
20 78.47.62.225
8 static.137.219.69.159.clients.your-server.de
29 static.195.250.69.159.clients.your-server.de
12 static.201.250.69.159.clients.your-server.de
22 static.225.62.47.78.clients.your-server.de

Muni de leurs adresses IP, je les ai ajoutés à mon fichier /etc/sysconfig/iptables :

-A INPUT -s 159.69.219.128/25 -j DROP
-A INPUT -s 78.47.62.225 -j DROP

J’ai relancé les services :

systemctl reload httpd
systemctl restart iptables

Et bien d’autres choses encore…

J’ai fait bien d’autres choses comme la compilation et la configuration du module mod_file_cache. J’ai dû modifier les paramètres du module mod_evasive.

Hébergement /