info@goblinsoft.org 54-11-51992787
FTP Security
August 27, 2016
0

FTP Security
El protocolo FTP (File Transfer Protocol) es uno de los más utilizados en transferencia de archivos, los servidores que manejan este protocolo son objetos de ataques debido a que contienen una gran cantidad de archivos e información al alcance de los usuarios, por este motivo se debe configurar adecuadamente y con la mayor seguridad posible.
A continuación se muestra como instalar, configurar y utilizar de manera segura vsftpd (Very Security FTP daemon), un servicio ftp ampliamente conocido y utilizado por empresas como Red Hat, Debian y FreeBSD.

Instalación del servicio:
# yum install vsftpd (RHEL/CentOS/Fedora)
# apt-get install vsftpd (Debian/Ubuntu)

Configurar selinux para permitir el correcto funcionamiento del ftp

Editar el archivo de configuración y modificar/agregarlas siguientes lineas:
# vi /etc/vsftpd/vsftpd.conf (RHEL/CentOS/Fedora)
# vi /etc/vsftpd.conf (Debian/Ubuntu)

Tiempo de espera para mantener establecidas las conexiones de datos inactivas:
data_connection_timeout=120

Tiempo maximo entre comandos FTP ejecutados por el usuario:
idle_session_timeout=300

Cantidad máxima de información transferida en bytes por segundo:
local_max_rate=0

No permitir a los usuarios ir a directorio por fuera de su directorio raiz:
chroot_local_user=YES

Variable que permite filtrar que extensiones se permiten subir/manejar dentro del ftp:
deny_file={*.mp3,*.mov,.exe}

Numero máximo de usuarios (conexiones) por IP:
max_per_ip=10

Numero máximo de IP’s conectadas:
max_clients=20

Deshabilitar los invitados:
guest_enable=NO

No permitir acceso sin usuarios:
anonymous_enable=NO

En caso de tener habilitada la opción que permite acceder a los usuarios anonimos, deberán colocar las siguientes 3 lineas adicionales:

Bloquear la subida de archivos anónima:
anon_upload_enable=NO

Bloquear el creado de directorios anónimo:
anon_mkdir_write_enable=NO

Bloquear modificaciones de manera anónima:
anon_other_write_enable=NO

Definir que redes o ip acceden al FTP, podemos permitir todas con “ALL”:
# vi /etc/hosts.allow
vsftpd: aaa.bbb.ccc.ddd/netmask eee.fff.ggg.hhh
vsftpd: aaa.bbb.ccc.ddd
vsftpd: ALL

Definir que redes o ip no acceden al FTP, podemos bloquear todas con “ALL”:
# vi /etc/hosts.deny
vsftpd: aaa.bbb.ccc.ddd/netmask eee.fff.ggg.hhh
vsftpd: aaa.bbb.ccc.ddd
vsftpd: ALL

Permitir el acceso al puerto 20 y 21 en el firewall:
iptables -A INPUT -p tcp -m tcp –dport 21 -m conntrack –ctstate ESTABLISHED,NEW -j ACCEPT -m comment –comment “Permite entrada en puerto 21”
iptables -A OUTPUT -p tcp -m tcp –dport 21 -m conntrack –ctstate NEW,ESTABLISHED -j ACCEPT -m comment –comment “Permite salida puerto 21”

iptables -A INPUT -p tcp -m tcp –dport 20 -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT -m comment –comment “Permite entrada en puerto 20”
iptables -A OUTPUT -p tcp -m tcp –dport 20 -m conntrack –ctstate ESTABLISHED -j ACCEPT -m comment –comment “Permite salida en puerto 20”

Agregar los usuarios indicando una falsa sheel para no permitir login en el sistema:
# useradd “userftp” -s /sbin/nologin

Reiniciar el servicio:
# service vsftpd restart

Ya se puede ingresar al ftp desde un navegador mediante la url:

ftp://ip_de_servidor

El problema que presenta el protocolo FTP es que sus credenciales se transmiten el texto plano, como se puede ver en la siguiente imagen, con el Wireshark es posible interceptar usuario (ftptest) y contraseña (ftptest)

FTPUserpass

La solución a esto es implementar FTPS (FTP + SSL).

Crear el directorio donde se almacenaran los certificados:
# mkdir /etc/ssl/ftp

Crear el certificado:
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/ftp/vsftpd.pem -out /etc/ssl/ftp/vsftpd.pem

Editar el archivo de configuración:
# vi /etc/vsftpd/vsftpd.conf (RHEL/CentOS/Fedora)
# vi /etc/vsftpd.conf (Debian/Ubuntu)

Definimos la ubicación de los certificados:
rsa_cert_file=/etc/ssl/ftp/vsftpd.pem
rsa_private_key_file=/etc/ssl/ftp/vsftpd.pem

Habilitar SSL:
ssl_enable=YES

Denegar conexiones no SSL:
allow_anon_ssl=NO

Forzar el login y la transmisión de información por SSL:
force_local_data_ssl=YES
force_local_logins_ssl=YES

Restringir los protocolos de encriptación y los parámetros de seguridad a utilizar:
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Inicio el servicio:
# service vsftpd start

Configurar el inicio del servicio con el sistema
# chkconfig vsftpd on (RHEL/CentOS/Fedora)
# update-rc.d vsftpd enable (Debian/Ubuntu)

Ahora al intentar ingresar indica un error ya que estamos intentando iniciar una conexión no segura:

FTPError

Para ingresar en este caso utilizamos FileZilla agregando el servidor:

FTPConectar

Al intentar conectar va a preguntar si aceptamos el certificado que nos da el servidor:

FTPCertificado

Al aceptar es posible conectarse al servidor FTP de manera segura:

FTPAcceso

Utilizando estas configuraciones podemos prevenir los puntos de fallas mas comunes al momento de configurar un servidor FTP.