Activitats

Protocol FTP

L’objectiu d’aquesta activitat és comprendre el funcionament general del protocol FTP.

Realitzeu el següent:

  1. Llisteu els ports usats pel protocol FTP en un sistema Linux (usualment /etc/services).
  2. Useu les ordres de monitoratge del trànsit TCP (usualment, nmap, netstat, ss i IPTraf, entre altres) per observar els ports oberts en el client i el servidor.

1. Llistar ports

Llistat dels ports que inclouen alguna referència FTP:

[root@portatil ~]# cat /etc/services | grep ftp
ftp-data    20/tcp
ftp		      21/tcp
tftp		    69/udp
sftp		    115/tcp
ftps-data	  989/tcp				# FTP over SSL (data)
ftps		    990/tcp
venus-se	  2431/udp			# udp sftp side effect
codasrv-se	2433/udp			# udp sftp side effect
gsiftp		  2811/tcp
gsiftp	  	2811/udp
frox		    2121/tcp			# frox: caching ftp proxy
zope-ftp  	8021/tcp			# zope management by ftp

Llistat dels ports exclusius del protocol FTP i FTPS:

root@debian:/var# cat /etc/services | grep "^ftp"
ftp-data  20/tcp
ftp		    21/tcp
ftps-data	989/tcp				# FTP over SSL (data)
ftps		  990/tcp

2. Monitoritzar tràfic

  • Sessió ftp. Per fer les captures i el monitoratge de les comunicacions i els ports hem fet sempre la mateixa sessió ftp (però cada vegada s’utilitzen ports diferents). La sessió identifica l’usuari pere, fa l’ordre pwd, ls i get pere.info.
  • Iptraf. Activar la monitorització de totes les interfícies o de la interfície corresponent. Si ataquem el propi host utilitzant el loopback només cal seleccionar-lo. Com es pot veure en la imatge següent.
  • Element de llista de pics. El tràfic del canal de control va del port 47158 del client al port 21 del servidor (la mateixa màquina).
  • El canal de dades per a la transferència del llistat s’ha establert entre dos ports dinàmics del client i el servidor. vsftpd treballa per defecte en passive mode, de manera que el client estableix la connexió de dades al port que el servidor li indica. Del port 5268 del client al port 33667 del servidor. Un cop transferit el llistat, aquesta connexió TCP finalitza.
  • La transferència del fitxer s’ha fet per una nova connexió TCP entre el client i el servidor, usant els ports 27456 del client i el 53335 del servidor.

  • Ordre ss. Llistar els ports utilitzats amb l’ordre ss. S’ha descarregat un fitxer gran (un kernel de /boot/vmlinuz…) per tenir temps d’executar l’ordre en una altra sessió mentre es fa la descàrrega del fitxer.

En aquesta sessió FTP el client utilitza el port 32770 pel canal de control, i el servidor lògicament el port 21 (etiquetat com a ftp).

La transferència del fitxer del kernel es fa per una connexió TCP entre el port 60175 del client al port 489890 del servidor.

[root@portatil ~]# ss
State       Recv-Q Send-Q Local Address:Port Peer Address:Port

ESTAB       0      0      127.0.0.1:ftp            127.0.0.1:32770
ESTAB       0      16384  127.0.0.1:60175          127.0.0.1:49890
ESTAB       0      0      127.0.0.1:32770          127.0.0.1:ftp
ESTAB 0 0 127.0.0.1:49890 127.0.0.1:60175 
  • Netstat. L’ordre netstat mostra les connexions actives. Es pot usar l’opció -t per filtrar només el tràfic tcp, -n per mostrar els números de port (en lloc dels noms ben coneguts), -v perquè sigui verbose i -c perquè faci el reconeixement sistemàtic contínuament.
[root@portatil ~]# netstat -tnvc
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address   State
tcp   0      0      127.0.0.1:21        127.0.0.1:44449   ESTABLISHED
tcp   0      0      127.0.0.1:44449     127.0.0.1:21      ESTABLISHED

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address   State
tcp   0      0      127.0.0.1:44902     127.0.0.1:43686   TIME_WAIT
tcp   0      0      127.0.0.1:21        127.0.0.1:44449   ESTABLISHED
tcp   0      0      127.0.0.1:44449     127.0.0.1:21      ESTABLISHED

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address   State
tcp   0      0      127.0.0.1:44902     127.0.0.1:43686   TIME_WAIT
tcp   0      0      127.0.0.1:37909     127.0.0.1:48589   TIME_WAIT
tcp   0      0      127.0.0.1:21        127.0.0.1:44449   ESTABLISHED
tcp   0      0      127.0.0.1:44449     127.0.0.1:21      ESTABLISHED

...
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address       Foreign Address   State
tcp   15     0      127.0.0.1:44449     127.0.0.1:21      CLOSE_WAIT

Com es pot observar del llistat, la sessió FTP ha realitzat tres connexions:

  • La primera d’elles és la connexió de control entre el port 44449 del client i el port 21 del servidor. Fixeu-vos que l’estat és ESTABLISHED perquè és una connexió establerta i que es manté oberta.
  • La segona connexió es la que realitza el llistat del directori. Es produeix entre el port 44902 del client i el port 43686 del servidor. L’estat és TIME_WAIT perquè la connexió ja ha finalitzat, però el socket triga un temps a tancar-se. Un cop es tanca apareix en l’estat CLOSE_WAIT i quan ha passat un cert temps ja no apareix.
  • La tercera connexió correspon a la descàrrega del fitxer. El client usa el port 37909 per connectar-se al port de dades 48589 del servidor.
  • Finalment, podem veure que si passa un temps sense que la sessió ftp faci res s’acaba tancant automàticament. Observeu que un cop el socket s’ha tancat apareix com a CLOSE_WAIT per un cert període de temps.
  • Nmap. Aquesta ordre permet fer un revisió de l’estat dels ports d’una màquina, entre moltes altres coses. S’utilitza sovint com una eina d’intrusió (o de xafardeig). Per tant, és una excel·lent eina de l’administrador per comprovar l’estat del servidor:
[root@portatil ~]# nmap localhost
Starting Nmap 4.20 ( http://insecure.org ) at 2008-06-01 21:21 CEST
Interesting ports on localhost (127.0.0.1):
Not shown: 1693 closed ports 

PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
111/tcp  open  rpcbind
8000/tcp open http-alt 

Podeu consultar també altres fonts d’informació, com els webs següents:

M08-SXI Serveis de xarxa i internet

The Linux Documentation Project

Client FTP

En aquesta activitat treballareu com a client FTP. Cal que feu el següent:

  1. Obteniu d’Internet una llista de clients FTP en mode text i en mode gràfic i descriviu-ne les característiques.
  2. Obteniu d’Internet una llista de repositoris FTP de programari públic des d’on descarregar-vos aplicacions interessants.
  3. Utilitzeu un navegador web per accedir al servei FTP de RedIRIS (ftp.rediris.es) i observeu els continguts disponibles.
  4. Realitzeu en una sessió client d’FTP totes aquestes accions: connectar-vos, llistar, descarregar un fitxer, descarregar a un directori local diferent, descarregar un conjunt de fitxers o directoris, modificar el mode de transferència, reprendre una descàrrega interrompuda, tancar la sessió i obrir una nova sessió en un altre servidor.

Buscar per Internet, per exemple a Google, clients FTP.

Obtenir una llista de repositoris públics:

Utilitzant el navegador, accedir a la seu ftp de rediris ftp.rediris.es. Evidentment, cal usar el protocol ftp i no l’hhtp, per tant la URI quedarà amb l’esquema ftp i la direcció de rediris: ftp://ftp.rediris.es .

  • Sessió client FTP. Cal realitzar una sessió de client FTP i descarregar i carregar fitxers i directoris. Modificar el mode de la transmissió i canviar de servidor.
[root@portatil tmp]# ftp 
ftp> open ftp.rediris.es
Connected to zeppo.rediris.es.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 16 of 3000 allowed.
220-<<
220-  Bienvenido al FTP anónimo de RedIRIS.
220-Welcome to the RedIRIS anonymous FTP server.
220->>
220-Local time is now 12:38. Server port: 21.
220-Only anonymous FTP is allowed here
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
Name (ftp.rediris.es:professor): anonymous
331-            RedIRIS - Red Académica y de Investigación Española
331-                RedIRIS - Spanish National Research Network
331-
331-           ftp://ftp.rediris.es  -=-  http://ftp.rediris.es
331-
331 Any password will work
Password:
230 Any password will work
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (130,206,1,5,117,92)
150 Accepted data connection
drwxr-xr-x    2 55       55            512 Jul 18 2005 .
drwxr-xr-x    2 55       55            512 Jul 18 2005 ..
-rw-r--r--    1 55       55            619 Jul 24 2006 .banner
lrwxrwxrwx    1 55       55            43 Jul 21 2005 debian ->

  volumes/vol2/syncproxy.eu.debian.org/debian
lrwxrwxrwx    1 55       55            50 Aug 1 2005 debian-non-US ->
  volumes/vol2/syncproxy.eu.debian.org/debian-non-US
d-wx------    2 104      55            512 Jul 19 2005 incoming
-rw-r--r--    1 55       55      508725926 Jun 1 15:41 ls-lR
-rw-r--r--    1 55       55       93445864 Jun 1 15:45 ls-lR.Z
-rw-r--r--    1 55       55       65284937 Jun 1 15:43 ls-lR.gz
drwxrwxr-x    2 55       55           2560 May 12 15:37 mirror
d--x--x--x   21 55       55            512 May 14 17:38 outgoing
drwxr-xr-x    5 55       55            512 May 12 15:37 pub
lrwxrwxrwx    1 55       55             20 Aug 3 2005 rediris ->
  volumes/vol1/rediris
drwxr-xr-x    2 55       55           2560 Apr 12 2007 sites
drwxr-xr-x    9 55       55            512 May 7 2007 volumes
-rw-r--r--    1 55       55             88 Oct 18 2005 welcome.msg
226-Options: -a -l
226 16 matches total 
ftp> get ls-lR
local: ls-lR remote: ls-lR
227 Entering Passive Mode (130,206,1,5,152,52)
150-Accepted data connection
150 496802.7 kbytes to download

receive aborted
waiting for remote to finish abort
426 Transfer aborted
226 Transfer aborted
8119120 bytes received in 9,17 secs (8,6e+02 Kbytes/sec) 
ftp> close
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout. 
ftp> open localhost
Connected to localhost.
220 (vsFTPd 2.3.2)
Name (localhost:professor): professor
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> trace
Packet tracing on.
ftp> verbose
Verbose mode off.
ftp> status
Connected to localhost.
No proxy connection.
Mode: stream; Type: binary; Form: non-print; Structure: file
Verbose: off; Bell: off; Prompting: on; Globbing: on
Store unique: off; Receive unique: off
Case: off; CR stripping: on
Quote control characters: on
Ntrans: off
Nmap: off
Hash mark printing: off; Use of PORT cmds: on
Tick counter printing: off
ftp> ls
drwxr-xr-x    2 1000     1000         4096 May 03 13:16 Descargas
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 Documentos
drwx------    3 1000     1000         4096 May 02 13:23 Downloads
drwxr-xr-x    2 1000     1000         4096 Jul 04 12:30 Escritorio
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 Im??genes
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 M??sica
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 Plantillas
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 P??blico
drwxr-xr-x    2 1000     1000         4096 Nov 06  2012 V??deos
drwxr-xr-x    2 1000     1000         4096 May 21 12:49 entrants1213
-rw-r--r--    1 1000     1000          334 Jul 01 11:20 fitxer1.txt
-rw-r--r--    1 0        0            3110 Apr 29  2009 linuxmint-keyring_2009.04.29_all.deb
ftp> get text.txt
local: text.txt remote: text.txt
227 Entering Passive Mode (127,0,0,1,234,45)
150 Opening BINARY mode data connection for text.txt (105 bytes).
WARNING! 3 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 File send OK.
105 bytes received in 0,000105 secs (9,8e+02 Kbytes/sec 
ftp> !mkdir pub
ftp> mget pub/* pub
mget pub/llistat? y
227 Entering Passive Mode (127,0,0,1,192,150)
150 Opening BINARY mode data connection for pub/llistat (110 bytes).
WARNING! 3 bare linefeeds received in ASCII mode
File may not have transferred correctly. 
226 File send OK.
110 bytes received in 0,000123 secs (8,7e+02 Kbytes/sec) 
mget pub/services? y
227 Entering Passive Mode (127,0,0,1,224,244)
150 Opening BINARY mode data connection for pub/services (362047 bytes).
WARNING! 9249 bare linefeeds received inASCII mode
File may not have transferred correctly.
226 File send OK.
362047 bytes received in 0,0279 secs (1,3e+04 Kbytes/sec)
mget pub/llistat? y
227 Entering Passive Mode (127,0,0,1,100,74)
150 Opening BINARY mode data connection for pub/llistat (110 bytes).
WARNING! 3 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 File send OK.
110 bytes received in 0,000104 secs (1e+03 Kbytes/sec)
mget pub/services? y
227 Entering Passive Mode (127,0,0,1,109,96)
150 Opening BINARY mode data connection for pub/services (362047 bytes).
WARNING! 9249 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 File send OK.
362047 bytes received in 0,0288 secs (1,2e+04 Kbytes/sec) 

Instal·lació i configuració del servidor vsftpd en el sistema operatiu Linux

L’objectiu d’aquesta activitat és practicar la instal·lació i configuració d’un servidor FTP:

Feu les tasques següents:

  1. Instal·leu el servidor FTP vsftpd (very secure FTP daemon). Observeu els seus components: fitxers executables, fitxers de configuració, de documentació i de monitoratge.
  2. Comproveu l’estat del servei FTP.
  3. Permeteu l’accés al servei FTP d’usuaris autenticats.
  4. Monitoreu el trànsit que genera el servidor FTP utilitzant Wireshark.

1. Instal·lació i components del servidor FTP

Val a dir que l’elecció d’aquest tipus de servidor radica en la seva facilitat d’instal·lació i configuració i el seu ús estès com a servidor anònim.

Per tant, atès que instal·lem el programari en el sistema operatiu Linux, podem procedir a instal·lar-lo mitjançant el terminal d’ordres. En aquest cas, per fer l’operació haurem de treballar mitjançant l’ordre sudo amb un usuari amb privilegis de sudo o, directament, essent root.

root@server:~# apt install vsftpd
S'està llegint la llista de paquets… Fet 
S'està construint l'arbre de dependències       
S'està llegint la informació de l'estat… Fet
S'instal·laran els paquets NOUS següents:
  vsftpd
0 actualitzats, 1 nous a instal·lar, 0 a suprimir i 164 no actualitzats.
S'ha d'obtenir 153 kB d'arxius.
Després d'aquesta operació s'empraran 357 kB d'espai en disc addicional.
Bai:1 http://deb.debian.org/debian buster/main amd64 vsftpd amd64 3.0.3-12 [153 kB]
S'ha baixat 153 kB en 0s (335 kB/s)
S'estan preconfigurant els paquets...
S'està seleccionant el paquet vsftpd prèviament no seleccionat.
(S'està llegint la base de dades… hi ha 121463 fitxers i directoris instal·lats actualment.)
S'està preparant per a desempaquetar …/vsftpd_3.0.3-12_amd64.deb…
S'està desempaquetant vsftpd (3.0.3-12)…
S'està configurant vsftpd (3.0.3-12)…

L’execució d’aquesta ordre facilitarà la instal·lació del servidor i, a més, la creació d’un nou usuari anomenat ftp en el nostre sistema operatiu, que serà inclòs dins del grup nogroup.

El directori home de l’usuari és propietat de root i el grup propietari és nogroup. Val a dir que en aquest directori s’allotjaran els arxius que desitgem compartir mitjançant el servidor FTP per als usuaris anònims.

Arribats en aquest punt, és important destacar els diferents arxius de configuració presents dins del nostre sistema en el moment de la instal·lació del servidor vsftp:

  • /etc/init.d/vsftpd: arxiu per arrencar el servidor FTP.
  • /etc/vsftpd.conf: arxiu de configuració del servidor vsftpd.
  • /etc/ftpusers: arxiu on es troba una llista dels usuaris que no es podran connectar al servidor (root, bin, nobody, etc.).
  • /srv/ftp: directori que conté els arxius que comparteixen el servidor.
  • /usr/sbin/vsftpd: arxiu executable del servei FTP.

Després de la instal·lació del servidor, cal configurar el servidor. Per fer-ho, hem d’adreçar-nos a l’arxiu que conté la configuració, això és, /etc/vsftpd.conf.

root@server:~# head /etc/vsftpd.conf
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
root@server:~# 

L’estructura de les línies de l’arxiu /etc/vsftpd.conf segueix el següent patró:

  1. directiva=valor

on directriu és el nom de la propietat que volem configurar i valor serà el valor que voldrem assignar a aquesta directriu. En aquest cas, si volem habilitar una directriu haurem de treure el caràcter de comentari (#).

Cal destacar que, entre les diferents opcions presents dins de l’arxiu /etc/vsftpd.conf, hi ha algunes que són booleanes, unes altres són numèriques i la resta són igual a cadenes de caràcters.

Cal destacar que algunes de les directrius que hi apareixen són força rellevants com, per exemple, servidor standalone. De fet, el servidor pot executar-se com un procés independent (standalone). Ara bé, per aconseguir-ho, la directriu listen=YES haurà d’estar activada (sense el caràcter de comentari).

Des del punt de vista de la gestió dels usuaris és important destacar que, per defecte, els usuaris que poden utilitzar el servidor són els anònims i tots aquells que disposin d’un compte en el sistema. En aquest cas, per activar-ne les funcions haurem d’activar les línies anonymous_enable=YES i local_enable=YES.

Respecte de la descàrrega d’arxius, quan un usuari anònim (anomymous) es connecta al servidor FTP accedirà al directori home de l’usuari anonymous (/srv/ftp, per defecte). Val a dir que aquest usuari es trobarà en una mena de gàbia o entorn d’engabiament, això és, el seu directori arrel (directori /).

Els usuaris poden descarregar arxius que es trobin en el directori /srv/ftp i en els seus subdirectoris.

D’altra banda, quan un usuari local es connecti tindrem dues opcions de configuració del seu inici, això és, no engabiar-lo i permetre que interaccioni amb el sistema en funció dels seus permisos i privilegis, o bé engabiar-lo en el seu directori d’inici per motius de seguretat. En aquest cas, per activar la segona opció haurem d’activar la directriu chroot_local_user=YES.

Ara bé, en el cas que volguessin que algun dels usuaris no fos engabiat podríem establir els nous paràmetres mitjançant les directrius chroot_list_enable=YES i chroot_list_file=/etc/vsftpd.chroot_lista. La primera directriu indica que hi ha una llista d’usuaris que, en el moment de la connexió, no han de ser engabiats i, per contra, la segona directriu informa del nom del fitxer on es troben aquests usuaris.

Si volem permetre que els usuaris locals pugin arxius al servidor FTP haurem d’habilitar la directriu write_enable=YES. De fet, hem de tenir en compte que per establir els permisos per defecte per als usuaris que carreguen arxius al servidor, podrem utilitzar la directriu local_umask=022.

En el cas de la càrrega d’arxius per part d’usuaris anònims, la càrrega per defecte està desactivada. De fet, per activar-la haurem d’incloure la directriu anon_upload_enable=YES; a més, haurem de crear un directori en el qual els permisos permetin escriure-hi.

De fet, com en el cas dels usuaris locals, haurem de posar una màscara per establir els permisos dels arxius que carreguen els usuaris anònims.

  1. anon_umask=022

D’altra banda, en el cas que volguéssim que els usuaris anònims modifiquessin arxius d’altres usuaris anònims i que, a més, poguessin crear directoris, haurem d’incloure les directrius següents:

  1. anon_other_write_enable=YES
  2. anon_mkdir_write_enable=YES

Quan ens connectem al servidor FTP i fem un canvi de directori podem habilitar la visualització de missatges emmagatzemant el text del missatge en un arxiu que anomenarem amb un altre nom. Per fer-ho, haurem de seguir els passos següents:

  1. Crear un arxiu i incloure-hi el text escollit.
  2. Incloure les directrius següents:
  1. dirmessage_enable=YES
  2. message_file=.missatge

Mitjançant el registre d’activitat podrem realitzar un control de l’activitat desenvolupada en el nostre servidor FTP. Aquest registre es realitzarà mitjançant l’arxiu /var/log/vsftpd.log i les directrius xferlog_enable=YES i xferlog_file=/var/log/vsftpd.log.

Des del punt de vista del temps de connexió, amb la intenció d’identificar alguns dels temps que fan referència a configuracions del nostre servidor tenim les directrius següents:

  • accept_timeout: temps per establir una connexió en mode passiu d’un usuari remot.
  • data_connection_timeout: temps màxim que el servidor espera quan una transferència no progressa.
  • idle_session_timeout: temps màxim que es concedeix a un usuari remot que no està actiu, això és, executant ordres.

2. Estat del servei.

Es pot saber l’estat del servei amb l’opció status de les ordres:

root@server:~# service vsftpd status
● vsftpd.service - vsftpd FTP server
   Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-09-09 11:09:51 CEST; 14min ago
 Main PID: 2540 (vsftpd)
    Tasks: 1 (limit: 1138)
   Memory: 592.0K
   CGroup: /system.slice/vsftpd.service
           └─2540 /usr/sbin/vsftpd /etc/vsftpd.conf

de set. 09 11:09:51 server.ioc.cat systemd[1]: Starting vsftpd FTP server...
de set. 09 11:09:51 server.ioc.cat systemd[1]: Started vsftpd FTP server.
root@server:~# 

Finalment, un cop haguem configurat el nostre servidor FTP, només ens quedarà llançar-lo. Aquesta acció la realitzarem mitjançant l’execució de l’ordre:

root@server:~# service vsftpd start

Paral·lelament, altres opcions de les quals disposem són:

  • stop: per aturar el servidor.
  • reload: per recarregar els paràmetres de configuració.
  • restart: per aturar i tornar a arrencar el servidor.

3. Accés al servei FTP d’usuaris autenticats.

Per defecte, els usuaris autenticats ja poden identificar al servidor FTP i fer-ne ús. Es controla amb la directiva:

local_enable=yes

Comprovem que és possible identificar-se:

root@server:~# ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.3)
Name (localhost:pere): pere
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/home/pere" is the current directory
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Sep 09 11:56 pere.info
226 Directory send OK.
ftp> get pere.info
local: pere.info remote: pere.info
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for pere.info (0 bytes).
226 Transfer complete.
ftp> quit
221 Goodbye.
root@server:~#

4. Monitoritzar el tràfic amb Wireshark

Activem un sniffer de xarxa, com per exemple Wireshark, i iniciem una sessió FTP (l’anterior) per monitoritzar tota la sessió.

Observem que en una connexió TCP es pot aplicar l’opció follow tcp stream que mostra en text tot el diàleg TCP, si se selecciona el canal de control. Aquí veiem que tota la transferència de la informació es fa en text pla (plaintext) i evidentment es pot visualitzar informació sensible (contrasenya, …). El protocol FTP és un protocol no segur i cal afegir-li una capa de seguretat per tal de permetre el xifrat de les dades.

Podem constatar que cada transferència de dades és una connexió TCP pròpia. A part dels ports i de poder observar la connexió de tres bandes TCP, podem seguir cada conversa a part. La del llistat ls:

I en la connexió de dades de la transferència del fitxer pere.info, podem veure què conté el fitxer:

Configuració del servidor vsftpd com a servidor anònim

L’objectiu d’aquesta activitat és aprendre a configurar el servidor vsftpd com a servidor anònim.

Aquest tipus de servidor és molt útil quan es vol distribuir programari, actualitzacions, etc. Per exemple: ftp://ftp.ubuntu.com/.

Per facilitar la comprensió, deshabiliteu els usuaris registrats, és a dir, que només es pugi autenticar l’usuari anònim.

Cal fer les següents modificacions al fitxer /etc/vsftpd.conf i reiniciar el servei:

anonymous_enable=yes 
local_enable=no

Comprovem que no es pot accedir amb els usuaris del SO:

root@server:~# ftp server.ioc.cat
Connected to server.ioc.cat.
220 (vsFTPd 3.0.3)
Name (server.ioc.cat:usuari): usuari
530 This FTP server is anonymous only.
Login failed.
ftp> 

Per realitzar una prova, creem el fitxer ftp.txt a la carpeta home de l’usuari anònim: /srv/ftp.

echo Hola > /srv/ftp/ftp.txt

Comprovem que ens poden autenticar com a usuari anònim i ens podem descarregar el fitxer:

root@server:~# ftp server.ioc.cat
Connected to server.ioc.cat.
220 (vsFTPd 3.0.3)
Name (server.ioc.cat:usuari): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get ftp.txt
local: ftp.txt remote: ftp.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for ftp.txt (5 bytes).
226 Transfer complete.
5 bytes received in 0.00 secs (116.2574 kB/s)
ftp> quit
221 Goodbye.
root@server:~# ls
ftp.txt
root@server:~# 

Finalment, realitzem la mateixa operació amb la comanda wget que ens dóna més flexibilitat:

root@server:~# wget ftp://server.ioc.cat/ftp.txt
--2020-09-28 20:00:03--  ftp://server.ioc.cat/ftp.txt
           => «ftp.txt»
S'està resolent server.ioc.cat (server.ioc.cat)… 10.0.2.9
S'està connectant a server.ioc.cat (server.ioc.cat)|10.0.2.9|:21… connectat.
S'està entrant com a «anonymous» … S'ha entrat amb èxit!
==> SYST ... fet.     ==> PWD ... fet.
==> TYPE I ... fet.   ==> CWD innecessari.
==> SIZE ftp.txt ... 5
==> PASV ... fet.     ==> RETR ftp.txt ... fet.
Mida: 5 (no autoritatiu)

ftp.txt                         100%[===========================================================>]       5  --.-KB/s    in 0s      

2020-09-28 20:00:03 (76,3 KB/s) - s'ha desat «ftp.txt» [5]

root@server:~#

Xifrat amb vsftpd

L’objectiu d’aquesta activitat és aprendre a configurar el servidor vsftpd per tal que les comunicacions siguin segures amb el protocol FTPS.

Realitzeu les tasques següents:

  1. Habiliteu el servidor FTP per tal de proveir seguretat a les comunicacions amb FTPS. Es poden usar els certificats que venen per defecte.
  2. Connecteu-vos des del client amb la consola FTP.
  3. Poseu el Wireshark a escoltar i connecteu-vos des del Filezilla. No cal descarregar res, només autenticar-se.
  4. Comproveu amb el Wireshark que les comunicacions estan encriptades.

1. Habilitació dels certificats

Es pot habilitar el servidor FTP amb els certificats que venen per defecte, descomentant les línies afectades al fitxer /etc/vsftpd.conf. Després reiniciem el servei.

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=yes

2. Connexió des del client

Ens connectem des del client, i aquest no suporta SSL.

usuari@client:~# ftp 192.168.0.1
Connected to 192.168.0.1.
220 Benvinguts al servidor FTP
Name (192.168.0.1:usuari): usuari
530 Non-anonymous sessions must use encryption.
Login failed.
421 Service not available, remote server has closed connection
ftp> 

Podem usar la comanda ftp-ssl (s’ha d’instal·lar).

usuari@client:~# ftp-ssl 192.168.0.1
Connected to 192.168.0.1.
220 Benvinguts al servidor FTP
Name (192.168.0.1:root): usuari
234 Proceed with negotiation.
[SSL Cipher ECDHE-RSA-AES256-GCM-SHA384]
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

3. Connexió amb el client gràfic Filezilla

Posem el Wireshark a escoltar i ens connectem des del Filezilla amb aquests paràmetres.

4. Captures amb el Wireshark

Comprovem amb el Wireshark que les comunicacions estan encriptades. Podem veure el missatge de benvinguda, el paquet del client que requereix autenticació TLS i la resposta del servidor que es procedeix amb la negociació. A partir d’aquí, les dades estan encriptades.

Diàleg FTP amb Telnet

L’objectiu d’aquesta activitat és comprendre el funcionament intern del protocol FTP a través d’un diàleg FTP amb la comanda Telnet.

Realitzeu les tasques següents:

  1. Realitzeu des del client una transferència FTP en mode passiu FTP amb la comanda Telnet.
  2. Comenteu el significat dels números utilitzats.

1. Transferència FTP en mode passiu FTP

Realitzem el diàleg des del client mitjançant 2 terminals. A cada pasv ens indica el port i des d’un altre terminal s’ha de fer la connexió al port indicat per obtenir les dades.

usuari@client:~# telnet server.ioc.cat 21
Trying 192.168.0.1...
Connected to server.ioc.cat.
Escape character is '^]'.
220 Benvinguts al servidor FTP
user usuari
331 Please specify the password.
pass usuari
230 Login successful.
pwd
257 "/home/usuari" is the current directory
pasv
227 Entering Passive Mode (192,168,0,1,174,154).
list
150 Here comes the directory listing.
226 Directory send OK.
pasv
227 Entering Passive Mode (192,168,0,1,62,121).
retr arxiu.txt
150 Opening BINARY mode data connection for arxiu.txt (34 bytes).
226 Transfer complete.
quit
221 Goodbye.
Connection closed by foreign host.
usuari@client:~# 

La resposta es pot anar veient al segon terminal, on es veu el contingut del fitxer (la paraula ‘hola’).

usuari@client:~$ telnet server.ioc.cat 44698
Trying 192.168.0.1...
Connected to server.ioc.cat.
Escape character is '^]'.
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Baixades
drwxr-xr-x    2 1000     1000         4096 Sep 09 11:08 Desktop
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Documents
drwxr-xr-x    2 1000     1000         4096 Jun 01 12:15 Imatges
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Música
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Plantilles
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Públic
drwxr-xr-x    2 1000     1000         4096 Mar 07  2020 Vídeos
-rw-r--r--    1 1000     1000         4096 Mar 07  2020 arxiu.txt
Connection closed by foreign host.

usuari@client:~$ telnet server.ioc.cat 15993
Trying 192.168.0.1...
Connected to server.ioc.cat.
Escape character is '^]'.
hola
Connection closed by foreign host.
usuari@client:~$ 

2. Significat dels números

El valor (192, 168, 0, 1, 174, 154) és el socket (adreça de transport) que està format per la IP i el port. El socket és un número de 48 bits, doncs la IP és un número de 32 bits i el port un de 16. La representació (192, 168, 0, 1, 174, 154) és en forma de bytes. Per tant els 2 últims nombres representen el port. Si és vol saber el número del port cal fer la següent operació:

La fórmula matemàtica (en base 10) de desplaçar un número 8 posicions cap a la dreta és multiplicar-lo per:

Per tant:

174*256+154=44698
62*256+121=15993

Còpies de seguretat remotes

L’objectiu d’aquesta activitat és aprendre amb l’ajuda d’un servidor FTP a realitzar còpies de seguretat remotes a Internet.

Realitzeu les tasques següents:

  1. Automatitzeu el procés d’enviar un fitxer a un servidor FTP amb un script.
  2. Programeu aquesta operació cada dia de forma automàtica.

1. Automatització del procés

La idea és que les comandes que usaríem per fer una transferència les posem en un fitxer i el redireccionem a l’entrada de la comanda ftp. Hi ha diferents alternatives. Una d’elles pot ser el següent fitxer, que anomenem script_ftp.sh:

#!/bin/bash
HOST='192.168.0.1'
USER='usuari'
PASSWD='usuari'

ftp -n -v $HOST << EOT
bin
user $USER $PASSWD
prompt
cd BACKUP
mdelete *
mput prova_script.txt
bye
EOT

Realitzem la comprovació. Executem l’script des del client per pujar un fitxer, ens connectem al mateix servidor amb SSH i comprovem que ha pujat.

usuari@client:~$ echo "Prova script" > prova_script.txt
usuari@client:~$ chmod 755 script_ftp.sh
usuari@client:~$ ./script_ftp.sh
Connected to 192.168.0.1.
220 Benvinguts al servidor FTP
530 Please login with USER and PASS.
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
Interactive mode off.
250 Directory successfully changed.
local: prova_script.txt remote: prova_script.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
13 bytes sent in 0.00 secs (264.4857 kB/s)
221 Goodbye.

jciberta@jciberta-client:~$ ssh usuari@192.168.0.1
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
ECDSA key fingerprint is SHA256:2cqYKzks+fFtaQutgx8jLfvy8X08lEzxgPdkXYg2DKw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.1' (ECDSA) to the list of known hosts.
usuari@192.168.0.1's password: 
Linux server.ioc.cat 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
usuari@server:~$ ls BACKUP
prova_script.txt
usuari@server:~$

2. Programació del procés

L’eina crontab es pot utilitzar de diferents maneres. Existeix una automatització de tasques per al sistema operatiu a través del fitxer /etc/crontab.

usuari@server:~$ more /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

Cada usuari pot també automatitzar les seves tasques de manera automàtica (amb la comanda crontab -e). En aquest cas, el fitxer de configuració ens explica els paràmetres.

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

El servei (dimoni) que realitza aquestes tasques és el cron. Per defecte, aquest és un servei que ja ve actiu.

root@client:~# /etc/init.d/cron status
● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since dc 2019-02-13 09:31:19 CET; 1 years 7 months ago
     Docs: man:cron(8)
 Main PID: 1646 (cron)
   CGroup: /system.slice/cron.service
           └─ 1646 /usr/sbin/cron -f

set 29 09:45:01 jciberta-client CRON[3966]: pam_unix(cron:session): session closed for user root
set 29 09:50:01 jciberta-client CRON[4016]: pam_unix(cron:session): session opened for user root by (uid=0)
set 29 09:50:01 jciberta-client CRON[4017]: (root) CMD (/root/script_ftp.sh)
set 29 09:50:01 jciberta-client CRON[4016]: pam_unix(cron:session): session closed for user root
set 29 09:55:01 jciberta-client CRON[4081]: pam_unix(cron:session): session opened for user root by (uid=0)
set 29 09:55:01 jciberta-client CRON[4082]: (root) CMD (/root/script_ftp.sh)
set 29 09:55:02 jciberta-client CRON[4081]: pam_unix(cron:session): session closed for user root
set 29 10:00:01 jciberta-client CRON[4120]: pam_unix(cron:session): session opened for user root by (uid=0)
set 29 10:00:01 jciberta-client CRON[4121]: (root) CMD (/root/script_ftp.sh)
set 29 10:00:01 jciberta-client CRON[4120]: pam_unix(cron:session): session closed for user root

Fem una prova des del client que executi l’script cada 5 minuts. Afegim la línia corresponent al fitxer i esperem un cert temps i comprovem que s’ha pujat el fitxer (fent una connexió SSH al servidor).

root@client:~# date
dc set 30 05:43:47 CEST 2020
root@client:~# echo "*/5 * * * *     root /home/usuari/script_ftp.sh" >> /etc/crontab
root@client:~# # Esperem una mica
root@client:~# date
dc set 30 05:46:15 CEST 2020
root@client:~# ssh usuari@192.168.0.1
The authenticity of host '192.168.0.1 (192.168.0.1)' can't be established.
ECDSA key fingerprint is SHA256:2cqYKzks+fFtaQutgx8jLfvy8X08lEzxgPdkXYg2DKw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.1' (ECDSA) to the list of known hosts.
usuari@192.168.0.1's password: 
Linux server.ioc.cat 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Sep 29 09:51:34 2020 from 192.168.0.2
usuari@server:~$ ls /home/usuari/BACKUP -lsh
total 4,0K
4,0K -rw------- 1 usuari usuari 13 de set.  30 05:45 prova_script.txt
usuari@server:~$ exit
desconnectat
Connection to 192.168.0.1 closed.
root@client:~# 

Podem veure al fitxer de log com ha quedat registrat (s’ha retallat les informacions d’altres registres):

root@client:~# tail /var/log/syslog
...
Sep 30 05:45:01 client CRON[4828]: (root) CMD (/home/usuari/script_ftp.sh)
...
root@client:~# 

Instal·lació i configuració del servidor FTP en el sistema operatiu Windows Server

L’objectiu d’aquesta activitat és practicar la instal·lació i configuració del servidor FTP en un Windows Server. Aquest servei ve inclòs dins la suite IIS (Internet Information Server) conjuntament amb el servei web i altres serveis.

Realitzeu les tasques següents:

  1. Instal·leu el servidor FTP.
  2. Descriviu l’estructura del servidor FTP.
  3. Creeu un lloc FTP.
  4. Comproveu el servei.

1. Instal·lació del servidor FTP

El procés d’instal·lació pot variar depenent de la versió del servidor.

Primer de tot, cal anar al Dashboard de l’administrador del servidor i escollir l’opció d’afegir noves característiques o rols.

Seleccionem:

  • Role-based or featured-based installation
  • El propi servidor

En aquest punt cal activar el servidor FTP de les opcions de l’IIS ja que no ve per defecte.

  • Add features
  • Opcions per defecte…
  • Install

Comprovem que s’ha instal·lat. Apareix a sota del menú principal de configuració.

2. Estructura del servidor web

Des de l’administrador del servidor, i dins del IIS, anem a l’apartat de Servers, i clicant el botó dret en el servidor actual obrim l’administrador del servidor IIS:

El servei FTP està integrat amb el servei web. Per afegir un lloc FTP es fa de la mateixa manera que per crear un lloc web:

3. Creació d’un lloc FTP

La primera cosa que ens demana és identificar el lloc i la ruta per defecte del servidor FTP.

Seguidament demana la IP, el port i si volem activar SSL (haurem de seleccionar un certificat).

Finalment podem seleccionar l’autenticació (FTP anònim i/o usuaris registrats) i els permisos.

Un cop creat el lloc FTP, disposem de tota una sèrie d’opcions que ens permeten canviar les opcions triades al crear el lloc, a més d’altres característiques com definir els missatges de benvinguda, veure els logs, etc.

4. Comprovació del servei FTP

Fem una prova des d’un client de text per comprovar que ens podem connectar amb l’usuari anònim:

C:\Users\Administrador>ftp localhost
Conectado a WIN-3FAP1KIE1HD.
220 Microsoft FTP Service
200 OPTS UTF8 command successful - UTF8 encoding now ON.
Usuario (WIN-3FAP1KIE1HD:(none)): ftp
331 Anonymous access allowed, send identity (e-mail name) as password.
Contraseña:
230-Benviguts al FTP de l'IOC
230 User logged in.
ftp> ls
200 EPRT command successful.
125 Data connection already open; Transfer starting.
Anònim.txt
226 Transfer complete.
ftp: 20 bytes recibidos en 0.00segundos 6.67a KB/s.
ftp>

I amb un usuari autenticat:

C:\Users\Administrador>ftp localhost
Conectado a WIN-3FAP1KIE1HD.
220 Microsoft FTP Service
200 OPTS UTF8 command successful - UTF8 encoding now ON.
Usuario (WIN-3FAP1KIE1HD:(none)): Administrador
331 Password required
Contraseña:
230-Benviguts al FTP de l'IOC
230 User logged in.
ftp> ls
200 EPRT command successful.
125 Data connection already open; Transfer starting.
Anònim.txt
226 Transfer complete.
ftp: 20 bytes recibidos en 0.00segundos 6.67a KB/s.
ftp>

Veiem que tots els usuaris apunten a la mateixa carpeta. Aquest és el comportament per defecte. Si es vol canviar, cal anar a Aislamiento de usuario FTP, on hi ha les següents opcions:

Anar a la pàgina següent:
Exercicis