GNU/Linux >> Tutoriels Linux >  >> Linux

20 choses essentielles à savoir si vous êtes sur le serveur Web Nginx

Nginx Web Server est l'un des deux serveurs Web les plus utilisés au monde. Il a consolidé sa position en tant qu'application de serveur Web parfaite depuis sa création il y a 15 ans. Nginx est connu pour ses performances supérieures, qui sont environ 2,5 fois plus rapides qu'Apache. Il convient mieux aux sites Web qui traitent une grande quantité d'actifs statiques, mais peut également être utilisé pour les sites Web à usage général. Il a dépassé son utilisation prévue il y a longtemps et est maintenant utilisé pour une pléthore de tâches telles que le proxy inverse, la mise en cache, l'équilibrage de charge, le streaming multimédia, etc.

Faits sur le serveur Web Nginx

Nginx se prononce comme Engine X et a divers cas d'utilisation dans la scène Web moderne. Il peut être utilisé pour alimenter un large éventail de services Web tels que les microservices, le cloud computing et les passerelles API, parallèlement à son rôle standard de serveur Web. Nous poursuivrons notre discussion en supposant que le serveur Web Nginx s'exécute sur Linux ou des systèmes UNIX similaires.

1. Les bases de Nginx

Il est nécessaire que vous maîtrisiez les bases avant d'aborder un sujet technique. Donc, nous présentons ici quelques éléments fondamentaux concernant Nginx. Il existe plusieurs versions de cette application, y compris des variantes payantes et gratuites. Le serveur open source Nginx est cependant le plus utilisé par les développeurs simplement parce qu'il offre presque toutes les fonctionnalités imaginables et qu'il n'a pas de prix.

Une fois installé, vous pouvez exécuter le service sudo Nginx start pour lancer votre serveur. Les fichiers de configuration du serveur sont stockés soit dans /usr/local/nginx/conf/ ou /etc/nginx/ répertoires. Les documents Web sont stockés soit dans /usr/local/nginx/html/ ou /var/www/html répertoires. Vous pouvez arrêter un serveur en cours d'exécution en lançant la commande sudo nginx -s arrêter.

2. Activer SELinux

SELinux (Security-Enhanced Linux) est une fonctionnalité intéressante du noyau Linux, qui offre un meilleur contrôle sur la sécurité du système via des politiques de sécurité de contrôle d'accès. C'est une pratique courante d'activer SELinux dans les systèmes qui ont l'intention d'exécuter des serveurs Web dédiés. Vous devez utiliser le getsebool -a commande pour cela.

$ sudo getsebool -a | less
$ sudo getsebool -a | grep off
$ sudo getsebool -a | grep on

Les commandes ci-dessus vous fourniront des informations sur les paramètres booléens activés et désactivés. Vous devez désactiver toutes les entités qui ne sont pas requises par votre système pour une sécurité maximale. Ces paramètres sont connus collectivement sous le nom de booléens SELinux. La définition de valeurs appropriées pour ces variables rendra votre système beaucoup plus sûr pour empêcher les attaques Web standard.

3. Suppression des modules Nginx indésirables

- -

Malgré la nature légère du serveur par défaut Nginx, il est toujours judicieux de supprimer tous les modules indésirables dont votre serveur n'a pas besoin. Cela réduira considérablement l'empreinte mémoire et rendra votre serveur plus rapide que d'habitude. De plus, cela limite de nombreuses capacités de votre serveur, donc même si un utilisateur malveillant accède à votre serveur, il faudra beaucoup de temps et de compétences pour prendre le contrôle total du système lui-même.

Les commandes ci-dessous montrent comment désactiver SSI et le module d'indexation automatique qui est installé par défaut avec votre binaire Nginx.

sudo ./configure --without-http_autoindex_module --without-http_ssi_module
sudo make
sudo make install

Vous pouvez utiliser la commande suivante pour afficher les modules qui peuvent être désactivés lors de la compilation de votre serveur Nginx.

sudo ./configure --help | less

4. Minimiser les privilèges de mise en réseau

Minimiser le privilège réseau de votre serveur Web contribue également à accroître la sécurité. Vous pouvez tirer parti des options de montage pour ce travail. Cela signifie essentiellement que vous pouvez servir toutes vos pages Web via des partitions séparées. Pour ce faire, vous devrez créer des partitions supplémentaires et les monter sur /nginx emplacement. Assurez-vous de les monter avec les autorisations noexec, nodev et nosetuid.

Vous pouvez le faire en éditant le fichier /etc/fstab . Modifiez-le avec votre éditeur préféré et ajoutez ce qui suit à la fin du fichier.

LABEL=/nginx /nginx ext3 defaults,nosuid,noexec,nodev 1 2

Si votre système s'exécute sur un système de fichiers différent, remplacez ext3 par le nom de ce système de fichiers. Vous aurez besoin des privilèges sudo pour ce faire.

5. Renforcement des paramètres réseau pour Nginx

Vous pouvez renforcer davantage la sécurité de votre système en configurant certains paramètres du noyau et du réseau. Modifiez le fichier /etc/sysctl. conf et ajoutez les lignes suivantes pour renforcer le système de votre serveur.

# prevent smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1

# stopping being a router
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# prevent alteration of routing tables
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

Il existe une pléthore d'options disponibles que vous pouvez utiliser pour sécuriser votre système. Ils seront utiles au cas où quelqu'un enfreindrait la sécurité de votre serveur.

6. Modification de l'en-tête de version Nginx

Changer l'en-tête de version de votre serveur par défaut Nginx est un excellent moyen d'empêcher les pirates en herbe de s'introduire dans votre système. De nombreuses applications peuvent recevoir des données floues pour obtenir l'en-tête de version du logiciel serveur. Les utilisateurs malveillants le font souvent pour trouver des informations exactes sur le serveur afin qu'ils puissent cibler et creuser des vulnérabilités spécifiques pour eux.

Trouvez les lignes ci-dessous à partir du fichier src/http/ngx_http_header_filter_module.c .

static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

Remplacez-les par les lignes suivantes.

static char ngx_http_server_string[] = "Server: Ninja Web Server" CRLF;
static char ngx_http_server_full_string[] = "Server: Ninja Web Server" CRLF;

Cela montre de fausses informations sur la version du serveur aux attaquants potentiels.

7. Empêcher les débordements de tampon

Les débordements de mémoire tampon se produisent lorsque des extraits de code écrivent des données au-delà de sa limite. C'est un problème d'ingénierie logicielle classique qui est exploité par des pirates expérimentés. Si elles sont conçues avec succès, les attaques par débordement de mémoire tampon peuvent permettre à des tiers indésirables d'entrer et de prendre le contrôle de votre système. Vous pouvez empêcher ces attaques dans une large mesure en limitant la taille des tampons pour tous les clients. Ajoutez ce qui suit à votre nginx.conf fichier.

# limit buffer sizes
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

# set timeouts
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;

Ces options modifient essentiellement la valeur par défaut de ces paramètres et diminuent la surface d'attaque. Vous pouvez jouer avec eux pour savoir ce qui convient à votre serveur Web Nginx.

8. Contrôle des connexions simultanées

Que vous utilisiez le serveur par défaut Nginx ou autre chose, il est toujours recommandé de limiter le nombre de connexions simultanées. Cela peut être utile dans de nombreuses situations, telles que la prévention des attaques par déni de service et un meilleur équilibrage de charge. Le module NginxHttpLimitZone permet aux administrateurs de limiter les connexions simultanées pour des sessions ou des adresses IP spécifiques.

limit_zone slimits $binary_remote_addr 5m;
limit_conn slimits 5;

Ajoutez les lignes ci-dessus dans votre nginx.conf dossier. Il limite le nombre de connexions simultanées autorisées à 5 par IP. Vous pouvez facilement remplacer cette valeur pour répondre à vos besoins.

9. Filtrage de l'accès au domaine

Les botnets sont l'un des types de problèmes les plus courants rencontrés par les serveurs Web Nginx modernes. Ils analysent souvent les serveurs au hasard et essaient de trouver tous les domaines associés. Vous pouvez les refuser facilement en ajoutant les lignes suivantes à votre nginx.conf fichier.

# encompass client requests to specified domains

if ($host !~ ^(url.domain|www.url.domain|url.subdomain.domain)$ ) {
return 444;
}

L'ajout de ces lignes à ce fichier autorise les requêtes client uniquement pour les domaines mentionnés. Vous pouvez spécifier plusieurs domaines en utilisant le ou "|" opérateur.

10. Limitation des méthodes disponibles

Il existe plusieurs HTTP méthodes utilisées pour récupérer des pages Web en fonction des demandes des utilisateurs. Certains d'entre eux sont GET , PUBLIER , METTRE , et SUPPRIMER . Cependant, il existe un tas de méthodes supplémentaires. C'est toujours une bonne idée de restreindre ces méthodes pour un utilisateur. Cela aidera à réduire les violations de données indésirables et ajoutera une couche de sécurité supplémentaire. Ajoutez les lignes suivantes à votre configuration Nginx.

# allow only GET && HEAD && POST
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}

Désormais, les utilisateurs ne peuvent plus effectuer de demande de suppression ou de recherche sur votre serveur. Seul le GET , TÊTE , et POSTER méthodes sont à leur disposition. Vous pouvez trouver plus d'informations sur les méthodes HTTP ici.

11. Restreindre les agents utilisateurs

Les agents utilisateurs sont des programmes informatiques qui permettent aux utilisateurs d'interagir avec un service. Les navigateurs Web Ubuntu sont les principaux agents utilisateur Web de mon système.

Parfois, vous souhaiterez peut-être empêcher des agents utilisateurs spécifiques d'accéder à votre serveur, comme ces navigateurs sans tête qui cherchent continuellement à récupérer des données de votre site Web. Cela s'avère également utile lors du blocage des botnets, car ils utilisent souvent le même agent utilisateur.

# block download agents
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}

Les ajouter à votre configuration Nginx bloquera les agents de téléchargement connus tels que wget et BBBike. Les lignes ci-dessous bloqueront certains robots connus appelés msnbot et scrapbot .

#block robots
if ($http_user_agent ~* msnbot|scrapbot) {
return 403;
}

Vous pouvez bloquer tous les agents utilisateurs que vous souhaitez. Cependant, soyez prudent, sinon vous risquez de bloquer le trafic légitime vers votre serveur Web Nginx.

12. Blocage des spams de parrainage

Les spams de référence sont un problème courant auquel sont confrontés de nombreux serveurs Web aujourd'hui. Il s'agit d'une technique utilisée pour annoncer des sites Web spécifiques au moteur de recherche afin qu'ils obtiennent plus de trafic sur leur site. Il est particulièrement dangereux pour les serveurs Web à forte charge car il peut causer de graves dommages au classement d'un site. Heureusement, vous pouvez bloquer la plupart de ces spams en ajoutant seulement quelques lignes à votre configuration Nginx.

#deny certain referers
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
# return 404;
return 403;
}

Ajoutez les lignes ci-dessus à votre nginx.conf fichier pour bloquer certains des spams de référence les plus courants. Vous pouvez ajouter plus de mots à ces lignes si nécessaire.

13. Empêcher les liens d'image

Le hotlinking d'images est devenu une pratique courante pour de nombreux administrateurs Web. Dans cette pratique, les administrateurs utilisent souvent des images personnalisées de votre serveur Web pour répondre aux demandes de leurs clients. Cela peut être gravement préjudiciable s'il n'est pas pris en charge, car votre serveur Web peut être chargé de fournir les ressources d'image demandées par les utilisateurs d'un autre serveur Web. Vous pouvez facilement éviter cela et économiser votre précieuse bande passante, comme indiqué ci-dessous.

# stop deep linking or image hotlinking
location /images/ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return 403;
  }
}

L'ajout de ces lignes à votre fichier de configuration Nginx bloquera les demandes d'image du serveur Web mentionné. De cette façon, votre serveur par défaut Nginx ne fournira des images qu'aux demandes authentiques des clients. De plus, vous souhaiterez peut-être utiliser la carte Nginx pour bloquer les liens dynamiques d'images pour un grand nombre de domaines.

14. Restreindre l'accès au répertoire

Vous pouvez souvent trouver des tonnes de pages Web qui ne limitent pas leurs répertoires. Ils sont exceptionnellement vulnérables aux utilisateurs malveillants car ils leur permettent de parcourir le site comme ils le souhaitent et conduisent souvent à une nouvelle escalade des privilèges du site. L'extrait ci-dessous vous montrera comment bloquer des utilisateurs spécifiques, autoriser des plages d'adresses IP particulières et refuser tous les autres au répertoire /docs/ .

location /docs/ {
# block one user
deny 192.168.1.1;

# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;

# drop rest
deny all;
}

Ajoutez-les à votre configuration Nginx et remplacez /docs/ avec des répertoires contenant des informations sensibles. Vous pouvez également protéger vos répertoires avec des mots de passe, comme indiqué ci-dessous. Tout d'abord, créez un fichier de mots de passe et ajoutez un USER

$ sudo mkdir /usr/local/nginx/conf/.htpasswd/
$ sudo htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd USER

Ajoutez maintenant ces lignes au nginx.conf fichier.

# password rotect /personal-images/ and /delta/ directories
location ~ /(personal-images/.*|delta/.*) {
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/.htpasswd/passwd;
}

15. Configuration de SSL pour le serveur Web Nginx

SSL (Secure Sockets Layer) est devenu la norme de sécurité de facto des serveurs Web modernes. Tout site qui n'implémente pas cette technologie est considéré comme dangereux pour de nombreux professionnels de la sécurité. Heureusement, il est simple de configurer et de maintenir la sécurité SSL pour les serveurs Nginx.

Il existe de nombreuses façons de configurer SSL pour un site Web. Les administrateurs peuvent créer des certificats SSL auto-signés, utiliser des autorités de certification courantes ou définir des proxys inverses SSL. Si vous êtes relativement nouveau dans l'administration de serveurs Web, nous vous conseillons d'utiliser la certification populaire Let's Encrypt. C'est une autorité de certification gratuite et facile à utiliser, qui fournit des certificats SSL/TLS sécurisés. Nous vous montrerons comment procéder dans un guide séparé.

16. Augmenter la sécurité PHP

PHP est l'un des langages côté serveur les plus utilisés et dessert un nombre considérable de pages Web sur Internet. Il est cependant assez ancien et sujet à plusieurs failles de sécurité. Ainsi, si vous utilisez PHP sur votre serveur Nginx, vous devez toujours être prudent et mettre en œuvre des normes de sécurité spécifiques. Par exemple, ajoutez les lignes ci-dessous à votre /etc/php.ini fichier améliorera la sécurité par un facteur significatif.

# reject crucial functions
disable_functions = phpinfo, system, mail, exec
# max execution time for scripts, in seconds
max_execution_time = 30
# max memory limit for scripts, in MB
memory_limit = 4M
# max allowable POST data
post_max_size = 4M
# restrict PHP information
expose_php = Off
# log errors
log_errors = On
# enable SQL safe mode
sql.safe_mode = On

Il y a beaucoup plus d'instructions améliorant la sécurité que vous pouvez ajouter dans ce fichier pour rendre votre serveur résistant aux dommages.

17. Amélioration de la sécurité du serveur par défaut Nginx

Les utilisateurs de Linux peuvent facilement améliorer la sécurité globale des serveurs Nginx par une configuration manuelle. Comme mentionné précédemment, vous devez activer SELinux sur toute machine exécutant Nginx pour une protection optimale. Configuration des autorisations correctes sur /nginx est également extrêmement important. Pour connaître les autorisations dont disposent les utilisateurs sur vos documents Nginx, exécutez la commande ci-dessous.

$ sudo find /nginx -user nginx
$ sudo find /usr/local/nginx/html -user nginx

Assurez-vous que seul le root ou le propriétaire de ces documents y a accès en écriture. Cela peut être une bouée de sauvetage en cas de futures effractions, car les attaquants auront besoin de plus de temps et d'expertise pour obtenir davantage de privilèges sur la machine. Utilisez la commande ci-dessous pour supprimer toutes les archives indésirables créées par vi ou d'autres éditeurs de texte Linux.

$ sudo find /nginx -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*'
$ sudo find /usr/local/nginx/html/ -name '.?*' -not -name .ht* -or -name '*~' -or -name '*.bak*' -or -name '*.old*'

18. Audit des journaux Nginx

La vérification des fichiers journaux de votre serveur Nginx vous fournira des informations précieuses telles que l'intérêt des utilisateurs, les tentatives d'authentification non désirées, etc. La possibilité de surveiller les journaux du serveur de manière appropriée est un atout utile pour les webmasters pour cette raison.

Vous pouvez trouver les fichiers journaux de votre serveur dans /usr/local/nginx/logs annuaire. Les commandes ci-dessous nous montrent comment les grep pour les informations sensibles.

$ sudo grep "/login.php??" /usr/local/nginx/logs/access_log
$ sudo grep "...etc/passwd" /usr/local/nginx/logs/access_log
$ sudo egrep -i "denied|error|warn" /usr/local/nginx/logs/error_log

Vous pouvez également installer ou créer des applications d'audit spécifiques qui vérifieront les journaux Nginx en temps réel et vous tiendront informé de ce qui se passe sur votre serveur.

19. Exécuter Nginx dans des conteneurs

La plupart des professionnels conseillent aux utilisateurs d'exécuter leur serveur Nginx à partir d'un conteneur dédié. Les conteneurs sont des environnements isolés sur les machines serveurs qui sont conçus pour séparer les processus les uns des autres. Vous pouvez facilement installer et exécuter votre serveur Nginx dans des conteneurs tels que LXD, Docker, les prisons FreeBSD, XEN et d'autres émulateurs virtuels Linux. Celles-ci sont collectivement connues sous le nom de prisons chroot parmi les webmasters.

Un conteneur dédié pour votre serveur contiendra toutes les ressources nécessaires pour faire fonctionner le serveur et gérer les demandes des clients. L'avantage que vous obtenez est l'isolation de ce serveur du reste de votre machine. Ainsi, même si quelqu'un obtient un accès non autorisé à votre serveur via certaines failles, il ne pourra pas contrôler le cœur de votre système.

20. Quelques suggestions utiles

Vous pouvez facilement configurer les différents aspects de votre serveur Web Nginx en modifiant le fichier de configuration centralisé. Il y a plein de choses à faire. Par exemple, utilisez ce qui suit pour éviter le détournement de clic.

add_header X-Frame-Options SAMEORIGIN;

La ligne suivante désactivera la détection des types de contenu par certains navigateurs.

add_header X-Content-Type-Options nosniff;

Pour activer les filtres de script intersite (XSS), vous pouvez utiliser

add_header X-XSS-Protection "1; mode=block";

Il existe de nombreuses fonctionnalités utiles de ce type que vous pouvez trouver dans la documentation Nginx. Cependant, assurez-vous de comprendre ce qu'ils font avant d'appliquer quoi que ce soit. Sinon, votre site risque d'être interrompu en raison d'une mauvaise configuration.

Fin des pensées

Il y a trop de raisons à la popularité des serveurs Web Nginx. Il est devenu le meilleur logiciel serveur en raison de son riche ensemble de fonctionnalités et d'un nombre apparemment illimité de capacités de configuration. Nous voyons souvent de nombreux administrateurs simplement installer et utiliser le serveur par défaut Nginx. Il leur manque beaucoup de fonctionnalités et de flexibilité offertes par Nginx de cette manière. C'est pourquoi nos rédacteurs ont pris la liberté de vous présenter ces meilleures pratiques. J'espère que nous avons pu satisfaire votre intérêt et vous aider à apprendre quelque chose de nouveau.


Linux
  1. 30 choses que vous ne saviez pas sur le noyau Linux

  2. Apache vs Nginx :quel serveur Web choisir

  3. Comment installer le serveur Web Nginx sur Linux

  4. Installer Nginx sur Windows

  5. Nginx Whitelist certaines adresses IP

Top 10 des fonctionnalités SSH que vous DEVEZ connaître pour être plus productif

Comment installer le serveur Web Nginx sur Ubuntu 20.04

25 commandes Nginx indispensables pour les développeurs et les administrateurs

Tout ce que vous devez savoir sur le serveur Linux Ubuntu

Tout ce que vous devez savoir sur le serveur Linux OpenSSH

Apache vs Nginx :quel serveur Web vous convient le mieux ?