Proftpd

1 Proftpd+Mysql+Quotas

El servidor elegido es Proftpd, uno de los más utilizados en la web. La instalación se hizo sobre una distribución Debian 3.11

Lo primero es instalar los paquetes… en Debian existe un paquete específico para el servidor proftpd con apoyo de myql:

El instalador nos preguntará si queremos arrancar el ftp como servicio de red (inetd) o como ’standalone’ (independent); elegiremos ‘independent’.

Si lo vamos a hacer des el código fuente deberemos desempaquetar el programa y configurarlo:

Una vez instalado miramos si Proftpd tiene los módulos necesarios para seguir con la configuración. Para ver los módulos

Lo segundo es crear un usuario y grupo específico para el ftp que seran los propietarios de los archivos que se transfieran. Ya que los usuarios del ftp no son usuarios reales.

A continuación cambiamos la clave del root del mysql y creamos la base de datos y un usuario específico para esa base de datos:

Entramos en el MysSQL

Creamos la base de datos ftp y le damos los permisos al usuario proftpd

recuerda cambiar password por la contraseña que tu elijas

Una vez creada la tabla procedemos a crear las tablas de la base de datos que contendrán la información de los usuarios que podrán acceder al ftp:

Algunas aclaraciones al respecto. La tabla ftpgroup lista los usuarios de cada grupo, como solo habrá un grupo (inicialmente) no necesita más registros para comenzar a usar el servicio. La tabla ftuser guarda los usuarios, estadísticas y es la usada por Proftpd para comparar los datos de autentificación. Usando la directiva 'asdfasf' haremos que Proftpd cree el directorio raíz del usuario si este no existe. La tabla ftpquotalimits define los límites de cuota en disco y ftpquotatalities va guardando los datos de cada usuario para totalizar y comprobar que el límite no sobrepasa lo acordado en ftpquotalimits. Si el valor de algún campo de límite es '0' automáticamente se definirá como ilimitado.

Ahora configuraremos el proftp: Abre el fichero /etc/proftpd.conf

Sitúate al final y añade todas estas líneas y sálvalo:

Reinicia el servidor ftp:

Si queremos poner un mensaje con el espacio disponible/usado por cada usuario añadir las siguientes líneas en el proftpd. (enviadas por Martin Mrajca) Reiniciar el servidor porftpd de nuevo

Ahora vamos a crear un usuario de prueba:

Ahora vamos a crear un usuario de prueba:

Hemos creado un usuario exampleuser para probar el servicio. Agreguemos ahora una cuota para ese usuario de 15Mb:

Si queremos cambiarle la cuota tenemos que entrar a la base de datos y ejecutar :

Hemos creado un usuario llamado ‘exampleuser’, con contraseña ’secret’, al que previamente le hemos asignado una cuota de disco y capacidad para subir y bajar archivos. Esto luego lo podremos hacer con cualquier gestor de base de datos como phpmyadmin, mysqladmin o mysql administrator

Si estamos actualizando desde una versión anterior hay que cambiar la directiva SQLHomedirOnDemand on hay que cambiarla por CreateHome on

http://www.cyberciti.biz/tips/linux-installing-configuring-proftpd-ftp-server.html

proftpd + ssl/tls

Para poder configurar el soporte de transferencia encriptada de datos y autenticación en un servidor ftp, en este caso proftpd, es necesario compilar proftpd con el modulo mod_tls o en su defecto si utilizas una version superior a la 1.2.8, el soporte ya viene compilado y listo para utilizar, basta activar el soporte en el archivo de configuración (/etc/proftpd.conf).

Estos son los pasos para habilitar este servicio de manera de que soporte:

encriptación de datos de control y datos en si.

acepte sólo clientes con soporte ssl/tls

Lo primero, generar los certificados con el comando (ingresar los datos que se solicitan): openssl req -new -x509 -nodes -out ftpd-rsa.pem -keyout ftpd-rsa-key.pem

<Note>Al generar el certificado una de las preguntas es Common name: Hay que poner el nombre del equipo, por ejemplo, webserver.midominio.net o en su defecto localhost</note>

Esto genera dos archivos ftpd-rsa.pem , ftpd-rsa-key.pem que copiamos en /etc/ssl/certs.

Ahora, modificaremos el archivo de configuración /etc/proftpd.conf para habilitar el soporte y agregaremo las siguientes lineas:

Reiniciamos el servicio y probamos conectandonos con ftp-ssl o el filezilla

Para ver como van pasando los datos podemos usar tcpdump de la siguiente manera: tcpdump dst portrange 20-21 -qX

Podemos hacer esta prueba conectandonos desde clientes con/sin soporte ssl/tls y ver como pasan los datos e identificar algunos textos como USER..

Otra forma es la siguiente:

Y modificar el fichero /etc/proftpd.conf

Debido a las últimas actualizaciones del servidor proftpd algunos de los comandos han sido sustituidos por otrs nuevos y por tanto hay que hacer los siguientes cambios para que todo funcione correctamente: añadir la línea siguiente al inicio del proftpd.conf

El archivo de configuracion resultante de todo es el siguiente:

Configuración FTP privado

Si hemos decidio esta opcion deberemos de crear las cuentas de usuario antes. Las cuentas se crean como un usuario cualquiera de linux, es decir:

Acontinuacion deberemos de editar el archivo /etc/passwd y modificar la linea que hace referente al usuario pepito:

Al editar el fichero, en el final de este nos aparecera una linea como esta(siguiendo el ejemplo anterior):

Deberemos de modificarlo para que quede de asi:

Es decir, le decimos que su carpeta personal es donde tenemos el ftp, y su shell es una shell falsa(/bin/false). El password como os fijais aparece con un x, esto quiere decir que el password esta en el archivo /etc/shadow con una encriptacion MD5(mucho mas seguro que si ponemos el pasword en texto plano).

Asi lo haremos con todos los usuarios que queramos añadir.

Una vez listo los usuarios, continuaremos por donde nos hemos quedado con la edicion del archivo proftpd.conf: Si ademas queremos tener nuestra carpeta de subida deberemos de añadir, debajo de </Directory> lo siguiente:

Configuracion FTP Privado y anonimo:

Para configurar el ftp de esta forma hemos de haber seguido todos los pasos del punto anterior. Una vez hecho esto deberemos de editar al final del fichero proftpd.conf unas nuevas lineas:

Como me imagino que os habreis dado cuenta, la cuenta anónima es muy especial, ya que muchas de las características de esta cuenta, hay que ponerlas dentro de la etiqueta <Anonymous> </Anonymous>.

FTP unicamente anonimo

Deberemos de haber seguido todos los pasos anteriores pero omitiendo el punto 3. Acontinuación deberemos de usar una etiqueta limit, arriba de la etiqueta anonymous: Con esta etiqueta denegaremos cualquier intento de loguearse de cualquier usuario que este creado en /etc/passwd. Cuidado que no lleve a confusiones, en la etiqueta pone que deniaga a todos los usuarios la posibilidades de loguearse, pero el motivo de que la cuenta anonymous si que pueda, es debido a que dentro de esta, tenemos la etiqueta <Limit LOGIN> AllowAll </Limit>, ya que la cuenta anonima es independiente

Opciones del Servidor

ServerName “Nombre_del_servidor_ftp” #Pondremos el que queramos, Servidor FTP es un ejemplo

ServerType standalone/inet #Nosotros usaremos standalone en vez de inetd

DeferWelcome on/off # off ya que no queremos mostrar ningun mensage de entrada

ServerIdent on/off “nombre” #Usaremos on “nombre”

MultilineRFC2228 on #on para que el servidor ftp sea compatible con todos los clientes ftp

DefaultServer onf #Usaremos on, toma las opciones defualt de un servidor ftp

ShowSymlinks on #on, para ver los links, si el link esta fuera de nuestro home no tendremos acceso a él

AllowOverwrite on/ #Usaremos on, permite sobreescribir ficheros existentes

TimeoutNoTransfer 600 #tiempo máximo en sg que puede estar un cliente en el ftp, sin transferencia de información

TimeoutStalled 90 #tiempo máximo en sg que puede estar cliente-servidor sin recibir información de una transferencia

TimeoutIdle 200 #tiempo máximo en sg que puedes estar un usuario sin hacer nada

DenyFilter \*.*/ #Es un filtro de proteccion para el ProFTPd

Port 21 #Puerto de escucha del servidor, usaremos el 21, ya que es el predeterminado

MaxInstances 30 #numero de conexiones al ftp que se pueden hacer a la vez(cuidado con los DOS)

AccessGrantMsg “mensage” #Mesanje a mostrar si la conexion del usuario ha sido correcta

AccessDenyMsg “mensage” #Mensaje a mostrar si la conexion del usuario ha sido incorrecta

LogFormat default “%h %l %u %t \”%r\“ %s %b” #Con LogFormat [nombre_formato] “formato”, el nombre_formato se lo ponemos nosotros

LogFormat auth “%v [%P] %h %t \”%r\“ %s” #para ser usado despues con ExtendedLog

LogFormat write “%h %l %u %t \”%r\“ %s %b”

TransferLog /var/log/proftpd/transfer #Loguea las transferencias que se realice con el servidor

ExtendedLog /var/log/proftpd.down_up_log WRITE,READ write #ExtendedLog es para loguear con una serie de caracteristicas

ExtendedLog /var/log/proftpd.auth_log AUTH auth #ExtendedLog [lugar_donde_se_guarda_el_log] [Que_logear] [nombre_formato]

ExtendedLog /var/log/proftpd.paranoid_log ALL default #WRITE(escritura),READ(lectura),AUTH(autentificacion, logging) y ALL(todo)

DefaultRoot # hacemos chroot en el home de nuestro usuario, es decir, no puede subir mas directorios

AuthUserFile “/etc/passwd” #Le decimos donde tenemos el archuvo de los usuarios

AuthGroupFile “/etc/group” #Le decimos donde tenemos el archivo de los grupos

MaxClients <numero> “mensage” #Maximo numero de clientes que pueden estar a la vez en en servidor ej: MaxClients 6 “Max %m usuarios”

MaxClientsPerHost <numero> “mensage” #Maximo numero de clientes por Host(ip) ej: MaxClientsPerHost “Solo 2 conexiones por HOST”

MaxClientsPerUser <numero> “mensage” #Maximo numero de clientes por usuario ej: MaxClientsPerUser 2 “Solo 2 conexiones por usuario” #El mensage aparece cuando superamos el numero permitido

RequireValidShell off #los usuarios no requieren, ni deben, de tener una shell “autentica”

Denegar acceso a ciertas ip

Mejoras de apariencia en el archivo proftpd.conf:

Si os habeis fijado en las opciones donde pone “mensage” cuando pongo ejemplos pongo en algunos sitios %X siendo X una letra. Esto son opciones del FTP. Entre muchas de las posibilidades que tenemos voy a destacar las siguientes:

%m: numero de usuarios conectados al ftp

%u: nombre del usuario que se ha logueado

%t: fecha/hora a la que se logueo el usuario

Carga de ProFTPd en el inicio y arrancar el demonio

Para que el ftp se cargue en el arranque de nuestra maquina deberemos de seguir los siguientes pasos:

Si hemos compilado el proftpd deberemos de introducir el script de carga, ya sea el /etc/init.d/proftpd o en /usr/local/sbin/proftpd donde corresponda, dependiendo de nuestra distribucion. Desde debian deberemos de poner lo siguiente:

Siendo X nuetro runlevel, si tenemos dudas de cual es nuestro runlevel, poner lo siguiente:

El resultado sera algo parecido a esto(siendo la X el numero de nuestro runlevel): id:X:initdefault:

Para arrancar el servidor sin reiniciar deberemos de escribir lo siguiente:

Para parar el servidor deberemos de introducir lo siguiente:

Para restaurar y volver a cargar una nueva coniguracion en proftpd.conf debremos de poner lo siguiente:

Como administrar el ftp:

Para ver que usuarios estan conectado, que esta haciendo en este momento y desde cuando estan conectados sobrara con poner cualquiera de las siguientes ordenes: Para ver la versión para ver los módulos cargados para comprobar la sintaxis

# ftpwho # ftptop

Cada una tiene una característica, que dependiendo de gusto, le gustara mas una u otra. ftpwho es mas cuando queremos ver en un instante de tiempo, mientras que ftptop es mas un monitor que te informa en tiempo real de los cambios en tu servidor ftp, por lo que este es recomendable usarlo en una terminal aparte.

Para cerrar el servidor y no permitir que ningún usuario puede acceder al servidor y mostrar un mensaje con el motivo podemos usar la herramienta ftpshut(para mas informacion man ftpshut):

Para expulsar a un usuario de nuestro servidor, sobrara con mirar el numero de proceso en el que esta y matar el proceso:

Un ejemplo seria el siguiente

Obtendremos una lista de todos los procesos(usuarios) que estan conectados y a su derecha su PID(en este ejemplo vamos a tirar a pepito):

Para saber mas información acuérdate de usar los log's del servidor que están en /var/log/.

Información extra:

Existe un gestor gráfico para el proftpd

Manual completisimo de proftpf en ingles: aki http://proftpd.linux.co.uk/localsite/Userguide/linked/userguide.html Indice de todos los comandos a utilizar con su explicacion del proftpd: aki http://proftpd.linux.co.uk/localsite/Userguide/linked/part-reference.html

Referencias

http://www.primates.cl/?p=51

http://pagina.de/pacodebian

http://www.frikis.org/staticpages/index.php?page=proftpd

http://www.userlinux.net/post.457.php

http://max.bandaancha.st/docs/proftpd_mysql.html

http://www.carlosatares.com/?p=293

http://www.userlinux.net/post.457.php

http://www.howtoforge.com/proftpd_mysql_virtual_hosting