Nous allons vous montrer comment nous avons réduit l’empreinte du serveur. Par soucis de facilité, les exemples seront sur la version http du site, les éléments ont par la suite été transférés sur le site en https.
server {
listen 80;
server_name _;
root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
index index.html; # Hugo generates HTML
location / {
try_files $uri $uri/ =404;
}
add_header Allow "GET, POST, PUT" always;
if ( $request_method !~ ^(GET|POST|PUT)$ )
{
return 405;
}
}
Lorsque l’ont test la page, sur la page d’erreur 404, nous pouvons voir que nous sommes sur un nginx de version 1.18.0, ce qui donne énormément d’indication à un potentiel attaquant, surtout si notre version n’est pas la dernière.
┌──(l01㉿L01)-[~]
└─$ curl http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>
server {
listen 80;
server_name _;
root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
index index.html; # Hugo generates HTML
location / {
try_files $uri $uri/ =404;
}
server_tokens off;
add_header Allow "GET, POST, PUT" always;
if ( $request_method !~ ^(GET|POST|PUT)$ )
{
return 405;
}
}
Grâce à la ligne server_token off, nous voyons que maintenant, la version de nginx est caché
┌──(l01㉿L01)-[~]
└─$ curl http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -I http://192.168.3.2/test
HTTP/1.1 405 Not Allowed
Server: nginx
Date: Thu, 28 Apr 2022 10:33:02 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Allow: GET, POST, PUT
On peut voir que la version de nginx n’est plus précisé, ce qui rend légèrement plus difficile la recherche de faille. Cependant, nous pouvons toujours voir que le serveur est un nginx.
server {
listen 80;
server_name _;
root /var/www/html/pageweb/ ; #Absolute path to where your hugo site is
index index.html; # Hugo generates HTML
location / {
try_files $uri $uri/ =404;
}
server_tokens off;
more_clear_headers Server;
add_header Allow "GET, POST, PUT" always;
if ( $request_method !~ ^(GET|POST|PUT)$ )
{
return 405;
}
}
On peut voir que dans le curl -I nous ne voyons plus le serveur que l’on utilise, cependant, nous pouvons toujours le voir sur la page erreur 404.
┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl http://192.168.3.2/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -I http://192.168.3.2/test
HTTP/1.1 405 Not Allowed
Date: Thu, 28 Apr 2022 10:35:41 GMT
Content-Type: text/html
Content-Length: 150
Connection: keep-alive
Allow: GET, POST, PUT
Une solution s’offre donc à nous, il faut créer notre propre page d’erreur. Nous générons quatre types d’erreurs, les erreurs 403, 404, 405 et 429.
Nous créons donc un fichier 44xx.html contenant le bon message d’erreur.
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
</body>
</html>
Puis, dans le fichier de configuration, nous allons lui dire d’aller chercher les pages en question en cas d’erreur.
[...]
error_page 403 /403.html;
location = /403.html {
root /var/www/html/pageweb/;
internal;
}
error_page 404 /404.html;
location = /404.html {
root /var/www/html/pageweb/;
internal;
}
error_page 405 /405.html;
location = /405.html {
root /var/www/html/pageweb/;
internal;
}
error_page 429 /429.html;
location = /429.html {
root /var/www/html/pageweb/;
internal;
}
[...]
De cette façon, nous avons maintenant.
┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl -X PATCH http://192.168.3.2
<html>
<head><title>405 Not Allowed</title></head>
<body>
<center><h1>405 Not Allowed</h1></center>
</body>
</html>
┌──(l01㉿L01)-[~/DM4/nginx]
└─$ curl http://192.168.3.2/existepas
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
</body>
</html>
Le fait que l’on soit sur un nginx ainsi que sa version n’apparaît plus.