Sessió 4

De Wikijoan
Dreceres ràpides: navegació, cerca

SESSIÓ 4. 18/01/2008

Contingut

=========================================

Aclaracions Sessió 2


-UDEV: és el device manager per al Kernel 2.6.

S'encarrega de muntar els dispositius.

Els dispositius van a la carpeta dev (això ho diu el FHS, File Hierarchy System)

Els dispositius, en la carpeta dev, estan marcats com a c (crw-rw---)

El UDEV és el que diu que el nostre dispositiu de xarxa es digui eth1 i no eth0.

Les interfícies de xarxa són una mica especials, perquè la xarxa ja està dins el kernel. Per tant, no esperem veure un dispositiu-fitxer que es digui eth1.

fitxers de configuració:

/etc/udev/rules.d/70-persistent-net.rules

/etc/udev/rules.d/z25_persistent-net.rules -> troba 3 MAC, i a una de les MAC li associa eth1 (aquest fitxer el genera automàticament). Si canvia la MAC, en el fitxer es genera de forma automàtica una nova línia i el número de eth puja. Això pot passar quan canvies la targeta de xarxa, o quan fas una imatge i la volques sobre una altra màquina.


en el fitxer interfaces no hi ha el eth1 sinó el eth0.

Aleshores, com és que funciona? doncs perquè qui ens configura la xarxa és el Network Manager (a la barra de dalt, un ratolí que surt-diferent entre Debian i Ubuntu).


---

ifup/ifdown -> només es poden aplicar sobre interfícies que estan en el fitxer d'interfaces. La nostra eth1 no està en aquest fitxer.

sudo ifup eth1 -> Ignoring unknown interface eth1=eth1

sudo ifup eth0 -> intenta fer-ho (està en el fitxer interfaces), però no la troba físicament


això está documentat en la documentació del curs:

ttp://atenea.upc.edu/moodle/course/view.php?id=13593

-> Documentació Xarxes Linux (wiki)


Sessió 4 18-01-2008

==================

VIRTUAL BOX (màquina virtual)

L'altra dia el Sergi no podia instalar el Virtual Box per culpa del REMBO (ara ja està solucionat)


REMBO -> sistema per carregar imatges (no-lliure, val força pasta).

és el sistema que tenen a la UPC. Les imatges es guarden en el servidor.

El problema són les actualitzacions. La carrega del sistema es fa des del servidor.

uname -r -> dóna la versió del Kernel

no coincideix amb la versió del kernel que vam configurar en la sessió 3 (2.6.18-5)

Quan es desenvolupa un projecte Linux (i altres) es guarda en sistemes CVS/SUBVERSION, de manera que es pot consultar els fonts del projecte en una versió anterior.


sudo apt-cache search linux-headers


VMWare és l'altre conegut, però el Virtual Box és lliure i hi ha altres detalls que van molt bé (per ex, canviar de la màquina virtual al Host).


Per instal.lar el Virtual Box necessitem:

-haver solucionat el tema del REMBO

-necessita linux-headers

-instal.lar el mòdul vboxdrv (intenta comunicar el hardware virtual amb el hardware real) -> el virtual box utilitza el hardware real.


La majoria de les aplicacions, amb els linux-headers en tenen prou per a compilar.


la versió que estem utilitzant de Debian és etch (a Ubuntu: feisty)

des de la pàgina web del curs (Atenea), on posa documentació del curs va a la wiki del Sergi tur. Aquí hi ha un cercador que pots posar Virtual Box


Hem d'afegir un repositori al fitxer /etc/apt/sources.list:

gksu gedit /etc/apt/sources.list (gedit és el editor, gksu és per obrir el fitxer en mode root)

afegeixo la línia:

deb http://www.virtualbox.org/debian etch non-free


instal.lo el virtual box:

sudo apt-get install virtualbox (en algun lloc ha de posar linux-headers)


I finalment per tal de poder utilitzar VirtualBox ens hem d'afegir al grup vboxusers:

$groups -> ens diu els grups als quals estem

ens afegima al grup:

$ sudo usermod -a -G vboxusers cursice

si faig groups, encara no se n'entera. He de reiniciar l'entorn gràfic, o bé l'ordinador.


ara ja puc fer groups, i efectivament s'ha afegit

NOTA. És important treballar amb el usuari cursice, i per això poso al davant sudo. Aquesta ha de ser la regla general.


queda instal.lat a eines del sistema els fitxers del virtual box són .vdi -> un vdi és una imatge de disc virtual. El Sergi ha creat aquest fitxer de la seva màquina, i nosaltres quan importem aquest fitxer vdi com estiguéssim en la seva màquina.

el virtual box suporta els fitxers del vmware (.vmdk), però no es pot fer alguna cosa.

els vdi files estan a /home/cursice/.VirtualBox/VDI


anem a http://147.83.75.130/

http://147.83.75.130/~sergi

~(AltGr-4) ~sergi significa que té un directori

html-public dins de l'apache

---

Espacio web para cada usuario

Cada usuario del sistema dispondrá de un espacio web que se almacena dentro de su carpeta home en una carpeta llamada 'public_html'. Si dicha carpeta no existe, el propio usuario puede crearla y copiar dentro de ella su página web. Los permisos recomendados son 644 para que el 'grupo' y el 'resto' de usuarios tengan acceso de lectura y así se puedan visualizar las páginas.

Para acceder vía web a la página de un usuario, desde un navegador debemos acceder directamente con la dirección IP a: http://ip-del-servidor/login-usuario/

El caracter comúnmente conocido como gusanillo y que se obtiene con Alt Gr + 4 sirve para indicar a apache que debe servir la página desde el home del usuario (en Linux el 'gusanillo' equivale a la carpeta home). Ejemplo, si hemos creado un usuario javier y éste ha creado la carpeta /home/javier/public_html y ha copiado en ella su página web, desde cualquier PC de la red podremos acceder a dicha carpeta yendo a la dirección http://ip-del-servidor/javier/. Para que la página aparezca automáticamente, es necesario crear un archivo llamado index.html

---

aquí trobem el fitxer de configuració que necessitem:

IPCOP1.vdi

creem la carpeta dins el home:

$mkdir MaquinesVirtuals


copiem el fitxer de configuració en aquesta carpeta:

$wget http://147.83.75.130/~sergi/IPCOP1.vdi


fem el mateix per als fitxers .sh


donem d'ata una nova màquina virtual (per ex, li diem JOAN).

Treballem en un Linux 2.6

fiquem la RAM. Per ex, 100MB per al IPCOP

Busquem un disc dur existent, i seleccionem el fitxer vdi que tenim

No agafem USB per defecte.

vdi-> imatge de disc virtual


Les màquines virtuals es convertiran en una eina imprescindible per treballar a l'aula, per exemple per explicar xarxes.


Analitzadors de xarxa (sniffer)


tcpdump (a windows hi ha el windump), ethereal

mode promiscu: llegim tots els paquets que circulen per la xarxa. Amb un Switch això ja no és cert, doncs només captures els paquets que vinguin o vagin a la teva xarxa, o els paquets broadcast.

Un Hub és com un lladre de xarxa: tot està connectat amb tot.

Un Switch és més intel.ligent

Hi ha eines que enganyen el switch per poder rebre tota la informació.


(mirem les transparències de la sessió 2:

protocols_de_xarxes_unix.odp)

Instal.lem el tcpdump:

$sudo apt-get install tcpdump

El ping utilitza el protocol ICMP

utiltizem el tcpdump filtrant:

$sudo tcpdump -i eth1 icmp

$sudo tcpdump -i lo icmp -> lo: loopback. per capturar

un ping localhost

-n per tal que no faci la resolució de DNS, que només

es vegi la IP


ethereal ha canviat el nom. Ara es diu WireShark

$sudo apt-get install wireshark

és una eina gràfica

pràctica recomanada:

hem de capturar

http://acacha.dyndns.org/~sergi/privat

i ficar un usuari i un password, i veure com el ethereal ha capturat el login i password

el password està a la capçalera del protocol HTTP ->

trobar-lo

Hypertext Transfer Protocol

       GET /~sergi/privat HTTP/1.1\r\n
               Host: acacha.dyndns.org\r\n
               ...
               Authorization: Basic am9hbjoxNzMy\r\n
                       Credentials: joan:****

-> ja ho he trobat

en la finestra intermitja apareixen diferents línies per cada paquet, que és una línia per cada capa OSI.


SOHO: small office home office (petites empreses i ordinadors domèstics)


iptables: important

sudo iptables -L

-> t'ensenya les normes que tens a la teva màquina

Resultat: input, forward i output són acceptats (política per defecte, acceptar-ho tot)

sudo iptables -L -t nat -> per defecte està buit


Sessió 4 (continuació). 25/01/2007

=======================

(seguim les transparències)


la comanda ping no utilitza ports. Utilitza protocol icmp.

La manera de filtrar el ping en la màquina local és filtrar tot el protocol:

$sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP

(localhost està associat a la loopback, lo)

ping localhost no va

ping meva_ip sí que va (147.83.75.132)


i bloquejar els pings que vinguin d'una màquina remota

$sudo iptables -A INPUT -s ip_company -p icmp -j DROP


$sudo iptables -L -> veig les regles que he ficat en el meu iptables. Quan reinicio l'ordinador es perden. La manera de fer-ho fix és ficar-ho en un fitxer de configuració (que veurem).


en source (-s) puc ficar xarxes, per bloquejar una xarxa o subxarxa. Per ex: -s 147.83.75.129/25


tcpdump ens serveix per veure els paquets que estan passant per una interfície:

$sudo tcpdump -i lo icmp (només vull veure el protocol icmp)

i faig un ping locahost

amb el tcpdump rebo el ping, però no faig el reply. És a dir, el paquet sí que es rep, però no es processa.

Si no hi ha filtre es veu la parella request-reply.


Per debugar puc utilitzar el nmap (per escanejar ports):

$sudo apt-get install nmap

$sudo nmap localhost

(en el cas del ping no em val, perquè el nmap fa referència a ports)


El iptables és ideal per fer pràctiques de classe.


Per esborrar una lína del iptables:

$sudo iptables -D INPUT -s 147.83.75.132 -p icmp -j DROP

$sudo iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP


(compte perquè si una norma la introdueixo dues vegades, l'he d'esborrar dues vegades)


Per bloquejar un servei (un protocol, un port):

$sudo iptables -A INPUT -s ip_company -p tcp --dport 22 -j DROP

dport vol dir port de destí. També es pot filtrar per port d'origen, encara que no té massa sentit.

Port 22: SSH, que funciona per TCP. Si fico el port, també he de ficar el protocol


ip_company: 147.83.75.133

$sudo iptables -A INPUT -s 147.83.75.133 -p tcp --dport 22 -j DROP

ara si el company fa nmap sobre la meva màquinaveurà que tindrà filtrar el port 22:


company$sudo nmap 147.83.75.132 (meva_ip)


Va molt bé per fer coses del tipus: permeto entrar a tots menys un. Per fer-ho al revés, utilitzo la negació lògica: !147.83.75.133 (només permeto a un)


Diferència entre DROP i REJECT

DROP: filtres el paquet, el llences, no fas cap reply

REJECT: fas uns reply avisant de què no l'admets: Destination port unreachable

(per fer el reject, s'ha d'esborrar el drop, si la teníem, i afegir el reject)

$sudo iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP

$sudo iptables -A INPUT -s 127.0.0.1 -p icmp -j REJECT


$sudo tcpdump -i lo icmp


Firewalls personal per a Linux: Firestater


$sudo apt-get install firestarter

-> consultar que hi ha unes normes posades per defecte en el iptables

per tal que funcioni s'ha de reiniciar la interfície gràfica (per ex, tancar la sessió)

$sudo apt-get remove --purge firestarter

Tenir engegat un firewall és una molèstia. --purge: borra les configuracions. És la manera que l'aplicació no deixi res a la màquina.


$sudo iptables -nvL -> dóna més informació, concretament nº de paquets o bytem filtrats (per defecte, només filtrats). la v és de verbose

si ho combino amb el watch és una eina perfecta per depurar, doncs si va incrementant el nº de bytes vol dir que en aquest moment estic bloquejant.

$sudo watch iptable -nvL (per defecte s'executa cada 2seg)


Una possibilitat d'aplicació a l'aula és filtrar el messanger (port 1863)


$sudo iptables-save -> ens volca per la sortida estàndard les normes que tenim

si fem una redirecció unix a un fitxer, aquesta és la base per guardar les normes de forma permanent.

El contrari és iptables-restore


$ echo "#!/bin/sh" > /etc/network/if-up.d/iptables

$ echo "iptables-restore < /etc/firewall.conf" >> /etc/network/if-up.d/iptables

$ chmod +x /etc/network/if-up.d/iptables


Explicació:

1a línia: escric la línia '#!/bin/sh', que vol dir que és un fitxer de bash, al fitxer iptables (es crea o existeix) que s'executarà en el if-up.d (tot el que hi ha aquí són scripts que s'executaran en iniciar la xarxa del sistema).

2a línia: faig un iptables-restore de les normes que havia guardat en el fitxer firewall.conf

el resultat ho afegeixo a /etc/network/if-up.d/iptables

3a línia. dono permisos d'execució


Si vull més seguretat, en comptes de posar-ho en el if-up ho poso en el if-pre-up


Hi ha altres maneres de fer el mateix.



NAT (Network Address Translation)

=====================

la idea és compartir una IP pública connectada a Inet, amb tota la intranet que té IPs privades.


veure la diferència entre el resultat de:

ipcalc ip_privada

ipcalc ip_publica


quan els paquets passen pel nostre router s'ha de fer una traducció.

El router (per ex el de casa) té dues interfícies: la privada (192.168.0.1) i la pública (per ex 80.83.70.14, que pot ser fixa o dinàmica depenent del contracte)


SNAT (Source Nat)

Si faig una petició d'una web a Inet, el meu paquet és:

...|192.168.0.4|ip_dest www.google.es | dades

i el que fa el router és traduir-ho per:

...|80.83.70.14|ip_dest www.google.es | dades


el DNAT (Destination Nat) servei per tenir servidors dins la xarxa. Per ex, tenim un servidor web

si rebo un paquet pel port 80, vull que es redireccioni a una ip de la xarxa:

...|ip_origen|80.83.70.14| dades

i el router es tradueix a (també es podria modificar el port):

...|ip_origen|192.168.0.4| dades


DNAT també es coneix com 'Obrir ports' (per ex, el EMule)


El router sempre deixa passar la informació de resposta d'alguna cosa que jo he demanat (per ex, petició d'una pàgina web). A aquest nivell no cal obrir el port 80. Això és perquè la ip d'origen sempre es guarda en el paquet, i quan faig una petició d'una web retorna a la màquina local correcta.

Ara bé, quan hi ha una petició externa des de fora, s'ha d'obrir el port.


Un socket (endoll) és una IP+ un port (+ un protocol). La metàfora és:

vols connectar dues màquines, les connectes (la IP i el port)

el destination port (dport) és l'important. Per ex, 80, vull connectar-me a una web.

Informació sobre tot això amb la comanda netstat:

$sudo netstat --inet

$sudo netstat --inet -n


SNAT també es conegut com Masquerade


$ sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

en la fase de postrouting totes les ip d'origen de la xarxa local (per ex, 192.168.1.5) en faré masquerade, que vol dir traduir-la per la ip pública. Com sé quina és la ip_pública: amb el eth0

-o eth0 (output interface)


iptables -t nat -A PREROUTNG -d 10.10.20.99 -j DNAT --to-destination 10.10.14.2

---

Socket designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.


Para que dos programas puedan comunicarse entre sí es necesario que se cumplan ciertos requisitos:


   * Que un programa sea capaz de localizar al otro.
   * Que ambos programas sean capaces de intercambiarse cualquier secuencia de octetos, es decir, datos relevantes a su finalidad.


Para ello son necesarios los tres recursos que originan el concepto de socket:


   * Un protocolo de comunicaciones, que permite el intercambio de octetos.
   * Una dirección del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que identifica una computadora.
   * Un número de puerto, que identifica a un programa dentro de una computadora.


Los sockets permiten implementar una arquitectura cliente-servidor. La comunicación ha de ser iniciada por uno de los programas que se denomina programa cliente. El segundo programa espera a que otro inicie la comunicación, por este motivo se denomina programa servidor.


Un socket es un fichero existente en la máquina cliente y en la máquina servidora, que sirve en última instancia para que el programa servidor y el cliente lean y escriban la información. Esta información será la transmitida por las diferentes capas de red.

---


IPCOP és una distribució Linux, que té serveis FireWall, DNS,...

utilitzant el IPCOP amb una màquina virtual, puc fer pràctiques de xarxa de manera fàcil.

hi ha la xarxa interna entre la màquina anfitriona i la màquina virtual. La màquina anfitriona fa de NAT, fa de router, i puc enviar les peticions de la màquina virtual cap a l'exterior.

En la màquina virtual puc tenir un servidor web, i accedir-hi des de l'exterior.


un altre mode és el bridged: tant la màquina anfitriona com la màquina virtual estan a la mateixa xarxa, amb dos ip diferents.


Veure la configuració del IPCOP a la wiki del curs (apartat 9.2)(http://acacha.dyndns.org/mediawiki/index.php/Virtual_Box)

els fitxers de configuració estan a ~/MaquinesVirtuals

modificar el fitxer setuptap.sh. Canviar sergi per cursice. canviar eth0 per eth1 (que és la meva interfície)


instal.lar dos paquets:

$sudo apt-get install uml-utilities bridge-utils


executar el scrpt:

$sudo chmod +x setuptap.sh

$sudo ./setuptap.sh


fent un ifconfig (en la màquina host), veiem que s'ha creat les interfícies br0 i tap0. Aquesta és la manera que tenen el VMware i el VirtualBox per utilitzar dues interfícies a partir d'una sola.


aquests fitxers de configuració (.sh) es poden posar en el Virtual Box per tal que s'executin en l'inici de la màquina virtual.


Fixar-se que ara la meva IP (147.83.75.132) la té la interfície br0

En el Adaptador0 del VirtualBox fico el tap0

des del IPCOP engegat, quan faig el ifconfig veix que hi ha dues IP en comptes d'una.


En el Adaptador 0 es fica Interface Anfitrión, i en Adaptador 1 es fica NAT

login i pwd de la màquina virtual: root/cursice o admin/cursice


Un cop logat, s'ha de configurar la xarxa:

$setup

escollir xarxa, i seguir els passos

xarxa RED+GREEN

la xarxa verda és la intranet local

la xarxa vermella és la que accedeix a Inet.


quan acabo, si acabo bé, fent el ifconfig veig que té dues interfícies. Una privada (147.83.75.170)i una pública (10.0.2.15).

IPCOP és un paranoic de la seguretat, i tots els ports estan canviat. El port web és el 81

El Sergi utilitza el IPCOP per fer pràctiques amb els alumnes.


$clear -> esborrar pantalla

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines