Si vous avez déjà administré un serveur en ligne (que ce soit un serveur dédié ou un VPS), vous avez sans doute remarqué que les pirates passent leur temps à attaquer les serveurs accessibles depuis Internet. Pour bloquer un pirate, rien de plus simple. Il suffit de bloquer son adresse IP dans le pare-feu de votre serveur. En règle général, cette méthode fonctionnera. L'exception étant l'utilisation d'un Botnet (dans ce cas : une multitude d'adresses IP se retrouveront dans vos historiques (logs) et vous aurez donc du mal à bloquer ce pirate. De plus, vous risquez de bloquer un de vos visiteurs infectés par un virus (+ exactement : un client botnet)).
Il y a donc 3 étapes :
Pour bloquer un pirate, il suffit de bloquer son adresse IP dans le pare-feu de votre serveur Linux.
Pour cela, nous allons utiliser Iptables pour bloquer le trafic entrant venant de l'adresse IP "xx.xx.xx.xx" (où xx.xx.xx.xx correspond à l'adresse IP du pirate).
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Si le pirate utilise une plage d'adresse IP (ex : 10.0.0.10, 10.0.0.11, 10.0.0.12, ... 10.0.0.20), il suffit d'utiliser cette commande :
Bash
iptables -I INPUT -m iprange --src-range 10.0.0.10-10.0.0.20 -j DROP
Si vous souhaitez bloquer la connexion sortante (votre serveur => autres serveurs) vers une plage d'adresses IP, utiliser le paramètre "--dst-range" au lieu de "--src-range".
Ainsi, votre serveur ne pourra plus envoyer de données à cette plage d'adresses IP.
Bash
iptables -I INPUT -m iprange --dst-range 10.0.0.10-10.0.0.20 -j DROP
Lorsque l'on sécurise un serveur de mails, on active l'authentification SASL sur celui-ci pour éviter que n'importe qui n'utilise notre serveur de mails. Les utilisateurs sont donc obligés de s'authentifier via SASL pour pouvoir envoyer des mails. Ce qui évite de blacklister notre serveur au niveau des autres serveurs de mails étant donné que les pirates ne pourront pas l'utiliser pour envoyer des spams.
Étant donné qu'un serveur de mail sécurisé est protégé par une authentification, les pirates tentent de trouver les identifiants d'un de vos comptes e-mail grâce à une attaque bruteforce. C'est-à-dire que les pirates essayent une liste d'identifiants comme "info@votre-domaine.com", "contact@votre-domaine.com", "webmaster@votre-domaine.com", ... avec des mots de passes comme "1234", "maison", ... ou des mots présents dans le dictionnaire.
Bien évidemment, toutes ces tentatives d'authentification sur votre serveur sont enregistrées dans des fichiers log.
Pour lister les adresses e-mails que le pirate a essayé de pirater, vous devez lister les lignes du fichier "/var/log/auth.log" en cherchant l'occurrence "auth failure".
Bash
grep "auth failure" /var/log/auth.log
Ce qui affichera des lignes similaires à celle-ci :
Plain Text
Mois Jour xx:xx:xx Nom du serveur saslauthd[xxxx]: do_auth : auth failure: [user=compte@domaine.com] [service=smtp] [realm=domaine.com] [mech=pam] [reason=PAM auth error]
Pour lister les adresses IP utilisées pour ces attaques, vous devez lister les lignes du fichier "/var/log/mail.log" en cherchant l'occurrence "SASL LOGIN authentication failed".
Bash
grep "SASL LOGIN authentication failed" /var/log/mail.log
Ce qui affichera des lignes similaires à celle-ci :
Note : xx.xx.xx.xx correspond à l'adresse IP du pirate.
Plain Text
Mois Jour xx:xx:xx Nom du serveur postfix/smtpd[xxxxx]: warning: unknown[xx.xx.xx.xx]: SASL LOGIN authentication failed: authentication failure
Pour les utilisateurs de "Logwatch", vous verrez des lignes comme celles-ci dans les rapports que vous recevrez par mail :
Plain Text
SASL Authentications failed xx Time(s) Service smtp (pam) - xx Time(s): Realm domaine.com - xx Time(s): User: compte@domaine.com - PAM auth error - xx Time(s):
Grâce à ces informations, vous savez qu'un pirate a essayé ces identifiants sur votre serveur. Néanmoins, vous n'avez pas son adresse IP pour le bloquer. Pour trouver son ou ses adresses IP, référez-vous à la partie ci-dessus.
Pour installer et configurer "Logwatch", référez-vous à notre tutoriel : Debian / Ubuntu - Détecter les attaques effectuées contre votre serveur grâce à Logwatch
Pour finir, bloquez le ou les pirates en tapant la commande :
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Lorsque l'on configure un serveur de mails complet, on installe plusieurs choses :
Les protocoles IMAP et POP3 permettent de consulter ces mails grâce à un client de messagerie. Lorsque l'on installe ces protocoles, on est obligé d'autoriser tout le monde pour les ports suivants : IMAP (143), IMAPS (993), POP3 (110) et POP3S (995). Cela vous permet de consulter vos mails depuis n'importe quel ordinateur, smartphone, ... et ce depuis n'importe où. Cela permet aussi à n'importe qui (dont les pirates) de se connecter sur ces ports pour effectuer une attaque bruteforce.
Pour lister les adresses IP utilisées pour ces attaques, vous devez lister les lignes du fichier "/var/log/mail.log" en cherchant l'occurrence "LOGIN FAILED".
Bash
grep "LOGIN FAILED" /var/log/mail.log
Ce qui affichera des lignes similaires à celle-ci :
Note :
- Remarquez que ce fichier contient l'historique du serveur POP3 (pop3d) ainsi que du serveur IMAP (imapd).
- xx.xx.xx.xx correspond à l'adresse IP du pirate. Si un pirate tente de se connecter via votre webmail, l'adresse IP sera "127.0.0.1" ou celle de votre serveur. Dans ce cas, ne bloquez pas cette adresse IP, sinon le webmail sera inutilisable.
Plain Text
Mois Jour xx:xx:xx Nom du serveur pop3d: LOGIN FAILED, user=compte@domaine.com, ip=[::ffff:xx.xx.xx.xx] Mois Jour xx:xx:xx Nom du serveur imapd: LOGIN FAILED, user=compte@domaine.com, ip=[::ffff:xx.xx.xx.xx]
Idem si le pirate se connecte via ces protocoles sécurisés via SSL (donc : POP3S et IMAPS) :
Plain Text
Mois Jour xx:xx:xx Nom du serveur pop3d-ssl: LOGIN FAILED, user=compte@domaine.com, ip=[::ffff:xx.xx.xx.xx] Mois Jour xx:xx:xx Nom du serveur imapd-ssl: LOGIN FAILED, user=compte@domaine.com, ip=[::ffff:xx.xx.xx.xx]
Pour les utilisateurs de "Logwatch", vous verrez des lignes comme celles-ci dans les rapports que vous recevrez par mail :
Plain Text
--------------------- IMAP Begin ------------------------ [IMAPd] Logout stats: ==================== User | Logouts | Downloaded | Mbox Size --------------------------------------- | ------- | ---------- | ---------- compte@domaine.com | x | xxxx | x --------------------------------------------------------------------------- x | xxxx | x
**Unmatched Entries**
Failed to connect to socket /tmp/fam-vmail-: x Time(s)
LOGIN FAILED, method=PLAIN, ip=[::ffff:xx.xx.xx.xx]: x Time(s)
LOGIN FAILED, user=compte@domaine.com, ip=[::ffff:xx.xx.xx.xx]: x Time(s) ---------------------- IMAP End ------------------------- --------------------- POP-3 Begin ------------------------ [POP3] Login failures: ========================= Host (user) | # ------------------------------------------------------------- | ----------- xx.xx.xx.xx (compte@domaine.com) | x --------------------------------------------------------------------------- x ---------------------- POP-3 End -------------------------
Grâce à ces informations, vous pourrez connaitre les adresses IP des pirates pour les protocoles "POP3" et "IMAP".
Pour finir, bloquez le ou les pirates en tapant la commande :
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Si un pirate ou une personne mal intentionnée essaye de pirater un de vos comptes e-mail en passant par votre webmail, vous devrez regarder dans l'historique du webmail et non dans l'historique du serveur IMAP.
La raison est simple : étant donné que le pirate se connecte au webmail, c'est ce webmail qui se connecte sur le serveur imap et non le pirate en lui-même, c'est donc l'adresse IP du webmail qui sera enregistrée dans l'historique du serveur IMAP.
Pour le webmail "RoundCube" (qui est un webmail professionnel utilisé notamment par OVH et LWS), il suffit de lister les lignes du fichier "<dossier de RoundCube>/logs/errors" en cherchant l'occurrence "Login failed".
Bash
grep "Login failed" <dossier de RoundCube>/logs/errors
Ce qui affichera des lignes similaires à celle-ci :
Note : xx.xx.xx.xx correspond à l'adresse IP du pirate.
Plain Text
[Jour-Mois-Année xx:xx:xx +0200]: <xxxxxxxx> IMAP Error: Login failed for compte@domaine.com from xx.xx.xx.xx. Could not connect to ssl://imap.domaine.com:993: Connexion refusée in <dossier de RoundCube>/program/lib/Roundcube/rcube_imap.php on line 198 (POST /?_task=mail&_action=refresh?_task=&_action=)
Pour finir, bloquez le ou les pirates en tapant la commande :
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Un serveur web peut aussi subir une attaque.
Les pirates qui attaquent un serveur web ont plusieurs buts :
Dans les 2 premiers cas, il est possible de bloquer les attaques du pirate.
Dans le dernier cas, vous devez utiliser un Reverse proxy ou un routeur matériel (comme un routeur Cisco) pour pouvoir bloquer ou atténuer les effets de l'attaque DDOS.
Pour ce type d'attaque, il y a 2 opérations à effectuer :
Pour détecter ces attaques, il suffit de consulter le fichier "/var/log/apache2/error.log".
Note : la commande "tail" permet d'afficher les xx dernières lignes du fichier spécifié en paramètre.
Bash
tail -n xx /var/log/apache2/error.log
Les attaques de type "exploits" (utilisation d'une faille d'un programme), si il y en a, sont similaires à ceci :
Note : Nous avons tronqué les lignes volontairement pour ne pas que ces lignes soient utilisées par des personnes mal intentionnées.
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/cgi-sys, referer: () { :;} ;echo;/usr/local/bin... [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/cgi-mod, referer: () { :;} ;echo;/usr/local/bin... [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/cgi-bin-sdb, referer: () { :;} ;echo;/usr/local/bin... [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/, referer: () { :;} ;echo;/usr/local/bin... [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/, referer: () { :;}; /bin/bash...
Les tentatives d'accès aux pages d'administration sont très simples à repérer.
Ces lignes contiennent toujours les adresses par défaut des pages d'administration des CMS.
Voici différents exemples d'attaques reçues sur notre serveur web.
L'administration du site :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/admin [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] client denied by server configuration: /var/www/administration
phpMyadmin qui permet de gérer sa base de données MySQL depuis une interface web programmée en PHP :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/phpMyAdmin [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/phpMyAdmin-4.2.1-all-languages [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/phpMyAdmin-4.2.1-english [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/pma
MySQLDumper (similaire à phpMyAdmin) :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/mysql [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/MySQLDumper
phpPgAdmin (similaire à phpMyAdmin mais pour PostgreSQL) :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/phppgadmin
Wordpress :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/wp-admin.php [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/wp-login.php
Les variables d'environnement CGI sont des variables transmises à un programme CGI, par le serveur Web l'invoquant, lors de son exécution
Définition de wikipedia.
Étant donné nous avons supprimé cet alias, ces attaques sont inutiles et laissent des traces dans le fichier de log.
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /var/www/cgi-bin
Et bien d'autres :
Plain Text
[Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /ftpmanager [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /ftpmanager [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /xmlrpc.php [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: .../trackback [Nom du jour Mois Jour xx:xx:xx Année] [error] [client xx.xx.xx.xx] File does not exist: /www.domaine.com.sql
Pour les utilisateurs de "Logwatch", vous verrez des lignes comme celles-ci dans les rapports que vous recevrez par mail :
Plain Text
--------------------- httpd Begin ------------------------ A total of xx sites probed the server xx.xx.xx.xx xx.xx.xx.xx Requests with error response codes 400 Bad Request /une-mauvaise-requete.html: x Time(s) 401 Unauthorized /une-page-restreinte.php: x Time(s) 404 Not Found /une-page-inexistante.html: x Time(s) 405 Method Not Allowed /methode-non-autorisee.jpg: x Time(s) 408 Request Timeout null: x Time(s) 500 Internal Server Error /: 1 Time(s) 501 Not Implemented /: x Time(s) ---------------------- httpd End -------------------------
Grâce à ces informations, vous détectez facilement les attaques citées ci-dessus (avec le nombre d'essais : x Time(s)). Néanmoins, vous n'avez pas son adresse IP pour le bloquer. Pour trouver son ou ses adresses IP, référez-vous à la partie ci-dessus.
De plus, ce rapport vous affichera la liste des adresses IP qui se sont connectées à votre serveur (par défaut : pour le jour précédent). Si vous voyez plusieurs adresses IP qui possède le même début (ex : xx.xx.xx.10, xx.xx.xx.11, xx.xx.xx.12, ...), il s'agit d'un Crawler (ou Bot) ou d'un pirate qui utilisent plusieurs IP d'un même réseau.
Pour le savoir, cherchez l'adresse IP (ou le début de cette adresse IP) dans le fichier "/var/log/apache2/access.log".
Attention : Ne bloquez pas les robots de Google, Bing, Yahoo, Msn, ... sinon votre site disparaitra des moteurs de recherche. Étant donné que les robots de Google et autres n'auront plus accès à votre serveur, ils considéreront que le site web n'existe plus. Si vous utilisez les outils "Google Webmasters", "Bing - Webmaster Tools", ... vous recevrez peut-être une alerte de leur part. (c'est le cas pour Google Webmasters).
Bash
grep "xx.xx.xx.xx" /var/log/apache2/access.log
Pour finir, bloquez le ou les pirates en tapant la commande :
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Si un pirate lance une attaque DDOS sur votre serveur, il y a 3 solutions possibles :
- Utiliser Nginx en Reverse proxy. Dans ce cas : Nginx est accessible depuis Internet mais votre serveur n'est accessible que par ce serveur Nginx. Ainsi, il est possible de bloquer ou atténuer les effets d'une attaque DDOS lancés contre votre serveur. Si l'attaque DDOS est trop importante, cette solution ne suffira pas.
- Utiliser un routeur matériel (comme un routeur Cisco) pour pouvoir bloquer l'attaque DDOS. Il s'agit d'une solution utilisée par les hébergeurs ou les sociétés comme Google, Facebook, ...
- Mitiger l'attaque DDOS en redirigeant le flux dans différents réseaux possédant une très grande bande passante pour détecter quelles requêtes sont légitimes et lesquelles ne le sont pas. Ensuite, les pirates sont bloqués et les visiteurs réels peuvent de nouveau accéder au serveur sans passer par cette redirection transparente. Exemple avec la protection anti-DDOS d'OVH : Qu’est-ce que la protection anti-DDoS ?
Pour récupérer les adresses IP des pirates, il suffit de consulter le fichier "/var/log/proftpd/proftpd.log".
Soit, le pirate tente de trouver le mot de passe d'un compte existant. Dans ce cas, cherchez l'occurrence : "Incorrect password".
Bash
grep "Incorrect password" /var/log/proftpd/proftpd.log
Ce qui affichera des lignes similaires à celle-ci :
Note : xx.xx.xx.xx correspond à l'adresse IP du pirate.
Plain Text
Mois Jour xx:xx:xx vpsxxxxxx.herbegeur.com proftpd[8516] votre-domaine.com (reverse-dns[xx.xx.xx.xx]): USER compte-existant (Login failed): Incorrect password.
Soit, le pirate tente de trouver le mot de passe d'un compte qui n'existe pas. Dans ce cas, cherchez l'occurrence : "no such user found".
Bash
grep "no such user found" /var/log/proftpd/proftpd.log
Ce qui affichera des lignes similaires à celle-ci :
Note : xx.xx.xx.xx correspond à l'adresse IP du pirate. yy.yy.yy.yy correspond à l'adresse IP de votre serveur.
Plain Text
Mois Jour xx:xx:xx vpsxxxxxx.herbegeur.com proftpd[8426] votre-domaine.com (reverse-dns[xx.xx.xx.xx]): USER compte-inexistant: no such user found from reverse-dns [xx.xx.xx.xx] to ::ffff:yy.yy.yy.yy
Soit, le pirate tente de se connecter avec le compte root. Dans ce cas, cherchez l'occurrence : "root login attempted".
Bash
grep "root login attempted" /var/log/proftpd/proftpd.log
Ce qui affichera des lignes similaires à celle-ci :
Note : xx.xx.xx.xx correspond à l'adresse IP du pirate.
Plain Text
Mois Jour xx:xx:xx vpsxxxxxx.herbegeur.com proftpd[8477] votre-domaine.com (reverse-dns[xx.xx.xx.xx]): SECURITY VIOLATION: root login attempted.
Pour finir, bloquez le ou les pirates en tapant la commande :
Bash
iptables -I INPUT -s xx.xx.xx.xx -j DROP
Pour installer "No More DDOS", référez-vous à notre tutoriel : Debian / Ubuntu / CentOs - Bloquer les attaques DDOS grâce à No More DDOS (anciennement : DDoS Deflate)
Linux 31/12/2016
Linux 4/2/2014
Linux 12/9/2015
Linux 11/1/2014
Contenu épinglé
Contact
® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.
Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.
Vous devez être connecté pour pouvoir poster un commentaire