FAQ LinuxConsultez toutes les FAQ
Nombre d'auteurs : 56, nombre de questions : 260, dernière mise à jour : 27 juin 2022 Ajouter une question
Cette FAQ a été réalisée à partir des contributions des membres du forum Linux de Developpez.com et de l'équipe de rédaction. Merci à eux !
Nous sommes perpétuellement à l'écoute de vos suggestions et corrections, n'hésitez pas à nous en faire part sur le forum.
- Comment télécharger de nombreux fichiers à la volée ?
- Comment pinger tous les postes d'un réseau ?
- Puis-je naviguer sur le web en mode console ?
- Comment faire une passerelle minimum sous Linux ?
- Comment trouver son adresse IP en ligne de commande ?
- Comment connecter deux machines en rsh ?
- Je n'arrive pas à surfer, comment faire un premier diagnostic ?
- À quoi servent les fichiers /etc/hosts et /etc/host.conf ?
- Comment se connecter en ssh sans mot de passe ?
- Comment accéder à plusieurs réseaux Ethernet avec une seule carte physique ?
- Comment réinitialiser la connexion à internet ou au réseau ?
- Comment bloquer Skype avec iptables ?
- Comment passer de ifconfig (net-tools ) à ip (iproute2)
Placez les URL dans un fichier texte (nommé par exemple pg_dwd) et tapez simplement :
Code bash : | Sélectionner tout |
$ wget -i pg_dwd
Sur un réseau /24 (anciennement "classe C") :
Code bash : | Sélectionner tout |
$ ping -b 192.168.0.255
L'adresse IP dépend de l'adresse de broadcast (diffusion) du réseau.
Si par exemple vous avez un serveur DHCP qui vous fournit automatiquement une IP :
Code bash : | Sélectionner tout |
$ ifconfig ethX
Cette commande vous donnera l'adresse de broadcast.
Oui. Vous pouvez utiliser Links ou Lynx (présents dans la plupart des distributions) ou encore w3m.
Mettez dans un script au démarrage (par exemple : /etc/rc.local)
Code bash : | Sélectionner tout |
1 2 3 4 5 6 7 8 | #Active le forwarding dans le kernel echo 1 > /proc/sys/net/ipv4/ip_forward # Efface les règles actuelles iptables -F # idem iptables -t nat -F # Active le routage vers ppp0 iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE |
Voici diverses méthodes pour récupérer uniquement l'adresse IP en ligne de commande, utile pour intégrer dans un script.
Si vous avez une interface Ethernet :
Code bash : | Sélectionner tout |
$ ifconfig eth0 | grep inet | cut -d":" -f2 | cut -d" " -f1
Si vous avez une interface PPP :
Code bash : | Sélectionner tout |
$ /sbin/ifconfig | grep "P-t-P" | sed "s/^[: a-z]*\([.0-9]*\).*/\1/"
Pour trouver l'adresse de la passerelle :
Code bash : | Sélectionner tout |
1 2 | $ awk '/eth0/{print $1}' /proc/net/arp 192.168.0.101 |
Ou bien (toujours pour la passerelle) :
Code bash : | Sélectionner tout |
$ grep $(awk '/\t0003\t/{print $1}' /proc/net/route) /proc/net/arp | cut -d ' ' -f1
Ou encore :
Code bash : | Sélectionner tout |
$ grep $(netstat -arn |grep UG |awk '{ print $8 }' ) /proc/net/arp |awk ' { print $1 }'
ifconfig étant déprécié, il faut dorénavant utiliser la commande ip :
Code bash : | Sélectionner tout |
1 2 |
ip a |
Depuis la machine A, nous souhaitons établir une connexion rsh vers une machine B pour un utilisateur.
Entre les deux machines, il est important d'avoir le même UID pour l'utilisateur.
1) Configurer la machine B
Dans le répertoire home du user, créer un fichier .rhosts (700 au niveau des droits) contenant :
Code : | Sélectionner tout |
machineA le_user
Code : | Sélectionner tout |
x.x.x.x machineA
Code : | Sélectionner tout |
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
Dans /etc/hosts, rajouter la machineB :
Code : | Sélectionner tout |
y.y.y.y machineB
Lancer une commande depuis la machine A :
Code bash : | Sélectionner tout |
rsh machineB "hostname"
Si le hostname de la machine B apparaît, c'est bon.
Voici dans l'ordre la liste des opérations pour diagnostiquer. Suivant leurs succès/échecs, vous pouvez ainsi en déduire votre problème.
Si vous utilisez un proxy, vérifiez que votre navigateur est bien configuré pour passer par le proxy.
Pour vous assurer que c'est votre navigateur qui pose problème, essayez :
Code bash : | Sélectionner tout |
$ ping www.google.com
Si le ping est bon, alors c'est le navigateur. Sinon, affichez /etc/resolv.conf :
Code bash : | Sélectionner tout |
$ more /etc/resolv.conf
Vérifiez que la ligne nameserver x.x.x.x contient bien l'adresse IP du serveur DNS de votre FAI. Modifiez la ligne le cas échéant et recommencez le ping www.google.com.
Si le fichier est bien renseigné, faites un :
Code bash : | Sélectionner tout |
$ ping 216.239.57.104
C'est l'adresse IP de Google.
Le ping est bon, alors tout va bien, vous avez bien un accès au web. Vérifiez l'adresse DNS et le fichier /etc/resolv.conf
Votre ping ne passe pas ? La connexion n'est pas établie. Vérifiez votre configuration Ethernet, adresse IP/passerelle grâce à la commande ifconfig.
Faites un ping de votre passerelle :
Code bash : | Sélectionner tout |
$ ping x.x.x.x
Si ce ping passe bien, mais pas le ping de 216.239.57.104, alors votre problème se trouve au niveau du routeur.
/etc/hosts contient une liste d'associations nom de machine - adresse IP permettant de contourner la résolution de nom classique (qui interroge les serveurs DNS) pour quelques serveurs dont on connaît l'adresse. Typiquement utilisé pour renseigner des noms de machines locales, plus facilement accessibles par leur nom qu'en tapant l'adresse complète. Le format du fichier est très simple :
Code bash : | Sélectionner tout |
1 2 3 | 127.0.0.1 localhost.localdomain localhost 192.168.1.11 mamachine 192.168.1.12 monpc lepc |
En première colonne se trouve l'adresse de la machine, ensuite, en 2e colonne (séparée par un caractère espace ou une tabulation) il y a le nom correspondant, suivi éventuellement par ses alias.
/etc/host.conf définit la séquence de recherche pour la résolution de nom. En général on trouve ceci :
Code bash : | Sélectionner tout |
1 2 | order hosts,bind
multi on |
Cela signifie que le résolveur commencera par chercher dans le fichier /etc/hosts, puis interrogera le DNS. Le multi on veut simplement dire que le résolveur renverra toutes les adresses qu'il trouve pour un nom inscrit dans le fichier hosts, et non pas seulement la première. C'est l'option par défaut sous Debian et dans d'autres distributions aussi.
Le but de l'opération est que l'utilisateur A de la machine Source se connecte comme utilisateur B de la machine Destination. L'opération est un transfert de clé publique entre votre Source et votre Destination.
Sur la Source :
En tant qu'utilisateur A, vous devez générer une paire de clés RSA privée/publique :
Code bash : | Sélectionner tout |
$ ssh-keygen -t rsa -b > nombre de bits de la clé < -N ""
Nous vous conseillons 4096 pour la complexité de la clé.
Deux fichiers sont apparus dans ~/.ssh :
- id_rsa
- id_rsa.pub
id_rsa correspond à la clé privée
id_rsa.pub correspond à l'autre clé, celle publique.
Sur la Destination :
La clé publique va être recopiée sur la Destination dans ~/.ssh/authorized_keys :
Vous avez un fichier dans le format suivant :
Code bash : | Sélectionner tout |
$ ssh-rsa > la clé publique< A@Source
Maintenant, depuis la machine Source en utilisateur A, il vous suffit de faire :
Code bash : | Sélectionner tout |
$ ssh B@Destination
Il est aussi possible de copier la clé avec la commande ssh-copy-id :
Code bash : | Sélectionner tout |
$ ssh-copy-id B@Destination
Linux accepte la création d'interfaces réseaux virtuels de manière simple, il suffit de configurer une carte eth0:1. Exemple :
Code bash : | Sélectionner tout |
$ /sbin/ifconfig eth0:1 192.6.1.23 broadcast 192.6.1.255 netmask 255.255.255.0
Ceci autant de fois que l'on désire d'interfaces différentes.
Outre les outils graphiques qui peuvent être inclus dans votre distribution, la désactivation et l'activation d'une interface réseau se font respectivement par les commandes ifdown et ifup, en passant en argument le nom de l'interface.
L'interface pour un modem se nomme ppp0, pour une carte réseau eth0. Ainsi, pour réinitialiser la connexion du modem, cela donne :
Code bash : | Sélectionner tout |
1 2 | $ /sbin/ifdown ppp0 $ /sbin/ifup ppp0 |
Pour connaître quelles sont les interfaces réseau sur votre machine, y compris les inactives :
Code bash : | Sélectionner tout |
$ /sbin/ifconfig -a
Code bash : | Sélectionner tout |
$ ip -a
Avant toute chose, plantons le décor : nous avons un réseau local, un firewall, et l'internet.
Code : | Sélectionner tout |
LAN <====> Firewall <====> Internet
- On ne maîtrise pas les machines du réseau local (donc on ne peut pas désinstaller Skype)
- Le firewall est déjà configuré de façon assez restrictive. Le trafic autorisé est donc très restreint (HTTP et HTTPS au moins, plus une poignée de trucs en plus comme le NTP, l'IRC, etc.)
- Comme le firewall laisse passer le HTTPS : Skype passe (d'ailleurs le HTTP suffirait s'il n'y a pas de filtre applicatif HTTP). Nous désirons cependant bloquer Skype du LAN vers internet.
Après quelques recherches, j'ai noté quelques aspects du protocole Skype qui semblent intéressants :
Au tout début du protocole, Skype tente de se connecter à un super nœud. Un super nœud c'est, en substance, un utilisateur normal qui a été élu pour tenir la fonction de super nœud en vertu de sa bande passante et de son uptime au-dessus du lot. Un super nœud attend les connexions sur un port préférentiel qu'il définit arbitrairement et aléatoirement, mais également sur les ports 80 et 443.
Comme les super nœuds sont des utilisateurs normaux, Skype n'embarque pas de liste de super nœuds "en dur" dans l'exécutable, c'est une liste dynamique et on ne peut donc bien entendu pas bloquer toutes les IP des super nœuds en dur sur le firewall. Chaque entrée de la liste est constituée d'un couple : adresse IP du super nœud et port préférentiel du super nœud (ce port étant choisi aléatoirement par le super nœud).
Skype tente donc de se connecter de la façon suivante à un super nœud (dès qu'une connexion est établie, les étapes suivantes ne sont, bien entendu, pas tentées) :
- tentative de connexion en UDP aux super nœuds sur leur port préférentiel ;
- tentative de connexion en TCP aux super nœuds sur leur port préférentiel ;
- tentative de connexion en TCP aux super nœuds sur le port 80 (HTTP) ;
- tentative de connexion en TCP aux super nœuds sur le port 443 (HTTPS).
Généralement donc, sur un réseau firewallé, Skype commence à jouer les passe-muraille à partir de l'étape 3.
Une fois connecté à un super nœud, le protocole de connexion continue, mais cette suite ne nous intéressera pas puisque nous allons tenter d’empêcher toute connexion à un super nœud (ce qui fait abandonner à Skype la tentative de connexion et remplit donc notre cahier des charges : Skype est bloqué !)
Si vous avez bien suivi, vous avez déjà deviné comment nous proposons de bloquer Skype.
Le principe : lorsque Skype tente de connecter des super nœuds en UDP sur leur port préférentiel, cela se repère aisément au niveau du firewall (les ports étant "exotiques" il y a bien peu de chances qu'ils soient autorisés à sortir) et on va donc, grâce au module récent d'iptables, mémoriser les IP des super nœuds. Ensuite l'idée est simple : toujours grâce au module "récent" d'iptables, on DROP tous les paquets (TCP et UDP, sur tous les ports, ou au moins 80 et 443) en provenance de ces super nœuds pendant 10 minutes. De cette façon Skype ne parvient jamais à connecter un Super Nœud (puisque nous bloquons les SYN retour) et il abandonne les tentatives de connexions.
Bien entendu, cette méthode a quelques "désagréments" :
- si, par malheur, un interlocuteur extérieur autorisé se trouve être un super nœud que quelqu'un du réseau local tente de contacter, il risque de ne plus être accessible depuis le réseau local ;
- si un individu mal intentionné sur le réseau local est au courant du fonctionnement de ce filtrage il lui est plus qu'aisé de couper toute communication entre les serveurs de son choix et le réseau local (joli DoS encore une fois, au moins pour les ports 80 et 443).
En résumé : cette méthode est utilisable pour des réseaux où la sureté de fonctionnement n'est pas critique (tout à fait au hasard on va dire : sur le réseau local d'une résidence étudiante par exemple ^_^ ).
Maintenant place au code :
Code bash : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/bash #.................Début du script de firewall #.................flush des tables principalement #premiere regle a mettre : on drop tout ce qui vient d'une ip identifiee comme super noeud. iptables -A FORWARD -m recent --rcheck --name skype_super_noeuds --second 600 -j LOG iptables -A FORWARD -m recent --rcheck --name skype_super_noeuds --second 600 -j DROP #.................suite du script de firewall, #.................éventuel nat, #.................tout les jumps en ACCEPT y compris sur ESTABLISHED #.................etc #en fin de script on memorise les ip des super noeuds grace a la tentative d'udp sur port bizarre iptables -A FORWARD -p udp -m recent --name skype_super_noeuds --rdest --set #on memorise toutes les autres tentatives bizarre, #en effet j'ai cru remarquer que pour certains Super Noeud skype tente directement en tcp sans passer par la case udp... iptables -A FORWARD -p tcp -m recent --name skype_super_noeuds --rdest --set |
Étant donné que Skype peut aussi passer les proxy applicatifs via httpS (port 443) et comme nous ne voulons pas bloquer HTTPS, nous n'avons trouvé qu'une solution qui ne nous a pas franchement satisfaits et que nous n'avons d'ailleurs pas testée ; à savoir : bloquer les accès HTTPS sur IP n'ayant pas de résolution DNS au niveau du proxy... d'où la solution de remplacement que nous proposons et qui se passe de proxy applicatif (plutôt gourmand en CPU).
Afficher les interfaces réseaux :
net-tools : ifconfig -a
iproute2: ip -a
Activer une interface :
net-tools : ifup <interface>ou ifconfig up <interface>
iproute2: ip link set <interface> up
Désactiver une interface :
net-tools : ifdown <interface>ou ifconfig down <interface>
iproute2: ip link set <interface> down
Ajouter/supprimer une adresse réseau :
net-tools : ifconfig <interface> add/del <adresse IP>
iproute2: ip addr add/del <adresse IP> dev <interface>
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.