------------------------------------------------------------------------------- Scuola di Perfezionamento in Fisica Sanitaria Universita' di Bologna Anno Accademico 2006-2007 : Corso di informatica, Marcello Galli http://www.helldragon.eu/marcello/galli_lezioni/ Linux e rete : esercitazione ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Si provera' a costruire una piccola LAN, collegando, con un cavo di rete utp le varie macchine ad uno stesso switch. Poniamo che la rete abbia il numero 192.168.100.0, e sia di classe C, con una netmask: 255.255.255.0 Per ora non abbiamo un name server (DNS) e la rete costruita e' isolata. La prima operazione sara' la configurazione delle interfaccie di rete delle singole macchine. Si puo' procedere nei seguenti modi: 1- si apre una shell di root ( in Knoppix 5.0.1 menu: K->voce: knoppix ->opzione: root shell ) si esamina lo stato dell'interfaccia con: ifconfig Se il nome dell'interfaccia e' eth0 ed il numero che si vuole dare alla macchina e' 192.168.100.101 ,si configura l'interfaccia con: ifconfig eth0 192.168.100.101 netmask 255.255.255.0 up per controllare dare ancora il comando: ifconfig Si controllano le routing tables, con il comando: route Si nota come si vede semplicemente la rete: 192.168.100.0, direttamente collegata alla macchina. Se una macchina della LAN facesse da router, collegata anche all'esterno, per uscire dalla LAN si dovrebbe inserire una default route verso questa macchina; se il router ha l'IP 192.168.100.1 daremo il comando: route add default gateway 192.168.100.1 2- si puo' fare la stessa cosa con l'interfaccia grafica, (in Knoppix 5.0.1 e' il menu Knoppix ( quello col pinguino), alla voce network -> opzione network card. ) ----------------------------------------------------------------------------- Su una LAN vera avete spesso un server DHCP, che da alle macchine che lo richiedono un numero IP , un default route e l'indirizzo di un DNS in modo automatico. ----------------------------------------------------------------------------- ------------------------------------------------------------------------------ 1- provare i comandi che mostrano la situazione della rete: /sbin/ifconfig : mostra le interfacce di rete (scheda di rete e loop device) /sbin/route : mostra la routing table /sbin/arp : mostra l'arp table netstat -nltu : mostra porte in ascolto netstat -nltup : ( da root ) mostra anche che programma usa la porta 2- provare i comandi di diagnostica piu' sempice: ping localhost : vede se la rete va. ( Cntrl/C per fermarlo) ping 192.168.100.100 : vede se la macchina conquesto numero e' raggiungibile (con ICMP echo request) /sbin/arping 192.168.100.100 : (da root) usa ARP echo request e mostra l'ethernet address /usr/sbin/traceroute 192.168.100.100 : mostra il percorso verso una macchina (usa TTL diversi per ricevere ICMP time exceeded) 3- collegamento a macchine remote. Sulla vostra macchina create diversi utenti per farla usare ai colleghi alle altre macchine. -- Per fare questo si puo' aprire una root shell ed usare il comando: adduser vi viene richiesto un nome ed una password, oltre ad altri dati di cui ora non ci curiamo. Poniamo di aver creato utenti di nome ospite1, ospite2, ospite3 etc. e di aver comunicato le password relative ai colleghi. -- facciamo ora partire il servizio ssh (daemon sshd) da una shell di root possiamo fare: /etc/init.d/ssh start Oppure procedere con l'interfaccia grafica: in Knoppix 5.0.1 usate il menu: knoppix: -> voce: server -> start ssh Il comando: ssh -l ospite1 192.168.100.101 vi permette di collegarvi alla macchina 192.168.100.101 come utente ospite1. Avrete quindi una finestra terminale su cui siete sulla macchina locale ed una su cui siete sulla macchina remota: 192.168.100.101 Provate ad aprire diverse finstre ed a collegarvi con macchine diverse. Per controllare chi e' collegato sulla vostra macchina ed a che macchina siete collegati potete usare comandi come: who : mostra chi e' collegato w : mostra chi e' collegato e da che macchina viene whoami : mostra chi siete hostname : mostra il nome della macchina last : mostra ultimi utenti che si sono collegati. 4- In Unix, X11 permette di lavorare alla consolle di una macchina, collegati su un'altra e di aprire applicazioni grafiche su un'altra macchina ancora. si usa la variabile DISPLAY, per definire lo schermo cui vengono associate le applicazioni grafiche. Per fare questo occorre che l'X11 sia in ascolto sulla porta 6000. In molte distribuzioni questa possibilita' e' disabilitata, per questioni di sicurezza. In knoppix 5.0.1 dovrebbe essere abilitata. a) - aprite diverse finestre terminale e collegatevi a diverse macchine; b) - in ogni finestra definite in modo diverso la variabile DISPLAY, in modo da mandare le applicazioni grafiche ai diversi computers del laboratorio, usare export per rendere DISPLAY valida anche per i sottoprocessi: export DISPLAY=192.168.100.101:0.0 export DISPLAY=192.168.100.102:0.0 etc. etc. Per dirigere il display sulla macchina locale: export DISPLAY=:0 c) - utilizzare il comando xhost, per permettere accesso al vostro display ad alcune macchine e non ad altre: xhost + : tutti accedono xhost + 192.168.100.101 : questa macchina accede xhost - 192.168.100.101 : questa macchina non accede piu' d) - far partire applicazioni grafiche in modo che appaiano sugli schermi degli altri computers: Es.: xclock & xterm & nedit file & mozilla & Se un xterm od un editor sono aperti sul video di un altro computer accade che chi e' alla tastiera dell'altro computer puo' lavorare sui vostri files. 5- Uso di terminali virtuali e server X multipli. a) - usare Cntl+Alt+F1 per passare ad un terminale virtuale, collegatevi Cntl+Alt+F7 torna al vostro server X11 Cntl+Alt+F2 passa ad un altro terminale virtuale, collegatevi, con l'username di un altro gruppo di studenti, con ps e w vedete i processi relativi ai diversi terminali virtuali. 6- Trasferimento files: uso di ftp ( ftp trasmette le password in chiaro, sftp usa trasferimento criptato, oppure si puo' fare un tunnel su ssh ) trasferire files da una macchina all'altra. Provate a portare i vostri files su un'altra macchine e viceversa. Collegamento con ftp: ftp host user: username sull'host remoto password: sempre relativa all'host remoto comandi di ftp: help : da aiuto ls : mostra i files sull'host remoto cd direttorio : si cambia direttorio sull'host remoto pwd : mostra direttorio corrente sull'host remoto get file : prende un file put file : mette un file sull'host remoto mget * : prende tutti i files del direttorio corrente mput * : mette tutti i files !ls : mostra files sull'host locale !pwd : mostra direttorio corrente sull'host locale ! cd .. : ci si sposta in su di un livello sull'host locale type binary : i dati sono trasmessi senza modifiche ( dati binari ) type ascii : trasmette testi e converte carriage return/linefeed in linefeed ( serve solo se si trasferisce da sistemi non unix ) bye : 7- Condivisione di files con sistemi windows usando samba. in konqueror, usando ad esempio come url: smb://nomehost si vedono le cartelle windows che la macchina di nome nomehost esporta. samba permette di esportare cartelle ai sistemi windows. Occorre configurarlo modificando il file: /etc/samba/smb.conf Oppure potete far partire samba utilizzando l'interfaccia grafica, in Knoppix 5.0.1 menu knoppix->server->start sambasrver 8 - Argomento avanzato: apertura di servizi su porte non standard. Il daemon sshd e' configurato nel file: /etc/ssh/sshd_config editate il file, ed aggiungete la linea: Port 222 fare ripartire il daemon: /etc/init.d/ssh restart Ora potete accedere ad ssh sia dalla porta standard 22 che dalla 222. provate con un comando tipo: ssh -p 222 -l ospite2 192.168.100.103 9- Argomento avanzato: Utilizzo di telnet come strumento diagnostico telnet permette di aprire una connessione verso una porta arbitraria. molti protocolli di trasmissione consistono nella trasmissione di stringhe ascii. Possiamo usare telnet e simulare un client che accede ad un server. esempio 1 : protocollo del web : http mi connetto alla porta 80 di un server web e mando un messaggio non conforme al protocollo, mi arriva una pagina web con un messaggio di errore: telnet 192.168.100.101 80 aaaa esempio 2 : mi connetto alla porta 80 di un server web e parlo secondo il protocollo http 0.9 ottengo la pagina web che richiedo ( la pagina iniziale ) telnet 192.168.100.101 80 GET / esempio 3 : mi connetto alla porta 80 di un server web e parlo secondo il protocollo http 1.0 per avere informazioni sul server: telnet 192.168.100.101 80 HEAD / HTTP/1.0 qui una riga bianca esempio 4: protocollo SMTP ( mail ) (La macchina 192.168.100.101 deve avere il servizio SMTP sulla porta 25 ) telnet 192.168.100.101 25 HELO nome_mio_host MAIL FROM:studenti2 RCPT TO:studenti2@pcstudenti DATA messagio mandato a mano . QUIT 10- Argomento avanzato: Uso di nmap per veder quali porte sono aperte su un host Questo strumento diagnostico e' usato anche dagli hacker cattivi per cercare macchine vulnerabili. ATTENZIONE: IN CERTE CONDIZIONI UNO SCAN-PORT PUO' COSTITUIRE UN ATTACCO TIPO "DENIAL OF SERVICE" QUESTI STRUMENTI VANNO USATI CON CAUTELA, ACCORDATEVI CON LE MACCHINE "BERSAGLIO" PRIMA DI FARE QUESTO TIPO DI PROVE: nmap localhost : cerca le porte aperte sul nostro host nmap 192.168.100.101 : cerca le porte aperte su una macchina cercare nella macchina bersaglio, in /var/log/messages, tracce dello scanport. A seconda di come vengono fatti gli scanport possono essere piu' o meno visibili. Per vedere le porte aperte sulla propria macchina: netstat -nltpu 11- Argomento avanzato: Uso di uno sniffer per la disgnostica della rete: Es.: volete vedere i pacchetti tcp che arrivano o partono da 192.168.100.101 : tcpdump -i eth0 host 192.168.100.101 and tcp Es.: vedere anche il contenuto dei primi 1024 byte del pacchetto tcpdump -i eth0 -s 1024 -X host 192.168.100.101 and tcp provate a collegarvi all'host 192.168.100.101 con telnet e vedrete passare la vostra password in chiaro. Wireshark e' uno sniffer grafico, provate ad utilizzarlo ed a capire che paccheti passano nella rete. 12- Argomento avanzato: Configurazione di un firewall ( dovete essere root per questo) iptables e' il comando che si usa per configurare un firewall in Linux, si tratta di un comando che inserisce dei filtri lungo il percorso che i pacchetti fanno nel kernel. L'uso di iptables e' estremamente complicato, bisogna conoscere i dettagli dei protocolli di trasmissione e stare attenti a non fare errori, in cambio iptables e' efficiente e flessibile, sui pacchetti si puo' fare quasi di tutto, e basta un computer poco potente per filtrare un traffico intenso. Per configurare il firewall sulle macchine SuSE conviene usare Yast, che fornisce un'interfaccia semplificata. Ecco ad ogni modo alcuni esempi: iptables --list : mostra le catene (chain) : percorsi previsti vedrete 3 percorsi definiti: INPUT : pacchetti in ingresso FORWARD : pacchetti in transito OUTPUT : pacchetti in uscita iptables -P INPUT ACCEPT : di default la catena INPUT accetta i pacchetti (DROP=buttarli via) aggiungo una regola alla catena di input: registro i pacchetti tcp che vengono da 192.168.100.101 : (in /var/log/messages ) iptables -A INPUT -p tcp -s 192.168.100.101 -j LOG aggiungo un'altra regola, ignoro i pacchetti da 192.168.100.101 iptables -A INPUT -p tcp -s 192.168.100.101 -j DROP adesso non posso piu' parlare a questa macchina. iptables -F : elimino le regolee torno come all'inizio 13- Argomento avanzato: montare file systems remoti. Provare a montare il vostro direttorio su una macchina remota in modo da poterlo utilizzare come un file system locale a) sull'host remoto root deve modificare il file /etc/exports aggiungendo un record del tipo: /home/ospite2 192.168.100.100(ro,root_squash,insecure) il primo termine e' il direttorio che si esporta, seguono gli host che possono montarlo, e le opzioni ro=read-only, rw=read-write Ad esempio mettiamo in /etc/exports: /home/ospite1 192.168.100.100(rw,root_squash,insecure) 192.168.100.101(rw,root_squash,insecure) /home/ospite2 192.168.100.100(rw,root_squash,insecure) 192.168.100.101(rw,root_squash,insecure) /home/ospite3 192.168.100.100(rw,root_squash,insecure) 192.168.100.101(rw,root_squash,insecure) /home/ospite4 192.168.100.100(rw,root_squash,insecure) 192.168.100.101(rw,root_squash,insecure) ......................................... b) sull'host remoto root fa ripartire l'nfs server /etc/init.d/nfsserver restart showmount -e : mostra la lista dei direttori esportati showmount -a : mostra chi ha montato i files b) sull'host locale in /etc/fstab root aggiunge: host_remoto:/home/ospite2 /home/ospite2/remoto nfs rw,user,noauto,exec,hard,intr il primo termine e' il file system remoto da mentare, il secondo e' dove metterlo sulll'host locale il terzo e' il tipo di file (nfs = file di rete ) seguono le opzioni: rw=si puo' leggere e scrivere ; ro=read only ; user= non si deve essere root per montarlo d) sull'host locale si fa: mkdir /home/ospite2/remoto mount /home/ospite2/remoto ed in questa directory locale (/home/ospite2/remoto) si vedono i files che in realta' sono sull'altra macchina. df : mostra i file system montati umount /home/ospite2/remoto: smonta il file system Notare come occorra far corrispondere gli uid e gid degli utenti sulle 2 macchine, per evitare che un utente possa vedere come suoi i dati di un'altro. Ci sono diversi modi per "mappare" gli utenti di una macchina su quelli di un'altra quando si usa nfs, ma qui non facciamo in tempo ad entrare in dettagli. ........ In caso /etc/fstab non contenga il record relativo alla directory remota la sintassi del mount e' del tipo: mount -t nfs 192.168.100.100:/home/ospite2 /directory_locale Ma il mount deve essere effettuato da root. --------------------------------------------------------------------