Outils pour utilisateurs

Outils du site


install:secureapache

Cacher la version d'Apache et autres informations sensibles

Par défaut, Apache affiche la version que vous utilisez, votre système d'exploitation, et d'autres informations. Une personne malveillante peut utiliser ces informations pour mieux cibler son attaque sur votre serveur, nous allons donc les cacher.

Éditez le fichier /etc/apache2/apache2.conf

Nota : sur Apache/2.2.11 (entre autres, ubuntu 9.04) ces directives sont à placer dans /etc/apache2/conf.d/security

Recherchez la ligne contenant

ServerSignature

et mettez

ServerSignature Off

Recherchez la ligne contenant

ServerTokens

et mettez

ServerTokens Prod

Protéger contre le Clickjacking et le Referer

Éditez le fichier /etc/nginx/nginx.conf

Ajouter :

add_header X-Frame-Options SAMEORIGINE;
add_header Referrer-Policy strict-origin-when-cross-origin;

Restreindre l'accès aux seuls fichiers du répertoire web

On suppose que le répertoire /web est le répertoire où sont les fichiers de votre site web (à adapter selon votre configuration).

Éditez le fichier /etc/apache2/sites-available/default et insérez-y

<Directory />
  Order Deny,Allow
  Deny from all
  Options None
  AllowOverride None
</Directory>
<Directory /web>
  Order Allow,Deny
  Allow from all
</Directory>

Étant donné que les directives Options et AllowOverride sont mises à None, vous devrez ensuite les spécifier, si besoin, pour chaque répertoire décrit dans ce fichier.
Dans le cas d'hôtes virtuels, procédez de la même manière qu'avec le répertoire /web.

Empêcher le parcours d'un répertoire

Pour empêcher le parcours du répertoire /web, ajoutez l'option -Indexes:

<Directory /web>
  Order Allow,Deny
  Allow from all
  Options -Indexes
</Directory>

Désactiver les inclusions coté serveur

Toujours au même endroit, (dans un tag <Directory>) :

Options -Includes

Désactiver l'exécution de scripts CGI

Si vous n'utilisez pas de scripts CGI ajoutez cette option :

Options -ExecCGI

Empêcher le téléchargement de fichiers .htaccess

AccessFileName .httpdoverride
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

Filtrer les adresses IP

Vous pouvez choisir les adresses IP qui ont accès ou non à vos pages.

Par exemple : autoriser l'accès seulement depuis votre poste :

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

ou encore sur votre réseau local :

Order Deny,Allow
Deny from all
Allow from 192.168.0.0/24

ou interdire une IP précise :

Order Allow,Deny
Allow from all
Deny from 192.168.0.5

etc…

Le principe est le suivant :
Allow,Deny : L'IP doit être dans un Allow from et ne pas être dans un Deny From pour être autorisée
Deny,Allow : L'IP doit être dans un Deny from et ne pas être dans un Allow From pour être interdite

Pour ceux qui voudraient aller encore plus loin Tutoriels et astuces pour sécuriser Php et Apache


Bloquer les attaques DDOS avec NGinx

Commencez par ouvrir la configuration générale de NGinx

sudo nano /etc/nginx/nginx.conf

Nous allons utiliser deux variables :

limit_req : permet de limiter le nombre de requetes maximum par IP et par seconde limit_conn : permet de limiter le nombre de connexions maximum par IP

Au début du bloc http ajoutez donc les lignes suivantes

#Requete maximun par ip 
limit_req_zone $binary_remote_addr zone=flood:10m rate=100r/s; 
limit_req zone=flood burst=100 nodelay; 

#Connexions maximum par ip 
limit_conn_zone $binary_remote_addr zone=ddos:10m; 
limit_conn ddos 100;

L’exemple ci-dessus vous permet de limiter une IP à 100 connexions simultanées ou 100 requêtes par seconde (ce qui est déjà énorme). Si une personne devait dépasser l’une de ces limites votre serveur lui servirait alors une jolie erreur 503.

Testez donc la configuration de votre serveur

sudo nginx -t

Si tout fonctionne redémarrez le

sudo service nginx restart

Bloquer les attaques DDOS avec NGinx via fail2ban

Lorsque NGinx bloque une IP à cause de son trop grands nombres de requêtes et/ou connexions simultanés il l’indique dans ses logs. Si ces informations sont loguées elles peuvent alors être utilisées par fail2ban. Pour bloquer les IPs des attaquants nous allons créer deux règles fail2ban : une pour limit_conn et une pour limit_req

Créons un fichier pour notre première règle

sudo nano /etc/fail2ban/filter.d/nginx-conn-limit.conf

Dans celui-ci, collez les lignes de configuration suivantes

# Fail2Ban configuration file 
# # supports: ngx_http_limit_conn_module 

[Definition] failregex = limiting connections by zone.*client: <HOST> 

# Option: ignoreregex 
# Notes.: regex to ignore. If this regex matches, the line is ignored. 
# Values: TEXT # ignoreregex =

Créons maintenant notre seconde règle

sudo nano /etc/fail2ban/filter.d/nginx-req-limit.conf

Dans lequel nous ajoutons la configuration ci-dessous

# Fail2Ban configuration file # 
# supports: ngx_http_limit_req_module 

[Definition] failregex = limiting requests, excess:.* by zone.*client: <HOST> 

# Option: ignoreregex 
# Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =

Nos règles sont paramétrées, il faut maintenant demander à fail2ban de les utiliser. Modifions la configuration de fail2ban

sudo nano /etc/fail2ban/jail.local

Ajoutons deux blocs : 1 par règle

[nginx-req-limit] 
enabled = true 
filter = nginx-req-limit 
action = iptables-multiport[name=ReqLimit, port="http,https", protocol=tcp] 
logpath = /var/log/nginx/*error.log 
findtime = 600 
bantime = 7200 
maxretry = 10 

[nginx-conn-limit] 
enabled = true 
filter = nginx-conn-limit 
action = iptables-multiport[name=ConnLimit, port="http,https", protocol=tcp] 
logpath = /var/log/nginx/*error.log 
findtime = 300 
bantime = 7200 
maxretry = 100

Rechargez la configuration de fail2ban

sudo service fail2ban reload

Vérifiez que les règles soient bien chargées

sudo fail2ban-client status

Ce qui dans mon cas me donne

Status |- Number of jail: 4 `- Jail list: nginx-conn-limit, nginx-req-limit, ssh, nginx-http-auth

Pour avoir plus d’information sur le nombres d’échecs et bannissements

sudo fail2ban-client status nginx-conn-limit && sudo fail2ban-client status nginx-req-limit

Ce qui nous donne

Status for the jail: nginx-conn-limit |- filter | |- File list: /var/log/nginx/error.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0 Status for the jail: nginx-req-limit |- filter | |- File list: /var/log/nginx/error.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0

Si vous effectuez des tests et que votre IP est bannie utilisez la commande suivante

sudo fail2ban-client set nom-de-regle unbanip XXX.XXX.XXX.XXX
install/secureapache.txt · Dernière modification : 2021/07/27 20:51 de linkuff