miércoles, 8 de octubre de 2008

Servidor FTP con VSFTPD

En esta oportunidad vamos a instalar un servidor FTP dandole algo de seguridad, no vamos a permitir usuario anonimos, y vamos a cifrar la comunicacion.

FTP protocolo de transferencia de archivo, trabaja en el puerto 21 y 20, en el 21 se realiza la conexion y en el 20 se transmiten los archivos, aunque podemos hacerlo funcionar solo en el 21 y cerrar el otro puerto.

Primero descargamos la ultima version de vsftpd del sitio oficial ftp://vsftpd.beasts.org/users/cevans/ o sino podemos descargarla con cualquier administrador de paquetes de nuestra distro, sea apt, yum, yast...

El archivo de configuracion se encuentra en
/etc/vsftpd.conf generalmente ( podria estan en /etc/vsftpd/ ) y ahora vamos a analizar, pero vamos a poner en situacion, queremos que un usuario, por ejemplo "Andres" pueda subir el sitio web por ftp.

Abrimos nuestro editor preferido, en mi caso vi, y editaremos el archivo de configuracion, tiene muchas opciones, pero nos limitaremos a permitir un usuario que va a subir su web, y no permitimos anonimos
# vim /etc/vsftpd.conf

No vamos a permitir usuarios anonimos
anonymous_enable=NO

Descomentar esta linea si quieren que los usuarios accedan al ftp server
local_enable=YES

Descomentamos esta linea para permitir escribir en el directorio
write_enable=YES

Descomentamos local umask, que por default es 077
local_umask=022

Aca colocamos NO, para solo usar el puerto 21
connect_from_port_20=NO

Colocamos un Banner no muy descriptivo
ftpd_banner=Welcome to blah FTP service.

Para hacer chroot , es decir, que quede encarrado en su home
chroot_local_user=YES

Descomentamos esta opcion, y luego agregamos usuario al que
NO queramos que haga chroot
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Listo por ahora, grabamos y vamos a crear el archivo vsftpd.chroot_list
# vim /etc/vsftpd.chroot_list
y agregamos el usuario andres para que solo ese
NO haga chroot, el resto entara enjaulado en su home

Ahora vamos a agregar el usuario pero no le daremos una terminal, y crearemos su home en por ejemplo /var/www/site-andres que es donde va a alojar su sitio web

# adduser --home /var/www/site-andres --shell /dev/false --firstuid 1000 --ingroup www-data andres

Reiniciamos el servicio

# /etc/init.d/vsftpd restart

Testear el funcionamiento
# netstat -an|grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

Ahora vamos a chequearlo, si podemos probarlo con otra pc, mucho mejor. Primero en donde estamos parados creamos un archivo cualquiera
# touch archivo.txt

Ponemos ftp (ip servidor) , nos pide usuario y contraseña (andres y la pass que le colocaron cuando añadieron el usuario) y ya accedimos, ponemos

ftp> put archivo.txt
local: archivo.txt remote: archivo.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 File receive OK

Ahora vamos a listarlo

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 1001 33 0 Oct 08 20:37 archivo.txt

Excelente, todo funcionando, ahora el problema, cuando nosotros ponemos usuario y clave, esta vieja
sin encriptar , es decir que algun malintencionado puede estar sniffeando nuestra red y tomar estos datos.

Asi que ahora vamos a agregar SSL para el cifrado de la comunicacion, lo primero que tenemos que hacer es ver si nuestro vsftpd esta compilado ya con soporte SSL, para eso ejecutamos

# ldd /usr/sbin/vsftpd | grep ssl
libssl.so.0.9.8 => /usr/lib/i586/libssl.so.0.9.8 (0xb7f55000)

Esto nos indica que correctamente esta compilado con SSL, necesitamos tener instalado
openssl, ssl-cert . Ahora vamos a configurar la seguridad, primero necesitamos generar una llave privada y un certificado que verifiquen que realmente es a nuestro servidor al que se estan conectado

# cd /etc/ssl/
# openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout vsftpd.key -out vsftpd.pem

Generating a 1024 bit RSA private key

...............................++++++
..........++++++
Enter PEM pass phrase: palabra
Verifying - Enter PEM pass phrase: palabra
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:AR
State or Province Name (full name) [Some-State]:Buenos Aires
Locality Name (eg, city) []:Beccar
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mi Compania
Organizational Unit Name (eg, section) []:Sistemas
Common Name (eg, YOUR name) []:Beagle
Email Address []:beagle.skywalker@midominio.com

Obviamento aqui van poniendo sus datos, verificamos que haya generado la llave privada y el certificado

# openssl x509 -in /etc/ssl/vsftpd.pem -noout -text

Solo root debe poder acceder a el, asi que ahora le vamos a cambiar los permisos
# chmod 600 vsftpd.pem

Ahora a configurar vsftpd.conf, al final de todo el archivo comentamos la linea y agregamos lo demas
#rsa_cert_file=/etc/ssl/certs/vsftpd.pem

ssl_enable=YES
ssl_tlsv1=YES
ssl_ciphers=DES-CBC3-SHA
force_local_logins_ssl=YES
force_local_data_ssl=YES

#Podemos utilizar estos certificados por default
#rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
rsa_cert_file=/etc/ssl/vsftpd.pem
rsa_private_key_file=/etc/ssl/vsftpd.key

Ahora reiniciamos el servidor
/etc/init.d/vsftpd restart

Ademas para mayor seguridad se podria autenticar los usuario contra una base de datos MYSQL y no se agregan usuarios al sistemas que es mas peligroso, pero este tutorial es para pocos usuarios y un poco mas de seguridad, es decir, levantar rapidamente un ftp server con
Seguridad

No hay comentarios: