Chrooter apache
Matériel
Ajout disque dur
Ajout carte
Audit des disques durs
Gestion des peripheriques
Disquette d'installation
Ajout d'un scanner
Astuces
Ajout d'une imprimante
Réseau
Configuration reseau
Dns
Serveur cvs
Proxy squid 
Installation serveur ftp
Installation qmail 
Installation serveur courrier sous debian
Outil TCP/IP 
Le serveur samba
Connexion a distance securisee
Client/serveur vnc
Configurer apache
Dyndns
Installer un LAMP sous mandriva
Sécurité
Chiffrer un fichier/dossier
Securiser son poste
Mur pare feu pas a pas
Authentification ht-access
Surveillance de serveur CACTI
Snort
Snort-inline
Securiser Apache avec mod_security
Filtrage squid/squidguard/dansguardian
Auditer son site web
Sécuriser son linux
Installer un Lamp avec ssl
Contrer les scans de ports
Traitement anti-spam
Installer/Utiliser tripwire
Faire des sauvegardes incrémentales
Rsync
Nessus
Divers
Elisa, le multimédia facile
Utilisation de lilo
Les commandes Linux
Le multi-tache
Le crontab
Exploration de la configuration
Quotas
Messagerie
Installer une application
Debugger ses applications
Le format RPM
Mise a jour du noyau
Qemu
Tour d'horizon des principaux p2p
Récupération du système
Bips d'un pc
Astuces windows
Table Ascii
Lamerland
Conversion de fichiers musicaux
Compiler ses rpms
Graver en ligne de commande
Graver un fichier avi pour un dvd de salon
Récupérer des fichiers effacés
Liens
hakin9
Secureroot.com
Hackerthreads.org
Defcon
Hackerlounge
Les derniers exploits
Tous les codes sources
Securite sous Linux
Les logiciels libres quotidiens
Ezine divers
Madchat
Textes divers
Archives
 
Traductions LG
Toutes les traductions
Traductions Phrack
Toutes les traductions

Il y a actuellement 7 visiteurs connectés sur le site !

Google

Exploration de la configuration reseau
Exploration de la configuration reseau

 

Avant-propos
Ma configuration reseau
L'adressage ip
Les services reseaux
Service tournant en standalone
Les principaux outils de diagnostic réseau
Ping
Route
Traceroute
Netstat
Tcpdump
Nmap / nmapfe
Lsof
Resolv.conf
Telnet
Whois
Autres outils d'identification

 

Introduction:

Un réseau est un ensemble d'ordinateurs destinés à se parler entre eux . Si vous avez plus de deux ordinateurs ,on peut parler de réseau , si vous avez vos machines à portée de vue, il s'agit d'un petit réseau :un lan
Autrement pour des machines reliées entre elles à des milliers de kilomètres, il s'agit d'un wan.
En fait, les réseaux sont souvent reliés entre eux, pour en former de plus grands ; chaque petit réseau (appelé un `sous-réseau') peut être un élément d'un plus grand réseau.
La connexion entre deux ordinateurs est souvent appelée un `lien réseau'. Si un câble sort de l'arrière de votre machine et que celui-ci va vers une autre machine, c'est un lien réseau.

Configuration du réseau

Le hostname

Le nom de machine, ou hostname en bon français, est extrêmement important et il influe sur la configuration réseau mais aussi sur le fonctionnement (ou dysfonctionnement) du serveur X et donc de l'interface graphique.

* afficher le hostname : la commande hostname
* modifier le hostname : il suffit de modifier les fichiers suivants :
/etc/sysconfig/network (sur Redhat et Mandrake), /etc/HOSTNAME (sur slackware), /etc/hostname (sur Debian), et /etc/hosts.
* utilisation du hostname avec X Window : le fonctionnement du serveur X se fonde sur la variable d'environnement DISPLAY. exemple :
anne@pingu-~# echo $DISPLAY
:0
A gauche des ":", on trouve le hostname, ici sous-entendu : localhost ou 127.0.0.1, soit la machine locale. A droite, on trouve le numéro de serveur X et parfois le numéro d'écran.
Attention : toute modification du hostname en cours de fonctionnement sous interface graphique risque fort de vous faire perdre la main.
Notez que seul le superutilisateur peut changer les noms.

L'adressage ip

ifconfig
permet de connaitre les différentes ips de vos interfaces réseaux
la commande vous retourne:

eth0 Link encap:Ethernet HWaddr 00:E0:18:B5:D8:91
inet adr:82.216.95.106 Bcast:82.216.95.255 Masque:255.255.252.0
adr inet6: fe80::2e0:18ff:feb5:d891/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2038851 errors:0 dropped:0 overruns:0 frame:0
TX packets:68001 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:130867448 (124.8 MiB) TX bytes:43448161 (41.4 MiB)
Interruption:19 Adresse de base:0xd400

eth1 Link encap:Ethernet HWaddr 00:08:A1:4D:D4:47
inet adr:192.168.0.1 Bcast:192.168.0.255 Masque:255.255.255.0
adr inet6: fe80::208:a1ff:fe4d:d447/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:241 errors:0 dropped:0 overruns:0 frame:0
TX packets:8309 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:38661 (37.7 KiB) TX bytes:553175 (540.2 KiB)
Interruption:18 Adresse de base:0x8f00

lo Link encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:20813 errors:0 dropped:0 overruns:0 frame:0
TX packets:20813 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:7936684 (7.5 MiB) TX bytes:7936684 (7.5 MiB)

Les informations fournies par la commande :

eth0, ppp0, lo... nom de l'interface réseau
HWaddr adresse MAC ou matérielle
inet adr adresse IP liée à l'interface réseau
Bcast adresse de broadcast
Masque masque de réseau
UP état de l'interface réseau - un 1er élément de diagnostic d'une panne réseau (non fonctionnement : DOWN)
MTU taille maximum des trames physiques
RX / TX packets nombre de paquets arrivés à destination, perdus ou non reçus à cause de débordements (arrivent de manière trop rapide pour pouvoir être traités par le noyau) - autre élément de diagnostic notamment lorsque les transmissions deviennent très lentes voire inexistantes.
collisions se produit lorsque 2 machines émettent en même temps sur le réseau. Il n'y a pas lieu de s'inquiéter tant que le rapport (nombre de paquets total / nombre de collisions) reste inférieur à 30%.

Ou peut-on trouver la configuration ip?

* configuration de la (ou les) carte(s) réseau : les principaux fichiers de configuration se situent dans /etc/sysconfig/network-scripts pour Redhat et Mandrake, ou dans /etc/rc.d pour slackware ou /etc/networks.
Les fichiers s'appellent respectivement ifcfg-ethx (ou x est le numéro d'instance de la carte réseau), inet1 et interfaces.
* configuration du réseau et du routage : un fichier à connaitre, /etc/sysconfig/network pour Mandrake et Redhat, rc.inet1 pour slackware et interfaces pour Debian.

Les services réseaux configurés sur ma machine

Les protocoles TCP et UDP possèdent un concept de `ports'. A Chaque paquet correspond une zone où il stocke son `port de destination', qui dit à quel service le paquet est adressé. Par exemple, le port TCP 25 est le serveur de courrier, et le port TCP 80 le serveur Web (bien qu'on puisse parfois trouver des serveurs Web sur des ports différents). Une liste de ports peut être trouvée dans le fichier `/etc/services'.

Xinetd permet de sécuriser vos services contre d'éventuelles intrusions,et limite certains risques d'attaques par Deny of Services Qu'est-ce exactement:
C'est une version améliorée de inetd qui permet une configuration plus fine de l'accès aux services (interdiction d'utilisateurs, d'adresses,...). Il n'y a plus un fichier unique mais un fichier /etc/xinetd.conf qui renvoie à un répertoire /etc/xinetd.d. Celui-ci contient un fichier par service configuré.
La cause la plus fréquente de non fonctionnement d'un service c'est la désactivation de celui-ci (désactivation effectuée de base à l'installation du service pour des raisons de sécurité).
Il suffit alors d'ouvrir le fichier et de vérifier la valeur de la variable disable qui, par défaut, est yes.
Exemple :

root@pingu# vi /etc/xinetd.d/telnet

service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = yes
}

Dans ce cas de figure, le service telnet est désactivé. Pour l'activer, 2 étapes :
1. Modifier le fichier /etc/xinetd.d/telnet en remplaçant yes par no dans la variable disable.
2. Relancer xinetd pour la prise en compte de ce nouveau paramètre :
ps -ef | grep xinetd
root 973 1 0 Oct09 ? 00:00:00 xinetd -stayalive -reuse -pidfil
kill -HUP 973
#

 

Service tournant en standalone

Standalone : il s'agit d'un service qui n'est pas géré par le super démon xinetd.
Évidemment, la première chose à faire consiste à désactiver tous les serveurs inutiles ! Pour ce faire, il faut modifier la liste des services qu'on active dans les niveaux d'exécution (runlevels) qu'on utilise. On peut faire ça à l'aide d'outils ad-hoc (linuxconf, ntsysv, chkconfig...) ou bien en déplaçant à la main les liens symboliques dans /etc/rc.d/rc.d si on sait ce qu'on fait.
On peut aussi utiliser l'interface de gestion mcc/services (sous Mandriva) et désactiver les services désirés.
Ces modifications n'étant prises en compte qu'au prochain redémarrage, il faut aussi tuer les serveurs qui tournent déjà. Oui, évidemment, on peut aussi réamorcer la machine pour obtenir ce résultat, mais c'est pas très sport ;-). La façon propre de tuer ces serveurs consiste à utiliser les scripts qui s'occupent normalement de leur lancement et de leur arrêt. Par exemple, si on veut arrêter sendmail, on tape /etc/rc.d/init.d/sendmail stop.
exemple :
- mon serveur Apache ne fonctionne pas.
/usr/local/apache2/bin/apachectl status
httpd est arrêté
- on démarre le serveur Apache
/etc/rc.d/init.d/httpd start
Démarrage de httpd : [ OK ]
- on vérifie l'état du serveur
/etc/rc.d/init.d/httpd status
httpd (pid 14113 14112 14111 14110 14109 14106) en cours d'exécution

* Configurer le démarrage d'un service (cas général, applicable quelle que soit la distribution) : il suffit de créer le script de gestion du service dans /etc/rc.d/init.d puis les liens symboliques de démarrage et d'arrêt dans les répertoires d'état de marche.
Exemple : je veux que mon service bidule démarre aux niveaux 3, 4 et 5. On va procéder en 2 étapes :
- création d'un script de gestion des arguments start / stop : /etc/rc.d/init.d/bidule
- création des liens symboliques suivants :
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc0.d/K05bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc1.d/K05bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc2.d/K05bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc3.d/S95bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc4.d/S95bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc5.d/S95bidule
ln -s /etc/rc.d/init.d/bidule /etc/rc.d/rc6.d/K05bidule

Chkconfig permet de configurer le démarrage d'un service : chkconfig fournit une interface simple en ligne de commande pour maintenir l'arborescence /etc/rc[0-6].d en évitant à l'administrateur d'avoir à manipuler les liens symboliques de cette arborescence.
Cette implémentation de chkconfig est dérivée de la commande chkconfig présente sur IRIX. Plutôt que de maintenir des informations de configuration en dehors de l'arborescence /etc/rc[0-6].d, cette version gère directement les liens dans /etc/rc[0-6].d. Cela permet d'avoir au même endroit toutes les informations de configuration indépendemment des services lancés par init.
chkconfig propose cinq fonctions : ajouter un nouveau service à gérer, supprimer un service à gérer, lister l'état actuel des services à démarrer, changer les informations de démarrage des services et vérifier les informations de démarrage d'un service en particulier.
Exécuté sans argument, chkconfig renvoie sa syntaxe. Si seul le nom d'un service est fourni, il cherche si le service est configuré pour démarrer dans le niveau d'exécution courant. Si c'est le cas, chkconfig renvoie true, sinon il renvoie false. L'option --level peut être utilisé pour interroger un autre niveau d'exécution que celui en cours.
Si on spécifie un des paramètres on, off, ou reset après le nom d'un service , chkconfig change les informations de démarrage pour ce service. Les options on et off feront respectivement démarrer ou arrêter le service pour le niveau d'exécution spécifié. L'option reset réinitialise les informations de démarrage en fonction de ce qui est spécifié dans le script d'init du service.
Par défaut, les options on et off agissent sur les niveaux d'exécution 3, 4 et 5, alors que reset agit sur tous les niveaux d'exécution. L'option --level est utilisée pour spécifier quels niveaux d'exécution sont impactés.
Pour chaque service, il existe un script de démarrage ou d'arrêt dans chacun des niveaux d'exécution. Lorsque init change de niveaux d'exécution, il ne relancera pas un service déjà actif et n'arrêtera pas un service inactif.

OPTIONS
--level niveaux
Indique les niveaux d'exécution impactés. niveaux étant un chiffre de 0 à 7. Par exemple, --level 35 indique les niveaux d'exécution 3 et 5.
--add service
Cette option demande à chkconfig de prendre en charge un nouveau service. Lors de l'ajout d'un service, chkconfig vérifie que ce service possède bien un script de démarrage ou d'arrêt dans chaque niveau d'exécution. S'il en manque, chkconfig les créera en fonction des informations contenues dans le script d'init.
--del service Le service ne sera plus géré par chkconfig, et tous les liens symboliques concernant ce service dans /etc/rc[0-6].d seront supprimés.
--list service Liste tous les services gérés par chkconfig et indique s'ils doivent être lancés ou non pour chaque niveau d'exécution. Si un nom de service est fourni, seules les informations de ce service sont affichées.

 

Outils

Les principaux outils de diagnostic réseau

arp
Permet de visualiser et modifier la table arp stockée en cache. La table arp est une table de correspondance entre adresses IP et adresses matérielles (ou MAC).
Elle est générée au fur et à mesure grâce au protocole ARP et stockée en cache.
Chaque machine connectée au réseau possède un numéro d'identification de 48 bits. Ce numéro est un numéro unique qui est fixé dès la fabrication de la carte en usine. Toutefois la communication sur Internet ne se fait pas directement à partir de ce numéro (car il faudrait modifier l'adressage des ordinateurs à chaque fois que l'on change une carte réseau) mais à partir d'une adresse dite logique attribuée par un organisme: l'adresse IP.
Ainsi, pour faire correspondre les adresses physiques aux adresses logiques, le protocole ARP interroge les machines du réseau pour connaître leur adresse physique, puis crée une table de correspondance entre les adresses logiques et les adresses physiques dans une mémoire cache.
Lorsqu'une machine doit communiquer avec une autre, elle consulte la table de correspondance. Si jamais l'adresse demandée ne se trouve pas dans la table, le protocole ARP émet une requête sur le réseau. L'ensemble des machines du réseau vont comparer cette adresse logique à la leur. Si l'une d'entre-elles s'identifie à cette adresse, la machine va répondre à ARP qui va stocker le couple d'adresses dans la table de correspondance et la communication va alors pouvoir avoir lieu... La commande permet de détecter 2 types de problèmes : le fonctionnement au niveau hardware de la carte et la bonne correspondance entre une adresse IP et une carte réseau au moyen de son adresse MAC.
(cf. double attribution d'une adresse IP sur un réseau, spoofing, ...).
Exemple : Vous voulez vérifier que la seconde carte réseau appelée eth1 est opérationnelle. Dans un 1er temps, on va pinger la carte, ce qui va permettre d'alimenter la table arp.
ping 192.168.0.4
Une fois la table alimentée, on vérifie son contenu : la présence de l'adresse IP ET de l'adresse MAC

arp -a ? (192.168.0.4) at 52:54:05:F5:AD:0C [ether] on eth1 ? (192.168.0.1) at 00:04:76:8E:B2:90 [ether] on eth1 En cas d'erreur dans la table, il est inutile de pousser plus avant le diagnostic.

 

Ping

Il permet de détecter par l'envoi de paquets si une machine répond.
Exemple : Diagnostic de mon réseau
ping 192.168.0.3
PING 192.168.0.5 (192.168.0.5) from 192.168.0.3 : 56(84) bytes of data.
From 192.168.0.3 icmp_seq=1 Destination Host Unreachable
Plusieurs causes de non-fonctionnement : je vérifie:
- que l'adresse IP existe
- que le masque de sous-réseau est cohérent (ifconfig)
- que ma résolution de nom est opérationnelle (/etc/resolv.conf)
- que le routage est correctement configuré (commande route vue plus loin)

Si la commande ping fonctionne alors ce n'est ni un problème matériel, ni un problème de configuration IP. Toutefois le réseau peut subir des dysfonctionnements tout simplement parce qu'il est chargé.
On augmente alors la taille des paquets envoyés.

Exemple :

ping -s 128 192.168.0.1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.3 : 128(156) bytes of data.
136 bytes from 192.168.0.1: icmp_seq=1 ttl=128 time=0.583 ms
136 bytes from 192.168.0.1: icmp_seq=2 ttl=128 time=0.598 ms
136 bytes from 192.168.0.1: icmp_seq=3 ttl=128 time=0.640 ms
136 bytes from 192.168.0.1: icmp_seq=4 ttl=128 time=0.578 ms
--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% loss, time 3008ms
rtt min/avg/max/mdev = 0.578/0.599/0.640/0.038 m

Ceci permet d'approfondir le test. On vérifiera :
- les numéros de séquences (icmp_seq) : ils sont séquentiels et numérotent les paquets envoyés. Une surcharge réseau ou un câblage de mauvaise qualité par exemple entraine la perte de paquets (voir % loss).
- le temps de transmission (time) : plus il est long, plus le réseau est chargé.
Attention : si vous lancez un ping sur un serveur et que celui-ci ne répond pas, cela ne signifie pas forcément qu'il y ait un problème. En effet, les firewalls peuvent bloquer toute réponse à un ping et faire échouer toute tentative de ping sur eux.
La sortie de la commande ping permet aussi de connaître :
* L'adresse IP correspondant au nom de la machine distante ;
* Le numéro de séquence ICMP ;
* La durée de vie du paquet (TTL, Time To Live). Le champ de durée de vie (TTL) permet de connaître le nombre de routeurs traversés par le paquet lors de l'échange entre les deux machines. Chaque paquet IP possède un champ TTL positionné à une valeur relativement grande. A chaque passage d'un routeur, le champ est décrémenté. S'il arrive que le champ arrive à zéro, le routeur interprétera que le paquet tourne en boucle et le détruira. ;
* Le temps de propagation en boucle (round-trip delay) correspondant à la durée en millisecondes d'un aller-retour entre la machine source et la machine cible. Un paquet doit en règle générale posséder un temps de propagation inférieur à 200 ms ;
* Le nombre de paquets perdus.

 

Route

La commande route, tout comme ifconfig sert à la fois à connaître l'état de la table de routage de l'hôte et à configurer de nouvelles routes au besoin.
Une commande équivalente est netstat -r. La commande affiche la table de routage et effectue la résolution de nom dès que possible.
Les commandes route -n ou netstat -rn affichent le table de routage sans résolution de nom.

Exemple :
route
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.0.0 * 255.255.255.0 U 10 0 0 eth1
82.216.92.0 * 255.255.252.0 U 10 0 0 eth0
default ip-1.net-82-216 0.0.0.0 UG 10 0 0 eth0
route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 10 0 0 eth1
82.216.92.0 0.0.0.0 255.255.252.0 U 10 0 0 eth0
0.0.0.0 82.216.92.1 0.0.0.0 UG 10 0 0 eth0

Pour info : U = routeur installé et opérationnel ; G = passerelle distante ; H = destination est un hôte et non un réseau.
Un examen de la table de routage vous permet de vérifier par exemple que la machine sur laquelle vous travaillez et qui se situe derrière une passerelle a bien une route par défaut qui lui permet d'aller vers l'extérieur (Destination : default).
Vous ne pouvez pas atteindre l'extérieur car vous n'avez pas cette route, 2 solutions :
* vous ajoutez la route pour la session en cours :
route add default gw adresseIP_de_la_passerelle
* vous modifiez le fichier de configuration du routage de manière à ce que la table contienne la route pour toutes les sessions : /etc/sysconfig/network
Vous ne pouvez pas atteindre l'extérieur car vous avez une route erronée, 2 solutions :
* vous modifiez la route pour la session en cours :
route del default gw adresseIP_de_la_passerelle_erronée
route add default gw adresseIP_de_la_passerelle_correcte
* vous modifiez le fichier de configuration du routage de manière à ce que la table contienne la route correcte pour toutes les sessions : /etc/sysconfig/network

 

Traceroute

Vous ne parvenez pas à atteindre une URL ou un poste donné... Traceroute renvoie les informations sur la route suivie pour atteindre un hôte. Le résultat obtenu donne la liste des routeurs traversés.
Exemple :
traceroute to 192.168.0.3 (192.168.0.3), 30 hops max, 38 byte packets
1 mandriva (192.168.0.1) 2999.774 ms !H 3000.121 ms !H 3000.197 ms !H
Il s'agit d'une machine locale. Elle est située sur le même réseau, aucun routeur n'est traversé, l'adresse de destination est donc atteinte directement.

traceroute google.fr
traceroute to google.fr (216.239.59.104), 30 hops max, 38 byte packets
1 10.57.128.1 (10.57.128.1) 4.707 ms 5.303 ms 6.193 ms
2 10.1.56.13 (10.1.56.13) 6.284 ms 4.834 ms 6.216 ms
3 * * *
4 * 82.138.72.33 (82.138.72.33) 31.651 ms *
5 te3-1.core01.par01.atlas.cogentco.com (130.117.1.173) 20.092 ms 20.611 ms 20.077 ms
6 p5-0.core02.par02.atlas.cogentco.com (130.117.1.229) 20.605 ms 21.038 ms 20.262 ms
7 p15-0.core01.fra03.atlas.cogentco.com (130.117.0.17) 30.247 ms 34.641 ms 30.597 ms
8 t4-3.mpd01.fra03.atlas.cogentco.com (130.117.0.246) 30.112 ms 30.063 ms 30.146 ms

On a ici une adresse située à l'extérieur, tous les routeurs traversés sont indiqués et numérotés.
Dans l'exemple ci-dessus, l'hôte recherché a été trouvé. En cas de défaut, cette commande est très utile pour repérer le routeur sur lequel se situe le problème d'interconnexion.
En cas de défaillance sur le réseau ,traceroute s'avère utile comme dans l' Exemple :
traceroute 192.168.0.5
traceroute to 192.168.0.5 (192.168.0.5), 30 hops max, 38 byte packets
1 192.168.0.3 (192.168.0.3) 2999.119 ms !H 2994.720 ms !H 2999.823 ms !H
Cette fois-ci la commande nous donne des informations différentes : il lui est impossible de trouver la route et il affiche directement la destination avec un des codes d'erreur suivant :
!H : host unreachable
!N : network unreachable
!P : protocol unreachable

 

Netstat


La commande permet également d'obtenir des informations détaillées sur les connexions tcp ouvertes sur la machine :

Exemple :

netstat -i
Table d'interfaces noyau
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 10556560 0 0 0 516330 0 0 0 BMRU
eth1 1500 0 240227 0 0 0 304969 0 0 0 BMRU
lo 16436 0 61397 0 0 0 61397 0 0 0 LRU
Table d'interfaces noyau
Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 0 20103 0 0 0 18666 0 0 0 BMRU
eth1 1500 0 18453 0 0 0 19879 0 0 0 BMRU
lo 16436 0 466 0 0 0 466 0 0 0 LRU
ppp0 1492 0 20056 20103 0 0 18619 0 0 0 MOPRU
RX paquets reçus
TX paquets envoyés (transmis)
OK paquets reçus/envoyés correctement
ERR paquets reçus/envoyés avec des erreurs
DRP paquets reçus/envoyés droppés
OVR paquets reçus/envoyés retransmis

D'autres options de la commande permettent notamment de visualiser les ports ouverts : netstat -tu (tcp et udp).
Exemple :
[deny@ip-106 log]$ netstat -tu
Connexions Internet actives (sans serveurs)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 mandriva:squid mandriva:54076 TIME_WAIT
tcp 1 0 mandriva:59775 mandriva:squid CLOSE_WAIT
tcp 0 0 mandriva:squid mandriva:54077 TIME_WAIT
tcp 0 8760 ip-106.net-82-216-95.r:http ::ffff:195.77.63.25:42512 ESTABLISHED
[deny@ip-106 log]$ Utilisée avec l'argument -a, la commande netstat affiche l'ensemble des connexions et des ports en écoute sur la machine.
Utilisée avec l'argument -e, la commande netstat affiche les statistiques Ethernet.
Utilisée avec l'argument -n, la commande netstat affiche les adresses et les numéros de port en format numérique, sans résolution de noms.
Utilisée avec l'argument -o, la commande netstat détaille le numéro du processus associé à la connexion.
Utilisée avec l'argument -p suivi du nom du protocole (TCP, UDP ou IP), la commande netstat affiche les informations demandées concernant le protocole spécifié.
Utilisée avec l'argument -r, la commande netstat permet d'afficher la table de routage.
Utilisée avec l'argument -s, la commande netstat affiche les statistiques détaillées par protocole idéal pour les statistiques :
exemple :
[deny@localhost ~]$ netstat -s
Ip:
374616 total packets received
0 forwarded
0 incoming packets discarded
374423 incoming packets delivered
258906 requests sent out
1 dropped because of missing route
Icmp:
30 ICMP messages received
0 input ICMP message failed.
Histogramme d'entrée ICMP
destination unreachable: 24
echo requests: 6
14 ICMP messages sent
0 ICMP messages failed
Histogramme de sortie ICMP
destination unreachable: 6
echo request: 2
echo replies: 6
IcmpMsg:
InType3: 24
InType8: 6
OutType0: 6
OutType3: 6
OutType8: 2
Tcp:
6173 active connections openings
4055 passive connection openings
2320 failed connection attempts
296 connection resets received
7 connections established
365804 segments received
237293 segments send out
13314 segments retransmited
0 bad segments received.
3501 resets sent
Udp:
8206 packets received
4 packets to unknown port received.
0 packet receive errors
8280 packets sent

netstat avec les options -uta liste toutes les connexions ouvertes
netstat -uta
Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql-im *:* LISTEN
tcp 0 0 *:pop3s *:* LISTEN
tcp 0 0 localhost:10024 *:* LISTEN
tcp 0 0 localhost:10025 *:* LISTEN
tcp 0 0 localhost:10026 *:* LISTEN


Les options signifient :

* -u : afficher les connexions UDP.
* -t : afficher les connexions TCP.
* -a : afficher toutes les connexions quel que soit leur état.

Il se peut que vous n'ayez pas besoin des connexions UDP qui sont moins importantes la plupart du temps :

Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql-im *:* LISTEN
tcp 0 0 *:pop3s *:* LISTEN
tcp 0 0 localhost:57739 localhost:squid ESTABLISHED
tcp 0 0 localhost:57740 localhost:squid ESTABLISHED
tcp 0 631 mandriva:42035 195.95.194.11:http ESTABLISHED
tcp 0 0 localhost:squid localhost:60137 ESTABLISHED

Ce tableau vous indique qui, depuis l'adresse locale, est connecté à qui (à une adresse distante).
Chaque connexion a un état. Ici, on repère les états LISTEN et ESTABLISHED. De nombreux états sont possibles, en voici quelques un à connaître :
* ESTABLISHED : la connexion a été établie avec l'ordinateur distant.
* TIME_WAIT : la connexion attend le traitement de tous les paquets encore sur le réseau avant de commencer la fermeture.
* CLOSE_WAIT : le serveur distant a arrêté la connexion de lui-même (peut-être parce que vous êtes resté inactif trop longtemps ?).
* CLOSED : la connexion n'est pas utilisée.
* CLOSING : la fermeture de la connexion est entamée, mais toutes les données n'ont pas encore été envoyées.
* LISTEN : à l'écoute des connexions entrantes.


netstat -lt permet de lister des connexions en état d'écoute; l'option -l permettant de savoir quels ports de serveur sont susceptibles d'être utilisés en ce moment sur votre machine.

 

Tcpdump

Il s'agit d'un outil qui permet de visualiser les paquets qui circulent vers et/ou à partir d'une interface réseau et ce, en temps réel.
C'est à la fois un outil de diagnostic sécurité mais aussi un outil de détection d'anomalies de la configuration IP ou matérielle.
# tcpdump
tcpdump: listening on eth0
Il est possible de sélectionner les paquets à "écouter" en fonction d'expressions. Ainsi, ne seront affichées / traitées que les informations pour lesquelles le résultat de l'expression est vérifié. Une expression est composée d'un mot clé suivi d'une valeur numérique ou autre. Ainsi, il est possible de classer les mots clés en catégories :
# Les mots clés permettant de définir une direction. Entrent dans cette catégorie les mots src (source) et dst (destination). Il est possible de combiner ces deux mots clés avec les opérations logiques and (et) et or (ou). On peut ainsi définir avec précision la source et/ou la destionation des paquets qui nous intéressent.
# Les mots clés permettant de définir le type de valeur que nous préciserons. Il peut s'agir d'un hôte (host), d'un réseau (net) ou encore d'un port (port).
# Enfin, nous avons les mots clés concernant les protocoles. Ici, les mots sont suffisamment clairs pour se passer d'explications (par exemple, ip, tcp, udp ...)
Si tout ceci ne vous paraît pas limpide, nous allons tâcher de clarifier cela avec quelques exemples :
# tcpdump src 192.168.0.1
Ici, les seuls paquets affichés sont ceux en provenance de 192.168.0.1. Nous pouvons également préciser nos préférences en ajoutant un critère :
# tcpdump src 192.168.0.1 and port 80
Là, le seul port qui nous intéresse est 80 (http). Si nous poussons le vice, nous pouvons spécifier l'ensemble des paramètres nécessaires :
# tcpdump src host 192.168.0.1 and dst host 212.208.225.1 and port 53 and udp
Voici une ligne complète qui ne laisse vraiment passer que les paquets qui nous intéressent, c'est à dire, en provenance de 192.168.0.1 vers 212.208.225.1, sur le port 53 en udp. Et ce qui nous intéresse ici, ce sont les requêtes sur le serveur DNS du provider Internet.
Pour faire vos tests, utilisez cette commande (adaptée à vos besoins) sur une console virtuelle et sur une seconde console, lancez une requête sur le serveur DNS (nslookup www.linux.org par exemple). Vous verrez alors apparaître des lignes ressemblant à ceci sur la première console :
tcpdump: listening on eth0

22:33:29.070616 raven.32778 > ns1.rmcnet.fr.domain: 47038+[|domain] (DF)
22:33:29.072863 raven.32779 > ns1.rmcnet.fr.domain: 45315+[|domain] (DF)
22:33:29.128966 raven.32780 > ns1.rmcnet.fr.domain: 47039+[|domain] (DF)

Pour poursuivre avec cet exemple, nous allons maintenant utiliser deux des options de la commande tcpdump. Attention, il s'agit d'options qui ne concernent en rien la composition des expressions de filtrage :
# tcpdump -x -X -s 0 src host 192.168.0.1 and dst host 212.208.225.1 and port 53 and udp
Nous avons demandé l'affichage du contenu des paquets au format hexadécimal et ascii (-x -X) et ce, quelle que soit leur taille (-s 0). Nous obtenons les informations désirées
Mais la partie la plus interessante concerne les accès à un serveur POP3. Comme nous l'avons fait pour l'exemple précédent, nous pouvons capturer le contenu de paquets à destination d'un serveur POP3
# tcpdump -X -s 0 dst host 192.168.0.10 and src host 192.168.0.1 and port 110 and tcp
Et voici le suprenant résultat :

20:51:50.690745 193.253.217.180.42034 > 193.252.19.209.pop3: P 0:11(11) ack 79 win 5808 (DF)
0x0000 4500 003f 0000 4000 4006 c939 c1fd d9b4 E..?..@.@..9....
0x0010 c1fc 13d1 a432 006e b862 482d 520a 6b11 .....2.n.bH-R.k.
0x0020 8018 16b0 c3cf 0000 0101 080a 00a9 c278 ...............x
0x0030 0bfa 1f75 7573 6572 206f 6b6b 690d 0a ...uuser.bidon..
20:51:50.745300 193.253.217.180.42034 > 193.252.19.209.pop3: P 11:25(14) ack 84 win 5808 (DF)
0x0000 4500 0042 0000 4000 4006 c936 c1fd d9b4 E..B..@.@..6....
0x0010 c1fc 13d1 a432 006e b862 4838 520a 6b16 .....2.n.bH8R.k.
0x0020 8018 16b0 33d0 0000 0101 080a 00a9 c27e ....3..........~
0x0030 0bfa 1f7a 7061 7373 2079 746b 6b76 7875 ...zpass.coucou

0x0040 0d0a

La partie intéressante est bien sûr les deux derniers paquets. On lit clairement dans leur contenu ASCII les mentions "user.bidon" et surtout, "pass.coucou". En effet, dans la RFC 1725 décrivant le protocole Post Office en Version 3 (POP3), on découvre que les informations d'identification et d'authentification circulent de manière non chiffrée entre le client et le serveur.
Il serait possible en une seule journée de récupérer, grâce à tcpdump et un script Perl ou Awk, l'ensemble des noms d'utilisateurs et des mots de passe POP3 de toutes les personnes possédant un compte email dans une entreprise. Mais, dans la réalité, ceci est encore plus simple ...

Nmap/nmapfe

Les scanners de ports sont indispensables à ceux qui veulent attaquer un système. Les différentes méthodes pour la préparation d'une attaque sont les suivantes :
* scanner une machine ou un réseau, observer les services en cours et les systèmes qui les exécutent et s'appuyer sur les vulnérabilités connues de ces services ou de ces systèmes.
* scanner une machine ou un réseau à la recherche d'un service ou d'un système particulier (incluant la vérification de la version) dont la vulnérabilité est connue.
Pour cette raison, un administrateur préoccupé par la sécurité, devra scanner son réseau et y chercher les points faibles avant que d'autres, aux intentions moins avouables, ne s'en chargent.
Plusieurs scanners sont disponibles, mais dans cet article nous traiterons de nmap qui est certainement l'un des plus complets.
La syntaxe : nmap adresse_IP
Exemple :
# nmap -sS -O 192.168.0.3

Starting nmap V. 2.54BETA31 ( www.insecure.org/nmap/ )
Interesting ports on (192.168.0.3):
(The 1544 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
53/tcp open domain
80/tcp open http
3306/tcp open mysql

Remote operating system guess: Linux Kernel 2.4.0 - 2.4.17 (X86)
Uptime 2.279 days (since Fri Oct 4 16:24:45 2002)
Nmap run completed -- 1 IP address (1 host up) scanned in 4 seconds:!
Le scan réalisé ici permet de vérifier quels sont les ports ouverts et donc potentiellement vulnérables (grâce aux options -sS) et le système d'exploitation de la machine testée (grâce à l'option -O).
nmapfe est quant à lui une interface graphique (front end) à nmap.
La forme de scan la plus commune consiste à utiliser l'option -sT. Ce mode se base sur l'établissement de la connexion par TCP, plus connu sous le nom de "three way handshake".
Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2006-04-25 08:09 CEST
Interesting ports on mandriva (192.168.0.1):
(The 1655 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
443/tcp open https
3128/tcp open squid-http
3306/tcp open mysql
6000/tcp open X11
8080/tcp open http-proxy

Nmap finished: 1 IP address (1 host up) scanned in 0.348 seconds

Lsof

LiSt Open Files est une commande utile et puissante qui permet de lister les fichiers ouverts par les processus tournant sur le système. Sous Unix tout est fichier: les pipes sont des fichiers ainsi que les sockets ip, les repertoires et les devices et les inodes ...
Voir les fichiers utilisés par un processus réseau :
lsof|grep proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 2136 root cwd DIR 22,2 4096 2 /
proftpd 2136 root rtd DIR 22,2 4096 2 /
proftpd 2136 root txt REG 22,2 236456 244504 /usr/local/sbin/proftpd
proftpd 2136 root mem REG 22,2 89547 1661383 /lib/ld-2.2.5.so
proftpd 2136 root mem REG 22,2 23575 1661394 /lib/libcrypt-2.2.5.so
proftpd 2136 root mem REG 22,2 35340 1661460 /lib/libpam.so.0.75
proftpd 2136 root mem REG 22,2 12102 1661396 /lib/libdl-2.2.5.so
proftpd 2136 root mem REG 22,2 45415 1661416 /lib/libnss_files-2.2.5.so
proftpd 2136 root mem REG 22,2 46117 1661424 /lib/libnss_nisplus-2.2.5.so
proftpd 2136 root mem REG 22,2 89424 1661400 /lib/libnsl-2.2.5.so
proftpd 2136 root mem REG 22,2 16051 1661413 /lib/libnss_dns-2.2.5.so
proftpd 2136 root mem REG 22,2 68925 1661428 /lib/libresolv-2.2.5.so
proftpd 2136 root mem REG 22,21401027 651528 /lib/i686/libc-2.2.5.so
proftpd 2136 root 0u IPv4 19073 TCP *:ftp (LISTEN)
proftpd 2136 root 1u IPv4 19074 TCP *:46000 (LISTEN)
proftpd 2136 root 2u IPv4 19075 TCP *:47000 (LISTEN)
proftpd 2136 root 3u unix 0xc4a6c0a0 16891 socket
proftpd 2136 root 4r REG 22,2 1585 213675 /etc/passwd
proftpd 2136 root 5r REG 22,2 657 212895 /etc/group


COMMAND nom du processus
PID numéro de processus (obtenu aussi par la commande ps
USER identité sous laquelle est lancé le processus
FD file descriptor - mem : memory-mapped file ; txt : program text (code and data)...
TYPE type de noeud (ou inode) CHR :fichier spécial en mode caractère ; DIR : répertoire... plus de détails dans le man de lsof
DEVICE major et minor number pour un fichier spécial, protocole...
SIZE taille du fichier
NODE numéro d'inode
NAME nom du fichier ou point de montage

Voir si un fichier est utilisé par un processus réseau
Permet éventuellement de surveiller l'utilisation de fichiers dits sensibles pour la sécurité du système.

Exemple : je veux vérifier les éventuels accès au fichier /etc/passwd

lsof | grep /etc/passwd
proftpd 12586 root 4r REG 22,2 1585 213675 /etc/passwd
Lister les processus liés à un protocole et un port
On obtient alors une fonctionnalité similaire à la commande netstat -a filtrée en fonction d'un protocole et/ou d'un port.
Exemple : je souhaite lister les informations liées au protocole TCP et au port 80 (donc mon serveur web).
# lsof -i tcp:80 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME httpd 1136 root 16u IPv4 1963 TCP *:http (LISTEN) httpd 1139 root 16u IPv4 1963 TCP *:http (LISTEN) httpd 1140 root 16u IPv4 1963 TCP *:http (LISTEN) httpd 1141 root 16u IPv4 1963 TCP *:http (LISTEN) ....

Pour determiner qui est en train d'utiliser le binaire apache, /etc/passwd, quels fichiers sont ouverts sur le périphérique /dev/hda6 ou qui accéde à /dev/cdrom:

lsof `which apache2`
lsof /etc/passwd
lsof /dev/hda6
lsof /dev/cdrom
Pour déterminer quels fichiers sont ouverts par des processus dont le nom commence par "courier", à l'exclusion des utilisateurs dont le nom est "deny":
lsof -c courier -u ^deny
Pour avoir les processus ouverts par l'utilisateur apache et deny:
lsof -u apache,deny
Afficher les fihciers utilisés par le processus dont le PID est 30297:
lsof +p 30297
Chercher toutes les instances ouvertes du repertoire /tmp et tout les fichiers et repertoires qu'il contient:
lsof +D /tmp
Lister toutes les sockets internets ouvertes et celles relatives au port 80:
lsof -i
lsof -i :80

Resolv.conf

Ce fichier permet la configuration d'un client DNS.
C'est lui qui permet l'utilisation de serveurs DNS pour la résolution de noms en adresse IP (ce qui vous permet par exemple de taper une URL dans un navigateur et non une adresse IP). Un fichier mal configuré vous empêchera notamment de surfer.
Rappel de la syntaxe :
cat /etc/resolv.conf
domain nom_de_domaine
nameserver adresseIP_DNS_Primaire
nameserver adresseIP_DNS_Secondaire
Attention : nameserver est un mot-clé à recopier tel que.domain contient le nom de domaine du provider qui vous a fourni les DNS ou celui de votre domaine, si vous disposez d'un serveur DNS

Telnet

Telnet permet d'acceder à une machine distante. C'est aussi un excellent outil de diagnostic et de vérification du fonctionnement ou non d'un service en se connectant sur son port. Il permet également de vérifier la validité d'une règle de firewall.
La syntaxe : telnet
Exemple :
Je souhaite vérifier le bon fonctionnement de mon service ftp. Après vérification dans /etc/services, je sais que le port correspondant au serveur ftp est le 21.
* 1er cas de figure :
telnet 192.168.0.3 21
Trying 192.168.0.3...
Connected to 192.168.0.3.
Escape character is '^]'.
220 ProFTP Server Ready
La connexion est réussie, le serveur est opérationnel.
* 2e cas de figure :
telnet 192.168.0.3 21
Trying 192.168.0.3...
telnet: connect to address 192.168.0.3: Connection refused
La connexion est impossible, le service n'est pas disponible.

 

Whois

Le whois est l'annuaire mondial des responsables de sites internet qui est constitué à l'occasion de l'enregistrement des noms de domaine.
Une requête Whois permet de connaître des informations sur un nom de domaine Exemple:
whois google.fr

 

Autres outils d'identification

Ci-dessous, trois autres outils qui vous permettront de faire de la résolution de nom ou de la résolution inverse avec des informations complémentaires sur l'identité du serveur :
* nslookup : utilisable en mode interactif ou non, à partir d'une adresse IP ou d'un nom.
Exemple :
nslookup
root@ip-106 log]# nslookup google.fr
Server: 81.220.255.4
Address: 81.220.255.4#53
La commande vous donne les infos suivantes :
o Server, Address : le serveur DNS qui effectue la résolution
o Non-authoritative answer : si la ligne est présente, cela signifie que l'adresse était présente dans le cache du serveur DNS.
o Name, Addresse : résultat de la commande
* dig : la commande nslookup tombant en désuétude, elle est remplacée aujourd'hui de plus en plus par dig. Elle dispose de fonctionnalités supplémentaires.
Exemple :
# dig google.fr
La sortie standard de la commande est sensiblement la même avec quelques précisions supplémentaires (durée de réalisation de la requête, DNS du domaine...)
* host : sans option, la sortie est extrêmement simple, il s'agit uniquement de la résolution.

Quelques exemples avec dig

Voir les mx d'un domaine :
dig @193.41.123.2 mx midia.fr +short
10 mail.midia.fr.


Connaitre l'adresse ip du serveur dns gerent un domaine :

dig @193.41.123.2 mail.midiatek.com +short
66.199.187.181

Voir les hostnames des serveurs gerent le domaine system-linux.eu :
dig NS system-linux.eu +short
ns.kimsufi.com.
osirix.system-linux.eu.


Trouver le hostname complet en ayant une ip (reverse):

dig -x 92.121.176.140 +short
srvlol.system-linux.eu.

Voir les 2 serveurs DNS et l'adresse IP du champ "A" d'un domaine :

dig system-linux.fr A

Sources de l'article


 

Blog
Le blog
La radio
La Radio
Boutique
La boutique du Geek
Php/Mysql
Formulaire en php
Administrer un serveur Mysql
Session en php
Gerer ses bases mysql
Les bases php
Securiser ses scripts PHP
Controler ses programmes avec RATS
Convertir une base sql en utf8
Astuces php
Le fichier php.ini
Programmation
Python rapide
Tutorial Python
Tutorial Perl
Tutorial Perl complet
Tutoriel ruby
Tutoriel C
Introduction à gawk
Filtres et utilitaires
Find
Programmation Shell
Ecriture de scripts bash
Expressions regulieres
Vi
Introduction a Javascript
Compiler avec gcc
Astuces en Bash
Cracking
Tutoriel Assembleur
Guide du cracking pour débutant
Assembleur
Manual Unpacking
Techniques de Protection
Différentes failles Web
Arp spoofing dans un réseau switché
Les intrusions
Les attaques externes
Defacage
Defacage complet
Buffer overflow
Netcat
Injection sql
Injection sql(suite)
John the Ripper
Spoofer un email
Utiliser google
La faille system
Usurper une identité
Le rooting
Shellcode sous Unix
La faille race condition
La faille xss
La faille xss (2)
Attaques sur un routeur
P2P
Azureus pas-a-pas
News
Lire les news de Linux-pour-lesnuls.com au format RSS
Distros
Gestion des paquets debian
101 commandes debian
Jeu
Webtarot
Graphisme
Effet neon dans GIMP
Effet vapeur dans GIMP
Cours fonctionnalités de GIMP
Redimentionner une image avec GIMP
Redimentionner une photo pour en faire un cadre avec gimp
Morphing avec gimp
Détourer avec gimp
Réduire le poids d'une image avec gimp
Caricature avec gimp
Humour
Ensemble
Divers