Apache est un serveur http libre, c’est un des serveurs http les plus utilisé sur Internet avec plus de 65% des sites d’Internet en Novembre 2011 (contre environ 20% pour IIS).
Apache est conçu pour prendre en charge de nombreux modules lui donnant des fonctionnalités supplémentaires : interprétation du langage Perl, PHP, Python et Ruby, serveur proxy, Common Gateway Interface, Server Side Includes, réécriture d’URL, négociation de contenu, protocoles de communication additionnels, etc. Néanmoins, il est à noter que l’existence de nombreux modules Apache complexifie la configuration du serveur web. En effet, les bonnes pratiques recommandent de ne charger que les modules utiles : de nombreuses failles de sécurité affectant uniquement les modules d’Apache sont régulièrement découvertes.
On trouvera une documentation complète sur apache (en anglais) sur le site suivant :
http://httpd.apache.org/docs/.
Sur une distribution de la famille Debian pour installer Apache : apt-get install apache2
Pour installer php5 : apt-get install libapache2-mod-php5
Sur une distribution de la famille Debian lancer le service apache :
# /etc/init.d/apache2 start.
Pour vérifier que le service apache tourne :
# ps -ef|grep apache
Pour relancer apache après un changement de configuration, tapez :
# /etc/init.d/apache2 start.
La configuration globale d’apache s’effectue par modification du fichier de configuration /etc/apache2/apache2.conf. Apache pouvant gérer plusieurs serveurs, on trouve des compléments pour la configuration de chaque serveur dans /etc/apache2/site-enabled. Les fichiers de /etc/apache2/site-enabled sont inclus dans apache2.conf par un Include et suivent la même syntaxe. Les fichiers dans /etc/apache2/site-enabled correspondent aux serveurs activés et sont en fait un lien symbolique vers un fichier dans /etc/apache2/site-available, qui contient la liste de tous les serveurs disponibles. Par défaut, il n’y a qu’un seul serveur activé : le serveur par défaut. Ce qui suit décrit les principaux paramètres, et leur valeur attribuée par défaut à l’installation.
Dans apache2.conf:
DocumentRoot /var/www/html C’est le chemin par défaut du site Web
DirectoryIndex index.html index.php index.htm…Nom de la page d’index
Apache dans Webmin
Sécuriser Apache et son serveur
Tout d’abord Retour sur SSH qui va permettre d’accéder à votre serveur pour l’administrer. Merci a Alsacreation pour la personnalisation des scripts..
Configuration SSH
Afin de sécuriser l’accès SSH au serveur, éditons le fichier /etc/ssh/sshd_config. Nous allons changer le port de connexion par défaut pour éviter quelques attaques par bruteforce sur le port 22, qui est bien connu pour héberger ce service. N’oubliez pas de préciser ce nouveau port (dans Putty ou en ligne de commande ssh sous Linux) à la prochaine connexion.
vi /etc/ssh/sshd_config
Port 2222 # Changer le port par défaut
PermitRootLogin no # Ne pas permettre de login en root
Protocol 2 # Protocole v2
AllowUsers dew # N'autoriser qu'un utilisateur précis
Redémarrez le service SSH après ces modifications :
/etc/init.d/ssh restart
Alerte login Root
Vous pouvez éditer le fichier /root/.bashrc qui est exécuté au démarrage d’une sesion root pour envoyer un e-mail de notification. De cette façon, vous serez prévenu lorsqu’un login est effectué.
vi /root/.bashrc
Ajoutez la ligne (en modifiant l’adresse e-mail de destination) :
echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1` monitoring@test.com
Profitons-en pour un peu de personnalisation esthétique avec ces lignes :
alias ls='ls $LS_OPTIONS --color=auto'
alias ll='ls $LS_OPTIONS -al --color=auto'
alias vi='vim'
Mise en place d’un Firewall (source alsacreations)
vi /etc/init.d/firewall
#!/bin/sh
# Vider les tables actuelles
iptables -t filter -F
# Vider les règles personnelles
iptables -t filter -X
# Interdire toute connexion entrante et sortante
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# ---
# Ne pas casser les connexions etablies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Autoriser loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
# ICMP (Ping)
iptables -t filter -A INPUT -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -p icmp -j ACCEPT
# ---
# SSH In
iptables -t filter -A INPUT -p tcp --dport 2222 -j ACCEPT
# SSH Out
iptables -t filter -A OUTPUT -p tcp --dport 2222 -j ACCEPT
# DNS In/Out
iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT
# NTP Out
iptables -t filter -A OUTPUT -p udp --dport 123 -j ACCEPT
Si vous hébergez un sevreur web (Apache) :
# HTTP + HTTPS Out
iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
# HTTP + HTTPS In
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT
Si vous hébergez un serveur FTP :
# FTP Out
iptables -t filter -A OUTPUT -p tcp --dport 20:21 -j ACCEPT
# FTP In
modprobe ip_conntrack_ftp # ligne facultative avec les serveurs OVH
iptables -t filter -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Si vous hébergez un serveur de mail avec SMTP, POP3 et IMAP :
# Mail SMTP:25
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT
# Mail POP3:110
iptables -t filter -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 110 -j ACCEPT
# Mail IMAP:143
iptables -t filter -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 143 -j ACCEPT
# Mail POP3S:995
iptables -t filter -A INPUT -p tcp --dport 995 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dport 995 -j ACCEPT
N’oubliez pas de tester vos régles !!! Exemples, elles pourraient vous empêcher d’accéder à votre accés ssh si elles sont trop restrictives.
N’oubliez pas non plus de redémarrer le sevice firewall aprés les modifs..
######################################################################
IPtables / Netfilter
IPtables (associé à Netfilter) est un des meilleurs firewalls pour Linux, et certainement le plus répandu. Vous pourrez trouver de nombreux scripts de configuration à son sujet. En voici un, à adapter à votre configuration. A tout instant, utilisez la commande iptables -L -v pour lister les règles en place.
Celles-ci portent sur 3 chaînes : INPUT (en entrée), FORWARD (dans le cas d’un routage réseau) et OUPUT (en sortie). Les actions à entreprendre sont ACCEPT (accepter le paquet), DROP (le jeter), QUEUE et RETURN.
Arguments utilisés :
- i : interface d’entrée (input)
- i : interface de sortie (output)
- t : table (par défaut filter contenant les chaînes INPUT, FORWARD, OUTPUT)
- j : règle à appliquer (Jump)
- A : ajoute la règle à la fin de la chaîne (Append)
- I : insère la règle au début de la chaîne (Insert)
- R : remplace une règle dans la chaîne (Replace)
- D : efface une règle (Delete)
- F : efface toutes les règles (Flush)
- X : efface la chaîne
- P : règle par défaut (Policy)
- lo : localhost (ou 127.0.0.1, machine locale)
######################################################################
Fail2ban
Fail2ban est un script surveillant les accès réseau grâce aux logs des serveurs. Lorsqu’il détecte des erreurs d’authentification répétées, il prend des contre-mesures en bannissant l’adresse IP grâce à iptables. Cela permet d’éviter nombre d’attaques bruteforce et/ou par dictionnaire.
Installation
apt-get install fail2ban
Configuration
vi /etc/fail2ban/fail2ban.conf
- loglevel
- Niveau de détail des logs (défaut 3)
- logtarget = /var/log/fail2ban.log
- Chemin vers le fichier de log (description des actions entreprises par fail2ban)
Les services à monitorer sont stockés dans jail.conf. Il est recommandé d’en effectuer une copie nommée jail.local qui sera automatiquement utilisée à la place du fichier exemple.
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local
Quelques paramètres globaux :
- ignoreip = 127.0.0.1
- Liste des adresses IP de confiance à ignorer par fail2ban
- bantime = 600
- Temps de ban en secondes
- maxretry = 3
- Nombre d’essais autorisés pour une connexion avant d’être banni
- destmail monitoring@test.com
- Adresse e-mail destinataire des notifications
- action
- Action à entreprendre en cas de détection positive (voir dans /etc/fail2ban/action.d/)
Chaque section possède ses propres paramètres qui prennent le pas sur les globaux s’ils sont mentionnés :
- enabled
- Monitoring activé (true) ou non (false)
- maxretry, bantime, ignoreip, destmail
- Voir ci-dessus
- port
- Port IP concerné
- logpath
- Fichier de log à analyser pour détecter des anomalies
- filter
- Filtre utilisé pour l’analyser du log
Les filtres par défaut sont stockés dans /etc/fail2ban/filter.d. Ils contiennent en général une instruction failregex suivie d’une expression régulière matchant la détection d’une authentification erronée. Par exemple pour le service Courier :
failregex = LOGIN FAILED, ip=[<HOST>]$
Note : Celle-ci peut être précisée directement dans jail.local à la section appropriée pour prendre le pas sur la directive filter.
Modifiez les ports le cas échéant dans la section ssh si vous avez suivi la recommandation ci-dessus…
enabled = true
port = 2222
Après modification de la configuration, n’oubliez pas de redémarrer fail2ban : /etc/init.d/fail2ban restart
Rkhunter

Rootkit Hunter est un programme de détection de rootkits. Vous pouvez l’installer grâce à :
apt-get install rkhunter
Il procédera à des détections journalières anti-rootkits et enverra des notifications par e-mail si nécessaire. Il est conseillé de l’installer très tôt car il calcule l’empreinte MD5 des programmes installés afin de détecter d’éventuels changements. Editez /etc/default/rkhunter pour indiquer l’adresse de notification et l’exécution journalière :
vi /etc/default/rkhunter
REPORT_EMAIL="monitoring@test.com"
CRON_DAILY_RUN="yes"
En cas de fausses détections positives sur des répertoires ou fichiers existants et sains, éditez /etc/rkhunter.conf pour les ajouter à la liste des éléments autorisés.
vi /etc/rkhunter.conf
ALLOWHIDDENDIR=/dev/.udev
ALLOWHIDDENDIR=/dev/.static
Vous pouvez également utiliser chkrootkit qui est un équivalent.
Empêcher l’accès aux sous dossiers
Bloquer l’accès à PhpMyAdmin par exemple.
Sur un reverse proxy
/etc/apache2/apache2.conf
RewriteCond %{THE_REQUEST} /phpmyadmin/
RewriteRule ^.*$ - [G,L]
Via le .htaccess
Renvoie un code 403.
RewriteRule ^phpMyAdmin - [F]
Empêcher l’accès à la racine de apache
/etc/apache2/sites-available/default et /etc/apache2/sites-available/default-ssl <Directory /var/www/> Options -Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny deny from all </Directory>
Désactiver le listage des répertoires
Changer « Indexes » en « -Indexes ».
/etc/apache2/sites-available/default /etc/apache2/sites-available/default-ssl et les configurations des vhosts
Attribuer les permissions correctement
cd /var/www
chown www-monsite:www-monsite -R *
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;










































Directement on peut également configurer IMAPs, POPs et l’accès Webmail (Horde)


