admin:index
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| admin:index [2016/03/11 09:07] – [Administration des Réseaux] orel | admin:index [2024/03/18 15:06] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 6: | Line 6: | ||
| * [[admin: | * [[admin: | ||
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| - | * [[admin: | + | * [[admin: |
| + | * [[admin: | ||
| + | * [[admin: | ||
| Pour tester les TPs sur votre machine, c'est [[admin: | Pour tester les TPs sur votre machine, c'est [[admin: | ||
| - | ==== TP1 ==== | + | Console Qemu : Ctrl-A + C puis system_reset pour reboot une machine. |
| - | Lancez le réseau virtuel avec QEMU. Entrez le login //root//, il n'a pas de // | ||
| - | Pour configurer deux machines dans le réseau local 192.168.0.0/ | ||
| - | immortal$ ifconfig -a | ||
| - | immortal$ ifconfig eth0 192.168.0.1/ | ||
| - | immortal$ ifconfig eth0 192.168.0.1 netmask 255.255.255.0 | ||
| - | opeth$ ifconfig eth0 192.168.0.2/ | ||
| - | opeth$ ping 192.168.0.1 | ||
| - | Avec le fichier de configuration / | ||
| - | <code bash / | ||
| - | # loopback | ||
| - | auto lo | ||
| - | iface lo inet loopback | ||
| - | |||
| - | # interface eth0 | ||
| - | auto eth0 | ||
| - | iface eth0 inet static | ||
| - | address 192.168.0.1 | ||
| - | netmask 255.255.255.0 | ||
| - | </ | ||
| - | |||
| - | On recharge la configuration : | ||
| - | |||
| - | $ / | ||
| - | |||
| - | |||
| - | Enjoy ! | ||
| - | |||
| - | |||
| - | ==== TP2 (Routage) ==== | ||
| - | |||
| - | __Memento__ | ||
| - | |||
| - | * Activer le routage sur une machine (ip forward) : '' | ||
| - | * Afficher la table de routage : '' | ||
| - | * Définir une route par défaut : '' | ||
| - | * Ajouter une route vers un réseau : '' | ||
| - | * Ajouter une route vers une machine particulière : '' | ||
| - | * Pour supprimer une règle, il taper la commande '' | ||
| - | |||
| - | __Routage__ | ||
| - | |||
| - | Considérons le réseau 147.210.0.0/ | ||
| - | |||
| - | opeth (eth0,13.1) --- (eth0,13.2) immortal (eth1,12.2) --- | ||
| - | | | ||
| - | grave (eth1, | ||
| - | | | ||
| - | nile (eth0,16.2) --- (eth1,16.1) syl (eth0,14.2) --- | ||
| - | |||
| - | Voici un résumé des commandes à taper sur chaque machine pour que toutes communiquent ! | ||
| - | |||
| - | < | ||
| - | opeth$ ifconfig eth0 147.210.13.1/ | ||
| - | opeth$ route add default gw 147.210.13.2 | ||
| - | |||
| - | nile$ ifconfig eth0 147.210.16.2/ | ||
| - | nile$ route add default gw 147.210.16.1 | ||
| - | |||
| - | immortal$ ifconfig eth0 147.210.13.2/ | ||
| - | immortal$ ifconfig eth1 147.210.12.2/ | ||
| - | immortal$ route add default gw 147.210.12.1 | ||
| - | immortal$ echo 1 > / | ||
| - | |||
| - | syl$ ifconfig eth0 147.210.14.2/ | ||
| - | syl$ ifconfig eth1 147.210.16.1/ | ||
| - | syl$ route add default gw 147.210.14.1 | ||
| - | syl$ echo 1 > / | ||
| - | |||
| - | grave$ ifconfig eth0 147.210.12.1/ | ||
| - | grave$ ifconfig eth1 147.210.14.1/ | ||
| - | grave$ route add -net 147.210.13.0/ | ||
| - | grave$ route add -net 147.210.16.0/ | ||
| - | grave$ echo 1 > / | ||
| - | </ | ||
| - | |||
| - | En cas de problème, il faut effectuer un diagnostic avec les commandes //ping// et //tcpdump -i any//. Lorsqu' | ||
| - | |||
| - | __ARP__ | ||
| - | |||
| - | Pour afficher le cache ARP, il suffit de taper la commande //arp -n//. | ||
| - | |||
| - | __Wireshark__ | ||
| - | |||
| - | |||
| - | Pour utiliser Wireshark depuis en exportant une capture depuis la machine virtuelle // | ||
| - | |||
| - | < | ||
| - | immortal$ mount /mnt/host -o remount,rw | ||
| - | immortal$ tcpdump -i eth0 | ||
| - | immortal$ tcpdump -i eth0 -s 1500 -w / | ||
| - | immortal$ | ||
| - | </ | ||
| - | |||
| - | Votre fichier //capture// se trouve dans le répertoire UML-TMP/ | ||
| - | |||
| - | ==== TP3 (Scapy et Divers Trucs) ==== | ||
| - | |||
| - | |||
| - | __Scapy__ | ||
| - | |||
| - | Un peu de Scapy avec l' | ||
| - | |||
| - | Voici un exmple pour construire un message de type ICMP/IP Echo-Request (ping). La fonction show() montre le contenu des headers & payloads pour ce message. | ||
| - | |||
| - | <code python> | ||
| - | $ scapy | ||
| - | Welcome to Scapy (2.2.0) | ||
| - | >>> | ||
| - | >>> | ||
| - | ###[ IP ]### | ||
| - | version= 4 | ||
| - | ihl= None | ||
| - | tos= 0x0 | ||
| - | len= None | ||
| - | id= 1 | ||
| - | flags= | ||
| - | frag= 0 | ||
| - | ttl= 64 | ||
| - | proto= icmp | ||
| - | chksum= None | ||
| - | src= 192.168.0.1 | ||
| - | dst= 192.168.0.2 | ||
| - | \options\ | ||
| - | ###[ ICMP ]### | ||
| - | type= echo-request | ||
| - | code= 0 | ||
| - | | ||
| - | id= 0x0 | ||
| - | seq= 0x0 | ||
| - | >>> | ||
| - | </ | ||
| - | |||
| - | Même chose avec un message TCP/IP à destination de 192.168.0.1 (port 80) avec le flag TCP SYN (demande d' | ||
| - | |||
| - | |||
| - | <code python> | ||
| - | >>> | ||
| - | >>> | ||
| - | >>> | ||
| - | >>> | ||
| - | </ | ||
| - | |||
| - | Voici un exemple de script //Scapy// pour faire un traceroute. | ||
| - | |||
| - | <code python traceroute.py> | ||
| - | # | ||
| - | |||
| - | import sys | ||
| - | from scapy.all import * | ||
| - | |||
| - | def mytraceroute(target, | ||
| - | for x in range(maxttl): | ||
| - | rsp = sr1(IP(dst=target, | ||
| - | if rsp.getlayer(ICMP).type==11 and rsp.getlayer(ICMP).code==0: | ||
| - | print rsp.src | ||
| - | |||
| - | mytraceroute(" | ||
| - | </ | ||
| - | |||
| - | |||
| - | Un autre script //Scapy// pour faire un Syn Scan. | ||
| - | |||
| - | <code python synscan.py> | ||
| - | # | ||
| - | |||
| - | import sys | ||
| - | from scapy.all import * | ||
| - | |||
| - | def synscan(host): | ||
| - | ports = range(1000) | ||
| - | ip = IP(dst=host) | ||
| - | tcp = TCP(dport=ports, | ||
| - | | ||
| - | for sent,rcvd in ans: | ||
| - | if rcvd.haslayer(TCP): | ||
| - | # if rcvd.getlayer(TCP).flags & 2: | ||
| - | if rcvd.sprintf(" | ||
| - | print sent.dport | ||
| - | | ||
| - | synscan(" | ||
| - | </ | ||
| - | |||
| - | Une autre version avec un XMAS scan... | ||
| - | |||
| - | <code python xmasscan.py> | ||
| - | # | ||
| - | |||
| - | from scapy.all import * | ||
| - | |||
| - | ports = range(1, | ||
| - | ipdst = " | ||
| - | |||
| - | for i in ports: | ||
| - | pkt=IP(dst=ipdst)/ | ||
| - | a = sr1(pkt, verbose=False, | ||
| - | if a is None: | ||
| - | print '{} is open' | ||
| - | </ | ||
| - | |||
| - | Pour finir avec la connexion TCP/IP, c'est ici : https:// | ||
| - | |||
| - | __Telnet__ | ||
| - | |||
| - | Ouverture d'une connexion TCP/IP avec Telnet vers un serveur web sur immortal. | ||
| - | |||
| - | < | ||
| - | $ telnet @immortal 80 | ||
| - | GET / HTTP/ | ||
| - | # enter again | ||
| - | |||
| - | # la réponse HTTP du serveur web... | ||
| - | HTTP/1.1 200 OK | ||
| - | ... | ||
| - | ... | ||
| - | </ | ||
| - | |||
| - | Pour sortir d'un Telnet, tapez " | ||
| - | |||
| - | __ HTTP Connect__ | ||
| - | |||
| - | Considérons une machine A qui souhaite ouvrir une session telnet (port 23) sur une machine C en utilisant une connexion " | ||
| - | |||
| - | < | ||
| - | A$ telnet @B 80 | ||
| - | CONNECT @C:23 HTTP/ | ||
| - | # enter again | ||
| - | C$login: xxxxxx | ||
| - | C$password: | ||
| - | C$ ... | ||
| - | | ||
| - | </ | ||
| - | |||
| - | |||
| - | __Attaque Man-in-the-Middle__ | ||
| - | |||
| - | Dans un LAN, //syl// souhaite intercepter les échanges entre //nile// et // | ||
| - | |||
| - | < | ||
| - | syl$ arpspoof -i eth0 -t @immortal @nile &> /dev/null & | ||
| - | syl$ arpspoof -i eth0 -t @nile @immortal &> /dev/null & | ||
| - | syl$ echo 1 > / | ||
| - | syl$ tcpdump -i eth0 not arp # on ignore l'ARP | ||
| - | syl$ pkill -9 arpspoof | ||
| - | </ | ||
| - | |||
| - | |||
| - | __ Un peu de nmap__ | ||
| - | |||
| - | Le principe est relativement simple. Si l'on envoit en paquet TCP/IP avec le flag SYN (demande d' | ||
| - | |||
| - | En résumé, voici les réponses dans les différents cas de figure : | ||
| - | | | **Envoi paquet avec SYN** | **Envoi paquet invalide sans SYN** | | ||
| - | | **Service à l' | ||
| - | | **Pas de service(*)** | ignoré | RST | | ||
| - | (*) Réponse du noyau. | ||
| - | |||
| - | Quelques exemples de //scan// simples : | ||
| - | |||
| - | < | ||
| - | #ping scan | ||
| - | $ nmap -sP 192.168.0.1-10 | ||
| - | |||
| - | #syn scan | ||
| - | $ nmap -sS -p 21,22,80 192.168.0.1 | ||
| - | |||
| - | #xmas scan | ||
| - | $ nmap -sX -p 4000-10000 192.168.0.1 | ||
| - | |||
| - | #traceroute | ||
| - | $ nmap --traceroute 192.168.0.1 | ||
| - | $ traceroute -T 192.168.0.1 | ||
| - | </ | ||
| - | |||
| - | |||
| - | __Nota Bene__ : Si le nmap est trop lent dans les UML, vous pouvez le rendre plus agressif avec les options "-n -T5". | ||
| - | |||
| - | ==== TP4 (NAT) ==== | ||
| - | |||
| - | __Préliminaires__ : | ||
| - | |||
| - | Pour afficher la table NAT : | ||
| - | |||
| - | $ iptables -t nat -L | ||
| - | |||
| - | Pour remettre la table à zéro : | ||
| - | |||
| - | $ iptables -t nat -F | ||
| - | | ||
| - | L' | ||
| - | |||
| - | __NAT Statique__ : association 1 @priv et 1 @pub (action SNAT / DNAT) | ||
| - | |||
| - | a) Paquet Entrant dans le Réseau Privé | ||
| - | |||
| - | On modifie l' | ||
| - | |||
| - | $ iptables -t nat -A PREROUTING -d @pub -i ethin -j DNAT --to-destination @priv | ||
| - | |||
| - | La translation inverse est implicite lors de la réponse. | ||
| - | | ||
| - | b) Paquet Sortant vers le Réseau extérieur | ||
| - | |||
| - | On modifie l' | ||
| - | |||
| - | $ iptables -t nat -A POSTROUTING -s @priv -o ethout -j SNAT --to-source @pub | ||
| - | | ||
| - | La translation inverse est implicite lors de la réponse. | ||
| - | | ||
| - | __NAT Dynamique__ : association N @priv et 1 @pub (action MASQUERADE) avec @priv une adresse de réseau et mask un masque en nb de bits | ||
| - | | ||
| - | $ iptables -t nat -A POSTROUTING -s @priv/mask -j MASQUERADE | ||
| - | |||
| - | __En résumé__ : | ||
| - | |||
| - | |||
| - | * Connexion initié depuis l' | ||
| - | * Connexion initié depuis l' | ||
| - | |||
| - | |||
| - | __Exemple__ | ||
| - | |||
| - | Considérons les réseaux privés 192.168.0.0/ | ||
| - | |||
| - | immortal$ iptables -t nat -A POSTROUTING -s 192.168.0.0/ | ||
| - | | ||
| - | |||
| - | __Port Forwarding__ | ||
| - | |||
| - | On veut mettre en place du port forwarding entre la passerelle // | ||
| - | |||
| - | immortal$ iptables -t nat -A PREROUTING -d 147.210.20.1 -p tcp --dport 2222 -j DNAT --to 192.168.0.3: | ||
| - | atg$ ssh toto@147.210.20.1 | ||
| - | atg$ ssh -p 2222 toto@147.210.20.1 | ||
| - | | ||
| - | |||
| - | ==== TP5 (Firewall)==== | ||
| - | |||
| - | == Memento == | ||
| - | |||
| - | Voici quelques notes concernant l' | ||
| - | * INPUT : tout ce qui rentre dans la machine ; | ||
| - | * OUTPUT : tout ce qui sort dans la machine ; | ||
| - | * FORWARD : tout ce qui traverse la machine (i.e. lors du routage). | ||
| - | |||
| - | Pour afficher les règles de la table filter : | ||
| - | $ iptables -t filter -L -v | ||
| - | |||
| - | Pour effacer toutes les règles ajoutées : | ||
| - | $ iptables -t filter -F | ||
| - | |||
| - | Pour chaque règle que l'on ajoute, trois actions sont possibles (notée < | ||
| - | * ACCEPT : on accepte ; | ||
| - | * REJECT : on rejette poliment (réponse d' | ||
| - | * DROP : on jette à la poubelle (pas de réponse d' | ||
| - | |||
| - | Pour modifier la politique par défaut du firewall : | ||
| - | $ iptables -t filter -P < | ||
| - | |||
| - | Pour ajouter une nouvelle règle à une chaîne du firewall (attention à l' | ||
| - | $ iptables -t filter -A < | ||
| - | |||
| - | * avec <SRC> des indications sur la provenance des paquets IP, comme par exemple "-i eth0" ou "-s 192.168.0.0/ | ||
| - | * avec <DST> des indications sur la destination des paquets IP, comme par exemple : "-o eth1" ou "-d 147.210.0.0/ | ||
| - | * avec <...> des infos complémentaires sur par exemple la nature du protocole "-p icmp" ou "-p tcp", avec éventuellement des precisions spécifiques à ces protocoles (" | ||
| - | |||
| - | Pour plus d' | ||
| - | |||
| - | |||
| - | ==Accepter le traffic partant du réseau interne vers des serveurs web ou SSH== | ||
| - | |||
| - | Soit 192.168.1.0/ | ||
| - | |||
| - | <code bash> | ||
| - | $ iptables -F | ||
| - | $ iptables -P FORWARD DROP | ||
| - | $ iptables -P INPUT DROP | ||
| - | $ iptables -P OUTPUT DROP | ||
| - | |||
| - | # traffic sortant | ||
| - | $ iptables -A FORWARD -s 192.168.1.0/ | ||
| - | |||
| - | # traffic retour | ||
| - | $ iptables -A FORWARD -d 192.168.1.0/ | ||
| - | |||
| - | </ | ||
| - | |||
| - | == Accepter un ping toutes les 10s à destination de nile == | ||
| - | |||
| - | Soit //nile// la machine 192.168.0.4. On configure le firewall sur // | ||
| - | |||
| - | <code bash> | ||
| - | $ iptables -F | ||
| - | $ iptables -P FORWARD DROP | ||
| - | $ iptables -A FORWARD -d 192.168.0.4 -p icmp -m limit --limit 6/mn --limit-burst 1 -j ACCEPT | ||
| - | $ iptables -A FORWARD -s 192.168.0.4 -p icmp -m state --state ESTABLISHED -j ACCEPT | ||
| - | </ | ||
| - | |||
| - | Pour faire un test depuis une machine extérieure, | ||
| - | |||
| - | $ ping -i 5 192.168.0.4 | ||
| - | |||
| - | ==== TP6 (NIS & NFS) ==== | ||
| - | |||
| - | __Attention__ : Vérifier que le service //rpcbind// est bien démarré, sinon il faut penser à le lancer. | ||
| - | |||
| - | $/ | ||
| - | |||
| - | == Configuration du serveur NIS== | ||
| - | |||
| - | On choisit un nom de domaine // | ||
| - | |||
| - | root@immortal: | ||
| - | |||
| - | On positionne également le nom de domaine courant à // | ||
| - | |||
| - | root@immortal: | ||
| - | |||
| - | On peut vérifier que le domainne courant est bien positionné en tapant la commande // | ||
| - | |||
| - | On configure // | ||
| - | |||
| - | ... | ||
| - | # Are we a NIS server and if so what kind (values: false, slave, master)? | ||
| - | NISSERVER=master | ||
| - | ... | ||
| - | |||
| - | Puis on construit la base de données, en exportant les comptes courants (définis dans / | ||
| - | |||
| - | root@immortal: | ||
| - | |||
| - | Un message d' | ||
| - | |||
| - | On démarre donc le serveur NIS : | ||
| - | |||
| - | root@immortal: | ||
| - | Starting NIS services: ypserv yppasswdd ypxfrd ypbind. | ||
| - | |||
| - | OK c'est parti... sinon on vérifie les logs (/ | ||
| - | |||
| - | On regénère proprement la basse de données NIS. | ||
| - | |||
| - | root@immortal: | ||
| - | root@immortal: | ||
| - | root@immortal: | ||
| - | |||
| - | Updating passwd.byname... | ||
| - | Updating passwd.byuid... | ||
| - | Updating group.byname... | ||
| - | Updating group.bygid... | ||
| - | Updating hosts.byname... | ||
| - | Updating hosts.byaddr... | ||
| - | Updating rpc.byname... | ||
| - | Updating rpc.bynumber... | ||
| - | Updating services.byname... | ||
| - | Updating services.byservicename... | ||
| - | Updating netid.byname... | ||
| - | Updating protocols.bynumber... | ||
| - | Updating protocols.byname... | ||
| - | Updating netgroup... | ||
| - | Updating netgroup.byhost... | ||
| - | Updating netgroup.byuser... | ||
| - | Updating shadow.byname... | ||
| - | |||
| - | Tous les utilisateurs locaux sur le serveur NIS avec un UID > 1000 sont exportés dans la database. | ||
| - | |||
| - | En lançant la commande | ||
| - | |||
| - | |||
| - | ==Configuration du client== | ||
| - | |||
| - | On vérifie que le fichier / | ||
| - | |||
| - | root@grave: | ||
| - | root@grave: | ||
| - | root@grave: | ||
| - | Starting NIS services: ypbind. | ||
| - | |||
| - | Pour vérifier que l'on trouve bien le serveur NIS depuis le client : | ||
| - | |||
| - | root@grave: | ||
| - | 192.168.0.1 | ||
| - | |||
| - | Pour afficher la liste des comptes utilisateur NIS : | ||
| - | |||
| - | root@grave: | ||
| - | |||
| - | Il faut ensuite éditer le fichier / | ||
| - | |||
| - | passwd: | ||
| - | group: | ||
| - | shadow: | ||
| - | ... | ||
| - | |||
| - | Attention, il faut recharger le fichier // | ||
| - | |||
| - | / | ||
| - | |||
| - | Avec la séquence //files nis//, on vérifie d' | ||
| - | |||
| - | |||
| - | == Ajouter des nouveaux utilisateurs NIS sur le serveur == | ||
| - | |||
| - | On commence par désactiver kerberos & ldap | ||
| - | |||
| - | root@immortal: | ||
| - | |||
| - | Puis on ajoute les utilisateurs Unix //titi// et //tutu// : | ||
| - | |||
| - | root@immortal: | ||
| - | password titi | ||
| - | root@immortal: | ||
| - | pasword tutu | ||
| - | |||
| - | On met à jour la base de données NIS : | ||
| - | |||
| - | root@immortal: | ||
| - | |||
| - | | ||
| - | | ||
| - | | ||
| - | | ||
| - | |||
| - | Maj de la base, pas besoin de restarter le serveur NIS... | ||
| - | |||
| - | root@grave: | ||
| - | tutu: | ||
| - | titi: | ||
| - | toto: | ||
| - | |||
| - | Pour tester NIS on passe par un tiers utilisateur plutôt que par root (root ne vérfie pas le password) ! | ||
| - | |||
| - | root@grave: | ||
| - | toto@grave:/ | ||
| - | Mot de passe : xxxx | ||
| - | titi@grave:/ | ||
| - | |||
| - | |||
| - | ==Configuration de NFS== | ||
| - | |||
| - | Il ne faut pas oublier de configurer le serveur NFS comme un client NIS ! Pour mettre à jour le cache des utilisateurs NIS sur un client, il est utile de relancer le démon NSCD (NameService Cache Daemon) / | ||
| - | |||
| - | __Côté serveur NFS__ | ||
| - | |||
| - | On configure le serveur NFS sur syl ; grave sert de client. | ||
| - | |||
| - | Sur le serveur, le répertoire NFS sera /pub. | ||
| - | |||
| - | root@syl$ mkdir /pub | ||
| - | |||
| - | On indique cela / | ||
| - | |||
| - | /pub (rw, | ||
| - | |||
| - | Autres Exemples (man exports) : | ||
| - | |||
| - | /pub host1(ro) host2(rw, | ||
| - | /pub @netgroup(rw) | ||
| - | /pub (ro) | ||
| - | |||
| - | Par defaut, // | ||
| - | |||
| - | On démarre le common et le serveur NFS (nécessaire après chaque modif de / | ||
| - | |||
| - | root@grave$ / | ||
| - | root@grave$ / | ||
| - | |||
| - | |||
| - | __Côté client NFS__ | ||
| - | |||
| - | Sur grave, déjà configuré comme un client NIS. | ||
| - | |||
| - | On démarre le //common// NFS (après chaque modif de / | ||
| - | |||
| - | root@grave$ / | ||
| - | |||
| - | On crée le montage NFS dans /mnt/pub : | ||
| - | |||
| - | root@grave$ mkdir /mnt/pub | ||
| - | root@grave$ chmod 777 /mnt/pub | ||
| - | root@grave$ mount -t nfs -o nfsvers=3 192.168.0.1:/ | ||
| - | |||
| - | |||
| - | On crée des fichiers vides (commande //touch//) sur la machine client en tant que //tutu// et //titi//. | ||
| - | |||
| - | root@grave:/ | ||
| - | tutu@grave:/ | ||
| - | root@grave:/ | ||
| - | titi@grave:/ | ||
| - | | ||
| - | On vérifie les droits... | ||
| - | | ||
| - | root@grave:/ | ||
| - | -rw-r--r-- 1 titi titi 0 2008-03-11 13:28 titi | ||
| - | -rw-r--r-- 1 tutu tutu 0 2008-03-11 13:28 tutu | ||
| - | |||
| - | On peut également configurer le point de montage de manière permanente dans /etc/fstab | ||
| - | |||
| - | root@grave$ jmacs /etc/fstab | ||
| - | |||
| - | <file system> | ||
| - | 192.168.0.3:/ | ||
| - | | ||
| - | ==En conclusion== | ||
| - | |||
| - | Donc on a : | ||
| - | |||
| - | * immortal : serveur NIS (compte NIS tutu et titi) | ||
| - | * syl : serveur NFS (export de /pub) & client NIS | ||
| - | * grave : client NIS & NFS (montage dans / | ||
| - | |||
| - | Pour terminer de tout bien configurer, il faut créer sur le serveur NFS les repertoires /pub/tutu et /pub/titi appartenant respectivement aux utilsateurs tutu et titi, avec les bons droits d' | ||
| - | |||
| - | |||
| - | ==== TP7 LDAP ==== | ||
| - | |||
| - | NIS c'est un peu démodé... Aujourd' | ||
| - | |||
| - | |||
| - | == 1) Configuration du serveur LDAP== | ||
| - | |||
| - | On configure le serveur LDAP sur la machine // | ||
| - | |||
| - | < | ||
| - | immortal$ adduser tutu | ||
| - | immortal$ adduser titi | ||
| - | </ | ||
| - | |||
| - | Création d'un password pour l' | ||
| - | |||
| - | < | ||
| - | immortal$ slappasswd | ||
| - | New password: admin | ||
| - | Re-enter new password: admin | ||
| - | {SSHA}XSd0QXLAiNz734f/ | ||
| - | </ | ||
| - | |||
| - | Editer le fichier / | ||
| - | | ||
| - | < | ||
| - | # nom du domaine LDAP | ||
| - | | ||
| - | |||
| - | # nom de l' | ||
| - | | ||
| - | |||
| - | # ajout d'un mot de passe admin | ||
| - | | ||
| - | |||
| - | </ | ||
| - | |||
| - | __Attention__ : Ne pas oublier de corriger le nom de domaine pour les ACLs en fin de fichier ! En gros, il faut remplacer tous les @XXXXXXXXX@ ! | ||
| - | |||
| - | __Nota Bene__ : dc = domain component | ||
| - | |||
| - | Dans le fichier / | ||
| - | |||
| - | < | ||
| - | SLAPD_CONF="/ | ||
| - | </ | ||
| - | |||
| - | Démarrage du serveur LDAP : | ||
| - | |||
| - | < | ||
| - | immortal$ / | ||
| - | </ | ||
| - | |||
| - | On vérifie que le démon a démarré ! | ||
| - | |||
| - | < | ||
| - | immortal$ ps aux |grep slapd | ||
| - | </ | ||
| - | |||
| - | ==2) Ajout des comptes dans le serveur LDAP== | ||
| - | |||
| - | On va utiliser un script pour peupler automatiquement la base LDAP avec les comptes des utilisateurs (et d' | ||
| - | |||
| - | < | ||
| - | # Default DNS domain | ||
| - | $DEFAULT_MAIL_DOMAIN = " | ||
| - | |||
| - | # Default base | ||
| - | $DEFAULT_BASE = " | ||
| - | </ | ||
| - | |||
| - | Ensuite, il faut lancer le script : | ||
| - | |||
| - | < | ||
| - | immortal$ cd / | ||
| - | immortal$./ | ||
| - | |||
| - | Enter the X.500 naming context you wish to import into: [dc=mydomain, | ||
| - | Enter the hostname of your LDAP server [ldap]: localhost | ||
| - | Enter the manager DN: [cn=admin, | ||
| - | Enter the credentials to bind with: <-- mot de passe de l' | ||
| - | Do you wish to generate a DUAConfigProfile [yes|no]? no | ||
| - | |||
| - | Importing into dc=mydomain, | ||
| - | |||
| - | Creating naming context entries... | ||
| - | Migrating groups... | ||
| - | Migrating hosts... | ||
| - | Migrating networks... | ||
| - | Migrating users... | ||
| - | Migrating netgroups... | ||
| - | Migrating netgroups (by user)... | ||
| - | Migrating netgroups (by host)... | ||
| - | Importing into LDAP... | ||
| - | adding new entry " | ||
| - | ... | ||
| - | adding new entry " | ||
| - | ... | ||
| - | adding new entry " | ||
| - | adding new entry " | ||
| - | adding new entry " | ||
| - | ... | ||
| - | adding new entry " | ||
| - | adding new entry " | ||
| - | ... | ||
| - | adding new entry " | ||
| - | adding new entry " | ||
| - | adding new entry " | ||
| - | </ | ||
| - | |||
| - | ==En cas d' | ||
| - | |||
| - | Bon, si ça ne marche pas, on fait le ménage : | ||
| - | |||
| - | $/ | ||
| - | $ rm -rf / | ||
| - | |||
| - | On vérifie ses configs et on recommence !!! | ||
| - | |||
| - | $/ | ||
| - | |||
| - | ==Test client== | ||
| - | |||
| - | On effectue une recherche sur toutes les entrées " | ||
| - | |||
| - | immortal$ ldapsearch -x -b " | ||
| - | |||
| - | ou plus simplement si tout le monde peut consulter le serveur LDAP (cf. ACL) : | ||
| - | |||
| - | immortal$ ldapsearch -x " | ||
| - | |||
| - | Comparer le nombre de répondes avec / | ||
| - | |||
| - | < | ||
| - | immortal$ wc -l /etc/passwd | ||
| - | </ | ||
| - | |||
| - | L' | ||
| - | |||
| - | immortal$ grep tutu /etc/passwd > tutu | ||
| - | immortal$ migrate-passwd.pl tutu > tutu.ldif | ||
| - | immortal$ ldapadd -x -D " | ||
| - | |||
| - | |||
| - | == 3) Configuration d'un client LDAP== | ||
| - | |||
| - | __Nota Bene__ : Il n'y a pas de démon côté client! | ||
| - | |||
| - | Editer le fichier / | ||
| - | |||
| - | < | ||
| - | BASE dc=mydomain, | ||
| - | URI | ||
| - | </ | ||
| - | |||
| - | Un petit test sur le client (pas besoin de mettre l' | ||
| - | |||
| - | $ ldapsearch -x -D " | ||
| - | |||
| - | |||
| - | == 4) Authentification via LDAP == | ||
| - | |||
| - | Dans le fichier / | ||
| - | |||
| - | < | ||
| - | passwd: | ||
| - | group: | ||
| - | shadow: | ||
| - | </ | ||
| - | | ||
| - | __Attention__ : Ne pas oublier //files//, sinon mieux vaut que //ldap// fonctionne du premier coup !!! | ||
| - | |||
| - | $ / | ||
| - | |||
| - | A partir d'ici, les comptes LDAP sont visibles, mais l' | ||
| - | |||
| - | On lance la commande suivante et on sélectionne Unix + LDAP. | ||
| - | |||
| - | $ pam-auth-update | ||
| - | |||
| - | Ensuite : | ||
| - | |||
| - | $ dpkg-reconfigure libpam-ldap | ||
| - | $ dpkg-reconfigure libnss-ldapd | ||
| - | |||
| - | Attention, il faut saisir ldap:// | ||
| - | |||
| - | Pour finir : | ||
| - | $ dpkg-reconfigure nslcd | ||
| - | |||
| - | A vous de jouer... on peut ajouter le serveur NFS ! | ||
| - | |||
| - | ==== TP8 DNS & DHCP ==== | ||
| - | |||
| - | |||
| - | == Config Serveur DNS == | ||
| - | |||
| - | domain: metal.fr | ||
| - | server: immortal (192.168.0.2) | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | zone " | ||
| - | type master; | ||
| - | file "/ | ||
| - | }; | ||
| - | |||
| - | zone " | ||
| - | type master; | ||
| - | file "/ | ||
| - | }; | ||
| - | </ | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | ; $ORIGIN metal.fr | ||
| - | $TTL 86400 | ||
| - | @ IN SOA dns1.metal.fr. mailer.metal.fr. ( | ||
| - | 1 ; Serial | ||
| - | 604800 ; Refresh | ||
| - | 86400 ; Retry | ||
| - | 2419200 ; | ||
| - | 86400 ) ; Negative Cache TTL | ||
| - | ; | ||
| - | |||
| - | @ IN NS immortal | ||
| - | @ IN MX 10 nile | ||
| - | |||
| - | immortal IN A 192.168.0.2 | ||
| - | syl IN A 192.168.0.1 | ||
| - | nile IN A 192.168.0.3 | ||
| - | |||
| - | ; alias | ||
| - | mailer IN CNAME nile | ||
| - | dns1 IN CNAME immortal | ||
| - | </ | ||
| - | |||
| - | __Nota Bene__ : NS = DNS Server, IN = Internet (optionel), mailer.metal.fr => mailer@metal.fr (@email du DNS admin) | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | ; $ORIGIN 0.168.192.in-addr.arpa | ||
| - | $TTL 86400 | ||
| - | @ IN SOA dns1.metal.fr. mailer.metal.fr. ( | ||
| - | 1 ; Serial | ||
| - | 604800 ; Refresh | ||
| - | 86400 ; Retry | ||
| - | 2419200 ; | ||
| - | 86400 ) ; Negative Cache TTL | ||
| - | ; | ||
| - | |||
| - | @ IN NS dns1.metal.fr. | ||
| - | |||
| - | ; reverse | ||
| - | 2 IN PTR immortal.metal.fr. | ||
| - | 1 IN PTR syl.metal.fr. | ||
| - | 3 IN PTR nile.metal.fr. | ||
| - | </ | ||
| - | |||
| - | Vérif Config Serveur : | ||
| - | |||
| - | < | ||
| - | $ named-checkzone 0.168.192.in-addr.arpa db.0.168.192 | ||
| - | $ named-checkzone metal.fr db.metal | ||
| - | $ named-checkconf | ||
| - | </ | ||
| - | |||
| - | Démarrage du serveur : | ||
| - | |||
| - | $ / | ||
| - | |||
| - | Les logs : | ||
| - | |||
| - | $ tail / | ||
| - | |||
| - | ==Config Client DNS== | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | search metal.fr | ||
| - | nameserver 192.168.0.2 | ||
| - | </ | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | ... | ||
| - | hosts: | ||
| - | ... | ||
| - | </ | ||
| - | |||
| - | Ne pas oublier de redémarrer le daemon //nscd//. | ||
| - | |||
| - | Test Client, sur syl par exemple : | ||
| - | |||
| - | < | ||
| - | $ nslookup nile | ||
| - | Server: | ||
| - | Address: | ||
| - | Name: | ||
| - | Address: 192.168.0.3 | ||
| - | |||
| - | $ ping nile | ||
| - | PING nile.metal.fr (192.168.0.3) 56(84) bytes of data. | ||
| - | 64 bytes from nile.metal.fr (192.168.0.3): | ||
| - | </ | ||
| - | |||
| - | |||
| - | == Config du serveur DHCP == | ||
| - | |||
| - | //Serveur DHCP su syl.// | ||
| - | |||
| - | __Configuration sans DNS__ | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | default-lease-time 600; | ||
| - | max-lease-time 7200; | ||
| - | |||
| - | subnet 192.168.0.0 netmask 255.255.255.0 { | ||
| - | range 192.168.0.10 192.168.0.20; | ||
| - | option broadcast-address 192.168.0.255; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | On démarre le serveur DHCP : | ||
| - | |||
| - | | ||
| - | |||
| - | __Configuration avec DNS__ | ||
| - | |||
| - | On suppose le serveur DNS bien configuré sur immortal... | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | subnet 192.168.0.0 netmask 255.255.255.0 { | ||
| - | range 192.168.0.10 192.168.0.30; | ||
| - | option domain-name " | ||
| - | option domain-name-servers 192.168.0.2; | ||
| - | # option routers 192.168.0.254; | ||
| - | option subnet-mask 255.255.255.0; | ||
| - | option broadcast-address 192.168.0.255; | ||
| - | |||
| - | host nile { | ||
| - | hardware ethernet A2: | ||
| - | fixed-address 192.168.0.9; | ||
| - | } | ||
| - | |||
| - | } | ||
| - | </ | ||
| - | |||
| - | On redémarre le serveur DHCP. | ||
| - | |||
| - | |||
| - | == Configuration du Client DHCP== | ||
| - | |||
| - | Dans / | ||
| - | |||
| - | < | ||
| - | auto eth0 | ||
| - | iface eth0 inet dhcp | ||
| - | </ | ||
| - | |||
| - | Puis on démarre le client... | ||
| - | |||
| - | $/ | ||
| - | |||
| - | Ou encore : | ||
| - | |||
| - | < | ||
| - | root@nile:~ #dhclient -v | ||
| - | |||
| - | Listening on LPF/ | ||
| - | Sending on | ||
| - | Sending on | ||
| - | DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4 | ||
| - | DHCPOFFER from 192.168.0.1 | ||
| - | DHCPREQUEST on eth0 to 255.255.255.255 port 67 | ||
| - | DHCPACK from 192.168.0.1 | ||
| - | bound to 192.168.0.10 -- renewal in 265 seconds. | ||
| - | </ | ||
| - | |||
| - | |||
| - | On peut vérifier les entrées ajoutées dynamiquement sur le serveur DHCP dans le fichier / | ||
| - | |||
| - | |||
| - | ==Configuration avançée du serveur DHCP== | ||
| - | |||
| - | On souhaite maintenant faire en sorte que le serveur DHCP collabore avec le serveur DNS pour mettre à jour automatiquement la liste desnouvelles machines reconnues par DNS. | ||
| - | |||
| - | On utilise le secret définie dans / | ||
| - | |||
| - | On modifie la config DHCP du serveur dans / | ||
| - | |||
| - | < | ||
| - | ddns-update-style interim; | ||
| - | ddns-updates on; | ||
| - | deny client-updates; | ||
| - | ddns-domainname " | ||
| - | ddns-rev-domainname " | ||
| - | authoritative; | ||
| - | |||
| - | key " | ||
| - | algorithm hmac-md5; | ||
| - | secret " | ||
| - | } | ||
| - | |||
| - | zone metal.fr. { | ||
| - | primary 192.168.0.2; | ||
| - | key rndc-key; | ||
| - | } | ||
| - | |||
| - | zone 0.168.192.in-addr.arpa. { | ||
| - | primary 192.168.0.2; | ||
| - | key rndc-key; | ||
| - | } | ||
| - | | ||
| - | subnet 192.168.0.0 netmask 255.255.255.0 { | ||
| - | range 192.168.0.10 192.168.0.30; | ||
| - | option domain-name " | ||
| - | option domain-name-servers 192.168.0.2; | ||
| - | option subnet-mask 255.255.255.0; | ||
| - | option broadcast-address 192.168.0.255; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Puis on modifie la config su serveur DNS dans / | ||
| - | |||
| - | < | ||
| - | key " | ||
| - | | ||
| - | | ||
| - | }; | ||
| - | |||
| - | zone " | ||
| - | type master; | ||
| - | file "/ | ||
| - | allow-update {key " | ||
| - | }; | ||
| - | |||
| - | zone " | ||
| - | type master; | ||
| - | file "/ | ||
| - | allow-update {key " | ||
| - | }; | ||
| - | </ | ||
| - | |||
| - | Ne pas oublier chmod g+wx /etc/bind (pour le group " | ||
| - | |||
| - | Finalement, côté client DHCP (nile), dans / | ||
| - | |||
| - | < | ||
| - | send host-name " | ||
| - | </ | ||
| - | |||
| - | Puis : | ||
| - | |||
| - | $ dhclient -v | ||
| - | |||
| - | |||
| - | ==== TP9 WINDOWS ==== | ||
| - | |||
| - | On considère le réseau suivant : une machine Windows 7 (172.16.1.1/ | ||
| - | |||
| - | ==Configuration des machines Linux== | ||
| - | |||
| - | <code bash> | ||
| - | |||
| - | immortal$ ifconfig eth1 172.16.0.1/ | ||
| - | immortal$ echo 1 > / | ||
| - | immortal$ ifconfig eth0 192.168.0.1/ | ||
| - | immortal$ ifconfig eth2 192.168.1.1/ | ||
| - | |||
| - | syl$ ifconfig eth0 192.168.0.2/ | ||
| - | syl$ route add default gw 192.168.0.1 | ||
| - | |||
| - | nile$ ifconfig eth0 192.168.1.2/ | ||
| - | nile$ route add default gw 192.168.1.1 | ||
| - | </ | ||
| - | |||
| - | ==Configuration de la machine Windows== | ||
| - | |||
| - | Configurez l' | ||
| - | |||
| - | En ligne de commande, il faut lancer le //Command Prompt// dans le menu Windows. Faire un clic droit, //Run as Administrator// | ||
| - | |||
| - | La machine Windows et déjà configuré : on vérifie : | ||
| - | | ||
| - | win$ ipconfig.exe /all | ||
| - | win$ route.exe print | ||
| - | | ||
| - | |||
| - | Si tout est OK, on doit pouvoir faire un ping vers notre UML | ||
| - | |||
| - | win$ ping.exe 172.16.0.1 | ||
| - | |||
| - | Lancer MMC (Microsoft Management Console), qui va permettre de gérer toute la config... | ||
| - | |||
| - | win$ mmc.exe | ||
| - | |||
| - | /* Il faut commencer par ajouter via le menu " | ||
| - | |||
| - | Attention, il y a plusieurs " | ||
| - | |||
| - | On peut commencer par inactiver le firewall... puis par faire des tests ICMP vers toutes les machines Linux, en ajoutant par exemple 172.16.0.1 comme default gateway dans Windows (interface graphique). | ||
| - | |||
| - | Si on active le firewall, le ping de windows vers linux fonctionne (pas de firewall sur immortal), mais en revanche l' | ||
| - | |||
| - | __Nota Bene__: Windows autorise le Established de base ! | ||
| - | |||
| - | Il faut rajouter une petite règle ICMP qui va bien via la MMC, pour autoriser le ping. Add "New Inbound Rules" / Custom Rule / et après c'est facile... On peut maintenant, vérifier que le ping fonctionne de manière | ||
| - | symétrique. | ||
| - | |||
| - | Pour définir une route par défaut, il faut utiliser 0.0.0.0 comme réseau cible et 255.255.255.255 comme masque ! | ||
| - | |||
| - | # route par défaut (gateway immortal) | ||
| - | win$ route add 0.0.0.0 mask 0.0.0.0 172.16.0.1 | ||
| - | |||
| - | |||
| - | On va virer la default gateway, pour rajouter à la main... des routes spécifiques vers les réseaux de syl et opeth... | ||
| - | |||
| - | # vers opeth | ||
| - | win$ route add 192.168.0.0 mask 255.255.255.0 172.16.0.1 [if 16] | ||
| - | # vers syl | ||
| - | win$ route add 192.168.1.0 mask 255.255.255.0 172.16.0.1 [if 16] | ||
| - | |||
| - | Le numéro d' | ||
| - | |||
| - | Un peu plus d' | ||
| - | |||
| - | win$ route.exe /? | ||
| - | |||
| - | |||
| - | Un petit test avec Netcat. On lance le programme en mode serveur //nc.exe//, dans c: | ||
| - | |||
| - | win$ nc.exe -l -p 5555 | ||
| - | |||
| - | Windows vous demande si vous souhaitez ajouter une exception dans le firewall pour autoriser les connexions vers le programme nc.exe (all IPs, all ports, TCP & UDP). Si on dit Allow, bah ça marche tout seul ! | ||
| - | |||
| - | syl$ telnet 172.16.1.1 5555 # connexion au serveur netcat de la machine windows ! | ||
| - | | ||
| - | Pour sortir de Telne, faire ctrl-], puis taper telnet> quit ;-) | ||
| - | |||
| - | __Nota Bene__ : Firewall Windows, regarde en premier les règles " | ||
admin/index.1457687259.txt.gz · Last modified: 2024/03/18 15:04 (external edit)
