1

Récupération d'articles d'archives

This commit is contained in:
2026-03-29 03:00:47 +02:00
parent 060119c91c
commit ecc25fe7cf
592 changed files with 17498 additions and 8153 deletions

View File

@@ -0,0 +1,256 @@
---
comments_url: https://com.richard-dern.fr/post/523
date: '2012-02-13 15:19:00'
dossier:
- Créer son propre Cloud
links:
- lang: fr
name: Page d'origine sur Archive.org
url: https://web.archive.org/web/20120225092126/http://ingnu.fr/2012/02/13/renforcer-la-securite-de-son-serveur/
tags:
- Apache
- Certificat
- Client
- Fail2ban
- iptables
title: Renforcer la sécurité de son serveur
weather:
humidity: 66
illuminance: 35349.3
precipitations: false
pressure: 1019.9
source:
- open-meteo
temperature: 0.5
wind_direction: 267
wind_speed: 14.8
weight: 12
---
Nous voilà sur la dernière ligne droite de notre série d'articles consacrée à la [mise en place d'un cloud personnel](https://web.archive.org/web/20120225092126/http://ingnu.fr/category/creer-son-propre-cloud/).
Nous avons installé à peu près tout ce dont on peut avoir besoin, mais à part un [script de pare-feu](https://web.archive.org/web/20120225092126/http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/) relativement restrictif et une protection anti-spam et anti-virus pour [le serveur mail](https://web.archive.org/web/20120225092126/http://ingnu.fr/2012/02/06/installation-de-son-propre-serveur-mail/), il reste encore quelques petites choses à faire pour sécuriser notre serveur.
Avant toute chose, contrairement à ce que beaucoup de gens recommandent comme bonne pratique, je ne vais pas aborder la question du changement de port pour améliorer la sécurité de notre serveur.
Je pense en effet qu'un simple *nmap* sur l'hôte à tester suffit pour déterminer quels sont les ports ouverts sur une machine, et ce n'est pas en déplaçant ce port que le "pirate" va jeter l'éponge.
Si quelqu'un est vraiment déterminé à récupérer de votre serveur des données auxquelles il n'a pas le droit d'accéder, il y parviendra.
Je mise donc sur une approche différente qu'on va tout de suite mettre en place, et qui repose sur [fail2ban](https://web.archive.org/web/20120225092126/http://www.fail2ban.org/).
Pour mémoire, fail2ban analyse les tentatives de connexion à votre serveur, et blacklist toute IP qui tentera d'accéder à votre serveur sans succès, selon un certain nombre de règles (qui peuvent être bien velues à configurer...).
## fail2ban
Installons l'application :
```bash
apt-get install fail2ban
/etc/init.d/fail2ban stop
```
On configure ensuite l'application :
```bash
mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf-orig
nano /etc/fail2ban/jail.conf
```
Le nombre d'applications nécessitant une connexion réseau pour fonctionner est relativement limité sur notre serveur, ce qui va simplifier la configuration de fail2ban, d'autant que la plupart des filtres existe déjà.
Voici un fichier *jail.conf* de référence, correspondant à notre serveur :
```text
[DEFAULT]
ignoreip = 127.0.0.1 xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
bantime = 600
maxretry = 3
backend = polling
destemail = contact@exemple.fr
banaction = iptables-multiport
mta = sendmail
protocol = tcp
action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s]
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
# Choose default action. To change, just override value of 'action' with the
# interpolation to the chosen action shortcut (e.g. action_mw, action_mwl, etc) in jail.local
# globally (section [DEFAULT]) or per specific section
action = %(action_)s
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
[ssh-ddos]
enabled = false
port = ssh
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 6
[pam-generic]
enabled = true
filter = pam-generic
port = all
banaction = iptables-allports
port = anyport
logpath = /var/log/auth.log
maxretry = 6
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/www/*/*/log/error.log
maxretry = 6
[apache-multiport]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/www/*/*/log/error.log
maxretry = 6
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/www/*/*/log/error.log
maxretry = 6
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/www/*/*/log/error.log
maxretry = 2
[postfix]
enabled = true
port = smtp,ssmtp
filter = postfix
logpath = /var/log/mail.log
[sasl]
enabled = true
port = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s
filter = sasl
logpath = /var/log/mail.log
[named-refused-tcp]
enabled = true
port = domain,953
protocol = tcp
filter = named-refused
logpath = /var/log/named/security.log
```
Si vous activez le monitoring pour bind, vous devez activer la journalisation :
```bash
nano /etc/bind/named.conf.options
```
```text
logging {
channel security_file {
file "/var/log/named/security.log" versions 3 size 30m;
severity dynamic;
print-time yes;
};
category security {
security_file;
};
};
```
```bash
/etc/init.d/bind9 restart
```
Vous devriez être relativement tranquille avec ce fichier de configuration.
Notice : N'oubliez surtout pas de renseigner correctement votre (vos) adresse(s) IP en début de fichier !
Démarrez ensuite le service :
```bash
/etc/init.d/fail2ban start
```
Désormais, si quelqu'un n'entre pas dans les clous, son adresse IP sera bloquée directement au niveau d'iptables, pour une durée déterminée spécifiée en début de fichier de configuration.
## Un firewall "modulaire"
On va un peu compléter [notre script de pare-feu](https://web.archive.org/web/20120225092126/http://ingnu.fr/2012/02/05/creer-son-propre-cloud-introduction/) pour vous permettre de spécifier vous-même une liste d'adresses IP à bannir.
```bash
nano /scripts/firewall
```
Ajoutez tout à la fin du fichier :
```text
if [ -f "/scripts/firewall.hosts" ]
then
for ip in `cat /scripts/firewall.hosts`; do
${IPT} -A INPUT -s $ip -j DROP
done
fi
```
Créez ensuite le fichier en question :
```bash
touch /scripts/firewall.hosts
```
Vous pouvez maintenant remplir ce fichier avec les adresses IP que vous souhaitez bloquer (une par ligne).
N'oubliez pas de relancer le script une fois vos modifications terminées :
```bash
/scripts/firewall
```
## Accès via certificats clients
Si vous le souhaitez, vous pouvez limiter l'accès à certains de vos sites Internet à certains clients disposant d'un certificat délivré par vous-même.
Notice : Évitez cette restriction sur l'accès webdav : les clients webdav peuvent ne pas gérer les certificats clients.
Il suffit de modifier le fichier de configuration de l'hôte virtuel que vous voulez "protéger", en rajoutant les lignes suivantes :
```text
<Location />
SSLCACertificateFile /scripts/certificate_authority/ca.crt
SSLVerifyClient require
SSLVerifyDepth 4
</Location>
```
Vous créez ensuite un certificat classique :
```bash
/scripts/certificate_authority/make_request apache-client sous-domaine.exemple.fr
/scripts/certificate_authority/sign_request apache-client sous-domaine.exemple.fr
chown -R www-data:www-data /scripts/certificate_authority/apache-client
```
Notice : Dans ce cas, ne créez pas de certificat sans mot de passe.
Il faut ensuite exporter le certificat créé et signé dans un format compatible :
```bash
openssl pkcs12 -export -clcerts -in /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.crt -inkey /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.key -out /scripts/certificate_authority/apache-client/sous-domaine.exemple.fr.p12
```
Transmettez ce certificat et son mot de passe au client qui doit accéder au site, client qui devra l'importer dans son navigateur.
Utilisez de préférence SSH pour effectuer ce transfert